随机生成工具

MCP Rand是一个提供多种随机生成功能的服务器,包括UUID、数字、字符串、密码、高斯分布、掷骰子和抽卡等。

  • by turlockmike
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 turlockmike/mcp-rand

使用说明

MCP兰德

一种模型上下文协议(MCP)服务器,提供各种随机生成实用程序,包括UUID、数字、字符串、密码、高斯分布、掷骰子和抽卡。

安装

npm install mcp-rand

或全局安装:

npm install -g mcp-rand

特性

UUID生成器

  • 生成RFC 4122版本4 UUID
  • 使用Node的本地加密模块进行安全的随机生成
  • 无需参数

随机数生成器

  • 在指定范围内生成随机数
  • 可配置的最小值和最大值(包括)
  • 如果未提供参数,则默认范围为0-100

高斯随机生成器

  • 生成遵循高斯(正态)分布的随机数
  • 标准化为0-1范围
  • 无需参数

随机字符串生成器

  • 生成具有可配置长度和字符集的随机字符串
  • 支持多个字符集:
    • 字母数字(默认):A-Z、A-Z、0-9
    • 数字:0-9
    • 小写:a-z
    • 大写字母:A-Z
    • 特别:!@#$%^&*()_+-=[]{};'"\|,.<>/?
  • 可配置的字符串长度(默认为10)

密码生成器

  • 生成混合字符类型的强密码
  • 确保每种类型(大写、小写、数字、特殊)至少有一个字符
  • 可配置长度(最小8,默认16)
  • 警告:虽然密码是在本地生成的,但建议使用专用的密码管理器

摇骰子

  • 使用标准骰子符号掷多个骰子
  • 支持“2d6”(两个六面骰子)、“1d20”(一个二十面骰子)等符号
  • 返回每组骰子的单个骰子和总计
  • 可以同时掷多个不同的骰子组(例如,“2d6”、“1d20”、“4d4”)

卡片抽屉

  • 从标准的52张牌组中抽牌
  • 使用base64编码在绘制之间保持甲板状态
  • 返回已抽牌和剩余牌组状态
  • 支持绘制任意数量的卡片,最大可达卡片组大小
  • 每次抽奖前正确洗牌

用法

作为CLI工具

npx mcp-rand

与MCP客户端集成

添加到MCP客户端配置中:

{
  "mcpServers": {
    "mcp-rand": {
      "command": "node",
      "args": ["path/to/mcp-rand/build/index.js"],
      "disabled": false,
      "alwaysAllow": []
    }
  }
}

示例用法

// Generate UUID
const uuid = await client.callTool('generate_uuid', {});
console.log(uuid); // e.g., "550e8400-e29b-41d4-a716-446655440000"

// Generate random number
const number = await client.callTool('generate_random_number', {
  min: 1,
  max: 100
});
console.log(number); // e.g., 42

// Generate Gaussian random number
const gaussian = await client.callTool('generate_gaussian', {});
console.log(gaussian); // e.g., 0.6827

// Generate random string
const string = await client.callTool('generate_string', {
  length: 15,
  charset: 'alphanumeric'
});
console.log(string); // e.g., "aB9cD8eF7gH6iJ5"

// Generate password
const password = await client.callTool('generate_password', {
  length: 20
});
console.log(password); // e.g., "aB9#cD8$eF7@gH6*iJ5"

// Roll dice
const rolls = await client.callTool('roll_dice', {
  dice: ['2d6', '1d20', '4d4']
});
console.log(rolls);
/* Output example:
[
  {
    "dice": "2d6",
    "rolls": [3, 1],
    "total": 4
  },
  {
    "dice": "1d20",
    "rolls": [4],
    "total": 4
  },
  {
    "dice": "4d4",
    "rolls": [2, 3, 2, 3],
    "total": 10
  }
]
*/

// Draw cards
const draw1 = await client.callTool('draw_cards', {
  count: 5
});
console.log(draw1);
/* Output example:
{
  "drawnCards": [
    { "suit": "hearts", "value": "A" },
    { "suit": "diamonds", "value": "7" },
    { "suit": "clubs", "value": "K" },
    { "suit": "spades", "value": "2" },
    { "suit": "hearts", "value": "10" }
  ],
  "remainingCount": 47,
  "deckState": "t//+///bDw=="
}
*/

// Draw more cards using previous deck state
const draw2 = await client.callTool('draw_cards', {
  count: 3,
  deckState: draw1.deckState
});
console.log(draw2);
/* Output example:
{
  "drawnCards": [
    { "suit": "diamonds", "value": "Q" },
    { "suit": "clubs", "value": "5" },
    { "suit": "spades", "value": "J" }
  ],
  "remainingCount": 44,
  "deckState": "l//+//zbDw=="
}
*/

贡献

请看 贡献.md 用于开发设置和指南。

许可证

国际协调委员会