ebullient7k downloadsRuns an MCP server inside Obsidian, exposing your vault to external LLM tools with read, search, and edit operations.
This Obsidian plugin runs an MCP (Model Context Protocol) server directly inside Obsidian, letting external LLM tools access your vault. Supports HTTP transport natively (Open WebUI, remote LLMs). An optional bridge script provides a bridge from HTTP to stdio (Claude Desktop).
Important Notes
- Network Use: This plugin runs a local HTTP server on your machine to accept inbound MCP connections. It does not send your vault data to external LLM services by itself.
- Privacy: This plugin lets you control vault access through Obsidian APIs and path ACLs instead of giving external tools direct filesystem access.
- Desktop Only: This plugin requires a desktop environment and will not work on mobile devices.
.obsidian/plugins/vault-as-mcp/ directoryAssuming you have the BRAT plugin installed and enabled:
https://github.com/ebullient/obsidian-vault-mcp as the URL, select the latest version and installThe plugin provides three ways to control the server:
Open Settings → Vault as MCP:
Bearer token authentication is optional but recommended for security, especially when accessing your vault over a network.
To enable authentication:
To disable authentication:
In Open WebUI's MCP configuration, add a new server: http://localhost:8765/mcp
If Open WebUI is running on a remote machine (e.g., via Tailscale): http://<your-machine-ip>:8765/mcp
With authentication enabled, add the bearer token from your MCP server configuration in Open WebUI using the Authorization header:
Authorization: Bearer <your-token-here>
claude mcp add -t http -s local Obsidian http://localhost:8765/mcp -H "Authorization: Bearer <token>"
Notes:
Claude Desktop uses stdio transport for MCP servers, so you'll need the
mcp-bridge.js script to bridge stdio to HTTP.
Requirements:
Setup a stdio bridge (alternative to http):
Download mcp-bridge.js from the latest GitHub
release
and save it somewhere accessible (e.g.,
~/.obsidian/scripts/mcp-bridge.js). Source is in the bridge branch.
Find your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/claude/claude_desktop_config.jsonAdd the MCP server configuration:
{
"mcpServers": {
"obsidian-vault": {
"command": "node",
"args": ["/absolute/path/to/mcp-bridge.js"],
"env": {
"VAULT_MCP_URL": "http://localhost:8765/mcp"
}
}
}
}
With authentication enabled, add the VAULT_MCP_TOKEN environment
variable:
{
"mcpServers": {
"obsidian-vault": {
"command": "node",
"args": ["/absolute/path/to/mcp-bridge.js"],
"env": {
"VAULT_MCP_URL": "http://localhost:8765/mcp",
"VAULT_MCP_TOKEN": "your-token-here"
}
}
}
}
Important: Replace /absolute/path/to/mcp-bridge.js with the actual
path where you saved the bridge script
Restart Claude Desktop
Testing:
Troubleshooting:
mcp-bridge.js is correct and absolutenode --versionTool names, parameters, and behavior are defined in
src/vaultasmcp-Tools.ts and served live via the
MCP tools/list endpoint — that's the source of truth for exact parameter
names, types, and descriptions. The summary below is for orientation only.
read_note — Read a note's content by path; optionally filtered to one
heading, windowed by file-relative lines, or metadata-only
(links/embeds/outline/frontmatter, no content)read_multiple_notes — Read several notes in one request (max 25)search_notes — Find notes by folder, tag(s), frontmatter, modification
time, or text contentlist_notes — List notes and subfolders in a directory (non-recursive)create_note — Create a note or binary file, optionally from a templateappend_to_note — Append content to a note, at the end or after a headingupdate_note — Replace a note's entire contentpatch_note — Replace an exact string in a note using old_text and
new_text; prefer over update_note for surgical edits. Matching is
exact, so use enough surrounding context to make old_text unique, and
pass literal quote characters directly rather than over-escaping them.
When exact text appears multiple times, optional lineOffset can pick the
nearest 0-based file line.delete_note — Move a note to the system trashrename_note — Rename or move a note, rewriting links that point to itread_periodic_note — Get the path (and content, if it exists) for a
periodic notelist_templates — List available Templater templatesSee CONTRIBUTING.md for development setup, build commands, and architecture details. AI assistants should also review CLAUDE.md for working guidelines.
MIT