Self-hosted MCP server for Obsidian vaults. One source of truth, accessible from anywhere. No Obsidian app locally required.
Overview
An MCP (Model Context Protocol) server for Obsidian vaults. Connects Claude (or any MCP client) directly to your vault — read, write, search, navigate links, and manage notes, canvases, and kanban boards. The official Obsidian MCP plugin requires the Obsidian desktop app to be running and only works on the same machine. — no Obsidian app needed. The intended setup is to host obsidian-mcp on a server or NAS where your vault is continuously synced (via Syncthing, git, rclone, or Obsidian Sync). Claude then connects to that server over the network, so: - — the server sees every change your Obsidian app writes, immediately - — connect from Claude Desktop, Claude Code, or any MCP client on any machine, without the vault being present locally - — several Claude sessions can read the vault simultaneously; writes are serialized with per-file locking - — the server runs headless and starts automatically (systemd, Docker, etc.
README
obsidian-mcp
An MCP (Model Context Protocol) server for Obsidian vaults. Connects Claude (or any MCP client) directly to your vault — read, write, search, navigate links, and manage notes, canvases, and kanban boards.
Why obsidian-mcp?
The official Obsidian MCP plugin requires the Obsidian desktop app to be running and only works on the same machine. obsidian-mcp is a standalone server — no Obsidian app needed.
The intended setup is to host obsidian-mcp on a server or NAS where your vault is continuously synced (via Syncthing, git, rclone, or Obsidian Sync). Claude then connects to that server over the network, so:
- Always up to date — the server sees every change your Obsidian app writes, immediately
- Access from anywhere — connect from Claude Desktop, Claude Code, or any MCP client on any machine, without the vault being present locally
- Multiple clients — several Claude sessions can read the vault simultaneously; writes are serialized with per-file locking
- No app dependency — the server runs headless and starts automatically (systemd, Docker, etc.)
[Obsidian app] ──sync──► [vault on server] ◄──MCP── [Claude on any machine]
(phone/laptop) (NAS / VPS) (Claude Desktop / Code)
Features
- Read & Search — read notes, search full-text (exact/regex/fuzzy, optionally combined with a frontmatter filter or scoped to filenames), render embedded transclusions, inspect note outlines, list every file in the vault regardless of type
- Duplicate prevention —
find_similar_notes_toolranks notes by TF-IDF similarity so a new note doesn’t duplicate an existing one under different wording - Schema linting —
lint_schema_toolvalidates frontmatter against the enums declared in your own_AI_INSTRUCTIONS.md, plus an optional cron-friendly health-check script - Write — create/overwrite notes (with automatic frontmatter preservation, dry-run previews, and unified diffs), patch sections or anchor-less body text, append content, update frontmatter (single or batch), manage tags, move notes with automatic wikilink rewriting
- Optimistic concurrency — every read returns a revision; pass it back to a write to detect edits landed by Obsidian Sync in between
- Folders — list (optionally recursive with a full tree dump), create, delete, rename folders; renaming rewrites path-based wikilinks vault-wide
- Query & Graph — backlinks, broken links, orphan detection, BFS link graph, vault stats, task collection across vault
- Dataview-like queries — filter notes by tags, status, frontmatter fields (exact match or
$ne/$in/$nin/$existsoperators), or inline fields (key:: value) - Audit log — every write-tool call is recorded;
get_audit_log_toolqueries it - Periodic Notes — read/preview daily, weekly, monthly, quarterly, yearly journal notes from templates
- Canvas / Excalidraw / Kanban / Bases (each opt-in via its own
ENABLE_*flag) — read, create, and patch these Obsidian plugin formats - Attachments — list, read (text or base64), and add binary files
- Two auth variants — a static API key (Claude Code, Desktop, curl) and, optionally, GitHub OAuth (claude.ai Web/Mobile Custom Connector) — usable independently or at the same time
- Multi-vault (opt-in) — serve several fully isolated vaults from one deployment, each identity mapped to only the vault(s) it may access
- Templates — render Obsidian templates with built-in (
{{date}},{{title}}, …) and custom variables - MCP Resources & Prompts — vault notes/stats/tags as MCP resources;
weekly_review/daily_noteprompts
One JSON response shape across every tool — see Response Envelope.
Installation
Via uvx (no clone needed):
VAULT_PATH=/your/vault uvx obsidian-remote-mcp
Via Docker (no Python needed):
docker compose up -d # see docker-compose.yml
From source:
git clone https://github.com/ykoellmann/obsidian-mcp.git
cd obsidian-mcp
uv sync
uv run obsidian-remote-mcp
Quick configuration
Copy .env.example to .env and set your vault path:
VAULT_PATH=/path/to/your/obsidian/vault
That’s enough for local stdio use. For network transports, path
restrictions, optional plugin-format tools, and every other variable, see
Configuration.
Usage with Claude Code / Desktop
Add to your MCP config (~/.claude/mcp.json or claude_desktop_config.json):
{
"mcpServers": {
"obsidian": {
"command": "uv",
"args": ["--directory", "/path/to/obsidian-mcp", "run", "obsidian-remote-mcp"],
"env": {
"VAULT_PATH": "/path/to/your/obsidian/vault"
}
}
}
}
Documentation
| Topic | |
|---|---|
| Configuration | Every env var: path policy, write preconditions, deletion, indexing/sync, optional tool groups, transport |
| Tool Reference | Every MCP tool, grouped, with the opt-in flags each needs |
| Response Envelope | The {success, path, revision, data, meta} shape every tool returns |
| Remote Setup | Running over the network: API key auth and GitHub OAuth for claude.ai |
| Multi-Vault Setup | Serving several isolated vaults from one deployment |
| Docker & Deployment | Compose, the hardened home-server profile, health checks, the schema-lint cron |
| Vault Conventions | Teaching the AI your vault’s structure via _AI_INSTRUCTIONS.md |
| Architecture | Source layout and the authorization/concurrency layers underneath the tools |
| Development | Running tests, linting, and the local HTTP smoke test |
License
MIT
Install
This server does not publish a one-line install command.
Open the repository installation guide New to MCP? Start with the mcpskill.org guide →Configuration
{
"mcpServers": {
"obsidian": {
"command": "uv",
"args": ["--directory", "/path/to/obsidian-mcp", "run", "obsidian-remote-mcp"],
"env": {
"VAULT_PATH": "/path/to/your/obsidian/vault"
}
}
}
}