AI memory service for Claude Code — on-demand context injection with metacognition
ccRecall demonstrates solid tool design with complete input schemas, clear descriptions, and thoughtful parameter documentation. All three tools (recall_query, recall_save, recall_context) have well-structured Zod schemas with type constraints and detailed descriptions. The recall_save tool shows sophisticated design with enum-constrained memory types, confidence scoring, and origin tracking. However, output schemas are not explicitly documented in the visible code, responses are formatted as text results rather than structured objects. Error handling returns text-wrapped errors but lacks recovery guidance or error classification. Tool names follow verb_noun convention appropriately. Parameter descriptions are comprehensive (averaging 150+ chars), exceeding the 72-char baseline, with explicit constraints on projectId format and token budgets.
Retrieve relevant memories organized by topic with knowledge depth inference
Search past decisions, discoveries, and patterns using FTS5 full-text search
Save a memory (fact or insight) for later retrieval
Output schemas not documented. Tools return text-wrapped results (McpTextResult) but no structured schema is declared for LLM consumption. LLMs cannot plan downstream calls or extract typed fields.
Error responses lack recovery guidance. textError() returns bare error messages without actionable next steps. E.g., 'Error querying memories: ...' does not tell the LLM whether to retry, call a different tool, or ask the user.
recall_context parameter 'keywords' is an array but lacks guidance on cardinality, ordering, or how results are grouped by topic. Description says 'candidate topic keywords' but does not explain how many to provide or whether order matters.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 72 | 2026-07-28+ | v2 |
No pagination or result limiting for recall_context. The tool accepts memoryLimit per topic but does not document total result cardinality or whether results are paginated. Large keyword sets could return unbounded output.
recall_save's 'origin' parameter defaults to 'explicit' but the description is dense and assumes knowledge of post-session extraction workflows. Simpler agents may not understand when to set 'agent-inferred'.