MCP server that generates Anki decks (.apkg) from arbitrary data. Supports multiple card types (basic, reversed, cloze, typing) with optional text-to-speech (TTS) for English learning.
Server has 2 tools with clear verb-based names (create_deck, list_card_types) and reasonable descriptions (194 and 156 chars respectively). create_deck has a detailed input schema with types, enums, and descriptions for most parameters. However, parameter descriptions lack actionable constraints (e.g., no format specs for deck_name, no byte limits stated in schema despite code having _ANKI_FIELD_MAX). Output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance. Security is strong (path validation, HTML sanitization, no secrets in params), but composition could be tighter (create_deck does too much: validation, sanitization, model selection, file generation).
Create an Anki deck from a list of cards. Supports multiple card types (basic, reversed, cloze, typing) with optional TTS. Returns the path to the generated .apkg file.
List all available card types and their descriptions. Returns information about basic, reversed, cloze, typing, and TTS-enabled variants.
Output schemas not documented. LLMs cannot predict response structure (e.g., does create_deck return {path, deck_id, card_count} or just a string path?). Agents cannot chain results to downstream tools.
Parameter descriptions lack actionable constraints. 'deck_name' has no length/character limits; 'cards' array has no size bounds despite code enforcing _ANKI_CARD_LIMIT (5000). LLMs will pass invalid values without guidance.
create_deck combines multiple responsibilities: validation, sanitization, model selection, and file generation. Should split into separate tools (e.g., validate_cards, generate_deck) for composability.
Error handling is absent. No recovery guidance in code. If sanitization fails, card limit exceeded, or output path is invalid, LLMs receive no actionable error message.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
list_card_types has empty input schema ({}). No parameters documented, but description claims it returns 'information about basic, reversed, cloze, typing, and TTS-enabled variants', output structure is undefined.