obsidian-vault-mcp
Provides read-only access to an Obsidian vault by reading Markdown files on disk, enabling tools to read notes, search by title or path, full-text search note contents, search by metadata or tags, and list notes.
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-vault-mcpsearch my vault for notes about 'project roadmap' and show the newest one"
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-vault-mcp
Read-only MCP access to an Obsidian vault, straight from the filesystem.
No Obsidian plugin, no REST API, no running Obsidian. The server reads the .md files on
disk, so it works when Obsidian is closed, when the vault lives on a synced folder, and on a
headless machine.
Why this one
Most Obsidian MCP servers talk to Obsidian itself through the Local REST API community plugin. That is the right design if you want to drive the app — open a note, run a template — but it means the app has to be running, and it puts a plugin in the path of every read.
This server does the opposite: it treats the vault as what it is on disk, a folder of Markdown files, and only reads. That makes it dependable in the cases where the REST-API servers are not available at all, at the cost of not being able to drive Obsidian's UI.
It also searches what the notes say, not just what they are called — search_content and
search_meta are the tools that make a vault actually useful to an agent.
Related MCP server: Obsidian MCP Second Brain Server
Install
npm install -g @phssakaigawa/obsidian-vault-mcpOr run it without installing:
npx -y @phssakaigawa/obsidian-vault-mcp /path/to/vaultNode 18 or newer.
Configure
The server speaks MCP over stdio, so any MCP client can use it. One or more vault directories are passed as positional arguments.
Claude Code
claude mcp add obsidian -s user -- npx -y @phssakaigawa/obsidian-vault-mcp /path/to/vaultClaude Desktop — in claude_desktop_config.json:
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "@phssakaigawa/obsidian-vault-mcp", "/path/to/vault"]
}
}
}On Windows, prefer an absolute path to node.exe plus the installed entry point over npx;
it does not depend on PATH and does not lose quoting:
{
"command": "C:\\Program Files\\nodejs\\node.exe",
"args": [
"C:\\path\\to\\node_modules\\@phssakaigawa\\obsidian-vault-mcp\\dist\\index.js",
"C:\\Users\\you\\Documents\\MyVault"
]
}Any other MCP client — same command / args, in whatever config file it uses.
Tools
All five are read-only and are annotated as such, so clients that offer per-tool auto-approval can safely allow the lot.
Tool | What it does |
| Read the full text of one or more notes. Accepts a vault-relative path, with or without |
| Find notes by title or path. Substring by default, regular expression on request. |
| Full-text search across note bodies. Returns matching lines with line numbers and surrounding context. |
| Find notes by YAML frontmatter key/value, or by tag. Tags are read from both the frontmatter |
| List notes, newest first, optionally under one folder. Paged. |
Every search takes a limit, and the result says when the limit was the reason it stopped.
Safety
The vault directories given on the command line are the only thing the server will read.
Each requested path is resolved and checked twice: once as written, and again after symlink
resolution, so a link inside the vault cannot be used to read a file outside it. Containment
is separator-aware — a root of /vault does not admit /vault-private. Relative paths
resolve against the vault root, not the process working directory, which for an MCP server is
just wherever the client happened to launch it.
There is no write path. Nothing in this server opens a file for writing.
.obsidian, .trash, .git and other dot-directories are skipped, so workspace state and
plugin configuration never reach the model.
Design notes
Every runtime import is a declared dependency. There are three — the MCP SDK, zod and
yaml — and all three are in dependencies with an explicit range. Relying on a transitive
package being hoisted into place works right up until the day the ecosystem moves and the
package resolves to a version whose API has changed; the failure then looks like a
malformed tool schema rather than a missing module, which is a genuinely confusing thing to
debug. Declaring what you import costs one line and removes the whole class of problem.
Searches stream. Traversal is an async generator, so a search that reaches its limit stops touching the disk at that point instead of walking the whole vault first.
Frontmatter goes through a real YAML parser. Frontmatter is arbitrary YAML; a regex approach quietly mis-parses nested maps and multi-line strings. A note whose frontmatter does not parse yields no metadata rather than failing the search it appears in.
Limitations
Read-only, by design.
Only
.mdfiles. Canvases, attachments and other vault contents are not indexed.No semantic or embedding search;
search_contentis literal and regex matching.Wiki-links are not resolved into a graph.
[[Note]]is matched as text like any other.No index is kept between calls. Searches walk the vault each time, which is fine for vaults in the low thousands of notes and is the reason there is nothing to invalidate when the vault changes underneath you.
Development
npm install
npm run build
node scripts/probe.mjs /path/to/vaultscripts/probe.mjs speaks MCP to the built server and prints what a client would see. It
checks the thing every client validates first — that each tool advertises an object
inputSchema — then calls each tool and confirms a path outside the vault is refused.
License
MIT. See LICENSE and NOTICE; the vault boundary check is derived from the MIT-licensed Model Context Protocol reference filesystem server, and NOTICE records exactly what was taken and what was changed.
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
- AlicenseBqualityDmaintenanceEnables direct file system access to Obsidian vaults with auto-discovery, full-text search, and note operations. Supports reading, writing, and searching across Obsidian notes without requiring plugins or REST API.64,785MIT
- AlicenseNot gradedqualityBmaintenanceEnables read-only access to Obsidian vaults with semantic search, tag filtering, and metadata queries. Provides secure, intelligent note retrieval and summarization for LLMs without modifying your vault.2213ISC
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to read, search, and manage Obsidian vault markdown files, including YAML frontmatter, wikilinks, and graph operations through a secure stateless I/O layer.
- FlicenseNot gradedqualityDmaintenanceProvides secure, direct file system access to Obsidian vault files, enabling search, read, write, and discovery of notes without requiring the Obsidian app.23
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…
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
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/phssakaigawa/obsidian-vault-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server