Local MCP server for Obsidian and plain-markdown vaults. NVIDIA nemotron-3-embed-1b semantic search, pure-JS int8 vector store, OKF frontmatter, wikilinks, persistent memory, live file watcher.
Claude Code config — add to ~/.claude.json
"mdv-mcp": { "command": "npx", "args": ["-y", "@chirag127/mdv-mcp", "--vault", "C:/path/to/notes"], "env": { "NVIDIA_API_KEY": "nvapi-..." } } // No key? TF-IDF fallback — works without any API.
One MCP server, 16 tools, zero cloud dependencies.
NVIDIA nemotron-3-embed-1b (2048-dim) embeddings merged with TF-IDF via reciprocal-rank fusion. Falls back to TF-IDF if no key.
On-disk JSON index with int8 quantization — no Python, no FAISS, no server. Just Node.js and a file.
Set vault via --vault CLI arg, MCP roots capability, VAULT_ROOT env, or cwd. Clear precedence, validated at startup.
Save decisions, insights, and session conclusions. Retrieve them across sessions. Stored locally in .mdv-cache/memories.json.
Detect, validate, and enrich Open Knowledge Format frontmatter. Infers type, title, description, tags from content. Apply with apply: true.
Chokidar watches the vault for adds/changes/deletes. Index stays current without manual reindex.
16 tools registered on the server.
| Tool | Description |
|---|---|
vault_search | Hybrid semantic + keyword search, ranked results with snippets |
vault_read | Read a file — frontmatter, body, format detection, wikilinks |
vault_write | Create or overwrite a file; auto re-indexes |
vault_delete | Delete a file and its index entry |
vault_list | List markdown files, optional subdir filter |
vault_tags | Aggregate all tags by frequency |
vault_backlinks | Find files linking to a given file |
vault_frontmatter | Read parsed YAML frontmatter only |
vault_stats | Index status, vault root, embedding mode |
vault_reindex | Force incremental re-embed sync |
vault_remember | Save persistent memory (decision/insight/todo/bug) |
vault_recall | Retrieve past memories by query/project/type |
vault_memory_stats | Memory store statistics |
vault_memory_archive | Archive a memory by ID |
vault_format | OKF validation + enrichment (apply=true writes back) |
vault_wikilinks | Extract + resolve [[wikilinks]] |
Precedence from highest to lowest.
| Priority | Source | Example |
|---|---|---|
| 1 | --vault <path> CLI arg | npx @chirag127/mdv-mcp --vault /my/notes |
| 2 | MCP roots capability | Client sends roots at initialize |
| 3 | VAULT_ROOT env var | VAULT_ROOT=/my/notes in .env |
| 4 | cwd | Working directory when server starts |