obsidian-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OBSIDIAN_VAULT | No | Which vault to use when you have several open. A default, not a restriction | |
| XDG_RUNTIME_DIR | No | Linux only, and not read by this server: it is how the `obsidian` binary finds the running app, and a server started by a client does not inherit it. See Linux: XDG_RUNTIME_DIR | |
| OBSIDIAN_CLI_BIN | No | Path/name of the binary if `obsidian` isn't on the PATH | obsidian |
| OBSIDIAN_MCP_READONLY | No | If `1`, the tools that write to the vault are not registered at all: the model only gets the ones that read. See read-only mode | |
| OBSIDIAN_CLI_TIMEOUT_MS | No | Baseline timeout per CLI call, and the one used by writes and anything not listed below | 20000 |
| OBSIDIAN_MCP_CONCURRENCY | No | How many CLI processes may run at once. They all talk to the same Obsidian instance, and running them in parallel is what makes it stall, so calls are queued one at a time by default | 1 |
| OBSIDIAN_MCP_ENABLE_EXEC | No | If `1`, registers the `obsidian_exec` escape hatch. Read Security model first | |
| OBSIDIAN_MCP_DISABLE_EXEC | No | If `1`, keeps `obsidian_exec` off even if the variable above is set. Belt and braces for a shared config | |
| OBSIDIAN_CLI_KILL_GRACE_MS | No | How long a timed-out CLI process gets between `SIGTERM` and `SIGKILL` | 2000 |
| OBSIDIAN_CLI_TIMEOUT_SLOW_MS | No | Timeout for the vault-wide ones (searches, listings, tags, backlinks, `obsidian_move`/`obsidian_rename`, `obsidian_exec`) | three times OBSIDIAN_CLI_TIMEOUT_MS |
| OBSIDIAN_CLI_TIMEOUT_QUICK_MS | No | Timeout for the tools that touch a single note or folder (`obsidian_read`, `obsidian_outline`, `obsidian_file_info`, the property readers…) | half of OBSIDIAN_CLI_TIMEOUT_MS |
| OBSIDIAN_MCP_MAX_OUTPUT_BYTES | No | Cap on how much a single call may return to the client. Past it the output is cut and the reply says how much was dropped and how to narrow the query. It covers reading a note as a resource too | 50000 |
| OBSIDIAN_MCP_MAX_LISTING_BYTES | No | Cap on the `folders` and `files` listings the resource walk is built from. Their text never reaches the client — it is parsed into URIs and dropped — so this is a memory limit, not a context one, and it is much larger | 2000000 |
| OBSIDIAN_MCP_RESOURCE_PAGE_SIZE | No | How many resources one `resources/list` page carries before it hands back a `nextCursor` | 200 |
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 |
|---|---|
| obsidian_exec | Runs |
| obsidian_readA | Reads the contents of a note, by wikilink name or by vault-relative path. |
| obsidian_list_filesB | Lists notes/files in the vault, optionally filtered by folder or extension. |
| obsidian_list_folders | Lists the vault's folder structure. |
| obsidian_create | Creates a new note, optionally from a template and/or with initial content. |
| obsidian_appendC | Appends content to the end of an existing note. |
| obsidian_prependC | Inserts content at the start of an existing note. |
| obsidian_moveA | Moves a note to a different folder (or renames it). Wikilinks pointing to it are updated automatically. |
| obsidian_deleteA | Deletes a note. By default it goes to Obsidian's trash unless |
| obsidian_searchB | Full-text search across the vault. Supports structured filters inside the query string, e.g. "[tag:project]", "[status:active]", "[priority:>3]". |
| obsidian_daily_read | Reads the content of today's daily note (or a specific date's). |
| obsidian_daily_append | Appends content to the end of today's daily note. |
| obsidian_daily_prepend | Inserts content at the start of today's daily note. |
| obsidian_properties_get | Reads the YAML frontmatter/properties of a note. |
| obsidian_properties_set | Sets one or more frontmatter properties on a note, e.g. { status: 'active', tags: 'pkm,obsidian' }. |
| obsidian_properties_remove | Removes a single frontmatter key from a note. |
| obsidian_tags | Lists all tags used in the vault, optionally sorted by usage count. |
| obsidian_backlinks | Lists every note that links to the given note. |
| obsidian_links | Lists every link found inside the given note. |
| obsidian_orphans | Lists notes that have no incoming or outgoing links. |
| obsidian_unresolved_linksA | Lists links in the vault that don't resolve to an existing note. |
| obsidian_tasks_listC | Lists tasks (checkboxes) found across the vault. |
| obsidian_task_createC | Creates a new task, optionally tagged. |
| obsidian_task_complete | Marks a task as done by its task id (as returned by obsidian_tasks_list). |
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 10 tools
Each tool has a clear and distinct purpose. There is no overlap or ambiguity; even append/prepend are differentiated by position.
All tools follow the same obsidian_verb_noun pattern in snake_case, making it predictable and easy to understand.
10 tools is appropriate for an Obsidian vault MCP server, covering file operations, search, and task management without being bloated.
Covers most core operations (read, write, move, delete, search, tasks) but lacks an explicit create note tool and content update beyond append/prepend.