obsidian-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OBSIDIAN_MCP_CONFIG | No | Override the path to the config file. Default: ~/.config/obsidian-mcp/config.json | |
| OBSIDIAN_VAULT_PATH | No | Path to the Obsidian vault. Resolution order: obsidian_set_vault tool / vault_path argument, then this env var, then config file. | |
| OBSIDIAN_MCP_DATA_DIR | No | Override the directory for config, LanceDB index, and file-hash cache. Default: ~/.config/obsidian-mcp |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| obsidian_set_vaultC | Set the default Obsidian vault path for this session. |
| obsidian_list_notesC | List markdown files in the vault or a subdirectory. |
| obsidian_read_noteC | Read the content of a specific note (Markdown). |
| obsidian_create_noteC | Create a new note with the given content. |
| obsidian_append_noteC | Append text to the end of an existing note. |
| obsidian_get_daily_noteB | Get (or create) today's daily note. |
| obsidian_search_notesB | Search for notes containing specific text (simple text match). |
| obsidian_rag_indexA | Index the vault for semantic search (RAG). If file_path is provided, only that file is re-indexed. Incremental by default — only re-embeds changed files. Use force_reindex to rebuild from scratch. |
| obsidian_rag_queryC | Perform a semantic search on the indexed vault. |
| obsidian_get_backlinksC | Find all notes that link to a specific note. |
| obsidian_get_linksC | Get all outgoing links from a specific note. |
| obsidian_move_noteC | Move or rename a note. |
| obsidian_update_frontmatterB | Update YAML frontmatter of a note safely. Supports single key/value or batch updates. |
| obsidian_append_daily_logB | Append text to a specific heading in today's daily note. |
| obsidian_replace_sectionB | Replace the body under a heading (up to the next heading of equal/higher level, or EOF). The heading line itself is preserved. |
| obsidian_insert_at_headingA | Insert content under a specific heading. If heading not found, appends it as a new ## section. |
| obsidian_replace_in_noteA | Replace the first occurrence of a specific text string in a note. Use for surgical inline edits, e.g. adding a wikilink to existing text. |
| obsidian_get_broken_linksA | Find all wikilinks in the vault (or a subfolder) that point to non-existent notes. Returns broken links grouped by source file. |
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 18 tools
Tools target distinct Obsidian operations: file CRUD, daily notes, linking, frontmatter, search, and RAG. Overlaps like append_note vs. append_daily_log and replace_in_note vs. replace_section are clearly differentiated by descriptions. An agent can reliably select the intended tool.
All 18 tools use the obsidian_ prefix and snake_case, mostly verb_noun patterns. Minor variation for rag_index/rag_query and daily-note composites, but convention is highly predictable.
18 tools is slightly above the ideal 3-15 range, but the domain is feature-rich and each tool covers a distinct capability. It does not feel redundant or bloated.
The surface covers read/list/create/append, surgical edits, frontmatter, links/backlinks, search/RAG, daily notes, and move/rename. A delete-note operation is missing, but most lifecycle workflows are covered or workable.