Skip to main content

obsidian-mcp

CI

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_tool ranks notes by TF-IDF similarity so a new note doesn't duplicate an existing one under different wording
  • Schema linting — lint_schema_tool validates 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/$exists operators), or inline fields (key:: value)
  • Audit log — every write-tool call is recorded; get_audit_log_tool queries 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_note prompts

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.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for obsidian-remote-mcp 2.1.0
File Size Uploaded Provenance Actions
obsidian_remote_mcp-2.1.0.tar.gz 233.7 kB Without provenance Details for obsidian_remote_mcp-2.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for obsidian-remote-mcp 2.1.0
File Interpreter ABI Platform Actions
obsidian_remote_mcp-2.1.0-py3-none-any.whl Python 3 none any Details for obsidian_remote_mcp-2.1.0-py3-none-any.whl

Total release size: 340.6 kB

Release files / obsidian_remote_mcp-2.1.0.tar.gz

Download URL obsidian_remote_mcp-2.1.0.tar.gz
Size 233.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8df87bf819e39425c8d2689b383f573218430fa0c00e8ffffda634a257c476b2
BLAKE2b-256 checksum
How to use checksums
0d7459f95f53b6fd435a855a437338e9a25835239958539f1c65600c7ead460d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.15 {"installer":{"name":"uv","version":"0.12.15","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.0-py3-none-any.whl

Download URL obsidian_remote_mcp-2.1.0-py3-none-any.whl
Size 106.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0422dac48306687deb88f695a04b31c032d1e5a64e818b3a08efc9e16d0016d9
BLAKE2b-256 checksum
How to use checksums
80643b1f3aaac836a6db4561068973d102d6ae0c5396d4d0b9a516dba886ac63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.15 {"installer":{"name":"uv","version":"0.12.15","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.0

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page