Skip to main content
Glama
iKwesi

Tavily Web Search MCP Server

by iKwesi

roll_dice

Roll dice using D&D-style notation like 2d20k1 to generate random numbers for games, simulations, or decision-making.

Instructions

Roll dice with D&D-style notation (e.g., 2d20k1).

Args: notation: Dice notation (e.g., "2d20k1" = roll 2d20, keep highest 1) num_rolls: Number of times to roll (default 1)

Returns: Formatted dice roll results

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
notationYes
num_rollsNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • server.py:61-79 (handler)
    MCP tool handler for 'roll_dice': decorated with @mcp.tool(), instantiates DiceRoller and returns string result. This is the primary entrypoint for the tool.
    @mcp.tool()
    def roll_dice(notation: str, num_rolls: int = 1) -> str:
        """
        Roll dice with D&D-style notation (e.g., 2d20k1).
        
        Args:
            notation: Dice notation (e.g., "2d20k1" = roll 2d20, keep highest 1)
            num_rolls: Number of times to roll (default 1)
            
        Returns:
            Formatted dice roll results
        """
        try:
            roller = DiceRoller(notation, num_rolls)
            return str(roller)
        except ValueError as e:
            return f"Invalid dice notation: {str(e)}"
        except Exception as e:
            return f"Error rolling dice: {str(e)}"
  • DiceRoller class providing the core dice rolling logic: parses D&D notation, generates random rolls, handles keeping highest dice, and formats output strings used by the 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)
  • server.py:93-93 (registration)
    Startup print confirming roll_dice tool registration.
    print("  ✅ roll_dice (D&D dice roller)")
  • Legacy version of the roll_dice handler in server_old.py.
    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)

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

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/iKwesi/AIE8-MCP-Session'

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