obsidian-rag
Enables semantic search and retrieval over an Obsidian vault, with tools to search notes, read note contents, and monitor vault status.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@obsidian-ragfind notes about the new product launch"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Obsidian RAG Assistant
A local-first retrieval system that semantically searches an Obsidian Markdown vault from the command line or through read-only MCP tools for Claude.
Features
Recursively scans Markdown notes while ignoring
.obsidian,.git,.trash, and hidden folders.Parses headings, YAML front matter, tags, and Obsidian wiki-links.
Uses heading-aware structural chunking with an 800-character body limit and paragraph boundaries.
Generates local 384-dimensional embeddings with Ollama and
all-minilm:22m.Stores text, vectors, and source metadata in persistent local ChromaDB.
Performs dense semantic vector search with file and heading citations.
Incrementally synchronizes new, changed, and deleted notes without creating duplicates.
Exposes read-only
search_notes,read_note, andvault_statusMCP tools.
Current retrieval is dense semantic search only. BM25, hybrid search, overlap, semantic chunking, and reranking are not implemented yet.
Related MCP server: obsidian_mcp
Architecture
flowchart LR
subgraph Indexing
A[Obsidian vault] --> B[Recursive scanner]
B --> C[Markdown parser]
C --> D[Heading-aware chunks]
D --> E[Ollama MiniLM embeddings]
E --> F[(Persistent ChromaDB)]
end
subgraph Retrieval
G[Natural-language question] --> H[Query embedding]
H --> I[Vector similarity search]
F --> I
I --> J[Top-k cited passages]
end
subgraph Generation
J --> K[MCP]
K --> L[Claude]
endMCP does not perform RAG. It exposes the already-working retrieval functions to Claude, which uses the returned evidence to generate an answer.
Requirements
Quick start
git clone https://github.com/Amanaakash/Obsidian-RAG-with-Claude-mcp.git
cd Obsidian-RAG-with-Claude-mcp
uv sync --locked
ollama pull all-minilm:22mOllama normally starts with its desktop application. If it is not running, start it with ollama serve. Do not start a second server if port 11434 is already in use.
Index and search the included sample notes:
uv run obsidian-rag index --vault sample_vault
uv run obsidian-rag search "What is reciprocal rank fusion?"Every result includes its relative source path, heading hierarchy, vector distance, and retrieved text. Distance is a relative ranking signal, not a confidence percentage.
Use a real Obsidian vault
Choose a separate database directory for each vault:
uv run obsidian-rag index --vault "/absolute/path/to/ObsidianVault" --db ".rag_data/my_vault"
uv run obsidian-rag search "How do I evaluate retrieval quality?" --db ".rag_data/my_vault"Re-run index after changing the vault. Unchanged notes are skipped, changed notes are replaced, new notes are added, and deleted notes are removed from the index.
Changing the embedding model changes the vector dimensions and semantic space. Use a new database directory or rebuild the existing generated index after switching models.
Claude through MCP
The MCP server reads configuration exclusively from environment variables:
Variable | Required | Default | Purpose |
| Yes | — | Absolute path to the Obsidian vault |
| Yes | — | Absolute path to the persistent Chroma directory |
| No |
| Ollama embedding model |
| No |
| Chroma collection name |
| No |
| Ollama server address |
Claude Desktop
Merge an obsidian-rag entry into Claude Desktop's MCP configuration. Keep any existing server entries.
{
"mcpServers": {
"obsidian-rag": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/Obsidian-RAG-with-Claude-mcp",
"run",
"obsidian-rag-mcp"
],
"env": {
"OBSIDIAN_RAG_VAULT": "/absolute/path/to/ObsidianVault",
"OBSIDIAN_RAG_DB": "/absolute/path/to/Obsidian-RAG-with-Claude-mcp/.rag_data/my_vault",
"OBSIDIAN_RAG_MODEL": "all-minilm:22m",
"OBSIDIAN_RAG_COLLECTION": "obsidian_notes"
}
}
}
}On Windows, Claude Desktop stores this file at %APPDATA%\Claude\claude_desktop_config.json. Completely quit and reopen Claude Desktop after changing it.
Claude Code
Register the same stdio server in user scope:
claude mcp add --scope user obsidian-rag -e "OBSIDIAN_RAG_VAULT=/absolute/path/to/ObsidianVault" -e "OBSIDIAN_RAG_DB=/absolute/path/to/Obsidian-RAG-with-Claude-mcp/.rag_data/my_vault" -e "OBSIDIAN_RAG_MODEL=all-minilm:22m" -e "OBSIDIAN_RAG_COLLECTION=obsidian_notes" -- uv --directory /absolute/path/to/Obsidian-RAG-with-Claude-mcp run obsidian-rag-mcpEach MCP process starts a non-blocking incremental refresh. A cross-process file lock prevents Claude Desktop and Claude Code from writing to Chroma at the same time.
Privacy and safety
Vault scanning, embeddings, and Chroma storage run locally.
The MCP server is read-only and cannot create, edit, or delete notes.
read_noterejects absolute paths, traversal, hidden directories, non-Markdown files, and symlink escapes.Passages returned by
search_notesorread_noteare sent to Claude when Claude invokes those tools.Do not commit
.env,.mcp.json, real vault notes, or.rag_dataindexes.Review third-party MCP server permissions before granting access to a private vault.
Limitations
Dense semantic retrieval only; no BM25, hybrid fusion, or reranker.
Chunk limits are character-based rather than tokenizer-based.
No chunk overlap is currently used.
Heading-aware structural chunking is not LLM-based semantic chunking.
Tags and links are stored as metadata but do not affect ranking.
Only Markdown is indexed; PDFs, images, Canvas files, and attachments are ignored.
Retrieval distance is not a calibrated relevance or correctness probability.
Development
uv sync --locked --all-groups
uv run pytest -q
uv build
uv run obsidian-rag --helpAutomated tests use fake embedders and do not require Ollama, Claude, or a real vault. See CONTRIBUTING.md before opening a pull request.
Security and license
Report security issues privately as described in SECURITY.md. This project is available under the MIT License.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceProvides Claude with read, search, and write access to an Obsidian vault through MCP tools.6,104Apache 2.0
- Flicense-qualityCmaintenanceEnables reading, writing, searching, and managing Obsidian vault notes through MCP tools and prompts, allowing AI agents to interact with local knowledge bases.
- FlicenseDqualityCmaintenanceEnables Claude Desktop to securely search and retrieve knowledge from an Obsidian vault through a stateless MCP interface, with progressive disclosure and gated write capabilities.13
- Alicense-qualityDmaintenanceEnables Claude to read, write, search, and manage an Obsidian vault with tools for notes, tags, folders, and full-text search.13MIT
Related MCP Connectors
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, a…
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Amanaakash/Obsidian-RAG-with-Claude-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server