mcpField
D
Dice Rolling Mcp

Dice Rolling Mcp

ローカル
github.com/jimmcqゲーム・エンタメ840 週間前に更新

Dice Rolling Mcp について

Dice Rolling Mcpは、暗号学的に安全な乱数でダイスを振るTypeScript製MCPサーバーです。AIアシスタントやテーブルトークRPGの利用者向けに、標準および高度なダイス記法を解析し、構造化された結果と検証データを返します。

主な機能

  1. 01標準記法と修正値によるロール
  2. 02有利・再ロール・爆発ダイスへの対応
  3. 03成功数カウントとダイス除外
  4. 04ロール前の記法検証
  5. 05構造化された結果と内訳の返却

活用シーン

  1. 01テーブルトークRPGで公平なロールを生成
  2. 02使用前にダイス式を検証
  3. 03シミュレーションで乱数結果を利用

MCP 対応

dice_rollとdice_validateツールに加え、骰子関連情報を探すsearchとfetchを提供します。STDIOとStreamable HTTPに対応し、ローカルまたはリモートのMCPクライアントから接続できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"dice-rolling": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/client-stdio"
]
}
}
}
起動コマンドnpx -y @modelcontextprotocol/client-stdio

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@modelcontextprotocol/client-stdio

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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 フィールドを含む検索結果の 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:エラーメッセージ(無効な場合)
構造化コンテンツのサポート

すべてのツールは、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
新しい処理の追加
  1. types.ts の DiceTerm インターフェースを拡張します
  2. dice-notation-parser.ts のパーサー正規表現を更新します
  3. dice-roller.ts に処理を実装します
  4. 包括的なテストを追加します
設定

サーバーは、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を防ぎます
  • 暗号論的に安全な乱数生成
  • 外部ネットワークへの依存なし

リンク

作者

Jim McQuillan

ライセンス

ISC

コントリビューション

コントリビューションを歓迎します。以下をご確認ください。

  • すべてのテストに合格すること(npm test)
  • 既存のパターンと規約に沿ったコードであること
  • 新機能に適切なテストカバレッジを含めること
  • TypeScriptのstrictモードに準拠すること

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。