一个基于TypeScript的全面的模型上下文协议(MCP)服务器,提供高级骰子投掷功能,适用于AI助手。非常适合桌面游戏、角色扮演游戏(RPG)以及任何需要复杂随机数生成的游戏机制的应用。
当你要求AI助手“投掷骰子”时,它们实际上并没有投掷任何东西。大型语言模型是基于其训练数据中的模式生成响应的确定性系统。当被要求投掷一个d20时,它们可能会回答“我投出了14”——但这个数字是通过文本预测生成的,而不是随机数生成。
这导致了几个问题:
这个MCP服务器充当了AI助手与实际随机数生成之间的桥梁。可以将其视为给你的AI助手一套真实的骰子,而不是让它们想象投掷。
工作原理:
结果:AI助手现在可以提供具有数学完整性的真正随机骰子投掷,使其适合实际游戏、模拟以及任何需要真实随机性的应用。
1d20,3d6,2d101d20+5,2d6-31d20+2d6+31d%(d100)4dF(命运/Fudge系统)2d20kh1(保留最高),2d20kl1(保留最低)4d6dl1(丢弃最低),4d6dh1(丢弃最高)3d6!(在最大值时重新投掷并加总)4d6r1(重新投掷1点)5d10>7(计数≥7的成功)search发现可用的骰子投掷操作和文档。需要与ChatGPT连接器兼容。
参数:
query(必需):搜索查询以找到相关的骰子投掷信息返回:
content:包含id、title和url字段的JSON搜索结果structuredContent:带有相关性评分的机器可读搜索结果fetch根据ID检索特定骰子投掷主题的详细内容。
参数:
id(必需):来自搜索结果的主题ID返回:
content:完整的JSON文档内容structuredContent:元数据和结构化文档信息dice_roll使用标准记号执行骰子投掷,可选标签和详细输出。
参数:
notation(必需):骰子记号字符串(例如,“3d6+2”)label(可选):投掷的描述性标签verbose(可选):显示每个骰子的详细分解返回:
content:包含投掷结果和表情符号的人类可读文本structuredContent:完整的投掷数据包括:
notation:原始骰子记号total:最终结果rolls:带有元数据(丢弃、爆炸等)的单个骰子结果breakdown:数学分解字符串critical:d20投掷的关键成功/失败检测modifier:应用的修正值timestamp:投掷的ISO时间戳dice_validate验证骰子记号而不执行投掷,提供详细的记号含义分解。
参数:
notation(必需):要验证的骰子记号字符串返回:
content:人类可读的验证结果structuredContent:结构化的验证数据包括:
valid:布尔验证状态expression:解析的骰子表达式(如果有效)breakdown:骰子和修正值的结构化分解error:错误消息(如果无效)所有工具都返回人类可读的content和机器可读的structuredContent,遵循OpenAI Apps SDK规范。这使得:
结构化内容包括关于每个操作的完整元数据,使其适合构建在骰子投掷能力之上的高级应用程序。
此MCP服务器支持远程连接的可流式传输HTTP传输,并实现了OpenAI MCP规范,包括所需的search工具以发现操作。
http://localhost:3000/mcphttps://dice-rolling-mcp.vercel.app/mcpsearch和fetch工具使Claude和ChatGG能够自动发现可用的骰子投掷操作。
为了本地Claude桌面集成,配置你的claude_desktop_config.json:
{
"mcpServers": {
"dice-rolling-remote": {
"command": "npx",
"args": [
"@modelcontextprotocol/client-stdio",
"connect",
"https://dice-rolling-mcp.vercel.app/mcp"
]
}
}
}
git clone https://github.com/jimmcq/dice-rolling-mcp
cd dice-rolling-mcp
npm install
npm run build
添加到你的claude_desktop_config.json:
{
"mcpServers": {
"dice-roller": {
"command": "node",
"args": ["path/to/dice-rolling-mcp/dist/index.js"]
}
}
}
平台特定示例:
Windows (WSL):
{
"mcpServers": {
"dice-roller": {
"command": "wsl",
"args": ["node", "/path/to/dice-rolling-mcp/dist/index.js"]
}
}
}
macOS/Linux:
{
"mcpServers": {
"dice-roller": {
"command": "node",
"args": ["/path/to/dice-rolling-mcp/dist/index.js"]
}
}
}
npm run start
Human: 投掷3d6+2作为伤害
Assistant: 你投掷了3d6+2作为伤害:
🎲 总计:13
📊 分解:3d6:[4,2,5] + 2
Human: 使用优势投掷2d20kh1+5进行攻击
Assistant: 你使用优势投掷了2d20kh1+5进行攻击:
🎲 总计:23
📊 分解:2d20:[12,18] 保留最高 + 5
Human: “4d6kh3+2d8+5”是有效的骰子记号吗?
Assistant: ✅ 有效的骰子记号:4d6kh3+2d8+5
分解:
• 4d6(保留最高3)
• 2d8
• 修正值:+5
Human: 可用的骰子操作有哪些?
Assistant: [调用带有查询“dice”的search工具]
🎲 找到了骰子投掷操作:
- 基本骰子记号:学习标准XdY格式
- D&D优势和劣势:2d20kh1机制
- 战斗投掷示例:攻击、伤害、法术
- 能力分数生成:4d6kh3用于角色属性
src/parser/):使用正则表达式解析骰子记号src/roller/):执行骰子表达式,使用加密安全的随机数生成src/index.ts):实现AI助手集成的模型上下文协议src/types.ts):所有骰子机制的全面TypeScript定义crypto.randomInt()进行加密安全的随机性npm test
测试套件涵盖:
dice-rolling-mcp/
├── src/
│ ├── index.ts # MCP服务器实现
│ ├── parser/ # 骰子记号解析器
│ ├── roller/ # 骰子投掷引擎
│ ├── statistics/ # 统计分析工具
│ └── types.ts # TypeScript定义
├── __tests__/ # 测试套件
├── dist/ # 编译后的JavaScript
└── examples/ # 使用示例
types.ts中扩展DiceTerm接口dice-notation-parser.ts中的解析器正则表达式dice-roller.ts中实现该机制服务器通过DiceRollerConfig接口支持各种配置选项:
search工具Jim McQuillan
ISC
欢迎贡献!请确保:
npm test)