MCP server for Obsidian vault integration, providing tools to read, search, and manage notes with frontmatter, tags, backlinks, and content patching capabilities
Server has 7 tools with basic naming (verb_noun pattern) and descriptions present. However, critical gaps undermine quality: parameter descriptions are minimal or absent (e.g., 'updates' in update_frontmatter lacks format guidance), no output schemas documented, no error recovery guidance, and no tool annotations (readOnlyHint/destructiveHint). Schemas visible in test file but lack depth, no enums for constrained inputs (e.g., 'action' in manage_tags should be enum ['add','remove']), no min/max bounds, no format specifications. Error handling exists but does not guide LLM recovery. Security: path traversal validation present (good), but no permission gates or audit trail patterns. Composition: tools are single-responsibility and chainable (good), but output structure not documented for downstream tool calls.
Delete a note by moving it to trash or permanently deleting it
Get all backlinks (references) to a note
Extract frontmatter and body from a note
List all tags in the vault with their occurrence counts
Add or remove tags from a note in frontmatter or inline
Patch note content by replacing or inserting text at specific headings
Update frontmatter fields in a note
No output schemas documented. LLMs cannot infer response structure for downstream tool chaining. E.g., get_frontmatter returns {frontmatter, body} but this is inferred from test code, not declared in tool definition.
Constrained parameters lack enums. 'action' in manage_tags accepts 'add'|'remove' but is free-form string; 'location' accepts 'frontmatter'|'inline' but no enum constraint. LLMs will hallucinate invalid values.
Parameter descriptions are minimal or missing format guidance. 'updates' in update_frontmatter says 'JSON object' but does not specify structure, required fields, or examples. 'position' in patch_note lacks explanation of what 'replace_body', 'before', 'after' mean in context.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | <=2025-11-25 | v2 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). delete_note is destructive but unmarked; get_frontmatter is read-only but unmarked. LLMs cannot infer safety/retry semantics.
Error responses do not guide recovery. Tests show error detection (e.g., path traversal, missing params) but no actionable error messages. E.g., 'path traversal detected' should suggest 'Use relative paths within vault root (e.g., Notes/file.md)'.