roll_dice
Generate random dice rolls using standard notation to simulate probability outcomes for games, simulations, or decision-making processes.
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:18-23 (handler)The MCP tool handler for 'roll_dice', registered via @mcp.tool(). It creates a DiceRoller instance with the provided notation and number of rolls, then returns its string representation which contains the formatted 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)Helper method in DiceRoller class that parses the dice notation (supporting 'num_dice d sides k keep'), rolls the dice randomly, sorts descending, selects the highest 'keep' rolls, and returns 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)The __str__ method of DiceRoller, invoked by the handler, which calls roll_dice() (or roll_multiple()) to perform rolling and formats the results into the tool's output string, 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)
- dice_roller.py:4-9 (helper)DiceRoller class initialization, storing notation and num_rolls, and compiling regex for parsing dice notation.class DiceRoller: def __init__(self, notation, num_rolls=1): self.notation = notation self.num_rolls = num_rolls self.dice_pattern = re.compile(r"(\d+)d(\d+)(k(\d+))?")