An Anki MCP server that provides tools for interacting with Anki flashcard collections via the MCP protocol
The Anki MCP server has clearly defined tools with action-verb naming and present descriptions, but significant gaps undermine production readiness. All 7 tools are explicitly registered with names and descriptions. However, parameter documentation is sparse, most tools lack detailed parameter descriptions beyond type/default. Input schemas are visible for all tools, but descriptions for individual parameters are minimal or absent. Output schemas are not documented in the source code. The tool descriptions themselves are adequate (10-100 chars) but underdeveloped for LLM selection logic. No error handling guidance, no recovery suggestions, and no per-tool risk annotations visible in the code. The server addresses a narrow domain (Anki operations) and does not demonstrate the comprehensive patterns needed for A-grade production tools.
Add new notes or update existing ones in Anki
Find card IDs matching a query in Anki
Find notes matching a query in Anki
Get comprehensive information about the Anki collection including decks, models, and fields
Get review statistics from Anki showing cards reviewed per day, with optional time range filtering
Suspend cards by their card IDs
Unsuspend cards by their card IDs
No output schema documentation. Tools like get-collection-overview and get-review-stats return data structures that are not documented in the source code. LLMs cannot plan downstream tool chains or extract specific fields without knowing the response shape.
Parameter descriptions are minimal or missing. 'time_range' in get-review-stats has a description, but many other parameters (like 'query' in find-notes and find-cards) lack detail about format, constraints, or expected Anki query syntax. LLMs cannot reliably construct valid queries without guidance.
No error handling or recovery guidance. Tools have no documented error conditions, retryable states, or remediation steps. If a query fails or a card update conflicts, the LLM has no guidance on how to recover.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 38 | - | v1 |
Tool 'add-or-update-notes' combines two concerns (create and update). While the name is technically clear, the LLM must reason about whether to use 'id: null' vs populating 'id' to trigger the correct branch. Consider splitting into separate 'create-notes' and 'update-notes' tools for clearer intent.
No pagination or result-limit enforcement visible in find-notes or find-cards. The 'limit' parameter exists (default 20 and 100 respectively) but there is no documentation of pagination cursors, total counts, or guidance on expected result sizes.
Missing tool annotations for write operations. Tools like 'add-or-update-notes', 'suspend-cards', and 'unsuspend-cards' modify state but lack explicit destructiveHint or idempotentHint annotations in the registration code. LLMs should know which tools are safe to retry.