obsidian-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OBSIDIAN_HOST | No | Host for the Obsidian Local REST API. | 127.0.0.1 |
| OBSIDIAN_PORT | No | Port for the Obsidian Local REST API (HTTPS). | 27124 |
| OBSIDIAN_API_KEY | Yes | API key from the Local REST API plugin settings. | |
| OBSIDIAN_PROTOCOL | No | Protocol: http or https. | https |
| OBSIDIAN_TIMEOUT_MS | No | Per-request timeout in milliseconds. | 15000 |
| OBSIDIAN_VERIFY_TLS | No | Set to 'true' if you've replaced the self-signed cert. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_vaultB | List all files in the Obsidian vault. Use |
| search_vaultA | Full-text search across all notes. Supports two modes: |
| query_dataviewA | Run a Dataview DQL query (LIST / TABLE / TASK) against the vault. Requires the Dataview plugin installed in the vault. Powerful for structured questions like 'all notes tagged #project where status != done sorted by due date'. |
| list_tagsA | Return every tag used in the vault, with usage counts and a sample of notes per tag. Useful for 'what topics do I write about most?' or as a starting point for organizing. |
| get_vault_statsA | Get high-level stats about the vault: total notes, total words (sampled), top folders, file extensions. Useful for 'how big is my vault?' / 'where do I write the most?' prompts. |
| get_noteA | Get a note's content plus its graph context: backlinks (who links to it), forward links (who it links to), tags, and frontmatter. Use the |
| get_outlineA | Return the heading structure of a note (level + text + line number). Use this instead of |
| get_active_noteA | Return the note the user currently has focused in Obsidian. Useful for 'what am I looking at' style prompts. |
| get_daily_noteA | Fetch the user's current daily (or weekly/monthly/etc.) note. Returns content + frontmatter + tags. Requires the Periodic Notes or Daily Notes plugin in the vault. |
| get_backlinksA | Return notes that link to the given path, with snippets. Same data as the |
| traverse_graphA | Walk the link graph starting from a note. Returns nodes (notes) and edges (links) up to |
| find_orphansB | Find notes with no incoming links anywhere in the vault. Use to surface forgotten ideas or candidates for cleanup. |
| find_broken_linksB | Find wiki-links and markdown links that don't resolve to any note in the vault. Use for vault hygiene or before refactoring note titles. |
| create_noteA | Create a new note (fails if it already exists unless |
| create_notesA | Create many notes in a single tool call. Designed for bootstrapping a knowledge graph (MOC + topical notes) without paying N round-trips. Each entry follows the same schema as |
| upsert_noteA | Create a note if missing, replace it if it exists. Body is always fully replaced. Frontmatter is replaced by default; pass |
| update_noteA | Overwrite a note's full content. Prefer |
| append_to_noteA | Append markdown to the end of an existing note. Creates the note if it doesn't exist. |
| append_to_daily_noteB | Append markdown to the current daily (or weekly/etc.) note. Common pattern: agent logs what it just did at the end of the day. |
| patch_noteA | Insert content relative to a heading, block reference, or frontmatter field — without rewriting the whole note. Example: append a bullet under '## Tasks' without touching the rest of the page. |
| move_noteA | Move a note from one path to another, optionally rewriting wiki-links so backlinks keep working. This is the safe way to rename notes — agents should not naively |
| delete_noteA | Delete a note from the vault. Destructive — only call when the user has explicitly asked to remove a file. |
| open_noteA | Surface a note in Obsidian's workspace (focuses an existing tab or opens a new one). Great for ending an agent task with 'and here's the result for you to review'. |
| list_commandsA | List every registered Obsidian command (built-in + plugin) with its id and human name. Use this before |
| run_commandA | Execute an Obsidian command by id (e.g. 'editor:toggle-bold', 'app:reload', 'graph:open'). Discover ids with |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 25 tools
Most tools target distinct actions, but there is slight overlap between get_note and get_backlinks (backlinks are also in get_note context) and between create_note, update_note, and upsert_note. However, clear descriptions mitigate confusion.
All tool names follow a consistent snake_case pattern with verb_noun structure (e.g., append_to_note, find_broken_links, list_tags). No mixed conventions or vague verbs.
25 tools is at the upper bound but justified for a comprehensive Obsidian MCP server covering notes, vault management, graph navigation, and plugin integration. Each tool earns its place.
Covers CRUD for notes, batch operations, vault statistics, search, graph analysis, and plugin commands. Minor gap: no dedicated tool to create a daily note (append assumes existing) or manage folders.