← Back to directory
O

Obsidian Web MCP

Community
Secure remote access to your Obsidian vault over HTTPS with OAuth 2.0 authentication.
Category
Filesystem #3 of 24
Stars
★ 183 Popular
Transport
Streamable HTTP
Runtime
Python 3.12+
Credentials
API key / credential required
License
MIT
Last commit
Tools
20
68FMRS · C

obsidian-web-mcp is a powerful, well-designed secure remote MCP server for Obsidian. It solves the problems of local stdio servers being inaccessible remotely and Obsidian Sync file corruption. Setup requires some technical knowledge but is well-documented. Suitable for advanced users who need cross-device note access.

Strongest · Documentation 17/20 Weakest · Reliability 9/20

Reliability
9/20
Security and permissions
16/20
Maintenance
14/20
Documentation
17/20
Setup experience
12/20
Why each score
Reliability 9/20
The codebase includes a substantial test suite (tests/ directory) covering auth, config, frontmatter, OAuth, tool functions, and path resolution, but no CI configuration (e.g., GitHub Actions) or executed test evidence is visible. Startup relies on environment variables, and while docs explain configuration, there is no one-shot script. Reliability score is based on test coverage and code structure but lacks real execution proof, so 9.
Security and permissions 16/20
Implements OAuth 2.0 authorization code + PKCE, mandatory password that fails closed if unset, path traversal blocking, atomic writes, confirmation for deletes, and audit logging. These measures are evident in source. No obvious bypass or severe vulnerability found. Score 16, deducted for lack of restriction on extensions (though docs claim trusted) and no visible security review or vulnerability reports.
Maintenance 14/20
Repo has 158 stars, 11 open issues, but recent commit dates unknown. README mentions private vulnerability reporting, but no contribution guide or changelog. No CI or release process visible. Score 14, deducted for unclear versioning and update path.
Documentation 17/20
README is thorough with architecture, security model, tool descriptions, configuration variables, deployment options (Tunnel, VPS), and extension guide. Includes example commands. Missing troubleshooting guide and common error scenarios. Overall high quality, layered documentation, so 17.
Setup experience 12/20
Quick start, detailed configuration, and multiple deployment modes (local, Cloudflare Tunnel, VPS + Caddy) are provided, but requiring manual environment variable setup and dependency installation. No one-click script. Docs include example commands but lack concrete client configuration examples (though mention steps for Claude). Static calibration limits setup to 15 max, and without CI/test evidence, score 12.

Static review · not runListed 2026-08-07

Read the FMRS scoring method →

Fit and risk

What it can accessReads local filesWrites / deletes local files

Best for

  • Users who want secure remote access to their Obsidian vault from any device.
  • Integrating Claude.ai (web) or mobile with Obsidian.
  • Those needing concurrent writes with Obsidian Sync without file conflicts.

Not for

  • Users who only need local stdio MCP access without remote capabilities.
  • Those unwilling to set up an OAuth password or use a Cloudflare Tunnel.
  • Users with extremely high security requirements who distrust network exposure (though encrypted).

Required permissions

  • Read and write files in the directory specified by VAULT_PATH.
  • Perform file operations (move, delete with soft delete to .trash).
  • Create daily notes, write binary files.
  • Maintain an in-memory frontmatter index, potentially modifying index files.
  • Access the network (for Cloudflare Tunnel, heartbeat URLs).

Risks and side effects

  • Credential leakage: exposed OAuth password or MCP token could allow unauthorized access.
  • Path traversal mitigation is not infallible; keep updated.
  • Extension system is not sandboxed; loading untrusted extensions could be risky.
  • Audit log is best-effort and not tamper-evident; records may be dropped at runtime.
  • Misconfiguration may cause the server to fail to start or expose vulnerabilities.

Setup

Before you start

Runtime:Python 3.12+

VAULT_PATH required Absolute path to your Obsidian vault directory; required.
VAULT_MCP_TOKEN requiredsecret 256-bit bearer token, generate with python -c "import secrets; print(secrets.token_hex(32))"; required.
VAULT_OAUTH_PASSWORD requiredsecret Password for the OAuth browser login; if unset the server refuses to authorize any client (fail-closed); required.
VAULT_OAUTH_CLIENT_SECRET optionalsecret Client secret for the headless client_credentials grant; not needed for the Claude/ChatGPT browser flow.
VAULT_MCP_HEARTBEAT_URL optionalsecret Optional uptime-monitor push URL (e.g. Uptime Kuma); treated as a secret and never logged in full.
Other optional settings (15)
VAULT_OAUTH_USERNAME optional OAuth login username, defaults to obsidian.
VAULT_MCP_HOST optional HTTP bind address, defaults to 127.0.0.1.
VAULT_MCP_PORT optional HTTP listening port, defaults to 8420.
VAULT_MCP_PATH optional HTTP path the MCP transport mounts at, defaults to /.
VAULT_MCP_ALLOWED_HOSTS optional Comma-separated hostnames allowed through DNS-rebinding protection; set to your tunnel/proxy hostname for remote deployments.
VAULT_MCP_FORWARDED_ALLOW_IPS optional Client IPs trusted to set X-Forwarded-* headers; defaults to 127.0.0.1; never set to *.
VAULT_MCP_PUBLIC_URL optional Canonical public origin (e.g. https://vault-mcp.yourdomain.com) pinned in OAuth discovery URLs; recommended behind reverse proxies.
VAULT_OAUTH_CLIENT_ID optional Client ID for the headless client_credentials grant, defaults to vault-mcp-client.
VAULT_OAUTH_REDIRECT_URIS optional Comma-separated redirect URI allowlist for the static client in the browser flow; usually leave unset.
VAULT_DAILY_NOTES_FOLDER optional Folder for daily-note tools; empty means the vault root.
VAULT_DAILY_NOTES_FORMAT optional strftime pattern for daily-note filenames, defaults to %Y-%m-%d.
VAULT_DAILY_NOTES_TEMPLATE optional strftime template prepended when a daily note is first created.
VAULT_MCP_HEARTBEAT_INTERVAL optional Seconds between heartbeat pings, defaults to 60; only used when the heartbeat URL is set.
VAULT_AUDIT_LOG_PATH optional Optional append-only JSONL audit log path; must resolve outside the vault or the server refuses to start.
VAULT_AUDIT_LOG_INCLUDE_READS optional Whether to also log read/search operations; off by default.
  1. Clone the repo: git clone https://github.com/jimprosser/obsidian-web-mcp.git.
  2. Set environment variables: VAULT_PATH (path to vault), VAULT_MCP_TOKEN (strong token), VAULT_OAUTH_PASSWORD (required for browser login).
  3. Run the server with uv run vault-mcp (default binds to 127.0.0.1:8420).
  4. In Claude (desktop or mobile), add an integration and enter your server URL; Claude will automatically register via OAuth and connect.

Check that it works

After starting the server, run curl -s http://localhost:8420/.well-known/oauth-authorization-server to confirm it responds; add the server URL under Claude's Settings > Integrations, complete the OAuth browser login, and vault_read, vault_search, etc. should appear in the tool list.

Troubleshooting

  1. Ensure VAULT_OAUTH_PASSWORD is set; otherwise the server refuses to authorize clients.
  2. For remote deployments, set VAULT_MCP_ALLOWED_HOSTS to your hostname, otherwise DNS rebinding protection rejects requests.
  3. Set VAULT_MCP_PUBLIC_URL when using a reverse proxy to pin OAuth redirects.
  4. Ensure VAULT_AUDIT_LOG_PATH resolves outside the vault and is writable, otherwise startup fails.
  5. Verify Cloudflare Tunnel and Caddy configuration, ensuring correct ports.

Things to try

Once connected, you can ask your AI assistant things like:

  • Search my vault for all files mentioning 'project plan'
  • Append to today's daily note: finished deploying the MCP server
  • Read notes/today.md and show its frontmatter
  • Give me a vault hygiene summary of missing frontmatter and broken wikilinks

Tools 20

vault_read read-only
Read a file, returning content, metadata, and parsed YAML frontmatter.
vault_batch_read read-only
Read multiple files in one call; handles missing files gracefully.
vault_write writes
Write a file with optional frontmatter merging; creates parent directories.
vault_write_binary writes
Write an allowed binary file (image/PDF) from base64 content; enforces a media-type allowlist and size cap, writes atomically.
vault_edit writes
Patch a file with ordered exact text replacements (token-efficient partial edits); supports dry-run diff previews.
vault_append writes
Append content to the end of a file without resending the existing body; creates the file when missing.
vault_batch_frontmatter_update writes
Update YAML frontmatter fields on multiple files without touching body content.
vault_search read-only
Full-text search across vault files (uses ripgrep if available, falls back to Python).
Show 12 more tools
vault_search_frontmatter read-only
Query the in-memory frontmatter index by field value, substring, or field existence.
vault_list read-only
List directory contents with recursion depth, glob filtering, and file/dir toggles.
vault_move writes
Move or rename a file or directory within the vault.
vault_delete destructive
Soft-delete a file by moving it to .trash/ (requires explicit confirmation).
vault_canvas_read read-only
Read an Obsidian .canvas file and return its parsed nodes and edges.
vault_canvas_add_node writes
Append a node to a .canvas file (created if missing); when id omitted, generates one; preserves unknown node fields.
vault_canvas_add_edge writes
Append an edge to an existing .canvas file; both endpoints must reference existing node ids.
vault_daily_note_path read-only
Resolve today's daily-note path from the configured folder/format.
vault_daily_note_read read-only
Read today's daily note; returns an error (does not create it) when missing.
vault_daily_note_append writes
Append to today's daily note, creating it from the template when missing.
vault_analytics_summary read-only
Compact vault-hygiene summary: counts and examples of missing frontmatter, broken wikilinks, near-duplicate tag variants, and non-UTF-8 files.
vault_analytics_findings read-only
Detailed findings for one analytics category (frontmatter_missing, required_frontmatter_missing, broken_wikilinks, suspicious_tag_variants, encoding_issues, oversized_files).

Use cases

Access your Obsidian notes from anywhere with Claude, including on your phone.
Use Claude.ai (web) or Claude Mobile without a local stdio server.
Safely write concurrently with Obsidian Sync, avoiding file corruption.
Expose your vault as an MCP connector to Claude applications.

Supported clients

Claude Desktop
Claude Mobile
Claude Web

Listed from the project's documentation, not tested by this site.

Overview

obsidian-web-mcp is a secure, remotely accessible MCP server that gives LLMs (like Claude) read/write access to your Obsidian vault from anywhere—your desktop, phone, or any network. It runs over HTTP with OAuth 2.0 authentication and uses a Cloudflare Tunnel to expose the service, so your machine is never directly exposed to the internet. The server reads and writes Markdown files on disk, parses YAML frontmatter, maintains an in-memory index for fast queries, and provides full-text search. Writes are atomic by default, ensuring compatibility with Obsidian Sync.

Similar servers

Source revision 24cf501eac9d Data synced 2026-10-12 Read the FMRS scoring method