Obsidian MCP

Turns Obsidian vaults into AI-queryable knowledge graphs with 12 tools

1MITai-ml

Install

Config snippet generator goes here (5 client tabs)

README

# obsidian-mcp

MCP server that turns any Obsidian vault into an AI-queryable knowledge graph.

**What makes this different from the 24+ existing Obsidian MCP servers:**

- **Graph-first** — BFS, shortest path, connected components, bridge detection via `[[wikilinks]]`
- **Zero infrastructure** — No database, no Obsidian running, no API keys
- **Vault-agnostic** — Works with any existing vault, no required structure
- **Backlink-aware writes** — `move_note` auto-updates all references across the vault
- **Tiny** — 4 runtime dependencies, ~42KB bundle

## Quick Start

```bash
npx obsidian-mcp --vault ~/my-obsidian-vault
```

### Claude Desktop

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "obsidian": {
      "command": "npx",
      "args": ["-y", "obsidian-mcp", "--vault", "/path/to/vault"]
    }
  }
}
```

### Claude Code

```bash
claude mcp add obsidian -- npx -y obsidian-mcp --vault /path/to/vault
```

## Tools (12)

### Reading & Discovery

| Tool | Description |
|------|-------------|
| `vault_stats` | Overview: total notes, tags, links, orphans, components, top tags/hubs |
| `read_note` | Full content + frontmatter + links + backlinks + sections |
| `search_notes` | Filter by tags, folder, frontmatter, keyword. All combinable |

### Graph Traversal

| Tool | Description |
|------|-------------|
| `graph_neighbors` | Direct links + backlinks for a note |
| `graph_traverse` | BFS/DFS from a note, N hops deep with tag filtering |
| `graph_shortest_path` | Shortest link chain between two notes |
| `graph_analyze` | Components, orphans, bridges, hubs, dead links |

### Writing & Manipulation

| Tool | Description |
|------|-------------|
| `create_note` | Create with content + frontmatter |
| `patch_note` | Append, prepend, or replace a section. Update frontmatter |
| `move_note` | Rename/move + auto-update all backlinks across vault |
| `delete_note` | Delete + report broken links |
| `manage_tags` | Add/remove/rename tags (vault-wide rename supported) |

## Configuration

Zero-config by default. Optional `.obsidian-mcp.json` in vault root:

```json
{
  "ignore": ["templates/", "daily-notes/", ".trash/"],
  "watchDebounce": 100,
  "maxTraversalDepth": 10,
  "maxSearchResults": 500
}
```

### CLI Flags

```
--vault <path>       Path to Obsidian vault (required)
--verbose            Enable debug logging
--log-level <level>  error | warn | info | debug (default: info)
```

## How It Works

1. On startup, scans all `.md` files and builds an in-memory graph (~1-3s for 1k notes)
2. File watcher detects changes and updates the graph incrementally (~5ms per change)
3. Claude queries the graph via MCP tools — no re-scanning needed
4. Write operations update both the filesystem and the graph atomically

Hardcoded exclusions: `.obsidian/`, `.trash/`, `node_modules/`

## Development

```bash
npm install
npm test              # Run 66 tests
npm run build         # Build to dist/
npm run dev -- --vault test/fixtures/vault  # Dev mode
```

## License

MIT