Skip to main content
Glama

Tavily Web Search MCP Server

by bakshidwarak

roll_dice

Generate random dice rolls using standard dice notation to simulate probability outcomes for games, calculations, or decision-making scenarios.

Instructions

Roll the dice with the given notation

Input Schema

NameRequiredDescriptionDefault
notationYes
num_rollsNo

Input Schema (JSON Schema)

{ "properties": { "notation": { "title": "Notation", "type": "string" }, "num_rolls": { "default": 1, "title": "Num Rolls", "type": "integer" } }, "required": [ "notation" ], "type": "object" }

Implementation Reference

  • server.py:18-23 (handler)
    The main handler for the 'roll_dice' tool. It is registered using the @mcp.tool() decorator and executes the dice rolling logic by instantiating DiceRoller and returning its string representation.
    @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)
  • The function signature defines the input schema (notation: str, num_rolls: int=1) and output (str), with docstring for description. Used by FastMCP for tool schema.
    def roll_dice(notation: str, num_rolls: int = 1) -> str: """Roll the dice with the given notation"""
  • server.py:18-18 (registration)
    The @mcp.tool() decorator registers the roll_dice function as an MCP tool.
    @mcp.tool()
  • The DiceRoller class implements the core dice rolling functionality, parsing notation, rolling dice with optional keep highest, and formatting output used by the tool handler.
    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+))?") 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 def roll_multiple(self): """Roll the dice multiple times according to num_rolls""" results = [] for _ in range(self.num_rolls): rolls, kept_rolls = self.roll_dice() results.append({ "rolls": rolls, "kept": kept_rolls, "total": sum(kept_rolls) }) return results 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)

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bakshidwarak/AIE8-MCP-Session'

If you have feedback or need assistance with the MCP directory API, please join our Discord server