MCP/REST server for Obsidian vault management with semantic search and knowledge graph
The server provides 11 tools with good naming conventions (all start with action verbs: list_, get_, search_, execute_). Descriptions are present for all tools and most are substantive (100-200 chars), meeting the 10-1024 character guideline. However, there are critical gaps in schema completeness and parameter descriptions. All tools have input schemas defined with proper type information (object with typed fields), but parameter descriptions vary significantly in quality. Output schemas are documented in code but not explicitly exposed to clients. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present despite the spec supporting them since 2025. Error handling is minimal, no recovery guidance, no actionable error messages, and no indication of retryable vs fatal errors. All tools are read-only (which reduces risk), but the lack of error patterns and output documentation limits LLM reasoning quality.
Execute a SQL query against a table (SELECT only).
Get documents that link to a specific document.
Get the document graph around a document.
Get a document by path or ID.
Get a specific row from a table.
Get a table's schema and details.
List documents in a vault.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being read-only. Current spec (2026-07-28) supports and recommends these for safety and LLM planning.
Output schemas are documented in Python docstrings but not formally exposed in MCP response schema. LLMs cannot discover what fields to expect without reading implementation details.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 53 | - | v1 |
List rows in a table with optional filtering and sorting.
List all tables in a vault.
List all vaults for the authenticated user.
Search documents using semantic or full-text search.
No error handling or recovery guidance. Tools return raw use_case results with no structured error responses. LLMs receive no indication whether failures are retryable, user-fixable, or fatal.
Parameter descriptions in schema lack actionable detail. 'The vault slug' provides no guidance on format, length, or allowed characters. Should be: 'The vault slug (2-50 lowercase letters, hyphens, underscores)' for LLM clarity.
Pagination implemented (limit/offset) but no total_count or next_cursor returned. list_documents, list_tables, list_rows omit result totals, forcing LLMs to guess whether more results exist.
search_documents accepts both 'path' and 'document_id' as alternatives, but no validation or mutual exclusion logic visible. Unclear what happens if both are provided.