Dice Rolling Mcp について
Dice Rolling Mcpは、暗号学的に安全な乱数でダイスを振るTypeScript製MCPサーバーです。AIアシスタントやテーブルトークRPGの利用者向けに、標準および高度なダイス記法を解析し、構造化された結果と検証データを返します。
主な機能
- 01標準記法と修正値によるロール
- 02有利・再ロール・爆発ダイスへの対応
- 03成功数カウントとダイス除外
- 04ロール前の記法検証
- 05構造化された結果と内訳の返却
活用シーン
- 01テーブルトークRPGで公平なロールを生成
- 02使用前にダイス式を検証
- 03シミュレーションで乱数結果を利用
MCP 対応
dice_rollとdice_validateツールに加え、骰子関連情報を探すsearchとfetchを提供します。STDIOとStreamable HTTPに対応し、ローカルまたはリモートのMCPクライアントから接続できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Dice Rolling MCP Server
AI アシスタントに高度なダイスロール機能を提供する、TypeScript ベースの包括的な Model Context Protocol(MCP)サーバーです。テーブルトップゲームや RPG をはじめ、高度なゲームメカニクスを備えた乱数生成が必要なあらゆるアプリケーションに最適です。
問題:LLM は実際にはダイスを振れません
AI アシスタントに「ダイスを振って」と頼んでも、実際には何も振りません。大規模言語モデルは、トレーニングデータのパターンに基づいて応答を生成する決定論的なシステムです。d20 を振るように頼むと、「14 が出ました」のように答えることがありますが、その数値は乱数生成ではなく、テキスト予測によって生成されたものです。
これにより、いくつかの問題が生じます。
- 真のランダム性がない:結果は本当にランダムではなく、予測可能なパターンに従う可能性があります
- ゲームの公平性:公平なダイスロールがゲームプレイに影響するテーブルトップ RPG では非常に重要です
- シミュレーションの正確性:統計シミュレーションには適切な乱数生成が必要です
- 再現性の問題:同じプロンプトで、不自然なほど似た「ランダム」な結果が得られる場合があります
解決策:AI に本物のダイスを
この MCP サーバーは、AI アシスタントと実際の乱数生成をつなぐ橋渡し役です。AI アシスタントにロールを想像させる代わりに、本物のダイス一式を渡すようなものです。
仕組み:
- AI アシスタントがダイス表記(例:「3d6+2」)を受け取ります
- MCP サーバーがリクエストを解析し、暗号学的に安全な乱数を生成します
- 本物のダイスメカニクス(有利、不利、爆発ダイス、振り直しなど)を適用します
- 本物のランダムな結果を AI に返します
その結果、AI アシスタントは数学的な完全性を備えた真にランダムなダイスロールを提供できるようになり、実際のゲーム、シミュレーション、そして本物のランダム性が必要なあらゆるアプリケーションに適したものとなります。
機能
標準的なダイス表記
- 基本ロール:
1d20、3d6、2d10 - 修正値:
1d20+5、2d6-3 - 複数種類のダイス:
1d20+2d6+3 - パーセンタイルダイス:
1d%(d100) - ファッジダイス:
4dF(Fate/Fudge システム)
高度なメカニクス
- 有利/不利:
2d20kh1(最も高い目を残す)、2d20kl1(最も低い目を残す) - 除外メカニクス:
4d6dl1(最も低い目を除外)、4d6dh1(最も高い目を除外) - 爆発ダイス:
3d6!(最大値が出た場合に振り直して加算) - 振り直しメカニクス:
4d6r1(1 が出たら振り直す) - 成功数のカウント:
5d10>7(7 以上の成功数をカウント)
MCP ツール
search
利用可能なダイスロール操作とドキュメントを検索します。ChatGPT Connector との互換性に必須です。
パラメーター:
query(必須):関連するダイスロール情報を検索するための検索クエリ
戻り値:
content:id、title、urlフィールドを含む検索結果の JSONstructuredContent:関連度スコア付きの、機械可読な検索結果
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:エラーメッセージ(無効な場合)
構造化コンテンツのサポート
すべてのツールは、OpenAI Apps SDK 仕様に準拠した、人が読める content と機械可読な structuredContent の両方を返します。これにより、以下が可能になります。
- ロール結果と検証データへのプログラムからのアクセス
- リッチ UI レンダリング向けのコンポーネントテンプレート(今後の拡張)
- 構造化データを必要とするAI ワークフローとの統合
- ロール履歴、統計、可視化などの高度な機能
構造化コンテンツには各操作に関する完全なメタデータが含まれるため、ダイスロール機能を基盤とする高度なアプリケーションの構築に適しています。
リモート MCP 統合(Streamable HTTP)
この MCP サーバーは、リモート接続向けの Streamable HTTP トランスポートをサポートし、操作の検出に必要な search ツールを含む OpenAI MCP 仕様を実装しています。
対応クライアント:
- Claude Remote MCP Connectors(および Claude Desktop)
- ChatGPT Connectors(現在は Developer Mode のみ)
- Streamable HTTP トランスポートをサポートするすべての MCP クライアント
接続エンドポイント:
- ローカル開発:
http://localhost:3000/mcp - 本番環境:
https://dice-rolling-mcp.vercel.app/mcp
search ツールと fetch ツールを使うと、Claude と ChatGPT の両方で、利用可能なダイスロール操作を自動的に検出できます。
ローカル MCP 統合(STDIO)
Claude Desktop をローカルで統合するには、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 での使用
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: Roll 3d6+2 for damage
Assistant: You rolled 3d6+2 for damage:
🎲 Total: 13
📊 Breakdown: 3d6:[4,2,5] + 2
有利システム
Human: Roll 2d20kh1+5 for attack with advantage
Assistant: You rolled 2d20kh1+5 for attack with advantage:
🎲 Total: 23
📊 Breakdown: 2d20:[12,18] keep highest + 5
検証
Human: Is "4d6kh3+2d8+5" valid dice notation?
Assistant: ✅ Valid dice notation: 4d6kh3+2d8+5
Breakdown:
• 4d6 (keep highest 3)
• 2d8
• Modifier: +5
検出(リモート MCP 統合)
Human: What dice operations are available?
Assistant: [Calls search tool with query "dice"]
🎲 Found dice rolling operations:
- Basic Dice Notation: Learn standard XdY format
- D&D Advantage and Disadvantage: 2d20kh1 mechanics
- Combat Roll Examples: Attack, damage, spells
- Ability Score Generation: 4d6kh3 for character stats
アーキテクチャ
コアコンポーネント
- パーサー(
src/parser/):正規表現ベースの解析を使ってダイス記法をトークン化し、解析します - ローラー(
src/roller/):暗号学的に安全な乱数生成を使ってダイス式を実行します - MCP サーバー(
src/index.ts):AI アシスタント統合向けに Model Context Protocol を実装します - 型システム(
src/types.ts):すべてのダイス処理に対応する包括的な TypeScript 定義
主な設計上の決定事項
- セキュリティ:暗号学的に安全な乱数生成のため、Node.js の
crypto.randomInt()を使用します - 拡張性:モジュール式アーキテクチャにより、新しいダイス処理を簡単に追加できます
- 互換性:幅広い Node.js バージョンへの対応として、ES2022 をターゲットにし、フォールバックを用意しています
- 型安全性:厳密な型チェックを備えた、完全な TypeScript 実装です
テスト
npm test
テストスイートでは、以下を網羅しています。
- サポートされるすべての処理に対するダイス記法の解析
- モックされた乱数生成を使ったロールの実行
- エッジケースとエラー処理
- MCP プロトコルへの準拠
開発
プロジェクト構成
dice-rolling-mcp/
├── src/
│ ├── index.ts # MCP server implementation
│ ├── parser/ # Dice notation parser
│ ├── roller/ # Dice rolling engine
│ ├── statistics/ # Statistical analysis tools
│ └── types.ts # TypeScript definitions
├── __tests__/ # Test suite
├── dist/ # Compiled JavaScript
└── examples/ # Usage examples
新しい処理の追加
types.tsのDiceTermインターフェースを拡張しますdice-notation-parser.tsのパーサー正規表現を更新しますdice-roller.tsに処理を実装します- 包括的なテストを追加します
設定
サーバーは、DiceRollerConfig インターフェースを通じてさまざまな設定オプションをサポートしています。
- 1 回のロールあたりの最大ダイス数
- ダイスの最大面数
- 乱数ソースの選択
- 履歴サイズの上限
技術仕様
- 言語:TypeScript 5.8+
- ランタイム:Node.js 18+(v24.0.2でテスト済み)
- プロトコル:MCP(Model Context Protocol)2024-11-05
- OpenAI互換性:必須の
searchツールを備えたOpenAI MCP仕様を実装 - トランスポートのサポート:STDIO(ローカルのClaude Desktop)+ Streamable HTTP(リモート接続)
- 依存関係:最小限(zod、@modelcontextprotocol/sdk、@vercel/mcp-adapter)
- モジュールシステム:ES Modules
- テストフレームワーク:ts-jestを使用したJest
セキュリティに関する考慮事項
- 入力検証により、悪意のあるサイコロ式を防ぎます
- リソース制限により、極端に大きなロールによるDoSを防ぎます
- 暗号論的に安全な乱数生成
- 外部ネットワークへの依存なし
リンク
- リポジトリ:https://github.com/jimmcq/dice-rolling-mcp
- ライブデモ:https://dice-rolling-mcp.vercel.app
- MCP エンドポイント:https://dice-rolling-mcp.vercel.app/mcp
作者
Jim McQuillan
- GitHub:https://github.com/jimmcq
- LinkedIn:https://www.linkedin.com/in/jimmcquillan/
ライセンス
ISC
コントリビューション
コントリビューションを歓迎します。以下をご確認ください。
- すべてのテストに合格すること(
npm test) - 既存のパターンと規約に沿ったコードであること
- 新機能に適切なテストカバレッジを含めること
- TypeScriptのstrictモードに準拠すること
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。