MCP server providing AI agents with searchable access to an Obsidian vault
Cognitive-cortex provides 5 well-named tools with clear verb-noun patterns (vault_search, vault_read, vault_list, vault_write, vault_status). All tools have descriptions (avg ~100 chars) and documented parameters with types. However, output schemas are not explicitly documented, responses are JSON strings without declared field structures. Error handling returns JSON with 'error' and 'suggestion' fields, which is helpful but inconsistent across tools. Parameter descriptions are adequate but lack constraint details (e.g., vault_search limit says '1-50, default 10' but no enum; vault_write mode lacks enum for 'create|append|prepend'). The vault_write tool accepts a 'mode' parameter with no enum constraint, inviting hallucinated values. No tool annotations (readOnlyHint, destructiveHint) are present despite clear risk profiles (vault_write is WRITE, others are READ_ONLY).
List files and subdirectories in the vault.
Read a file's content from the vault. Always reads fresh from disk.
Search the vault using hybrid semantic + keyword matching with optional filters.
Return system status and configuration information.
Create, append to, or prepend to a file within a configured write zone.
Output schemas not documented. Tools return JSON strings but field structures are not declared. LLMs cannot plan downstream calls or extract specific fields reliably.
vault_write 'mode' parameter lacks enum constraint. Description says 'create, append, or prepend' but no formal enum. LLMs may hallucinate invalid modes like 'overwrite' or 'replace'.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). vault_write is destructive but unmarked; vault_search, vault_read, vault_list are read-only but unmarked. Agents cannot infer safety profiles.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
vault_search limit parameter lacks explicit enum or range constraint in schema. Description mentions '1-50, default 10' but no JSON Schema minValue/maxValue. Code enforces it, but LLM cannot see the constraint.
Error responses are inconsistent. Some tools return JSON with 'error' + 'suggestion' fields; others may return raw exception strings. No error classification (retryable vs fatal) to guide agent recovery.