mcp-obsidian-vault
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GIT_BRANCH | No | Default branch | main |
| GIT_REMOTE | No | Default remote | origin |
| WEBHOOK_URL | No | Comma-separated webhook URLs for task event notifications | |
| TASKS_FOLDER | No | Task notes subfolder | Tasks |
| USAGE_FOLDER | No | Token usage records subfolder | Usage |
| AGENTS_FOLDER | No | Agent profile notes subfolder | Agents |
| GIT_AUTO_SYNC | No | Auto commit + push after every write | false |
| GIT_TIMEOUT_MS | No | Git operation timeout | 30000 |
| WEBHOOK_SECRET | No | HMAC-SHA256 secret for signing webhook payloads | |
| GIT_PULL_REBASE | No | Use --rebase on pull | true |
| NOTE_EXTENSIONS | No | Note file extensions | .md,.markdown |
| TRASH_ON_DELETE | No | Move to .trash/ instead of permanent delete | true |
| DECISIONS_FOLDER | No | Decision records subfolder | Decisions |
| DAILY_NOTE_FOLDER | No | Subfolder for daily notes | Daily Notes |
| SEARCH_TIMEOUT_MS | No | Search timeout | 30000 |
| DISCOVERIES_FOLDER | No | Discovery notes subfolder | Discoveries |
| MAX_SEARCH_RESULTS | No | Max search results | 50 |
| WEBHOOK_TIMEOUT_MS | No | Webhook HTTP request timeout | 5000 |
| MAX_FILE_SIZE_BYTES | No | Max file size (10 MB) | 10485760 |
| OBSIDIAN_VAULT_PATH | Yes | Absolute path to your Obsidian vault (required) | |
| GIT_AUTO_SYNC_DEBOUNCE_MS | No | Debounce interval | 5000 |
| GIT_COMMIT_MESSAGE_PREFIX | No | Auto-commit message prefix | vault: |
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
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| read_noteA | Read a note's content, frontmatter, tags, and metadata from the vault. Returns parsed frontmatter, markdown content, tags (from frontmatter and inline), and file stats. |
| create_noteA | Create a new note in the vault with optional YAML frontmatter. Parent folders are created automatically. Fails if the note already exists (unless overwrite=true). |
| update_noteA | Update an existing note. Supports three modes: 'replace' (overwrite body), 'append' (add to end), or 'prepend' (add to beginning). Can also merge new frontmatter fields into existing frontmatter. |
| delete_noteA | Delete a note from the vault. By default moves to .trash/ (Obsidian convention) instead of permanent deletion. Set permanent=true for hard delete. |
| search_vaultA | Full-text search across all notes in the vault. Supports plain text and regex patterns. Returns matching files with line numbers and context. Can filter by folder. |
| list_vaultA | List files and folders in the vault. Supports recursive listing with depth control. Hidden folders (.obsidian, .trash, .git) are excluded by default. |
| manage_tagsA | Read, add, or remove tags on a note. Tags are managed in YAML frontmatter. Also reads inline #tags from the note content. Handles deduplication automatically. |
| daily_noteB | Get, create, or append to a daily note. Supports 'today', 'yesterday', 'tomorrow', or any date string (YYYY-MM-DD). Daily notes are stored in a configurable folder. |
| git_syncA | Git version control for your vault. Actions: 'status' (show changes), 'commit' (stage all + commit), 'pull' (fetch remote changes), 'push' (push to remote), 'sync' (pull+commit+push in one operation), 'log' (commit history), 'diff' (show changes), 'init' (initialize git repo + .gitignore), 'remote_add' (add remote), 'remote_list' (list remotes). |
| wikilinksA | Navigate Obsidian [[wikilinks]]. Actions: 'resolve' (find file a wikilink points to), 'backlinks' (find all notes linking to a note), 'outlinks' (list all links from a note), 'unresolved' (find broken wikilinks across the vault). Supports [[note]], [[note|alias]], [[note#heading]], and [[note#^blockid]] syntax. |
| create_taskA | Create a new task in the vault's task queue with structured YAML frontmatter. Tasks are markdown notes in the Tasks/ folder. Supports priority, type, dependencies, scope isolation, context notes, and acceptance criteria. Auto-refreshes the task dashboard. |
| list_tasksA | Query tasks by status, priority, type, or assignee. Returns a filtered, sorted list of tasks from the vault's task queue. Use to find available work or monitor progress. |
| claim_taskA | Atomically claim a pending task for an agent. Sets status to 'claimed' and records the assignee. Prevents race conditions — if two agents try to claim the same task, the second gets a clear error. Checks dependency completion before allowing claim. |
| update_taskA | Update a task's status, priority, type, or assignee. Append progress entries to the Agent Log. Validates status transitions (e.g. cannot go from 'pending' to 'completed' — must claim first). Use this to move tasks through the workflow. |
| complete_taskA | Mark a task as completed (or failed/cancelled) with a summary and optional deliverables. Records completed_at timestamp, appends to Agent Log, links deliverable files/URLs, and automatically unblocks dependent tasks. |
| create_projectA | Create a project with multiple sub-tasks in one call. Use depends_on_indices to wire up task dependencies by array position. Independent tasks can be claimed by different agents in parallel. Returns all task IDs for immediate claiming. Append mode: pass project_id to add new sub-tasks to an existing project. |
| get_project_statusA | Get rollup status of a project: progress percentage, status breakdown, active agents, overdue tasks, and blockers. Use list_tasks(type: 'project') to find project IDs. |
| get_contextA | Get a structured briefing of the vault's current state. Returns active projects, in-progress work, pending tasks, blockers, failures, recent decisions, recent discoveries, and pinned notes. Call this FIRST in any new session to understand what's going on. |
| log_decisionA | Log an architectural or design decision as a structured record. Captures context, rationale, alternatives considered, and consequences. Future agents can find these via get_context to understand WHY things were done. |
| log_discoveryA | Log a discovery, gotcha, or TIL (Today I Learned) as a structured note. Captures what was found, its impact, and recommendations. Prevents future agents from re-discovering the same things. |
| review_taskA | Approve or reject a task in needs_review status. Used by humans to gate high-risk work. Approve sends to completed and unblocks dependents. Reject sends to revision_requested. |
| register_agentA | Register an agent with capabilities, tags, and capacity. Creates or updates an agent profile in the Agents/ folder. Used for capability-based task routing. |
| list_agentsA | List registered agents. Filter by capability, tag, status, or availability. Shows current workload and capacity for each agent. |
| suggest_assigneeA | Given a task ID, suggest the best agents to assign based on capability match, tag overlap, availability, and success rate. Returns ranked suggestions. |
| check_timeoutsA | Scan for overdue and failed tasks. Auto-retry failed tasks within max_retries, escalate exhausted tasks to escalate_to agent/human, release timed-out tasks. Use dry_run=true to preview actions without making changes. |
| log_usageA | Record token/cost usage for a task or agent. Stores structured usage records in the Usage/ folder. Optionally appends usage summary to the task's Agent Log. |
| get_usage_reportA | Aggregate token and cost usage across tasks, agents, projects, and time ranges. Returns totals and breakdowns by agent and model. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| task-worker | System prompt for an AI agent that finds, claims, and completes tasks from the vault's task queue. Use this when spawning a coding agent (Claude Code, Codex, etc.) that should work on tasks autonomously. |
| project-manager | System prompt for an AI agent that plans projects, decomposes them into tasks, and monitors progress across multiple worker agents. This agent creates work — it doesn't do the implementation. |
| vault-assistant | System prompt for an AI agent that helps manage an Obsidian vault — reading, writing, searching, and organizing notes. Does not handle tasks or projects. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 27 tools
Most tools target a distinct resource and action (notes, tasks, agents, usage, git), so boundaries are generally clear. Minor overlap exists between log_discovery/log_decision and manage_tags/update_note, but descriptions make the intended use recognizable.
The overwhelming majority of tools follow a clean verb_noun pattern (create_note, list_tasks, get_usage_report, complete_task). The exceptions are daily_note, git_sync, and wikilinks, which break the pattern but are still readable and predictable.
At 27 tools, this exceeds the 25-tool threshold and feels overloaded for a single MCP server. The server combines note management, task/project management, agent routing, usage tracking, and git operations, which would be better split into separate focused servers.
Notes have full CRUD plus search, tags, wikilinks, daily notes, and git sync, while tasks cover create, claim, update, complete, review, timeouts, and project rollups. Notable gaps include no get_task/delete_task, no update/delete_project, and no explicit agent deactivation, but agents can work around these.