Obsidian MCP

Reads and edits notes, folders and tags in local Obsidian vaults you name at startup

By Steven Stavrakis (individual) TypeScript Local · stdio ProductivityKnowledge and memory

68 popularity score ★ 750 ↓ 3.6k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

Claude CodeTerminal
claude mcp add obsidian -- npx -y obsidian-mcp@2 serve --vault 'notes=<ABSOLUTE_PATH_TO_VAULT>'
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "obsidian": {
      "command": "npx",
      "args": [
        "-y",
        "obsidian-mcp@2",
        "serve",
        "--vault",
        "notes=<ABSOLUTE_PATH_TO_VAULT>"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "obsidian": {
      "command": "npx",
      "args": [
        "-y",
        "obsidian-mcp@2",
        "serve",
        "--vault",
        "notes=<ABSOLUTE_PATH_TO_VAULT>"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "obsidian": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "obsidian-mcp@2",
        "serve",
        "--vault",
        "notes=<ABSOLUTE_PATH_TO_VAULT>"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.obsidian]
command = "npx"
args = ["-y", "obsidian-mcp@2", "serve", "--vault", "notes=<ABSOLUTE_PATH_TO_VAULT>"]
Gemini CLITerminal
gemini mcp add --scope user obsidian npx -- -y obsidian-mcp@2 serve --vault 'notes=<ABSOLUTE_PATH_TO_VAULT>'

What it does

Obsidian MCP is a local stdio server that works on the Markdown files of one or more Obsidian vaults. It reads the files on disk directly, so the Obsidian app does not have to be running. Each vault is passed on the command line as an id and an absolute path (serve --vault notes=/path), up to ten of them, and the assistant only ever refers to vaults by id; host paths are not shown to it.

Its 12 tools cover reading notes in pages, creating, editing, moving and deleting notes, making folders, searching by content, file name or tag, and adding, removing or renaming tags across a vault. Moving a note rewrites links that point to it when they resolve to that note alone; ambiguous links are reported and left as they are. Reads return a SHA-256 etag that can be passed back on edits, moves and deletes so a note changed in the meantime is refused instead of overwritten.

Writes are journaled and can be undone: deleted notes go to a trash folder inside the vault by default, and completed transactions are kept under .obsidian-mcp for 30 days (pruned above 1 GiB) and can be restored with obsidian-mcp recovery while the server is stopped.

Version 2 renamed every tool from the 1.x names (read-note became obsidian_read_note, and so on) and changed their arguments; according to MIGRATING.md the old names are deliberately not kept as aliases, so saved prompts or scripts written for 1.x must be updated. Starting with a bare vault path, the 1.x way, still works but is deprecated and prints the replacement command.

What it needs

RuntimeNode.js 22+

Node.js 22 or newer (MIGRATING.md names 22 or 24 LTS) as seen by the MCP client, not just your terminal. One or more existing Obsidian vaults, each already containing a .obsidian folder, given by absolute path; the process needs read and write access to them. Obsidian itself does not need to be open.

Limits

Up to ten vaults per process, and vaults may not be nested or duplicated. Tools cannot touch .obsidian, .obsidian-mcp, .git, .backup or .trash, and symlinked paths are refused and skipped in scans. Text replies are capped at 25,000 characters, with long notes and searches paged by cursor. Permanently deleted notes cannot be restored. It works on files only: no Obsidian plugins, graph or app commands. The README warns that clients can call its destructive tools and advises backing vaults up first. 1.x tool names and arguments no longer work (MIGRATING.md).

Who it suits

Suits someone who wants an assistant to read and reorganise notes in a local Obsidian vault without running Obsidian or installing a community plugin, and who values recoverable writes and conflict checks. Since it writes to the vault, pair it with a backup or git. It reaches only files on the same machine, so it does not fit vaults you want to reach from a hosted assistant, or work that needs Obsidian's plugins or app features; a server that talks to the running app through a plugin is the other route.

Tools 12

obsidian_list_vaults
Lists the configured vault ids, without their paths.
obsidian_read_note
Reads one page of a note and returns its etag.
obsidian_create_note
Creates a new note, refusing to overwrite an existing one.
obsidian_edit_note
Appends, prepends or replaces exact text in a note.
obsidian_delete_note
Moves a note to the server's trash, or deletes it for good with confirmation.
obsidian_move_note
Moves or renames a note and updates links that clearly point to it.
obsidian_create_directory
Creates a folder inside a vault.
obsidian_search_vault
Searches note text, file names or tags, page by page.
obsidian_add_tags
Adds tags to one or more notes.
obsidian_remove_tags
Removes exact, nested or wildcard-matched tags from notes.
obsidian_rename_tag
Renames a tag everywhere in a vault.
obsidian_manage_tags
Adds or removes tags through one combined call.

Similar servers