Read, write, search, and surgically edit Obsidian notes, tags, and frontmatter via MCP.
Connect Runs on your machine
claude mcp add obsidian-mcp-server -e OBSIDIAN_API_KEY=<OBSIDIAN_API_KEY> -e OBSIDIAN_BASE_URL=<OBSIDIAN_BASE_URL> -e OBSIDIAN_VERIFY_SSL=<OBSIDIAN_VERIFY_SSL> -e OBSIDIAN_REQUEST_TIMEOUT_MS=<OBSIDIAN_REQUEST_TIMEOUT_MS> -e OBSIDIAN_ENABLE_COMMANDS=<OBSIDIAN_ENABLE_COMMANDS> -e OBSIDIAN_READ_PATHS=<OBSIDIAN_READ_PATHS> -e OBSIDIAN_WRITE_PATHS=<OBSIDIAN_WRITE_PATHS> -e OBSIDIAN_DENY_PATHS=<OBSIDIAN_DENY_PATHS> -e OBSIDIAN_READ_ONLY=<OBSIDIAN_READ_ONLY> -e OBSIDIAN_DELETE_ELICITATION=<OBSIDIAN_DELETE_ELICITATION> -e OBSIDIAN_OMNISEARCH_URL=<OBSIDIAN_OMNISEARCH_URL> -e MCP_LOG_LEVEL=<MCP_LOG_LEVEL> -- npx -y [email protected]
{
"mcpServers": {
"obsidian-mcp-server": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"OBSIDIAN_API_KEY": "<OBSIDIAN_API_KEY>",
"OBSIDIAN_BASE_URL": "<OBSIDIAN_BASE_URL>",
"OBSIDIAN_VERIFY_SSL": "<OBSIDIAN_VERIFY_SSL>",
"OBSIDIAN_REQUEST_TIMEOUT_MS": "<OBSIDIAN_REQUEST_TIMEOUT_MS>",
"OBSIDIAN_ENABLE_COMMANDS": "<OBSIDIAN_ENABLE_COMMANDS>",
"OBSIDIAN_READ_PATHS": "<OBSIDIAN_READ_PATHS>",
"OBSIDIAN_WRITE_PATHS": "<OBSIDIAN_WRITE_PATHS>",
"OBSIDIAN_DENY_PATHS": "<OBSIDIAN_DENY_PATHS>",
"OBSIDIAN_READ_ONLY": "<OBSIDIAN_READ_ONLY>",
"OBSIDIAN_DELETE_ELICITATION": "<OBSIDIAN_DELETE_ELICITATION>",
"OBSIDIAN_OMNISEARCH_URL": "<OBSIDIAN_OMNISEARCH_URL>",
"MCP_LOG_LEVEL": "<MCP_LOG_LEVEL>"
}
}
}
}
{
"mcpServers": {
"obsidian-mcp-server": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"OBSIDIAN_API_KEY": "<OBSIDIAN_API_KEY>",
"OBSIDIAN_BASE_URL": "<OBSIDIAN_BASE_URL>",
"OBSIDIAN_VERIFY_SSL": "<OBSIDIAN_VERIFY_SSL>",
"OBSIDIAN_REQUEST_TIMEOUT_MS": "<OBSIDIAN_REQUEST_TIMEOUT_MS>",
"OBSIDIAN_ENABLE_COMMANDS": "<OBSIDIAN_ENABLE_COMMANDS>",
"OBSIDIAN_READ_PATHS": "<OBSIDIAN_READ_PATHS>",
"OBSIDIAN_WRITE_PATHS": "<OBSIDIAN_WRITE_PATHS>",
"OBSIDIAN_DENY_PATHS": "<OBSIDIAN_DENY_PATHS>",
"OBSIDIAN_READ_ONLY": "<OBSIDIAN_READ_ONLY>",
"OBSIDIAN_DELETE_ELICITATION": "<OBSIDIAN_DELETE_ELICITATION>",
"OBSIDIAN_OMNISEARCH_URL": "<OBSIDIAN_OMNISEARCH_URL>",
"MCP_LOG_LEVEL": "<MCP_LOG_LEVEL>"
}
}
}
}
{
"servers": {
"obsidian-mcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"OBSIDIAN_API_KEY": "<OBSIDIAN_API_KEY>",
"OBSIDIAN_BASE_URL": "<OBSIDIAN_BASE_URL>",
"OBSIDIAN_VERIFY_SSL": "<OBSIDIAN_VERIFY_SSL>",
"OBSIDIAN_REQUEST_TIMEOUT_MS": "<OBSIDIAN_REQUEST_TIMEOUT_MS>",
"OBSIDIAN_ENABLE_COMMANDS": "<OBSIDIAN_ENABLE_COMMANDS>",
"OBSIDIAN_READ_PATHS": "<OBSIDIAN_READ_PATHS>",
"OBSIDIAN_WRITE_PATHS": "<OBSIDIAN_WRITE_PATHS>",
"OBSIDIAN_DENY_PATHS": "<OBSIDIAN_DENY_PATHS>",
"OBSIDIAN_READ_ONLY": "<OBSIDIAN_READ_ONLY>",
"OBSIDIAN_DELETE_ELICITATION": "<OBSIDIAN_DELETE_ELICITATION>",
"OBSIDIAN_OMNISEARCH_URL": "<OBSIDIAN_OMNISEARCH_URL>",
"MCP_LOG_LEVEL": "<MCP_LOG_LEVEL>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
OBSIDIAN_API_KEYRequired | Bearer token for the Obsidian Local REST API plugin (Settings → Community Plugins → Local REST API). |
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). |
OBSIDIAN_VERIFY_SSLOptional | Whether to verify the TLS certificate on the Obsidian endpoint. Default false because the plugin uses a self-signed cert. |
OBSIDIAN_REQUEST_TIMEOUT_MSOptional | 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_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. |
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 s… |
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/'. |
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/'. |
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. |
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… |
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. Under OBSIDIAN_READ_PATHS or OBSIDIAN_DENY_PATHS the URL is never called and the omnisearch search mode is withheld. |
MCP_LOG_LEVELOptional | Sets the minimum log level for output (e.g., 'debug', 'info', 'warn'). |
Details
| Package | [email protected] (NPM, stdio) |
| Package | [email protected] (NPM, streamable-http) |
| First published | 11 Nov 2026 |
| Last updated | 11 Nov 2026 |
| Registry name | io.github.cyanheads/obsidian-mcp-server |
More productivity servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
