roll_dice
Generate random dice rolls using standard dice notation to simulate game mechanics or random events. Specify notation like '2d6' for multiple dice and rolls.
Instructions
Roll the dice with the given notation
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| notation | Yes | ||
| num_rolls | No |
Implementation Reference
- server.py:20-24 (handler)The primary MCP tool handler for 'roll_dice', decorated with @mcp.tool() for registration. It instantiates DiceRoller with parameters and returns its string representation containing the roll results.@mcp.tool() def roll_dice(notation: str, num_rolls: int = 1) -> str: """Roll the dice with the given notation""" roller = DiceRoller(notation, num_rolls) return str(roller)
- dice_roller.py:10-23 (helper)Core helper method in DiceRoller class that implements the dice rolling logic: parses notation like '2d20k1', rolls the dice randomly, sorts descending, selects top 'k' rolls, and returns lists of all rolls and kept rolls.def roll_dice(self): match = self.dice_pattern.match(self.notation) if not match: raise ValueError("Invalid dice notation") num_dice = int(match.group(1)) dice_sides = int(match.group(2)) keep = int(match.group(4)) if match.group(4) else num_dice rolls = [random.randint(1, dice_sides) for _ in range(num_dice)] rolls.sort(reverse=True) kept_rolls = rolls[:keep] return rolls, kept_rolls
- dice_roller.py:37-47 (helper)Helper method that executes the rolls (calling roll_dice or roll_multiple) and formats the output string in the style used by the tool response, handling single or multiple rolls.def __str__(self): if self.num_rolls == 1: rolls, kept_rolls = self.roll_dice() return f"ROLLS: {', '.join(map(str, rolls))} -> RETURNS: {sum(kept_rolls)}" else: results = self.roll_multiple() result_strs = [] for i, result in enumerate(results, 1): result_strs.append(f"Roll {i}: ROLLS: {', '.join(map(str, result['rolls']))} -> RETURNS: {result['total']}") return "\n".join(result_strs)