Vault MCP
Provides read/write access to an Obsidian vault, including hybrid search, reading notes or sections, listing folders, mapping heading paths, patching or appending content, creating or overwriting notes, setting frontmatter, deleting notes, and moving notes while rewriting inbound links.
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., "@Vault MCPsearch my vault for notes about insurance policy references"
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.
Vault MCP
An MCP server and REST API over a local Obsidian vault. It indexes the vault for hybrid search and serves read and write access to it through two interfaces backed by one implementation.
It began as a retrieval layer — hence the original vault-index name — and now
covers the write path as well, replacing obsidian-local-rest-api as the way the
vault is edited programmatically.
Why
Two problems with the plugin it replaces:
Heading targets had to be exact. It keys every heading by its full ancestor path and does a single lookup, so anything short of the complete path from the H1 down matches nothing. 86% of this vault's notes are wrapped in one H1, which makes nearly every useful target a two- or three-segment path the model has to guess up front. Here a bare leaf name works whenever it is unique, and when it is not, the error names the ancestors to prepend.
No retrieval. Finding a note meant knowing its path.
vault_searchis hybrid — dense vectors and BM25, fused with reciprocal rank fusion. Hybrid is not optional for this corpus: it is dense with exact tokens (reg plates, boiler model numbers, policy references, postcodes) where dense retrieval alone underperforms.
Related MCP server: Obsidian MCP Assistant
Interfaces
MCP at /mcp — ten tools:
Read | Write |
|
|
|
|
|
|
|
|
| |
|
vault_map emits ::-joined paths rather than an indented tree, because the output
is meant to be pasted straight back as a patch target.
REST at /vault/<path> — GET, PUT, POST, PATCH, DELETE, mirroring the
shape obsidian-local-rest-api used. n8n's HTTP Request nodes speak plain REST and
cannot easily build a JSON-RPC envelope, so migrating a node is a find-and-replace on
the URL and the auth header rather than a rewrite into JSON-RPC.
Both surfaces call src/operations.py, so the resolver and the vault conventions are
applied once regardless of how the caller arrived. Every write bumps the note's
timestamp, or reports why it could not.
Configuration
All configuration is environment variables. VAULT_MCP_API_KEY is required — the
server refuses to start without it rather than treating an empty key as "auth off".
Variable | Default | Purpose |
| — | Bearer token. Required. |
|
| Vault root inside the container |
|
| Host-header allowlist |
|
| OpenAI-compatible embedding endpoint |
|
| Embedding model |
|
| Embedding dimensions |
|
| Embedding requests per batch |
|
| Folders left out of the index |
|
| Target chunk size |
|
| Overlap between chunks |
|
| Below this, a chunk merges into its neighbour |
|
| Default result count |
|
| Filesystem-watch debounce before reindexing |
|
| Listen address |
The index is built at startup and kept current by a filesystem watcher, so an edit made in Obsidian is searchable a moment later without a restart.
Running
The image clones this repository at build time, so the build context holds only the Dockerfile:
docker build -t vault-mcp .
docker run --rm \
-e VAULT_MCP_API_KEY=<token> \
-v /path/to/vault:/vault \
-p 8080:8080 \
vault-mcpDocker caches the clone layer on the URL alone, so a new commit on main does not
invalidate it — rebuild with --no-cache to pick one up.
Security
The vault holds finances, insurance and addresses in plain text. The controls are:
Bearer auth on both surfaces, failing closed on an unset key.
Path containment in
safe_resolve()— the single control on where writes land, since the vault is mounted read-write. Encoded traversal,.gitand non-.mdwrites are all rejected.Host-header allowlist, so the MCP transport is not reachable by DNS rebinding.
Non-root uid 1000, matching the vault's file ownership so written notes keep the ownership Samba expects.
Tests
Standalone scripts, no test runner:
python -m tests.primitives
python -m tests.resolve_all
python -m tests.resolve_leavesTool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
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 Connectors
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables natural language interaction with Obsidian vaults through an MCP server, providing hybrid search, file management, and AI-powered analysis.2-
- FlicenseNot gradedqualityBmaintenanceEnables AI-powered chat and file operations on Obsidian vaults with local indexing, hybrid search, and MCP access.-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to list, read, search, create, update, rename, and delete markdown notes in a local Obsidian vault via an HTTP MCP endpoint.16MIT
- AlicenseBqualityAmaintenanceEnables local hybrid search over Obsidian and Markdown vaults via MCP, combining vector retrieval, full-text search, reranking, graph navigation, and safe CRUD while keeping data local.43MIT
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/Aidan-Kay/Vault-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server