Semantic memory for your Obsidian vault

A finding aid for your knowledge graph

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.

Terminal · archiver-rag Acc. No. 0001

How your notes become searchable

From save to searchable in seconds

A background file watcher fires on every Obsidian save, re-chunks the note, and updates the vector index — no manual step required.

Step 01
The Vault
Your Obsidian markdown files, organised however you work. archiver-rag watches the root non-destructively.
Step 02
Ingest
On every save the watcher picks up the change, splits the note into 500-word overlapping chunks, and prepends structural metadata.
Step 03
ChromaDB
Vectors stored locally with rich metadata: folder, tags, wikilinks, incoming link count. Persistent across restarts.
Step 04
The Agent
Any MCP-compatible agent calls search_vault and receives ranked results with graph boost scores.

How search ranks what matters

Three layers of signal, not one

Semantic similarity is the entry point. Graph proximity and hub importance shape the final ranking.

Layer I
Contextual prefix

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.

Layer II
Metadata filtering

Every chunk is stored with folder, tags, wikilinks, and incoming link count as filterable fields. Search can constrain by any dimension before the vector ranking even runs.

Layer III
Graph reranking

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

What it can do

Six capabilities built into the same background service.

Ref · 001
Auto-linking

After every ingest, linker.py appends a ## Related section with wikilinks to semantically similar notes — building the graph without agent intervention.

Ref · 002
Knowledge logging

log_note creates dated notes in typed folders (decision/, lesson/, gotcha/). The watcher picks them up and auto-links them immediately.

Ref · 003
Vault health

vault_status returns orphaned notes, missing frontmatter, broken wikilinks, tag stats, and recent activity — in a single MCP call, no arguments.

Ref · 004
Link-aware moves

move_notes moves one or many files and rewrites every [[wikilink]] across the vault automatically. No orphaned references left behind.

Ref · 005
Smart clustering

Label propagation over the wikilink graph suggests folder assignments for a single note or the entire vault. Preview before applying, or let the watcher run it automatically.

Ref · 006
Agent-agnostic

Standard MCP over stdio. 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

Notes are nodes.
Wikilinks are edges.

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, tags, and related are stored as filterable metadata on every chunk.

type: decision tags: [architecture] related: [[pattern-async]] date: 2026-04-18
Knowledge graph — notes as nodes, wikilinks as edges INDEX.md decision-04 pattern-async lesson-02 gotcha-11 meeting-01 idea-07

Tools exposed to any MCP agent

Seven tools. Any 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.
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]] across the vault are rewritten automatically after every move.
005 log_note Create a dated knowledge note from any agent. The watcher indexes and auto-links it within seconds of creation.
006 cluster_note Suggest a folder for one note based on where its wikilink neighbors currently live. Fast, no full-graph pass.
007 cluster_vault Label-propagation clustering of the entire vault wikilink graph. Preview with apply=false before committing.

Up and running in minutes

Up and running in three commands

Install the package, point it at your vault, then register it as an MCP server — done.

pipx install archiver-rag
archiver-rag init
claude mcp add --scope user archiver-rag $(which archiver-rag) serve
~/Documents/MyVault — archiver-rag
$ pipx install archiver-rag ✓ archiver-rag is now on your PATH $ archiver-rag init Path to your Obsidian vault: ~/Documents/MyVault Start automatically on login? [y/n]: y ✓ Config saved → ~/.archiver-rag/config.json ✓ Indexed 47 notes, 203 chunks ✓ Watcher service registered (launchd) $ claude mcp add --scope user \ archiver-rag $(which archiver-rag) serve ✓ MCP server registered $ archiver-rag status ✓ running · 47 notes indexed