MCP server for AI assistants to interact with Obsidian vaults
Obsidian MCP demonstrates solid foundational quality with consistent naming conventions (verb_noun pattern), comprehensive parameter descriptions, and well-structured schemas using Zod. All 10 tools follow the verb-first naming pattern (add-, create-, delete-, edit-, get-, list-). Descriptions are present and contextual (avg ~150 chars), exceeding the 10-char minimum. However, output schemas are not explicitly documented in the source code, responses are inferred from implementation rather than formally declared. Error handling exists but lacks recovery guidance (e.g., 'try search_users() first'). Tool composition is clean (single responsibility), but some tools could benefit from batch variants (e.g., add-tags accepts arrays but edit-note does not). Security is well-handled: no credentials in parameters, vault validation at initialization. Baseline: 549 production tools average 18-char names (this server: 10-20 chars, within p10-p90 range); 94% of A+ tools have docstrings (this server: 100% present but not LLM-optimized for all).
Add tags to notes in frontmatter and/or content. For best organization, use hierarchical tags with forward slashes (e.g., 'ml/training/supervised', 'project/docs/api') which create a collapsible tree structure in Obsidian's tag pane. Also supports hyphens and underscores. Examples: - Hierarchical tags: { "files": ["note.md"], "tags": ["ml/ops/training", "project/docs"] } - Add to frontmatter only: { "files": ["note.md"], "tags": ["data-processing"], "location": "frontmatter" } - Add to start of content: { "files": ["note.md"], "tags": ["type/meeting"], "location": "content", "position": "start" }
Create a new directory in the specified vault
Create a new note in the specified vault with markdown content. Examples: - Root note: { "vault": "vault1", "path": "note.md", "content": "..." } - Subfolder note: { "vault": "vault2", "path": "journal/2024/note.md", "content": "..." }
Delete a note, moving it to .trash by default or permanently deleting if specified
Edit an existing note in the specified vault. Supports appending, prepending, or replacing the entire note content. Examples: - Append: { "vault": "vault1", "path": "note.md", "operation": "append", "content": "new content" } - Prepend: { "vault": "vault1", "path": "note.md", "operation": "prepend", "content": "prepended text" } - Replace: { "vault": "vault2", "path": "journal/2024/note.md", "operation": "replace", "content": "replacement content" }
Output schemas not formally documented. Tool responses are inferred from implementation (e.g., add-tags, create-note) rather than explicitly declared in tool definitions. LLMs cannot reliably predict response structure for downstream chaining.
Error handling lacks recovery guidance. Errors are thrown (e.g., McpError in tool-factory.ts) but do not suggest next steps. E.g., 'Invalid vault' should suggest 'Call list-available-vaults() to see valid vault names.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Calculates the expected relative path for a daily note based on the Daily Notes core plugin settings (.obsidian/daily-notes.json). You can specify a date (ISO 8601 or YYYY-MM-DD) to get the path for that day, or omit it to get today's path. All dates are treated as local time for consistency with daily note usage. Examples: - Get today's path: { "vault": "my_vault" } - Get path for a specific date: { "vault": "my_vault", "date": "2024-06-01" } - ISO format: { "vault": "my_vault", "date": "2024-06-01T10:00:00Z" } (time ignored, date used as local)
Finds and lists all basic Markdown tasks (- [ ] or - [x]) within a specified note. Examples: - Get tasks from note: { "vault": "my_vault", "path": "todos.md" }
Lists all available vaults that can be used with other tools
List files and directories within a specified path in a vault. Defaults to the vault root if no path is provided. Examples: - List root: { "vault": "my_vault" } - List subfolder: { "vault": "my_vault", "path": "documents/projects" }
Lists non-Markdown files (like images, PDFs) in the vault or a specific folder.
Descriptions for discovery tools (list-available-vaults, list-directory, list-files) are minimal (<70 chars). Should explain what structure they reveal and when to call them first.
No batch variants for write operations. edit-note accepts single path; agents looping over multiple notes must call edit-note N times. Batch edit-note would reduce token waste and latency.
Destructive operations (delete-note with permanent=true) lack confirmation/dry-run pattern. Agents should be able to preview deletion before committing.