MCP server for MindLoop spaced repetition system, providing tools to search facts, track recall performance, create recall events, and manage review scheduling
Server has 5 tools with basic verb-noun naming and descriptions present. However, descriptions are generic (avg ~80 chars, below 194-char baseline), lack actionable context, and omit prerequisites/dependencies. Input schemas are present with types but lack depth, no enums for constrained values, no min/max for numeric params, no format specifications. Output schemas are completely undocumented. Error handling is minimal: backend errors return raw dicts with 'error' keys but no recovery guidance or categorization. No tool annotations (readOnlyHint/destructiveHint). Parameter descriptions are sparse. The server proxies to an external API but does not validate or transform responses, risking LLM confusion over unstructured backend output.
Create a recall event: the fact was remembered or not remembered. Returns the created event, including its ID needed for setting ease later if remembered=True.
See recall performance for a given fact (history of right/wrong recall + stats).
Get the top N facts that need to be reviewed based on recall probability.
Search for facts-to-memorize related to a search term. Facts are statements given in markdown, potentially including images.
Set the recall ease for a successful recall event (Again, Hard, Good, Easy). This should only be called for events where remembered was True.
Output schemas completely undocumented. Tools return raw dicts from backend API with no field descriptions, types, or structure guidance. LLMs cannot plan downstream calls or extract required IDs.
Tool descriptions lack actionable context. 'Search for facts-to-memorize related to a search term' does not explain when to use this vs get_facts_for_review, what fields are returned, or how to chain results to create_recall_event.
No input validation or enum constraints. set_recall_ease accepts ease as a string with enum in schema, but search_facts and get_facts_for_review accept free-form strings (search_term, count) with no bounds, format, or range guidance.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | <=2025-11-25 | v2 |
Error handling returns raw backend errors with no recovery guidance. call_backend() returns {'error': '...', 'details': '...'} but does not categorize as retryable/user-fixable/fatal or suggest next steps (e.g., 'Try search_facts() with a different term').
No tool annotations. create_recall_event and set_recall_ease are write operations but lack destructiveHint/idempotentHint. Agents cannot distinguish safe retries from irreversible side effects.