MCP server for controlling and interacting with Obsidian vaults via the Obsidian Local REST API
Server has 12 tools with complete schemas and descriptions, but quality is inconsistent. Naming follows verb_noun convention well (list_, get_, search_, append_, patch_, delete_). Descriptions are present but often generic (avg ~100 chars, below 194-char baseline). Parameter descriptions are minimal, many lack context on format, constraints, or when to use. No output schemas documented. Error handling is basic (RuntimeError for missing args, no recovery guidance). No tool annotations (readOnlyHint/destructiveHint). STDIO transport caps protocol score at 50.
Append content to a new or existing file in the vault.
Get contents of multiple files and concatenate them with headers.
Advanced search using JSON Logic query syntax for complex filtering across vault files.
Delete a file or directory from the vault.
Return the content of a single file in your vault.
Get current periodic note for the specified period (daily, weekly, monthly, quarterly, yearly).
No output schemas documented. LLMs cannot predict response structure or plan downstream tool calls. Tools return JSON-stringified text, not structured objects.
Missing tool annotations (readOnlyHint, destructiveHint). Agents cannot distinguish safe reads from destructive writes without reading descriptions. obsidian_delete_file should be marked destructive.
Error handling is minimal. Tools raise RuntimeError for missing args but provide no recovery guidance. obsidian_complex_search accepts 'query' as object but lacks validation or error messages for malformed JSON Logic.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | <=2025-11-25 | v2 |
Get recently modified files in the vault.
Get most recent periodic notes for the specified period type.
Lists all files and directories that exist in a specific Obsidian directory.
Lists all files and directories in the root directory of your Obsidian vault.
Insert content into an existing note relative to a heading, block reference, or frontmatter field.
Simple search for documents matching a specified text query across all files in the vault. Use this tool when you want to do a simple text search
Parameter descriptions lack actionable constraints. obsidian_simple_search 'context_length' has no min/max bounds. obsidian_patch_content 'target' lacks examples of heading paths or block references.
obsidian_complex_search description is vague ('Advanced search using JSON Logic query syntax'). No guidance on when to use vs obsidian_simple_search, or what JSON Logic syntax is supported.