Personal agent-readable second brain — Postgres + pgvector + MCP
Cerebellum has 4 tools with clear naming and basic descriptions, but critical gaps in schema documentation, parameter descriptions, and error handling. The server provides minimal context about what parameters actually do and how tools compose. No visible input/output schema documentation in the source beyond basic type hints. Parameters lack range constraints, enum definitions, and detailed guidance. Error handling is absent, no recovery guides or categorized error responses visible. The tool set is coherent (semantic_search, list_recent, stats, capture) and verb-noun naming is correct, but parameter-level documentation and schema rigor fall well short of production baselines.
Save new insights directly from this session into the second brain
Browse recent captures with optional time and count filtering
Find past thoughts by semantic meaning using vector similarity search
Show thinking patterns including total thoughts, breakdown by type, top topics, and top people mentioned
Parameter schemas lack descriptions and type constraints. 'limit' appears in multiple tools but has no range documented (e.g., min=1, max=100); 'query' and 'content' strings have no length or format guidance; 'type' enum in capture is listed as 'optional' without describing the 7 allowed values or defaults.
Output schemas are not documented. No visible schema declaration for what semantic_search, list_recent, stats, or capture return. LLMs cannot plan downstream tool calls or extract structured data without knowing response field names and types.
Error handling is absent. Tools reference error cases (e.g., 'limit' defaults suggest overflow risk; 'capture' can fail on invalid type) but provide no recovery guidance, error classification, or actionable error messages visible in the code.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 49 | - | v1 |
Parameter relationships are undocumented. capture's 'type' is optional with 7 possible values, but there is no description of what each type means, when to use each, or what happens when type is omitted. Mutual exclusivity and defaults are not stated.
Pagination and result limits not specified. list_recent accepts 'limit' with default 20, and semantic_search accepts 'limit' with default 10, but no max limit, cursor support, or total count documentation visible. Large results can blow context windows.
Composition risk: tools return data but no visible documentation of what IDs/references they return. If semantic_search or list_recent return a 'thought_id', does capture accept 'thought_id' as a parameter to link captures? Tool chaining requires clear field naming across boundaries.
Capture's 'type' enum is partially inferred (observation, task, idea, reference, people, preference, veto mentioned in description) but not formally constrained as an enum in the visible schema. LLMs may hallucinate invalid types.