obsidian-mcp-server
Read, write, search, and surgically edit Obsidian notes, tags, and frontmatter via MCP.
What this server provides
Read, write, search, and surgically edit Obsidian notes, tags, and frontmatter via MCP.
Packages
npxTransport stdio- OBSIDIAN_API_KEYRequired
Bearer token for the Obsidian Local REST API plugin (Settings → Community Plugins → Local REST API).
Format: string - OBSIDIAN_BASE_URLOptional
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).
Format: string · Default: http://127.0.0.1:27123 - OBSIDIAN_VERIFY_SSLOptional
Whether to verify the TLS certificate on the Obsidian endpoint. Default false because the plugin uses a self-signed cert.
Format: string · Default: false - OBSIDIAN_REQUEST_TIMEOUT_MSOptional
Per-request timeout in milliseconds.
Format: string · Default: 30000 - OBSIDIAN_ENABLE_COMMANDSOptional
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.
Format: string · Default: false - OBSIDIAN_READ_PATHSOptional
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/'.
Format: string - OBSIDIAN_WRITE_PATHSOptional
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/'.
Format: string - OBSIDIAN_DENY_PATHSOptional
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/'.
Format: string - OBSIDIAN_READ_ONLYOptional
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.
Format: string · Default: false - OBSIDIAN_DELETE_ELICITATIONOptional
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.
Format: string · Default: false - OBSIDIAN_OMNISEARCH_URLOptional
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.
Format: string - MCP_LOG_LEVELOptional
Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').
Format: string · Default: info
npxTransport streamable-httphttp://localhost:3010/mcp- OBSIDIAN_API_KEYRequired
Bearer token for the Obsidian Local REST API plugin (Settings → Community Plugins → Local REST API).
Format: string - OBSIDIAN_BASE_URLOptional
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).
Format: string · Default: http://127.0.0.1:27123 - OBSIDIAN_VERIFY_SSLOptional
Whether to verify the TLS certificate on the Obsidian endpoint. Default false because the plugin uses a self-signed cert.
Format: string · Default: false - OBSIDIAN_REQUEST_TIMEOUT_MSOptional
Per-request timeout in milliseconds.
Format: string · Default: 30000 - OBSIDIAN_ENABLE_COMMANDSOptional
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.
Format: string · Default: false - OBSIDIAN_READ_PATHSOptional
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/'.
Format: string - OBSIDIAN_WRITE_PATHSOptional
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/'.
Format: string - OBSIDIAN_DENY_PATHSOptional
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/'.
Format: string - OBSIDIAN_READ_ONLYOptional
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.
Format: string · Default: false - OBSIDIAN_DELETE_ELICITATIONOptional
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.
Format: string · Default: false - OBSIDIAN_OMNISEARCH_URLOptional
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.
Format: string - MCP_HTTP_HOSTOptional
The hostname for the HTTP server.
Format: string · Default: 127.0.0.1 - MCP_HTTP_PORTOptional
The port to run the HTTP server on.
Format: string · Default: 3010 - MCP_HTTP_ENDPOINT_PATHOptional
The endpoint path for the MCP server.
Format: string · Default: /mcp - MCP_AUTH_MODEOptional
Authentication mode to use: 'none', 'jwt', or 'oauth'.
Format: string · Default: none - MCP_LOG_LEVELOptional
Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').
Format: string · Default: info