Skip to main content
Glama
turlockmike

MCP Rand

by turlockmike

roll_dice

Simulate dice rolls using standard notation (e.g., "2d6", "3d6+5") for tabletop games, RPGs, or probability testing. Input an array of dice codes to generate random outcomes.

Instructions

Roll a set of dice using standard dice notation (e.g., "2d6" for two six-sided dice, "3d6+5" for three six-sided dice plus 5)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
diceYesArray of dice to roll

Implementation Reference

  • The main handler function that executes the roll_dice tool, parsing arguments, rolling dice, and returning results as JSON.
    export const rollDiceHandler = async (
      request: CallToolRequest
    ): Promise<CallToolResult> => {
      const args = request.params.arguments as { dice: string[] };
      
      if (!args.dice || args.dice.length === 0) {
        throw new McpError(
          ErrorCode.InvalidParams,
          'Must specify at least one die to roll'
        );
      }
    
      const results = args.dice.map(dice => rollDiceSet(dice));
      
      return {
        content: [
          {
            type: 'text',
            text: JSON.stringify(results, null, 2)
          }
        ]
      };
    };
  • Tool specification including name, description, and input schema for validating roll_dice parameters.
    export const toolSpec = {
      name: 'roll_dice',
      description: 'Roll a set of dice using standard dice notation (e.g., "2d6" for two six-sided dice, "3d6+5" for three six-sided dice plus 5)',
      inputSchema: {
        type: 'object' as const,
        properties: {
          dice: {
            type: 'array',
            items: {
              type: 'string',
              description: 'Dice notation (e.g., "2d6", "1d20", "4d4")'
            },
            description: 'Array of dice to roll'
          }
        },
        required: ['dice']
      }
    };
  • src/index.ts:24-24 (registration)
    Registers the roll_dice tool handler in the main server registry.
    registry.register('tools/call', 'roll_dice', rollDiceHandler as Handler);
  • Helper function that rolls a single set of dice, computes rolls and total.
    function rollDiceSet(notation: string): DiceRoll {
      const { count, sides, modifier } = parseDiceNotation(notation);
      const rolls = Array.from({ length: count }, () => rollDie(sides));
      const rollTotal = rolls.reduce((a, b) => a + b, 0);
      const total = rollTotal + modifier;
    
      return {
        dice: notation,
        rolls,
        modifier,
        total
      };
    }
  • Helper function to parse dice notation like '2d6+5' into count, sides, and modifier.
    function parseDiceNotation(notation: string): { count: number; sides: number; modifier: number } {
      const match = notation.toLowerCase().match(/^(\d+)d(\d+)([+-]\d+)?$/);
      if (!match) {
        throw new McpError(
          ErrorCode.InvalidParams,
          'Invalid dice notation'
        );
      }
    
      const count = parseInt(match[1]);
      const sides = parseInt(match[2]);
      const modifier = match[3] ? parseInt(match[3]) : 0; // If no modifier, default to 0
    
      if (count <= 0) {
        throw new McpError(
          ErrorCode.InvalidParams,
          'Number of dice must be positive'
        );
      }
    
      if (sides <= 0) {
        throw new McpError(
          ErrorCode.InvalidParams,
          'Die size must be positive'
        );
      }
    
      return { count, sides, modifier };
    }

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

Related 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/turlockmike/mcp-rand'

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