Semantic memory for your Obsidian vault · Beta v0.2.0
Turns your Obsidian vault into a live, queryable knowledge graph. Connect it once — every agent you use gets semantic search, wikilink traversal, and vault health through standard MCP tools.
How your notes become searchable
A background file watcher fires on every Obsidian save, re-chunks the note, and updates the vector index — no manual step required.
search_vault and receives ranked results with graph boost scores.How search ranks what matters
Semantic similarity is the entry point. Graph proximity and hub importance shape the final ranking.
Before embedding, each chunk is prepended with the note's location, tags, and wikilinks. The vector carries structural context, not just raw text — so similar structure surfaces alongside similar meaning.
Every chunk is stored with folder, type, tags, wikilinks, and incoming link count. The type field is a ChromaDB pre-filter — applied before the vector ranking runs. Tags narrow the result set post-retrieval over an over-fetched candidate pool.
After ChromaDB returns candidates, scores are boosted by proximity to a context_note and by hub importance — how many other notes link to this one.
Everything the service can do
Eight capabilities built into the same background service.
After every ingest, linker.py rebuilds the ## Related section with wikilinks to every note that clears a relevance margin of the top match — the graph stays dense where it matters, not append-only noise.
log_note creates notes in typed folders (decision/, lesson/, gotcha/) — the filename is the note's identity, the date lives in frontmatter. The watcher picks them up and auto-links them immediately.
vault_status returns orphaned notes, missing frontmatter, broken wikilinks, tag stats, and recent activity — in a single MCP call, no arguments.
move_notes moves one or many files and rewrites every [[wikilink]] across the vault automatically. No orphaned references left behind.
Each folder declares a description in _folder.md — generated by archiver-rag describe and kept fresh by the watcher. New notes are embedded against those descriptions and moved to the best match above a threshold, with a frontmatter type: fallback. The watcher runs this automatically; full-graph label propagation stays a manual command.
Label propagation over the wikilink graph suggests folder groupings for the entire vault. Preview first, then --apply to move files — deliberately manual, run when you want a reorganization pass.
archiver-rag delete moves notes to .trash/ (Obsidian's own delete convention — recoverable, no rm) and sweeps every inbound [[wikilink]] across the vault so nothing points at a gone note.
Standard MCP over stdio or HTTP. No proprietary SDK, no vendor lock-in. Claude Code, Cursor, Windsurf, Gemini CLI, Zed — if it speaks MCP, it works with archiver-rag.
Structure your vault understands
archiver-rag understands the structure of your vault, not just the text inside it. Every [[link]] is a graph edge that shapes search, clustering, and auto-linking.
Frontmatter is first-class: type and tags are stored as filterable metadata on every chunk. type is the stable taxonomy — it reads frontmatter, not the folder, so it survives auto-cluster moves.
Tools exposed to any MCP agent
Every capability is a discrete MCP tool — discoverable, composable, and callable from any agent that speaks stdio MCP.
| № | Tool | Function |
|---|---|---|
| 001 | search_vault | Semantic search with graph reranking. Pass context_note to boost wikilink neighbors of a known note. Filter by frontmatter type (stable across folder moves) or narrow by tags. |
| 002 | vault_status | Structure, health, orphaned notes, tag statistics, and recent activity — one call, no arguments. |
| 003 | get_connections | BFS wikilink traversal. Returns direct links or multi-hop neighborhoods up to depth 3. |
| 004 | move_notes | Move one or many files. All [[wikilinks]], [[note#heading]], and [[note|alias]] forms across the vault are rewritten automatically, including bare names in YAML related: blocks. |
| 005 | log_note | Create a knowledge note from any agent. Filename is the note's slug-identity; date lives in frontmatter. The watcher indexes and auto-links it within seconds. |
| 006 | suggest_folder | Suggestion only — never moves anything. Suggests a folder for one note by semantic similarity against declared folder descriptions (_folder.md), with a frontmatter type: fallback, using the same config as the CLI and the watcher. Returns the score and the winning reason; a wikilink neighbor vote comes along for reference. Call move_notes to act on it. |
Up and running in minutes
Install the package with pipx or uv, point it at your vault, then register it as an MCP server — done.
pipx install archiver-rag
uv tool install archiver-rag
archiver-rag init
claude mcp add --scope user archiver-rag $(which archiver-rag) serve