Skip to content
Squatch MCP

io.github.cyanheads/obsidian-mcp-server

io.github.cyanheads/obsidian-mcp-server

by io.github.cyanheads· v3.9.0Source: Official MCP Registry

All versions

VersionRegistry status
3.9.0latestActive
3.8.0Active
3.7.2Active
3.7.1Active
3.7.0Active
3.6.1Active
3.6.0Active
3.5.5Active
3.5.4Active
3.5.3Active
3.5.2Active
3.5.1Active
3.5.0Active
3.4.0Active
3.3.1Active
3.3.0Active
3.2.9Active
3.2.8Active
3.2.7Active
3.2.6Active
3.2.5Active
3.2.4Active
3.2.3Active
3.2.2Active
3.2.12Active
3.2.11Active
3.2.10Active
3.2.1Active
3.2.0Active
3.1.9Active
3.1.8Active
3.1.7Active
3.1.6Active
3.1.5Active
3.1.4Active
3.1.3Active
3.1.2Active
3.1.11Active
3.1.10Active
3.1.1Active
3.1.0Active
3.0.0Active

Version details

Version
3.9.0
Source
Source: Official MCP Registry
Published
Registry last updated
First observed by Squatch
Content fingerprint
d825cb5f8839766443d3d0c1e735d020cc7a69f86f3a71b91aa78607a310ce2b

Transports in this version

  • packagestdionpm obsidian-mcp-serverUnknown
  • packagestreamable-httpnpm obsidian-mcp-serverUnknown
Registry metadata (server.json, sanitized)
{
  "_meta": {
    "io.modelcontextprotocol.registry/official": {
      "status": "active",
      "isLatest": true,
      "updatedAt": "2026-11-11T09:06:08.025679Z",
      "publishedAt": "2026-11-11T09:06:08.025679Z",
      "statusChangedAt": "2026-11-11T09:06:08.025679Z"
    }
  },
  "server": {
    "name": "io.github.cyanheads/obsidian-mcp-server",
    "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
    "version": "3.9.0",
    "packages": [
      {
        "version": "3.9.0",
        "transport": {
          "type": "stdio"
        },
        "identifier": "obsidian-mcp-server",
        "runtimeHint": "npx",
        "registryType": "npm",
        "registryBaseUrl": "https://registry.npmjs.org",
        "environmentVariables": [
          {
            "name": "OBSIDIAN_API_KEY",
            "format": "string",
            "isRequired": true,
            "description": "Bearer token for the Obsidian Local REST API plugin (Settings → Community Plugins → Local REST API)."
          },
          {
            "name": "OBSIDIAN_BASE_URL",
            "format": "string",
            "default": "http://127.0.0.1:27123",
            "description": "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)."
          },
          {
            "name": "OBSIDIAN_VERIFY_SSL",
            "format": "string",
            "default": "false",
            "description": "Whether to verify the TLS certificate on the Obsidian endpoint. Default false because the plugin uses a self-signed cert."
          },
          {
            "name": "OBSIDIAN_REQUEST_TIMEOUT_MS",
            "format": "string",
            "default": "30000",
            "description": "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."
          },
          {
            "name": "OBSIDIAN_ENABLE_COMMANDS",
            "format": "string",
            "default": "false",
            "description": "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."
          },
          {
            "name": "OBSIDIAN_READ_PATHS",
            "format": "string",
            "description": "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/'."
          },
          {
            "name": "OBSIDIAN_WRITE_PATHS",
            "format": "string",
            "description": "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/'."
          },
          {
            "name": "OBSIDIAN_DENY_PATHS",
            "format": "string",
            "description": "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/'."
          },
          {
            "name": "OBSIDIAN_READ_ONLY",
            "format": "string",
            "default": "false",
            "description": "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."
          },
          {
            "name": "OBSIDIAN_DELETE_ELICITATION",
            "format": "string",
            "default": "false",
            "description": "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."
          },
          {
            "name": "OBSIDIAN_OMNISEARCH_URL",
            "format": "string",
            "description": "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."
          },
          {
            "name": "MCP_LOG_LEVEL",
            "format": "string",
            "default": "info",
            "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
          }
        ]
      },
      {
        "version": "3.9.0",
        "transport": {
          "url": "http://localhost:3010/mcp",
          "type": "streamable-http"
        },
        "identifier": "obsidian-mcp-server",
        "runtimeHint": "npx",
        "registryType": "npm",
        "registryBaseUrl": "https://registry.npmjs.org",
        "environmentVariables": [
          {
            "name": "MCP_TRANSPORT_TYPE",
            "value": "http",
            "format": "string",
            "description": "Selects the HTTP transport."
          },
          {
            "name": "OBSIDIAN_API_KEY",
            "format": "string",
            "isRequired": true,
            "description": "Bearer token for the Obsidian Local REST API plugin (Settings → Community Plugins → Local REST API)."
          },
          {
            "name": "OBSIDIAN_BASE_URL",
            "format": "string",
            "default": "http://127.0.0.1:27123",
            "description": "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)."
          },
          {
            "name": "OBSIDIAN_VERIFY_SSL",
            "format": "string",
            "default": "false",
            "description": "Whether to verify the TLS certificate on the Obsidian endpoint. Default false because the plugin uses a self-signed cert."
          },
          {
            "name": "OBSIDIAN_REQUEST_TIMEOUT_MS",
            "format": "string",
            "default": "30000",
            "description": "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."
          },
          {
            "name": "OBSIDIAN_ENABLE_COMMANDS",
            "format": "string",
            "default": "false",
            "description": "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."
          },
          {
            "name": "OBSIDIAN_READ_PATHS",
            "format": "string",
            "description": "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/'."
          },
          {
            "name": "OBSIDIAN_WRITE_PATHS",
            "format": "string",
            "description": "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/'."
          },
          {
            "name": "OBSIDIAN_DENY_PATHS",
            "format": "string",
            "description": "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/'."
          },
          {
            "name": "OBSIDIAN_READ_ONLY",
            "format": "string",
            "default": "false",
            "description": "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."
          },
          {
            "name": "OBSIDIAN_DELETE_ELICITATION",
            "format": "string",
            "default": "false",
            "description": "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."
          },
          {
            "name": "OBSIDIAN_OMNISEARCH_URL",
            "format": "string",
            "description": "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."
          },
          {
            "name": "MCP_HTTP_HOST",
            "format": "string",
            "default": "127.0.0.1",
            "description": "The hostname for the HTTP server."
          },
          {
            "name": "MCP_HTTP_PORT",
            "format": "string",
            "default": "3010",
            "description": "The port to run the HTTP server on."
          },
          {
            "name": "MCP_HTTP_ENDPOINT_PATH",
            "format": "string",
            "default": "/mcp",
            "description": "The endpoint path for the MCP server."
          },
          {
            "name": "MCP_AUTH_MODE",
            "format": "string",
            "default": "none",
            "description": "Authentication mode to use: 'none', 'jwt', or 'oauth'."
          },
          {
            "name": "MCP_LOG_LEVEL",
            "format": "string",
            "default": "info",
            "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
          }
        ]
      }
    ],
    "repository": {
      "url": "https://github.com/cyanheads/obsidian-mcp-server",
      "source": "github"
    },
    "description": "Read, write, search, and surgically edit Obsidian notes, tags, and frontmatter via MCP."
  }
}