MCP server for Magic: The Gathering — Scryfall card data and EDHREC Commander suggestions
Server has 5 well-named tools with clear verb-noun patterns (get_*, search_*, list_). All tools have descriptions (avg 180 chars, within 10-1024 baseline). Input schemas are present with type definitions and parameter descriptions. However, output schemas are NOT documented, LLMs cannot predict return structure. Error handling returns error dicts but lacks recovery guidance (e.g., 'Try search_cards() first'). No tool annotations (readOnlyHint, idempotentHint). Parameter descriptions are adequate but some lack format/constraint details (e.g., 'theme' accepts 'slug' but no examples of valid slugs provided). Overall: solid foundation, but missing output documentation and error recovery patterns.
The typical ~99-card EDHREC decklist for a Commander. Optional `theme` (theme slug) and `budget` ('budget'/'expensive') narrow it.
Look up a Magic card by name (exact, falling back to fuzzy match). Returns oracle text, mana cost, type line, color identity, Commander legality, USD price, image URL and set.
EDHREC card recommendations for a Commander. Optional `theme` is a theme slug from list_commander_themes (e.g. 'infect'). Optional `budget` is 'budget' or 'expensive'. Returns card lists (top cards, high-synergy cards, game changers, by type) with synergy and inclusion stats.
List EDHREC themes/archetypes available for a Commander, with deck counts.
Search for Magic cards using Scryfall query syntax. Example queries: 't:dragon c:r cmc<=4', 'o:"draw a card" t:instant'.
Output schemas not documented. LLMs cannot predict return structure (e.g., what fields are in a card object, what does cardlists contain). This forces agents to guess and wastes tokens on exploration.
Error responses lack recovery guidance. When CardNotFoundError or CommanderNotFoundError occurs, the error dict returns a message but does not suggest next steps (e.g., 'Try search_cards() with a partial name' or 'Call list_commander_themes() to see available commanders').
No tool annotations. All tools are read-only (safe to retry, no side effects), but this is not declared via readOnlyHint. LLMs cannot infer safety without explicit annotation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Parameter 'theme' in get_commander_recommendations and get_average_decklist lacks concrete examples or enum of valid theme slugs. Description says 'e.g. infect' but LLMs may hallucinate invalid slugs. Should reference list_commander_themes or provide enum.
search_cards 'limit' parameter has no min/max bounds documented. Unbounded integers can cause LLMs to pass absurd values (e.g., limit=999999) that waste API quota or timeout.