Unofficial MCP server for Obsidian — let Claude read and write your vault locally
Server has 10 tools with basic descriptions and parameter schemas, but significant gaps prevent higher scores. All tools have descriptions (10-150 chars, mostly adequate), and parameters include type info. However, output schemas are entirely undocumented, LLMs cannot predict return structure. Error handling is minimal (no recovery guidance, no categorization). No tool annotations (readOnlyHint/destructiveHint). Parameter descriptions lack constraints (e.g., date format, folder path rules). No pagination support despite list_notes and search_notes returning potentially large result sets. Naming is clear and verb-based, which is a strength.
Append content to the end of an existing note.
Create a new note in the vault. - title: Note title (becomes filename) - content: Markdown content - folder: Optional subfolder path (e.g. 'Projects/Work')
Find all notes that link to a given note using [[wiki-links]].
Get or create a daily note. - date: YYYY-MM-DD format (default: today)
Get the full content of a note by its path (e.g. 'folder/note.md').
Get the most recently modified notes.
List all notes in the vault or a specific folder. - folder: Optional subfolder to list (empty = entire vault)
No output schemas documented. LLMs cannot predict return structure (fields, types, nesting). Tools return free-text strings instead of structured JSON objects.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes without explicit hints.
No pagination support. list_notes and search_notes return unbounded results; large vaults will blow context windows. Missing limit/offset parameters and total_count in responses.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Find all notes that contain a specific tag (e.g. 'work', 'todo').
Search notes by content. Returns matching notes with excerpts.
Replace the entire content of a note.
Parameter descriptions lack format constraints. 'date' param in get_daily_note says 'YYYY-MM-DD format' but no validation or error guidance if LLM passes wrong format.
Error handling returns generic strings with no recovery guidance. 'No notes found' gives LLM no hint whether to retry, adjust query, or try a different tool.