Zero-dependency MCP server for Obsidian vaults. Direct filesystem access — no Obsidian process or REST API plugin needed.
Server provides 22 tools with complete JSON Schema input definitions and descriptions for all tools and parameters. Naming follows verb_noun convention (search, file, str, heading, block, frontmatter, apply, bulk, regex, lines). However, descriptions are terse (10-50 chars, well below the 194-char baseline), lack context on WHEN to use each tool, and omit guidance on state modification consequences. Parameter descriptions are minimal. Output schemas are not documented. Error handling is present but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification (READ_ONLY, WRITE, REVERSIBLE, DESTRUCTIVE). Composition is strong, tools are single-responsibility and chainable via vault parameter.
Apply multiple edits to a file
Apply a unified diff patch to a file
Rename a block ID
Replace a block (code block, list, etc.) by ID
Apply multiple operations to multiple files in bulk
Append content to the end of a file
Create a new markdown file
Delete a file (moves to trash)
List files in a directory
Descriptions are uniformly terse (10-50 chars vs 194-char baseline). Lack context on WHEN to use each tool, prerequisites, and state-modification consequences. LLMs cannot distinguish between similar tools (e.g., str.replace vs lines.replace vs apply.edits) without richer guidance.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification in metadata (READ_ONLY, WRITE, REVERSIBLE, DESTRUCTIVE). LLMs cannot infer safety properties and may misuse destructive tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Move or rename a file
Read the full content of a markdown file
Replace the entire content of a file
Delete a frontmatter field
Set a frontmatter field
Rename a heading
Replace the body content of a heading section
Insert lines at a specific line number
Replace lines in a file by line number range
Replace text using regular expressions
Search markdown file content by query term
Replace a substring in a file
Get vault metadata and statistics
Output schemas are not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does search.content return? Is it a list of matches with line numbers, file paths, and snippets?). Breaks tool chaining.
Error handling is present but lacks recovery guidance. No indication of which errors are retryable, user-fixable, or fatal. No suggestions for alternative tools or corrective actions.
Parameter descriptions are minimal (10-30 chars). 'Vault name (optional, uses default if omitted)' is the only substantive param description; others like 'Search term to find in file content' lack format/constraint guidance. LLMs cannot validate inputs before calling.