MCP server for managing flashcard decks and cards in the Owl spaced repetition system
Owl MCP has well-structured tool definitions with consistent naming (verb_noun pattern: get-, create-, update-, delete-, set-) and comprehensive parameter descriptions. All 11 tools have descriptions and input schemas with typed parameters. However, output schemas are not documented in the source code, parameter descriptions lack actionable constraints (e.g., no enum values for card types despite them being constrained), and error handling guidance is minimal. Tool descriptions are adequate (50-150 chars) but could be more prescriptive about when to use each tool vs. alternatives. The server demonstrates solid fundamentals but lacks production-grade polish in schema completeness and error recovery patterns.
Create a new card in a specific deck
Create multiple cards in a specific deck
Create a new deck with optional cards
Delete a card from a specific deck. This action cannot be undone so ALWAYS ASK THE USER FOR CONFIRMATION BEFORE PROCEEDING WITH DELETION.
Delete a deck and all its cards. This action cannot be undone so ALWAYS ASK THE USER FOR CONFIRMATION BEFORE PROCEEDING WITH DELETION.
Edit an existing card in a specific deck.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'Get a page of decks') but the actual response structure is not visible in source code. LLMs cannot plan downstream tool calls without knowing which fields to extract.
Card type parameter ('BasicCard', 'ClozeCard') is constrained via enum in schema but description does not explain the difference or when to use each. LLMs may pick the wrong type without guidance.
Pagination parameters (page, per_page, sort) in get-decks lack numeric bounds. Description says 'Do NOT set this unless...' but does not specify valid ranges (e.g., page >= 1, per_page 1-100). Unbounded numbers risk API errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Get a list of cards from a specific deck.
Get a page of decks from the user's account.
Archive or unarchive a card. If archiving, let the user know that this card will no longer appear in future study sessions.
Archive or unarchive a deck. If archiving, let the user know that none of the cards in this deck will appear in future study sessions.
Update an existing deck's properties.
Destructive operations (delete-deck, delete-card) have confirmation warnings in descriptions but no dry-run or explicit confirmation step in the tool interface. Agents may execute deletions without a safety gate.
Error handling not visible in source. No evidence of recovery guidance (e.g., 'deck not found, try get-decks() first'). OwlError class exists but error messages are not shown in tool implementations.