Simple Dice Roller MCP Server - Provides comprehensive dice rolling functionality for games and simulations
This dice roller provides 7 well-intentioned tools with reasonable descriptions and functional implementations. However, the server has critical schema and parameter documentation gaps that would prevent reliable LLM invocation in production. All tools use string parameters instead of proper typed inputs (int, float), descriptions lack depth about when to use each tool vs. alternatives, and output schemas are entirely undocumented. The naming is clear and action-oriented (roll_*, flip_*), but parameter descriptions are minimal, e.g., 'count' lacks range constraints and 'sides' doesn't specify the 2-1000 boundary. Error handling is present but generic ('Error: Invalid input'). The server is functional but falls short of production-grade agentic tool standards.
Flip one or more coins and show results as heads or tails.
Roll a d20 with advantage (roll twice, take higher) with optional modifier.
Make a skill check against a DC with a d20 roll plus modifier.
Roll custom dice with any number of sides.
Roll dice using standard notation like 1d20, 2d6+3, 3d8-2, etc.
Roll a d20 with disadvantage (roll twice, take lower) with optional modifier.
Roll D&D ability scores using 4d6 drop lowest method for all six stats.
All parameters are typed as 'string' instead of proper types (int, float). LLMs cannot validate numeric inputs at the schema level and may pass '1d20abc' to roll_dice without detection. The schema declares 'type: string' for numeric-only parameters like 'count', 'sides', 'modifier', and 'dc'.
No output schema documented. Tools return free-text formatted strings (e.g., '🎲 Rolled: 2 + 3 + 1 = **6**') but LLMs have no way to extract structured data. If a downstream tool needed the roll total as a number or the individual rolls as an array, the LLM would have to parse emoji-laden text, error-prone and wasteful.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 14 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 40 | - | v1 |
Parameter descriptions lack actionable constraints. 'count' description says 'Number of coins to flip (default 1)' but does not mention the 100-coin limit enforced in code. 'sides' lacks the 2-1000 range. 'notation' describes format but not what happens if format is invalid.
Tool descriptions are 50-75 characters, below the 100+ baseline for production tools. 'Roll custom dice with any number of sides' lacks context: When should an LLM call this vs. roll_dice? roll_custom(sides=20, count=1) vs. roll_dice(notation='1d20') produce the same result, the descriptions don't explain the semantic difference or recommend one over the other.
Error messages are generic and do not guide recovery. 'Error: Invalid count: 1d20' tells an LLM nothing useful.
No parameter defaults with side-effect warnings. 'roll_dice' defaults to '1d20' and 'flip_coin' defaults to '1', safe choices. The current descriptions do not warn that omitting 'notation' in roll_dice auto-selects a d20.
No composability hints. Tools return formatted text but do not indicate which outputs could feed into other tools or downstream systems. If an agent needs to perform a roll, then use the result in a comparison, there's no way to know what structure to expect.