← Back to directory
O

Obsidian MCP Server

Community
Manage Obsidian knowledge bases through MCP.
Category
Filesystem #8 of 24
Stars
★ 697 Very popular
Transport
stdio (local process) · Streamable HTTP
Runtime
Bun 1.3.0+ · Node.js 24+ · Docker
Credentials
API key / credential required
License
Apache-2.0
Last commit
Tools
14
60FMRS · C

The source describes a focused MCP server for Obsidian vault reading, writing, searching, and surgical editing, with folder policies and a read-only switch. The Local REST API plugin and API key are mandatory prerequisites. Public HTTP deployments should configure authentication and tightly limit write access.

Strongest · Documentation 16/20 Weakest · Reliability 10/20

Reliability
10/20
Security and permissions
11/20
Maintenance
10/20
Documentation
16/20
Setup experience
13/20
Why each score
Reliability 10/20
The manifest and README are broadly consistent about STDIO, Streamable HTTP, 14 tools, resources, path policies, and error behavior, with explicit startup arguments and request timeouts. Because no verifiable source code, CI workflows, or test results are provided, initialization, tool-list handshake, dependency compatibility, and edge-case error handling cannot be confirmed. This warrants a deduction and stays within the static-calibration cap of 12.
Security and permissions 11/20
The API key purpose is explicit, the default endpoint is local, read/write path restrictions and a global read-only switch are documented, and command execution is disabled by default. Deductions apply because HTTP authentication defaults to none, the default scope is the entire vault with write access, TLS verification defaults to disabled, and deletion requests elicitation only when the client supports it; effective isolation therefore depends on operator configuration. No stated red-line risk is evidenced.
Maintenance 10/20
The project has identifiable repository ownership, an Apache-2.0 license, version 3.2.9, an npm distribution path, and an issue-tracking location, providing a maintenance baseline. There is no evidence here of commit history, release cadence, CI, dependency-update practice, vulnerability-response channel, or issue-response performance, so sustained maintenance cannot be established and the score remains moderate.
Documentation 16/20
The README covers prerequisites, Bun/Node and npx installation, STDIO/HTTP client configuration, environment variables, tool parameters, pagination, limits, path policy, dangerous commands, and Docker deployment warnings. Coverage is strong, but source code and tests are unavailable for verification; troubleshooting, platform-specific behavior, and systematic security configuration guidance remain incomplete, so full marks are not justified.
Setup experience 13/20
Bun and npx installation paths, mainstream client configuration examples, plugin/API-key prerequisites, and HTTP startup instructions are provided, making the basic flow clear. Deductions reflect the required prior Obsidian plugin setup, key generation, HTTP/self-signed-TLS decisions, and additional manual authentication for production HTTP deployments. With no source, CI, or end-to-end connection evidence, the score remains within the static-calibration cap of 15.

Static review · not runListed 2026-07-29

Read the FMRS scoring method →

Fit and risk

What it can accessReads local filesWrites / deletes local files

Best for

  • Obsidian users already running the Local REST API plugin.
  • MCP client users who need structured note search and surgical editing.
  • Deployments that need vault access restricted by read and write folder allowlists.

Not for

  • Environments without the Obsidian Local REST API plugin installed and enabled.
  • Teams seeking a cloud-native multi-user database or collaboration platform.
  • Situations where note write access or local API-key management is unacceptable.

Required permissions

  • Requires OBSIDIAN_API_KEY to access the Obsidian Local REST API.
  • By default, the full vault is accessible; OBSIDIAN_READ_PATHS and OBSIDIAN_WRITE_PATHS can restrict folders.
  • All writes can be disabled globally with OBSIDIAN_READ_ONLY=true.
  • HTTP deployments support none, jwt, or oauth authentication; JWT mode requires MCP_AUTH_SECRET_KEY.

Risks and side effects

  • Write tools can modify or delete vault content; obsidian_delete_note permanently deletes notes.
  • Command-palette commands may be destructive and are disabled by default.
  • An unauthenticated public HTTP deployment may let callers use the server's API key to access the vault.
  • The HTTPS plugin endpoint uses a self-signed certificate and TLS verification defaults to false.
  • The tag list and obsidian://tags resource are vault-wide and may expose tag names outside the read scope.

Setup

Before you start

Runtime:Bun 1.3.0+ · Node.js 24+ · Docker

OBSIDIAN_API_KEY requiredsecret Required Bearer token, generated in Obsidian's Settings → Community Plugins → Local REST API settings.
MCP_AUTH_SECRET_KEY optionalsecret Required when MCP_AUTH_MODE=jwt; a shared secret of at least 32 characters.
Other optional settings (14)
OBSIDIAN_BASE_URL optional Base URL of the Local REST API plugin; defaults to http://127.0.0.1:27123, HTTPS port is https://127.0.0.1:27124.
OBSIDIAN_VERIFY_SSL optional Whether to verify the TLS certificate; defaults to false since the plugin uses a self-signed cert.
OBSIDIAN_REQUEST_TIMEOUT_MS optional Per-request timeout in milliseconds, default 30000.
OBSIDIAN_ENABLE_COMMANDS optional Set to true to enable the obsidian_list_commands + obsidian_execute_command pair; off by default.
OBSIDIAN_READ_PATHS optional Optional comma-separated vault-relative folder allowlist for reads, e.g. 'public/,projects/'; unset = full vault.
OBSIDIAN_WRITE_PATHS optional Optional comma-separated write allowlist, same syntax as OBSIDIAN_READ_PATHS; unset = full vault.
OBSIDIAN_READ_ONLY optional Set to true for a global read-only kill switch denying all writes and suppressing command-palette tools.
OBSIDIAN_OMNISEARCH_URL optional Override URL for the Omnisearch plugin HTTP server; only needed if it is not on the default port 51361.
MCP_TRANSPORT_TYPE optional Transport: stdio or http; default stdio.
MCP_HTTP_HOST optional HTTP server hostname; default 127.0.0.1.
MCP_HTTP_PORT optional HTTP server port; default 3010.
MCP_HTTP_ENDPOINT_PATH optional JSON-RPC endpoint path; default /mcp.
MCP_AUTH_MODE optional HTTP transport auth mode: none, jwt, or oauth; default none.
MCP_LOG_LEVEL optional Minimum log level (RFC 5424); default info.

Install and enable the Obsidian Local REST API plugin v4.0.0 or later, then generate an API key in its settings. Use Bun v1.3.11 or later, or Node.js v24 or later. Put OBSIDIAN_API_KEY in the client configuration; the default endpoint is http://127.0.0.1:27123. Alternatively, use npx or clone the repository and run bun install. For Streamable HTTP, run start:http; the default endpoint is http://127.0.0.1:3010/mcp.

claude_desktop_config.json
{"mcpServers":{"obsidian-mcp-server":{"type":"stdio","command":"bunx","args":["obsidian-mcp-server@latest"],"env":{"MCP_TRANSPORT_TYPE":"stdio","MCP_LOG_LEVEL":"info","OBSIDIAN_API_KEY":"your-local-rest-api-key"}}}}

Shown for Claude Desktop. Other clients may use a different file or key (VS Code uses "servers") — the configurator below converts it.

.vscode/mcp.json
{
  "servers": {
    "obsidian-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": [
        "obsidian-mcp-server@latest"
      ],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info",
        "OBSIDIAN_API_KEY": "your-local-rest-api-key"
      }
    }
  }
}

Goes in your project's .vscode/mcp.json (VS Code uses a "servers" key).

Terminal
claude mcp add obsidian-mcp-server -e MCP_TRANSPORT_TYPE=stdio -e MCP_LOG_LEVEL=info -e OBSIDIAN_API_KEY=your-local-rest-api-key -- bunx obsidian-mcp-server@latest

Run it in a terminal; replace any <…> placeholders with your own values first.

Check that it works

After connecting, the client tool list should show obsidian_get_note, obsidian_list_notes and the other tools; call obsidian_get_note on a known note path — returning its content proves the Local REST API plugin connection works.

Troubleshooting

  1. Verify that the Local REST API plugin is enabled and is version 4.0.0 or later.
  2. Check OBSIDIAN_API_KEY and confirm OBSIDIAN_BASE_URL uses the port configured in Obsidian.
  3. For the HTTP plugin port, enable Non-encrypted (HTTP) Server; for HTTPS, OBSIDIAN_VERIFY_SSL is normally false for the self-signed certificate.
  4. If Omnisearch is unavailable, verify that its HTTP server is reachable and restart the MCP server to re-probe it.
  5. For path_forbidden errors, inspect the read/write allowlists and OBSIDIAN_READ_ONLY.
  6. For HTTP connection issues, check MCP_HTTP_HOST, MCP_HTTP_PORT, MCP_HTTP_ENDPOINT_PATH, and MCP_AUTH_MODE.

Things to try

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

  • List all tags in my Obsidian vault with usage counts.
  • Search notes under projects/ for 'Q3 roadmap'.
  • Open the note 'Daily Notes/2025-01-15' and append 'Review PR #42' under the ## Tasks heading.
  • Replace every occurrence of 'Acme Corp' with 'Globex' in my 'meeting-notes' file, case-sensitively.

Tools 14

obsidian_get_note read-only
Reads a note as raw content, a full structured record, a document map, or a single section.
obsidian_list_notes read-only
Lists notes and subdirectories under a vault path with recursive depth and filtering options.
obsidian_list_tags read-only
Lists all tags across the vault with usage counts.
obsidian_list_commands read-only
Lists Obsidian command-palette commands; requires OBSIDIAN_ENABLE_COMMANDS.
obsidian_search_notes read-only
Searches the vault by text, JSONLogic, or BM25-ranked Omnisearch when available, with cursor pagination.
obsidian_write_note writes
Creates a note or replaces a specified section; replacing an existing whole file requires explicit overwrite.
obsidian_append_to_note writes
Appends content to a note or to a specified heading, block, or frontmatter field.
obsidian_patch_note writes
Appends, prepends, or replaces a heading path, block reference, or frontmatter field.
Show 6 more tools
obsidian_replace_in_note writes
Performs literal or regular-expression search and replace within one note body.
obsidian_manage_frontmatter writes
Atomically gets, sets, or deletes one frontmatter key.
obsidian_manage_tags writes
Adds, removes, or lists tags in frontmatter, inline body syntax, or both.
obsidian_delete_note destructive
Permanently deletes a note and requests human confirmation when the client supports elicitation.
obsidian_open_in_ui writes
Opens a file in the Obsidian application UI.
obsidian_execute_command writes
Executes an Obsidian command-palette command by ID; must be explicitly enabled.

Use cases

Reading and organizing Obsidian notes through an MCP client.
Searching a personal knowledge base with text, JSONLogic, or Omnisearch.
Making targeted edits to headings, block references, tags, and frontmatter.
Creating, appending, replacing, or deleting notes within controlled folders.

Supported clients

Claude Desktop
Cursor
VS Code

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

Overview

obsidian-mcp-server is an open-source MCP server maintained by cyanheads. It uses the Obsidian Local REST API to read, create, search, and surgically edit notes, tags, and frontmatter. It supports STDIO and Streamable HTTP, exposes 14 tools and 3 resources, is version 3.2.9, and is licensed under Apache-2.0.

Similar servers

Source revision 1f0b662214fc Data synced 2026-10-19 Read the FMRS scoring method