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
Metadata
Release files for obsidian-remote-mcp 2.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| obsidian_remote_mcp-2.1.1.tar.gz | 234.1 kB | Without provenance | Details for obsidian_remote_mcp-2.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| obsidian_remote_mcp-2.1.1-py3-none-any.whl | Python 3 | none | any | Details for obsidian_remote_mcp-2.1.1-py3-none-any.whl |
Total release size: 341.0 kB
Release files / obsidian_remote_mcp-2.1.1.tar.gz
| Download URL | obsidian_remote_mcp-2.1.1.tar.gz |
|---|---|
| Size | 234.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
760cf3c0013e4e96454fe1873c6e7719ec08367bd6eb6b1d441b290c96c83101
|
|
BLAKE2b-256 checksum How to use checksums |
e0f2ca77ec1c88ed31c3db2b79b7d443554af67d7f20bd4e45bd804f20bcf5fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / obsidian_remote_mcp-2.1.1-py3-none-any.whl
| Download URL | obsidian_remote_mcp-2.1.1-py3-none-any.whl |
|---|---|
| Size | 106.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
371d47c783096307cd9b90e66493273087b0eadae344a5d96a3ab5a60ed331be
|
|
BLAKE2b-256 checksum How to use checksums |
5e457ddd9f2e04de715b01729c4fb10c2742adbbd41d80a184f14b744f68f7dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for obsidian-remote-mcp 2.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.