Offline MCP server and dataset: 78 tarot cards with love and relationship meanings in 22 languages. CC BY 4.0.
Three well-named, verb-led tools with complete input schemas and clear descriptions. All parameters are typed and described. Tool names (search_tarot_cards, get_tarot_card_love_meaning, draw_tarot_cards) follow verb_noun convention and are unambiguous. Descriptions range 120 - 180 chars, within the 10 - 1024 baseline. All 3 tools have documented input schemas with proper JSON Schema structure. Parameters include enums (language), constraints (count: 1 - 10), and clear descriptions. Error handling is present (invalid slug, empty query) with actionable guidance. Main gaps: output schemas are not formally documented in the tool definitions (only visible in code comments), and no explicit per-tool permission/scope declarations. Composition is clean, each tool has one responsibility, and search_tarot_cards output (slugs) chains directly into get_tarot_card_love_meaning input.
Draw cards at random from the full deck without replacement, each with a ~30% chance of landing reversed, and return what they mean for love. Use this for an actual reading rather than a lookup.
What one tarot card means for love and relationships: upright, reversed, its yes/no leaning, arcana, suit and element. Returns markdown.
Search the 78-card Rider-Waite-Smith deck by name, in English or any supported language, and return the slugs the other tools take. Use this first when you only have a card name.
Output schemas not formally documented in tool definitions. LLMs cannot see what fields are returned (e.g., draw_tarot_cards returns markdown with card names, yes/no verdicts, URLs, but this is only visible in code comments, not in the tool schema).
No explicit permission/scope declarations. Tools are read-only (marked in Risk field), but this is not exposed in the tool definition for agent permission configuration.
draw_tarot_cards description does not mention that it draws without replacement (same card cannot appear twice). This is a critical behavior detail that should be in the description, not just code comments.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
Error messages in code (e.g., 'No card with slug...') are actionable, but error response structure is not formally defined. LLMs need to know the shape of error responses (isError flag, content structure).