Skip to main content
Glama

Obsidian MCP

MCP server for Obsidian vault management. Designed for AI agents (Claude Desktop, Claude Code).

Features

  • Full CRUD operations on notes

  • Wikilink management (auto-update on rename/delete)

  • Frontmatter manipulation

  • Tag-based and content search

  • Backlinks discovery

  • Section-level operations

Installation

poetry install

Configuration

Set the vault path via environment variable:

export OBSIDIAN_VAULT_PATH="/path/to/your/obsidian/vault"

# WSL example (Windows vault accessed from WSL)
export OBSIDIAN_VAULT_PATH="/mnt/c/Users/username/Documents/Obsidian/my_vault"

Claude Desktop Configuration

Add to claude_desktop_config.json:

Linux/macOS:

{
  "mcpServers": {
    "obsidian": {
      "command": "bash",
      "args": ["-c", "cd /path/to/obsidian-mcp && poetry run obs-mcp"],
      "env": {
        "OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault"
      }
    }
  }
}

Windows (via WSL):

{
  "mcpServers": {
    "obsidian": {
      "command": "wsl",
      "args": [
        "-e", "bash", "-c",
        "cd /path/to/obsidian-mcp && poetry run obs-mcp"
      ],
      "env": {
        "OBSIDIAN_VAULT_PATH": "/mnt/c/Users/username/Documents/Obsidian/my_vault"
      }
    }
  }
}

Available Tools

Tool

Description

read_note(name)

Read note content (frontmatter + body)

create_note(name, content?, frontmatter?)

Create note

append_note(name, text)

Append to note

update_note(name, content)

Replace body, preserve frontmatter

delete_note(name, dry_run?)

Delete (links updated to [[name (deleted)]])

rename_note(old_name, new_name, dry_run?)

Rename + update wikilinks

search_notes(query, mode?)

Search (name, name_partial, content, tag)

get_links(name, direction?)

Get incoming/outgoing links

get_note_metadata(name)

Get frontmatter + links without body

set_frontmatter(name, key, value)

Set frontmatter key

add_tag(name, tag)

Add tag to note

remove_tag(name, tag)

Remove tag from note

list_notes(limit?, offset?)

List all notes (paginated)

replace_text(name, old, new, replace_all?)

Replace text in note

insert_text(name, text, before?, after?)

Insert text at position

read_section(name, section)

Read section by heading

append_section(name, section, text)

Append to section

update_section(name, section, content)

Replace section content

delete_section(name, section)

Delete section

get_headings(name)

Get all headings

find_broken_links()

Find broken wikilinks

get_help()

Get tool descriptions

Vault Structure

  • Flat structure (all .md files in vault root)

  • YAML frontmatter with --- delimiters

  • Wikilinks: [[Note Name]]

  • Tags in frontmatter: tags: [tag1, tag2]

  • .trash/ for deleted notes

  • .obsidian/ ignored

Development

# Run tests
poetry run pytest tests/spec/core/ -v

# Lint
poetry run ruff check src/
poetry run mypy src/

License

MIT

-
security - not tested
A
license - permissive license
-
quality - not tested

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/Abrak98/obsidian-mcp'

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