MCP server by jkang8
mcp-obsidian
An MCP server that exposes your Obsidian vault to AI assistants via the Model Context Protocol.
Requirements
- Python 3.12+
- uv
Installation
git clone https://github.com/johnkang/mcp-obsidian
cd mcp-obsidian
uv sync
Usage
Set the OBSIDIAN_VAULT_PATH environment variable to the absolute path of your vault, then run the server:
OBSIDIAN_VAULT_PATH=/path/to/your/vault uv run mcp-obsidian
Claude Desktop Integration
Add the following to your claude_desktop_config.json:
{
"mcpServers": {
"obsidian": {
"command": "uv",
"args": ["run", "--directory", "/path/to/mcp-obsidian", "mcp-obsidian"],
"env": {
"OBSIDIAN_VAULT_PATH": "/path/to/your/vault"
}
}
}
}
The config file is located at:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Tools
File Operations
| Tool | Description |
|------|-------------|
| list_files(path="") | List files and folders in the vault or a subdirectory |
| read_note(path) | Read the contents of a note |
| write_note(path, content) | Create or overwrite a note (parent dirs created automatically) |
| append_to_note(path, content) | Append content to the end of an existing note |
| delete_note(path) | Delete a note or folder |
| move_note(src, dest) | Move or rename a note within the vault |
Search
| Tool | Description |
|------|-------------|
| search_notes(query) | Case-insensitive full-text search across all .md files |
| search_by_tag(tag) | Find all notes containing a specific tag |
Frontmatter
| Tool | Description |
|------|-------------|
| get_frontmatter(path) | Read the YAML frontmatter of a note |
| update_frontmatter(path, key, value) | Set or update a frontmatter field (creates it if absent) |
Links & Graph
| Tool | Description |
|------|-------------|
| get_backlinks(path) | Find all notes that link to a given note via [[wikilinks]] |
| get_outlinks(path) | Extract all [[wikilinks]] from a note |
| get_orphans() | Find notes with no incoming or outgoing links |
Daily Notes
| Tool | Description |
|------|-------------|
| get_daily_note(date_str="") | Read the daily note for a date (defaults to today, format: YYYY-MM-DD) |
| create_daily_note(date_str="") | Create a daily note, using a daily template from Templates/ if available |
Utility
| Tool | Description |
|------|-------------|
| list_tags() | List all tags in the vault with usage counts |
| get_recent_notes(n=10) | List the N most recently modified notes |
| get_note_stats() | Return vault statistics (note count, word count, tags, links) |
| list_templates() | List all templates in the vault's Templates/ folder |
Security
All file paths are validated to prevent path traversal attacks — no operation can escape the configured vault directory.