An MCP server for managing D&D game sessions with character creation, rule lookups, and dice rolling capabilities. Includes both Python Lambda and TypeScript HTTP client implementations.
Four tools with basic descriptions but significant schema and parameter documentation gaps. Tool names follow verb_noun convention (askRuleExpert, createCharacter, getCharacterByName, diceRoll), which is good. However, parameter descriptions are minimal or absent, input schemas lack required field declarations and type constraints, and output schemas are completely undocumented. No error handling guidance, no pagination support for list operations, and no indication of idempotency or side effects. The server exposes game state mutations (createCharacter) without confirmation patterns or rollback guidance.
Call an agent expert in the rules and lore of the game. Refer to the agent expert for game mechanics, anything about the universe, campaign creation and more to make a decision about the game.
Create a new character and store it in DynamoDB.
Roll one or more D&D dice and return the results and total.
Retrieve a character all the information about a character by name.
Output schemas completely undocumented. No tool specifies what fields are returned, their types, or structure. LLMs cannot plan downstream calls or extract required data.
Input parameter descriptions missing or trivial. 'query' in askRuleExpert has no guidance on format or scope. 'dice_type' in diceRoll lacks constraint documentation (e.g., valid values: d4, d6, d8, d10, d12, d20, d100).
No 'required' field in input schemas. JSON Schema properties are defined but required array is absent or empty, leaving LLMs uncertain which parameters are mandatory.
createCharacter lacks confirmation or dry-run pattern. Irreversible state mutation (writing to DynamoDB) has no rollback guidance or pre-execution confirmation step.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | <=2025-11-25 | v2 |
No error handling guidance. Tools do not document what errors are possible, whether they are retryable, or what the LLM should do next (e.g., 'Character already exists. Try getCharacterByName() first.').