MCP server for accessing Obsidian vault notes stored in CouchDB with encryption and compression support
Scribe-MCP demonstrates solid fundamentals: all 6 tools have clear verb-noun naming (vault_list, vault_read, vault_write, vault_delete, vault_search, vault_status), descriptions between 50 - 100 chars, and Zod-based input schemas with parameter descriptions. Tool annotations (readOnlyHint, destructiveHint) are present and correct. However, output schemas are not documented, responses are returned as JSON text blobs without formal schema declarations. Error handling is basic (try-catch with generic error messages) and lacks recovery guidance. Parameter descriptions are minimal (e.g., 'Note path, e.g. Projects/scribe/ideas.md' lacks format constraints). The vault_search tool accepts max_results with a default of 20, which is good, but no pagination cursor or total count is returned. Overall, the server is functional and well-named but lacks the polish and LLM-optimization of A-grade tools.
Delete a note from the Obsidian vault.
List notes in the Obsidian vault. Optionally filter by folder path or glob pattern.
Read a note's content from the Obsidian vault.
Full-text search across all notes in the vault.
Get vault overview: document count, folder list, encryption/compression status.
Create or update a note in the Obsidian vault. Content is plain text (markdown).
Output schemas not documented. Tools return JSON text blobs without formal schema declarations. LLMs cannot reliably parse or chain results.
Error messages lack recovery guidance. Generic 'Error: <message>' responses do not tell the LLM what to do next or whether to retry.
Parameter descriptions lack format constraints. 'Note path, e.g. Projects/scribe/ideas.md' does not specify allowed characters, length limits, or path traversal rules.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
vault_status has no input schema defined. The tool is registered without an inputSchema property, making it impossible for clients to validate calls.
No pagination metadata returned. vault_search returns results but no total count, next_cursor, or has_more flag, limiting LLM ability to iterate large result sets.