A Model Context Protocol (MCP) server for D&D 5e information, providing access to monsters, spells, classes, equipment, races, and other D&D game data via the D&D 5e API
Severe quality issues across the board. 16 tools listed but only 4 have complete, well-formed schemas (search_equipment_by_cost, filter_spells_by_level, find_monsters_by_challenge_rating, get_class_starting_equipment). The remaining 12 tools are either duplicates (query_monster, get_spell, get_class, search_api appear 2-3 times each), archived/dead code (Archive/ directory), or trivial (hello). Descriptions vary wildly: some are detailed (search_equipment_by_cost: 180 chars), others are bare stubs (get_class_starting_equipment: 35 chars, get_equipment: 35 chars). Parameter descriptions are inconsistent, some tools lack descriptions entirely (list_monster_types has empty input {}). No output schemas documented. No error handling guidance. Tool composition is broken: duplicate tool names will cause registration conflicts. The codebase shows abandoned patterns (Archive/ folder with old implementations) mixed with current code, suggesting incomplete refactoring.
Find D&D spells within a specific level range and optionally from a particular magic school. This tool is useful for spellcasters looking for spells they can cast at their current level, or for finding appropriate spells for NPCs, scrolls, or other magical items. Results include spell names, levels, schools, and basic casting information.
Find D&D monsters within a specific challenge rating (CR) range for encounter building. This tool helps Dungeon Masters find appropriate monsters for encounters based on party level and desired difficulty. Results include monster names, challenge ratings, types, and basic stats. Challenge ratings indicate a monster's relative threat level: - CR 0-4: Low-level threats suitable for parties of levels 1-4 - CR 5-10: Mid-level threats suitable for parties of levels 5-10 - CR 11-16: High-level threats suitable for parties of levels 11-16 - CR 17+: Epic threats suitable for parties of levels 17+
Get information about a D&D character class
Get information about a D&D character class.
Get starting equipment for a character class.
Duplicate tool registrations: query_monster, get_spell, get_class, and search_api are defined 2-3 times across Archive/ and src/core/tools.py. This will cause registration conflicts and undefined behavior.
Descriptions under 20 characters for 6 tools (get_class_starting_equipment: 35 chars, get_equipment: 35 chars, get_race: 30 chars, list_monster_types: 35 chars, hello: 11 chars). LLMs cannot determine when to select these tools. Descriptions must explain WHAT, WHEN, and WHY.
list_monster_types has empty input schema ({}). No parameters documented. Unclear what the tool returns or how to use it. Output schema is not documented for any tool.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | <=2025-11-25 | v2 |
Get information about D&D equipment.
Get information about a D&D race.
Get detailed information about a D&D spell
Get detailed information about a D&D spell.
Say hello
List all available monster types in D&D 5e.
Get information about a D&D monster
Get information about a D&D monster.
Search the D&D API for specific content
Search the D&D API for specific content.
Search for D&D equipment items that cost less than or equal to a specified maximum price. This tool helps find affordable equipment options for character creation or in-game purchases. Results include item details such as name, cost, weight, and category.
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields. Tools like search_api and query_monster return unstructured responses with no field documentation.
No error handling guidance. Tools do not document what happens on failure (e.g., monster not found, invalid spell level). No recovery paths or actionable error messages for LLMs.