Home › Knowledge & Memory › cyanheads/obsidian-mcp-server

cyanheads/obsidian-mcp-server

Read, write, search, and surgically edit Obsidian notes, tags, and frontmatter via MCP.

TypeScript
★ 703 stars Last pushed 2026-11-11 License: Apache-2.0

Connect

Review any command before running it. Package names and URLs come from the server's own registry entry.

Package (npm 3.9.0)

npx -y [email protected]

Or add to your MCP client config:

{
  "mcpServers": {
    "obsidian-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "OBSIDIAN_API_KEY": "<YOUR_VALUE>"
      }
    }
  }
}
  • OBSIDIAN_API_KEY required — Bearer token for the Obsidian Local REST API plugin (Settings → Community Plugins → Local REST API).
  • OBSIDIAN_BASE_URL — Base URL of the Obsidian Local REST API. Default: http://127.0.0.1:27123 (enable "Non-encrypted (HTTP) Server" in plugin settings). Use https://127.0.0.1:27124 for the always-on HTTPS port (self-signed cert; pair with OBSIDIAN_VERIFY_SSL=false).
  • OBSIDIAN_VERIFY_SSL — Whether to verify the TLS certificate on the Obsidian endpoint. Default false because the plugin uses a self-signed cert.
  • OBSIDIAN_REQUEST_TIMEOUT_MS — Milliseconds one request attempt (headers and body) may take before it fails with obsidian_timeout. GET, PUT, and DELETE retry a timed-out attempt; all the requests of one tool call share a 45 s budget, or this value when it is longer.
  • OBSIDIAN_ENABLE_COMMANDS — Opt-in flag for the command-palette pair (obsidian_list_commands + obsidian_execute_command). Off by default — Obsidian commands are opaque and can be destructive.
  • OBSIDIAN_READ_PATHS — Optional comma-separated vault-relative folder allowlist for reads. Prefix-based with implicit recursion; case-insensitive; backslashes read as slashes, repeated and trailing slashes and '.' segments dropped, and names normalized to Unicode NFC; an entry naming the vault root ('.') is rejected at startup. Unset = full vault. Write paths are implicitly readable. Example: 'public/,projects/'.
  • OBSIDIAN_WRITE_PATHS — Optional comma-separated vault-relative folder allowlist for writes. Same syntax as OBSIDIAN_READ_PATHS. Unset = full vault, or the read scope when reads are restricted; paths in OBSIDIAN_DENY_PATHS stay denied. Example: 'projects/,scratch/'.
  • OBSIDIAN_DENY_PATHS — Optional comma-separated vault-relative paths withheld from reads and writes. Same syntax as OBSIDIAN_READ_PATHS. Wins over both allowlists; denied paths are left out of listings, search results, and tag counts. Unset = nothing denied. Example: 'private/,journal/therapy/'.
  • OBSIDIAN_READ_ONLY — Global read-only kill switch. When true, every write is denied regardless of OBSIDIAN_WRITE_PATHS, and the command-palette pair is suppressed (commands can mutate). Useful for shared or public-facing deployments.
  • OBSIDIAN_DELETE_ELICITATION — Opt-in delete confirmation. When true, obsidian_delete_note asks the user to confirm each delete through an elicitation round (the client must support elicitation), and HTTP startup requires a stateful session unless OBSIDIAN_READ_ONLY=true disables the tool. Off by default — the delete runs on the first call, bounded by OBSIDIAN_WRITE_PATHS and OBSIDIAN_READ_ONLY.
  • OBSIDIAN_OMNISEARCH_URL — Override URL for the Omnisearch plugin HTTP server. Unset derives from OBSIDIAN_BASE_URL host with port 51361. Required only if the Omnisearch plugin is not on the default port. Under OBSIDIAN_READ_PATHS or OBSIDIAN_DENY_PATHS the URL is never called and the omnisearch search mode is withheld.
  • MCP_LOG_LEVEL — Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

Package (npm 3.9.0)

Package: npm obsidian-mcp-server

  • MCP_TRANSPORT_TYPE — Selects the HTTP transport.
  • OBSIDIAN_API_KEY required — Bearer token for the Obsidian Local REST API plugin (Settings → Community Plugins → Local REST API).
  • OBSIDIAN_BASE_URL — Base URL of the Obsidian Local REST API. Default: http://127.0.0.1:27123 (enable "Non-encrypted (HTTP) Server" in plugin settings). Use https://127.0.0.1:27124 for the always-on HTTPS port (self-signed cert; pair with OBSIDIAN_VERIFY_SSL=false).
  • OBSIDIAN_VERIFY_SSL — Whether to verify the TLS certificate on the Obsidian endpoint. Default false because the plugin uses a self-signed cert.
  • OBSIDIAN_REQUEST_TIMEOUT_MS — Milliseconds one request attempt (headers and body) may take before it fails with obsidian_timeout. GET, PUT, and DELETE retry a timed-out attempt; all the requests of one tool call share a 45 s budget, or this value when it is longer.
  • OBSIDIAN_ENABLE_COMMANDS — Opt-in flag for the command-palette pair (obsidian_list_commands + obsidian_execute_command). Off by default — Obsidian commands are opaque and can be destructive.
  • OBSIDIAN_READ_PATHS — Optional comma-separated vault-relative folder allowlist for reads. Prefix-based with implicit recursion; case-insensitive; backslashes read as slashes, repeated and trailing slashes and '.' segments dropped, and names normalized to Unicode NFC; an entry naming the vault root ('.') is rejected at startup. Unset = full vault. Write paths are implicitly readable. Example: 'public/,projects/'.
  • OBSIDIAN_WRITE_PATHS — Optional comma-separated vault-relative folder allowlist for writes. Same syntax as OBSIDIAN_READ_PATHS. Unset = full vault, or the read scope when reads are restricted; paths in OBSIDIAN_DENY_PATHS stay denied. Example: 'projects/,scratch/'.
  • OBSIDIAN_DENY_PATHS — Optional comma-separated vault-relative paths withheld from reads and writes. Same syntax as OBSIDIAN_READ_PATHS. Wins over both allowlists; denied paths are left out of listings, search results, and tag counts. Unset = nothing denied. Example: 'private/,journal/therapy/'.
  • OBSIDIAN_READ_ONLY — Global read-only kill switch. When true, every write is denied regardless of OBSIDIAN_WRITE_PATHS, and the command-palette pair is suppressed (commands can mutate). Useful for shared or public-facing deployments.
  • OBSIDIAN_DELETE_ELICITATION — Opt-in delete confirmation. When true, obsidian_delete_note asks the user to confirm each delete through an elicitation round (the client must support elicitation), and HTTP startup requires a stateful session unless OBSIDIAN_READ_ONLY=true disables the tool. Off by default — the delete runs on the first call, bounded by OBSIDIAN_WRITE_PATHS and OBSIDIAN_READ_ONLY.
  • OBSIDIAN_OMNISEARCH_URL — Override URL for the Omnisearch plugin HTTP server. Unset derives from OBSIDIAN_BASE_URL host with port 51361. Required only if the Omnisearch plugin is not on the default port. Under OBSIDIAN_READ_PATHS or OBSIDIAN_DENY_PATHS the URL is never called and the omnisearch search mode is withheld.
  • MCP_HTTP_HOST — The hostname for the HTTP server.
  • MCP_HTTP_PORT — The port to run the HTTP server on.
  • MCP_HTTP_ENDPOINT_PATH — The endpoint path for the MCP server.
  • MCP_AUTH_MODE — Authentication mode to use: 'none', 'jwt', or 'oauth'.
  • MCP_LOG_LEVEL — Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

Related servers

Data from the Official MCP Registry