Command Palette

Search for a command to run...

UnylyUnyly
Весь каталог

Moss Brain

БесплатноНе проверен

MCP server that provides semantic memory with search, related-content traversal, and write-back capabilities, all powered by local embeddings of your notes, doc

GitHubEmbed

Описание

MCP server that provides semantic memory with search, related-content traversal, and write-back capabilities, all powered by local embeddings of your notes, documents, and chat histories.

README

Turn everything you've ever written — or watched, or read — into a connected second brain. No LLM, no cost, no waiting.

Dump in your notes, PDFs, YouTube links, article URLs — and your entire conversation history from Claude, ChatGPT, and Gemini. moss-brain embeds all of it locally with Moss, discovers the connections between your ideas in seconds, writes them into your Obsidian vault as real [[wikilinks]], and serves one shared memory back to all of those AIs over MCP at ~2ms per recall — with memory they can write to, not just read.

This is a real vault — 559 notes, 2,819 connections, built in 27 seconds with zero LLM calls, rendered natively by Obsidian:

559-note brain in Obsidian, connected entirely by moss-brain

Blue = imported conversation archive · purple = knowledge articles · green = captures · amber/red = active context. Every edge was discovered from embedding similarity — no model ever "read" the notes.

your files & links ──▶ ingest ──▶ searchable brain (local, ~2ms recall)
                         │
                         ├──▶ connect ──▶ knowledge graph + [[wikilinks]] in Obsidian
                         ├──▶ watch ────▶ auto-index as you write
                         ├──▶ remember ─▶ timestamped episodic memory
                         └──▶ serve ────▶ 6 memory tools for Claude / Hermes / Cursor

Quick start

pip install git+https://github.com/Naut1cal5/moss-brain
moss-brain init                    # paste 2 free keys from moss.dev — 30 seconds
moss-brain ingest ~/Documents/notes ~/Downloads/claude-export/ \
    "https://youtube.com/watch?v=..." "https://any-article.com/..."
moss-brain connect --write-links ~/Documents/notes

That's it. Open Obsidian's graph view and watch your notes organize themselves. Then ask it anything:

$ moss-brain ask "what did that lecture say about attention mechanisms"
(2.9 ms)
[0.812] [youtube/stanford-cs25-transformers — Attention] ...
[0.798] [notes/deep-learning.md — Self-Attention] ...

Why this is different

Most second-brain systems today use one of three architectures, each with real strengths. moss-brain explores a fourth trade-off: keep the LLM out of the write path entirely.

LLM-maintained wiki (Karpathy's design) Obsidian AI plugins (Smart Connections et al.) LLM knowledge graphs (Cognee, Graphiti) moss-brain
How connections form LLM reads every note, writes backlinks local embeddings, one note at a time LLM extracts entities/relations embeddings are the connections
Cost to connect 559 notes ~$5–15 per full pass, every pass free $10+ per ingest $0
Time to connect 559 notes tens of minutes n/a (no batch mode) minutes–hours 27 seconds
Writes real [[wikilinks]] into your vault yes sidebar view no yes — --write-links
Works outside Obsidian no no yes yes — CLI, MCP, any folder
Agent memory over MCP no no partial yes — 6 tools, ~2ms
Agent can write memories back no no varies yes — memory_remember
Ingests history from Claude, ChatGPT, Gemini, DeepSeek, Kimi, Grok, Qwen, GLM… no no varies yes — universal parser
Ingests YouTube transcripts + articles from a link no no no yes
One brain across Claude Code, Codex, Gemini CLI, OpenCode, Antigravity, ChatGPT… no no no yes — stdio + HTTP MCP

The insight: an embedding model already placed every idea in a semantic space when it indexed them, so the relationships are sitting there for free. moss-brain just asks the index "what's nearest to this note?" — a local ~2ms query per note — and the nearest neighbors become weighted edges. Related ideas cluster, recurring themes become hubs, and the entire graph rebuilds in seconds every time you add material.

moss-brain also takes a different storage approach than agent-memory platforms like Mem0 and Letta/MemGPT (both excellent at what they do): here, the memory is your vault — plain markdown you own, browse in Obsidian, and grep like any other file.

Command reference

Command What it does
moss-brain init 30-second setup — writes your free moss.dev keys to .env
moss-brain ingest <paths/links...> mass-index markdown, txt, PDFs, Claude exports, YouTube links, article URLs
moss-brain ask "<question>" [-k N] instant semantic recall in your terminal
moss-brain remember "<text>" save a timestamped memory, searchable immediately
moss-brain watch <paths...> auto-index files the moment you edit them
moss-brain connect [--neighbors N] build the connection graph, open interactive viz
moss-brain connect --write-links VAULT also write [[wikilinks]] into your Obsidian notes
moss-brain serve run the MCP memory server (stdio — Claude, Cursor, Gemini CLI, Hermes)
moss-brain serve --http [--port N] serve over streamable HTTP (ChatGPT connectors, remote clients)
moss-brain hermes --install wire memory into Hermes Agent automatically
moss-brain -i work <cmd> any command against a separate brain (see Multiple brains)
moss-brain --local <cmd> / --cloud <cmd> persist to disk vs your Moss project (see Local or cloud)

What can it ingest?

Input How
Markdown / plain text / anything texty point at the folder
PDFs, Word docs (.docx), HTML files automatic text extraction, stdlib only
Your entire Claude history claude.ai → Settings → export → point at conversations.json
Your entire ChatGPT history chatgpt.com → Settings → Data controls → Export → same command, format auto-detected
Your Gemini history Google Takeout → My Activity → Gemini Apps (JSON) → point at MyActivity.json
Every other AI — DeepSeek, Kimi, Grok, Qwen, Z.ai/GLM, Mistral, Meta AI… universal chat-export parser — point at any exported .json
YouTube videos paste the link — the full transcript becomes part of your brain
Web articles paste any URL — readable text extracted, no extra dependencies

Getting your history out of each AI

AI How to export
Claude claude.ai → Settings → Privacy → Export data
ChatGPT chatgpt.com → Settings → Data controls → Export data
Gemini Google Takeout → My Activity → Gemini Apps
Grok grok.com → Settings → Data → Export data
DeepSeek / Kimi / Qwen / Z.ai (GLM) / Mistral Le Chat / Meta AI no official bulk export yet — use a chat-export browser extension (LLM Chat Exporter, YourAIScroll) and save as JSON or Markdown

Then one command, regardless of source:

moss-brain ingest ~/exports/

moss-brain doesn't hardcode each vendor's schema. Claude, ChatGPT, and Gemini exports are recognized natively; everything else goes through a universal parser that walks any JSON for role/content message structures (role/sender/author × content/text/parts, nested or flat, Unix or ISO timestamps). Tested against DeepSeek, Kimi, and Grok-style exports — and it'll almost certainly swallow whatever format the next frontier lab invents. Markdown exports need no parser at all: they're already the native format.

moss-brain ingest "https://www.youtube.com/watch?v=VIDEO_ID"
#   + fetched — full transcript, titled via oembed, chunked, connected

moss-brain ingest "https://en.wikipedia.org/wiki/Zettelkasten"
#   + fetched — article text extracted and indexed

Everything you feed it joins the same semantic space: a lecture you watched links itself to the notes you wrote about it. Chat exports are sanitized at ingest (role-tag patterns like Human: are neutralized) so agent frameworks can safely read the chunks later.

Your Obsidian vault, self-organizing

connect --write-links appends an idempotent ## Related (moss-brain) block to each note with its strongest semantic neighbors as [[wikilinks]]. Obsidian's native graph view picks them up instantly — no plugin required. Re-run any time; blocks are replaced, never duplicated.

Pair it with watch and the brain maintains itself:

moss-brain watch ~/Documents/notes                    # indexes as you write
moss-brain connect --write-links ~/Documents/notes    # re-link whenever

Give your AI agent a real memory

moss-brain serve is an MCP server exposing six tools — read and write:

Tool What it does
memory_search(query, k, recent) semantic search over everything, ~2ms; recent=True re-ranks so this week beats last year
memory_related(note, k) traverse the connection graph around any note
memory_remember(text) write a timestamped memory — saved to the vault as markdown, indexed instantly
memory_reindex() pick up new/edited files
memory_stats() index status

memory_remember is what turns a search index into a brain. When your agent learns something mid-conversation — a decision you made, a preference, a deadline — it saves the memory and every future conversation can recall it. Memories land in remembered/YYYY-MM-DD.md inside your vault: plain markdown you can read, edit, and see in your Obsidian graph like any other note.

recent=True solves the classic RAG failure where a question about now surfaces something from eight months ago: dated chunks get an exponential recency boost (score × (0.45 + 0.55·e^(−age/45d))), undated evergreen notes are unaffected.

Hermes Agent — one command

moss-brain hermes --install

It backs up and edits ~/.hermes/config.yaml, prompts for keys if missing, and enables the MCP toolset. Restart your gateway — done. Your Discord/ Telegram bot now:

  • recalls anything you've ever written, mid-conversation (memory_search)
  • remembers new facts you tell it, across sessions (memory_remember)
  • explores — "what else do I have on this?" (memory_related)

To make memory automatic rather than on-request, add one rule to your ~/.hermes/SOUL.md:

## Memory Rules (highest priority)
- Before answering anything about the user, call memory_search first.
- When the user states a fact, decision, or preference worth keeping,
  call memory_remember with a one-line summary.
- For "current status" questions, use memory_search with recent=true.

That's the difference between a stateless assistant and an agent with your entire history: "you told me about this three weeks ago" instead of "could you remind me what that is?"

Connect to every AI you use

The brain speaks MCP, which every major AI client now supports — so the same memory follows you across Claude, ChatGPT, Gemini, Cursor, and your agents.

Claude Desktop / Claude Code / Cursor — add to the MCP config (claude_desktop_config.json, .mcp.json, or Cursor settings):

{
  "mcpServers": {
    "moss-brain": {
      "command": "moss-brain",
      "args": ["serve"],
      "env": {
        "MOSS_PROJECT_ID": "...",
        "MOSS_PROJECT_KEY": "...",
        "BRAIN_VAULT": "/path/to/your/notes"
      }
    }
  }
}

Gemini CLI / Qwen Code — same block in ~/.gemini/settings.json (or ~/.qwen/settings.json — Qwen Code is a Gemini CLI fork) under mcpServers. Tools are discovered automatically.

Codex CLI (OpenAI) — TOML instead of JSON, in ~/.codex/config.toml:

[mcp_servers.moss-brain]
command = "moss-brain"
args = ["serve"]
env = { MOSS_PROJECT_ID = "...", MOSS_PROJECT_KEY = "...", BRAIN_VAULT = "/path/to/notes" }

OpenCode — in opencode.json:

{
  "mcp": {
    "moss-brain": {
      "type": "local",
      "command": ["moss-brain", "serve"],
      "environment": { "MOSS_PROJECT_ID": "...", "MOSS_PROJECT_KEY": "...", "BRAIN_VAULT": "/path/to/notes" }
    }
  }
}

Antigravity / Windsurf / VS Code / JetBrains — all take the standard mcpServers JSON block above in their MCP settings panel (Antigravity: Settings → MCP Servers → Add; VS Code: mcp.json).

Kimi CLI (Moonshot) — supports MCP via its config; use the same command/args pair. For Kimi K2 running inside Claude Code or OpenCode (the common setup), the brain is already there — MCP servers belong to the client, not the model.

Z.ai GLM / DeepSeek / any Anthropic-compatible model — same story: GLM coding plans and DeepSeek endpoints plug into Claude Code, OpenCode, or Cline as the model, and the client mounts moss-brain. Swap models freely; the memory stays.

ChatGPT — ChatGPT connects to remote MCP servers (Settings → Connectors → Advanced → Developer mode). Run the brain over HTTP and expose it with any tunnel:

moss-brain serve --http --port 8765     # endpoint: http://127.0.0.1:8765/mcp
ngrok http 8765                          # or cloudflared, tailscale funnel...

Paste the public /mcp URL as a new connector — ChatGPT can now search and write to the same brain as everything else.

Anything elseserve is stdio MCP and serve --http is streamable HTTP; between the two, any MCP-capable client (open-source agents, LangChain, custom apps) can mount your brain. One brain, every AI you use, for code and for life.

How it works (technical)

Chunking. Files are split on markdown headings into heading-bounded chunks, each prefixed with [source — heading] and capped at 4,000 chars. Chunk IDs are md5(source#index), so re-ingesting is idempotent — same content, same ID, no duplicates.

Embedding. Moss embeds every chunk locally — nothing leaves your machine during indexing, and there is no per-document cost. After ingest the index persists per your BRAIN_STORAGE choice — a local disk snapshot (~1s restart) or your private Moss project (~1.6s restart) — instead of re-embedding for minutes on every start.

Connections. connect takes each note's first chunk as a probe, runs a local ~2ms nearest-neighbor query, and keeps neighbors above a similarity floor (default 0.35) as weighted edges. 559 notes → 2,819 edges in 27s, zero API calls to any LLM.

Recall. Queries embed locally and search locally: 1.7–3.4ms measured. Works offline once the index is loaded.

Sanitization. Role-tag patterns (Human:, <|im_start|>, [INST], …) are neutralized at ingest so chunks can be safely injected into any agent framework's context without tripping prompt-injection filters.

Episodic memory. memory_remember appends to remembered/YYYY-MM-DD.md in your vault, indexes the entry with its timestamp, and pushes the index — the memory survives restarts and shows up in Obsidian. Recency-aware search reads the date straight from the chunk prefix.

Where your brain lives: local or cloud

Embedding and queries always run locally — the only question is where the index persists between restarts. moss-brain init asks once; override any time with --local / --cloud flags or BRAIN_STORAGE in .env.

local cloud
Index snapshot ~/.moss-brain/<index>/ on your disk your private Moss project
Chunk text + vectors leave your machine never on each persist
Restart time (559-file vault) ~1 s ~1.6 s
Resume on a second device no — copy the folder yourself yes
Back up it's a folder — Time Machine, git, rsync automatic
moss-brain --local ingest ~/notes     # snapshot to disk, nothing uploaded
moss-brain --cloud ingest ~/notes     # push to your Moss project

⚠️ Local-mode caveats (read before relying on it)

  • It uses moss-core APIs not yet in the public Python wrapper (save_to_disk / load_from_disk). moss-brain probes for them and falls back to a cloud push with a printed warning if a future moss release renames them — your data is never lost, but that fallback push does upload. Pin your moss version if this matters to you.
  • Startup still makes one network round-tripMossClient validates your keys, and the SDK reports usage telemetry in the background. Local mode means your content stays home, not that the process is air-gapped.
  • Snapshots are per-machine. Two machines in local mode are two independent brains; use cloud mode (or sync ~/.moss-brain/ yourself) to share one.
  • Corrupt or partial snapshot (disk full, killed mid-save): the load fails with a warning and moss-brain transparently falls back to cloud resume or re-embedding. Worst case is a one-time indexing wait, never data loss — your source files are always the truth.

Multiple brains

Keep separate brains for separate lives — one flag:

moss-brain -i work ingest ~/work/notes
moss-brain -i work ask "what did the design review decide"
moss-brain -i research ingest "https://arxiv.org/abs/..."

Each -i NAME is an isolated Moss index (BRAIN_INDEX env var works too, e.g. per-agent in MCP config — give each agent its own brain).

Real numbers (559-file vault, M-series MacBook)

Operation Time Cost
Ingest 559 files → 3,821 chunks ~4 min (one-time) $0
Build 2,819-edge connection graph 27 s $0
Semantic query 1.7–3.4 ms $0
Save + index a new memory < 2 s $0
Restart (local snapshot) ~1 s $0
Restart (resume from cloud) 1.6 s $0

FAQ

Does my data leave my machine? Embedding and queries always run locally. In local mode the index snapshots to ~/.moss-brain/ and your content never uploads (see caveats above). In cloud mode the index is pushed to your private Moss project — vectors + chunk text under your own account, same trust model as a private repo.

What does it cost? Nothing. Local embedding and queries are free and unlimited; the moss.dev free tier covers the index persistence.

Do I need Obsidian? No — any folder of markdown works. Obsidian is just the nicest way to see the brain (--write-links + graph view).

Can multiple agents share one brain? Yes — point them at the same BRAIN_INDEX. Or isolate them with one index each.

Something failed mid-ingest? Unreadable files are skipped with a warning, everything else continues. Re-run safely — chunk IDs are deterministic, so nothing duplicates.

License

MIT

from github.com/Naut1cal5/moss-brain

Установка Moss Brain

У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.

▸ github.com/Naut1cal5/moss-brain

FAQ

Moss Brain MCP бесплатный?

Да, Moss Brain MCP бесплатный — установка в пару кликов через Unyly без оплаты.

Нужен ли API-ключ для Moss Brain?

Нет, Moss Brain работает без API-ключей и переменных окружения.

Moss Brain — hosted или self-hosted?

Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.

Как установить Moss Brain в Claude Desktop, Claude Code или Cursor?

Открой Moss Brain на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.

Похожие MCP

Compare Moss Brain with

Не уверен что выбрать?

Найди свой стек за 60 секунд

Автор?

Embed-бейдж для README

Похожее

Все в категории communication