An MCP server for managing flashcards in Mochi, enabling creation, retrieval, updating, and deletion of cards and deck management through the Mochi API.
The server exposes 5 Mochi API tools with complete input schemas and basic descriptions. Tool naming follows verb-noun conventions (list_decks, create_card, get_card, update_card, delete_card), which is solid. However, descriptions are minimal (1-2 sentences, mostly around 50-70 chars), parameter descriptions are largely missing from docstrings, output schemas are undocumented (tools return unstructured string responses rather than typed objects), and error handling is generic ('Error creating card: ...' with no recovery guidance). The parameter annotations visible in the schema itself are good (e.g., deck_id has description 'The ID of the deck to add the card to'), but docstrings lack any parameter documentation. All tools return plain strings, forcing LLMs to parse unstructured output. No output schema is declared. Error responses do not guide the agent on retryability or next steps.
Create a new card in a Mochi deck.
Delete a Mochi card permanently.
Get details of a specific Mochi card.
List all decks in your Mochi account.
Update an existing Mochi card.
Output schemas are undocumented. All tools return plain string responses rather than structured JSON with typed fields. LLMs must parse unstructured text, risking misinterpretation and wasting tokens. [Baseline: 100% of A+ tools have documented return types]
Tool descriptions are minimal (1-2 sentences, ~50-70 chars). Baseline for A+ tools is 194 chars (p10=34, p90=392). Current descriptions lack context on WHEN to use each tool, what prerequisites exist, or how this tool differs from similar ones.
Docstrings lack parameter descriptions. While JSON schema includes parameter descriptions (e.g., 'The ID of the deck to add the card to'), the Python docstrings do not repeat these. Baseline: 100% of A+ tool params have descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 52 | - | v1 |
Error responses are generic and non-actionable. E.g., 'Error creating card: Connection timeout' does not tell the LLM whether to retry, ask the user, or abort. Baseline pattern: errors must categorize as retryable, user-fixable, or fatal, and include recovery guidance.
No result limits or pagination guidance in tool descriptions. mochi_list_decks does support pagination (via bookmark), but the description does not state whether results are capped, what the typical deck count is, or when to expect a next bookmark. Baseline: cap results at 20-50 items and state the limit in the description.
mochi_delete_card has no confirmation or dry-run option. Agents can permanently delete cards in one call with no undo. Irreversible operations should support a confirm pattern or explicit user approval step.
mochi_list_decks returns unstructured string 'ID: ...' blocks. No structured format means the LLM cannot extract deck IDs reliably for follow-on calls (e.g., create_card with a specific deck_id).