Skip to main content
Glama
JeddowesF

Obsidian-MCP-For-Cursor

by JeddowesF

Obsidian-MCP-For-Cursor

MCP server for Obsidian vaults, optimised for Cursor agents — safe note editing, lean tool surface, direct filesystem access.

Forked from @istrejo/obsidian-mcp (MIT) with Cursor-specific enhancements.

Features

  • 10 agent-focused tools — no unused move_note, search_by_tags, or get_graph

  • Safe writespatch and replace_section modes so agents cannot accidentally truncate notes with partial replace

  • Token-AND search — multi-word vault search requires all terms to appear in a note

  • Optimistic concurrencycontentHash on read, optional expectedHash on write

Related MCP server: obsidian-codex-mcp

Tools (v1)

Tool

Purpose

read_note

Read note body + frontmatter; returns contentHash

update_note

Safe edits: patch, replace_section, append, prepend, replace

create_note

Create a new note

delete_note

Delete a note

list_notes

List notes in the vault

list_recent

Recently modified notes

search_content

Full-text search (token-AND for multi-word queries)

manage_frontmatter

Get/set YAML frontmatter

manage_folders

Create/list vault folders

get_backlinks

Notes linking to a given note

Requirements

  • Node.js >= 20

  • An Obsidian vault path via OBSIDIAN_VAULT_PATH

Setup

git clone https://github.com/JeddowesF/Obsidian-MCP-For-Cursor.git
cd Obsidian-MCP-For-Cursor
npm install
npm run build
npm test

Cursor configuration

Copy the relevant section from examples/cursor-mcp.json into ~/.cursor/mcp.json:

{
  "mcpServers": {
    "obsidian": {
      "command": "node",
      "args": ["/absolute/path/to/Obsidian-MCP-For-Cursor/dist/index.js"],
      "env": {
        "OBSIDIAN_VAULT_PATH": "/absolute/path/to/your/vault",
        "PATH": "/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin"
      }
    }
  }
}

Reload the Cursor window after saving.

Safe write workflow

  1. Read the note — note the contentHash in the response.

  2. Edit using the safest mode:

    • patch — find/replace a unique substring (old_string / new_string)

    • replace_section — replace content under a heading (heading + content)

    • append / prepend — add content without touching existing body

    • replace — full body overwrite only; blocked if new body < 50% of existing unless force: true

  3. Pass expectedHash from step 1 to detect concurrent edits.

Example: patch a line

{
  "path": "Projects/my-project",
  "mode": "patch",
  "old_string": "status: draft",
  "new_string": "status: done"
}

Example: replace a section

{
  "path": "Projects/my-project",
  "mode": "replace_section",
  "heading": "Next steps",
  "content": "- Ship v1\n- Write docs"
}

Environment variables

Variable

Required

Description

OBSIDIAN_VAULT_PATH

Yes

Absolute path to your Obsidian vault

OBSIDIAN_READ_ONLY

No

Set to true to disable writes

OBSIDIAN_MAX_FILE_SIZE

No

Max file size in bytes (default 10 MB)

OBSIDIAN_LOG_LEVEL

No

debug, info, warn, error (default info)

Development

npm run dev      # run server directly (stdio)
npm test         # vitest with coverage
npm run lint     # eslint
npm run typecheck
npm run build

License

MIT — see LICENSE. Upstream attribution: @istrejo/obsidian-mcp.

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JeddowesF/Obsidian-MCP-For-Cursor'

If you have feedback or need assistance with the MCP directory API, please join our Discord server