Poker Task Management MCP
# Poker MCP Server 🚀
YAML-based input file management tool for radiation-shielding calculation code POKER with full MCP support
## 📋 クイック情報
- .9.6
- **ツール数**: 35メソッド
- **プロトコル**: MCP (Model Context Protocol) 1.0.0 完全準拠
- **メインサーバー**: `src/mcp_server_stdio_v4.js`
- **データ保存**: `~/.poker-mcp/`(`POKER_MCP_HOME`環境変数で変更可)
- **核種データ**: `${POKER_INSTALL_PATH}/LIB/ICRP-07.NDX` を直接参照
- **実行方式**: STDIO通信(MCPプロトコル標準)
## 🆕 バージョン1.8.0〜1.8.3の新機能
### 📐 CAD連携が MCP だけで完結
従来、CAD からの経路抽出は MCP を経由せず、FreeCAD を手で起動する必要が
ありました。`spec.json` を手書きし、`poker_cui -p` を叩き、`freecadcmd` に
スクリプトを渡す。3 手順すべてが手作業でした。
```javascript
poker_generateInput({ fcstd: "C:/path/to/model.FCStd" }) // YAML を生成
poker_generatePaths({ fcstd: "C:/path/to/model.FCStd" })
poker_executeCalculation({ yaml_file: "poker.yaml", path_input: "poker.paths" })
```
CAD ファイルを指定するだけになりました。分割点の取得、グリッド検出器の展開、
ビルドアップ等価材料の解決(`Source_Dry` → `Tungsten` など)は自動です。
### 🔍 FREECAD_PATH
FreeCAD の場所を、環境変数 → PATH → 既定のインストール先の順で解決します。
`POKER_INSTALL_PATH` のように固定の既定値を持てないのは、インストール先が
バージョン番号を含むためです(FreeCAD 1.1, 1.0 …)。
```json
"env": {
"POKER_INSTALL_PATH": "C:\\Poker",
"FREECAD_PATH": "C:\\Program Files\\FreeCAD 1.1"
}
```
### 🐛 相対パスの解決を修正
`tasks/` 配下のファイル名指定が、プロセスのカレントディレクトリを基準に
解決されていました。MCP サーバの起動場所によっては別の場所を指します。
### 📦 CAD連携ツールを npm パッケージに同梱(v1.8.2)
`poker_generatePaths` が使う Python スクリプトが `files` に含まれておらず、
GitHub から clone した環境でしか動きませんでした。`npm install` / `npx` でも
使えるようにしています。
### 🐛 サマリーの衝突を修正(v1.8.3)
`generatePaths` が `-p` 付きで作ったサマリーを `executeCalculation` が上書きし、
次に `generatePaths` を呼ぶと失敗していました。専用ファイルに分離しています。
## 🆕 バージョン1.7.0〜1.7.2の新機能
### 📉 サマリー出力量の制御(ThinnedIndices 操作系 3メソッド)
`thinnedindices` ノードを MCP から設定できます。`.paths` の生成では全ての
線源分割点と検出器評価点が必要ですが、既定では間引かれるため手で書き足す
必要がありました。
```javascript
poker_updateThinnedIndices({ fit_for_paths: true })
// → 入力の分割定義と検出器グリッドから必要数を計算して設定
```
既定値は poker_mcp 側で持ちません。省略しても `.summary` には全 7 キーが
値付きで出力されるので、そちらを正とします。
### 🔄 保留中の変更が `get` で見えるように
`propose` の直後に `get` を呼ぶと変更が見えず、「反映されていない」と誤解する
余地がありました。確定値とは別に `pending` として示します。
```javascript
poker_proposeThinnedIndices({ sourcepoint: 100 })
poker_getThinnedIndices()
// → { thinnedindices: null, pending: { sourcepoint: 100 }, pending_count: 1 }
```
### 🛡️ `.paths` の座標照合
件数だけでなく座標も YAML と突き合わせます。検出器を動かして `.paths` を
再生成し忘れると、件数は変わらないため従来は通り抜け、**静かに誤った線量**が
出ていました。
## 🆕 バージョン1.6.0の新機能
### 🧱 カスタム材料をライブラリ追加だけで使えるように
材料の一覧・密度範囲・ビルドアップ可用性をコード側に持たず、すべて
`%POKER_INSTALL_PATH%/LIB/` から読み込むようにしました。**カスタム材料を
`lib_material.dat` に追記すれば、コード変更なしにサーバ再起動だけで
ゾーン定義・密度検証・等価材料の自動選定すべてに反映されます。**
標準材料を追加する場合は `lib_material.dat` と `lib_setting.dat` の
`buildup_material` の両方に登録します(片方だけなら警告が出ます)。
### 🔀 ビルドアップ等価材料の選定を実データ方式へ
従来の光子実効Z最近傍は暫定実装でした。ビルドアップを支配するのは散乱と吸収の
競合であることから、POKER の減衰係数ファイルから
`μ_incoherent / (μ_total − μ_incoherent)` を求め、0.1〜3 MeV の11点で
最も一致する標準材料を選びます。
一致度スコアを応答に付けるようにしました。0.30 を超える場合は「標準材料に
近いものが無い」ことを意味し、候補上位3件とともに警告を出します。黙って粗い
代用材を当てるより、どの程度粗いかを見せる方が判断材料になります。
この変更で `Source_Dry` の等価材料は `Lead` から `Tungsten` に変わります。
### 🐛 `poker_updateBuildupFactor` が equivalent を更新できない問題を修正
ツールスキーマと `DataManager` の双方に `equivalent` が無く、`TaskManager`
だけが素通しする三層不整合でした。変更・解除(空文字指定)に対応し、
標準材料への指定や非標準材料の指定を拒否する検証も追加しています。
### 📡 CAD連携レイトレース
FreeCAD のソリッドモデルを、STEP のような中間フォーマットを介さず、CSG で
表現し直す作業も無しに遮蔽体系として扱えます。**MCP の 3 呼び出しで完結**します。
```javascript
poker_generateInput({ fcstd: "C:/path/to/model.FCStd" })
poker_generatePaths({ fcstd: "C:/path/to/model.FCStd" })
poker_executeCalculation({ yaml_file: "poker.yaml", path_input: "poker.paths" })
```
CAD が正本です。**YAML を手で書く必要はありません。** ソリッドに材質・線源・
検出器をカスタムプロパティで設定しておけば、そこから入力が生成されます。
線源点→検出器の直線を FreeCAD 側で追跡し、通過した材質と厚さを `.paths` に
記録して POKER に渡します。
CSG 経由と一致することを平板・円筒・球の 5 体系で確認済みです。フィレットや
自由曲面のように CSG で表現できない形状も扱えます。**複数線源・グリッド検出器・
スラント補正に対応**。
他の CAD で作ったモデルも、STEP で FreeCAD に読み込めば同じパイプラインに
乗ります。副産物として、POKER の改造なしで使える**簡易化の監査ツール**
(ある形状を省略してよいかを定量化する)もあります。
FreeCAD の場所は環境変数 `FREECAD_PATH` で指定します(未設定なら既定の
インストール先を探索)。
#### 必要なもの
| | 入手 | 環境変数 |
|---|---|---|
| poker-mcp | `npm install poker-mcp` | — |
| **POKER 本体** | 別途入手 | `POKER_INSTALL_PATH` |
| **FreeCAD** | [freecad.org](https://www.freecad.org/)(無償) | `FREECAD_PATH` |
numpy はレイトレーサが使いますが、FreeCAD に同梱されているので追加の
インストールは不要です。
```json
"env": {
"POKER_MCP_HOME": "C:\\Users\\yoshi\\poker_mcp_workspace",
"POKER_INSTALL_PATH": "C:\\Poker",
"FREECAD_PATH": "C:\\Program Files\\FreeCAD 1.1"
}
```
`FREECAD_PATH` は既定の場所にインストールされていれば省略できます。
#### モデル側の約束
**ソリッドに `PokerMaterial` プロパティで材質名を設定**しておく必要があります
(`Iron`、`Concrete` など、POKER の材料ライブラリの名前)。密度を上書きする場合は
`PokerDensity` も設定します。
他の CAD で作ったモデルを STEP で読み込んだ場合、材質情報は失われるので
FreeCAD 上で設定してください。一度設定すれば `.FCStd` に保存されます。
まずは [CAD_QUICKSTART.md](./docs/manuals/CAD_QUICKSTART.md)(最短手順と実例)を、
詳細は [CAD_RAYTRACE.md](./docs/manuals/CAD_RAYTRACE.md)、フォーマットは
[PATHS_FORMAT.md](./docs/manuals/PATHS_FORMAT.md)。
## 🆕 バージョン1.5.0の新機能
### 🖥️ POKER GUI を閉じずに表示を切り替え
`poker_openGui` で別の入力を指定すると、起動中の POKER ウィンドウの表示が
そのまま切り替わります。従来は先に POKER を閉じる必要がありました。
未保存の編集があるときは POKER 側で保存確認が出るため、編集内容が
黙って失われることはありません(キャンセルすると切り替わりません)。
> **POKER 2.1.1 以降が必要です。** 2.1.0 以前では従来どおり
> `POKER_ALREADY_RUNNING` を返すので、先に POKER を閉じてください。
### 🐛 `poker_openGui` の偽の成功報告を修正
`spawn` の成否のみで判定していたため、POKER が二重起動で弾かれて即座に
終了しても「起動しました」と PID 付きで成功を返していました。
起動後の生存確認を追加し、実際に表示されたことを確認してから報告します。
### 📖 ドキュメントの大幅整理
`ADMIN_GUIDE.md` を実運用に即した内容へ全面改訂しました(699行 → 248行)。
乱数で「正常」を出力する監視スクリプトなど、実態と乖離した記述を削除し、
検証可能な手順のみに整理しています。
## 🆕 バージョン1.4.0の新機能
### ☢️ 子孫核種の自動管理
親核種を指定すると子孫核種が自動生成され、**親の更新・削除に追随します**。
Cs137 を入れれば Ba137m が分岐比 0.9439 で自動的に付き、Cs137 の放射能を
2倍にすれば Ba137m も2倍になります。親を削除すれば娘も消えます。
発火タイミングを `executeCalculation` 時から `proposeSource` / `updateSource`
時へ移しました。モデル構築を終えた最後の段階で計算が中断することはなくなります。
平衡型は親娘の半減期比で判定します(永続 / 過渡 / 平衡なし)。平衡が成立しない
組み合わせは推定せず、警告を返して生成を見送ります。除外は線源ごとに記録され、
親を何度更新しても復活しません。
詳細は [docs/DAUGHTER_NUCLIDE_MANAGEMENT.md](./docs/DAUGHTER_NUCLIDE_MANAGEMENT.md)。
> **POKER 2.1.0 以降が必要です。** 出自情報を保持する `x_meta` ノードを
> POKER が受理する必要があります(`source` 直下と `inventory` 要素直下)。
### 🐛 ICRP-07 パーサの重大な修正
固定長の列位置が実データと一致しておらず、**全1252核種で子孫核種を1件も
取得できていませんでした**。半減期も単位が崩壊形式側へ流出し、Cs137 を
30.17年ではなく 30.17 **秒**と解釈していました(9桁の誤り)。
修正後は 808 核種が子孫核種を持ちます。平衡判定は従来まったく機能して
いなかったことになります。
### 🐛 `reject` のグローバル無効化を修正
1つの線源で子孫核種を拒否すると、セッション終了まで全線源の検出が無効に
なっていました。線源ごとの管理に変更しています。
### 🔧 核種データベースの参照先を LIB へ統一
`POKER_MCP_HOME/data/` へのコピーを廃止し、`POKER_INSTALL_PATH/LIB/` を
直接参照します。従来は「コピー先が存在すればスキップ」だったため、POKER を
更新しても古いコピーを読み続けていました。
詳細は [CHANGELOG.md](./CHANGELOG.md) を参照。
## 🆕 バージョン1.3.0の新機能
### ✨ `poker_getDoseMap` — グリッド検出器の線量マップ取得
グリッド(線/面/体積 = 1D/2D/3D)検出器の全評価点の線量を `.dose` ファイルから取得します。サマリーはグリッド点を間引く(`一部省略`)ため、完全なマップは本ツールで取得します。戻り値は `points[]`(i/j/k・座標・線量)+入れ子 `grid`(1D→[i], 2D→[j][i], 3D→[k][j][i])+ `min/max/max_at`。
### ✨ `executeCalculation` の構造化結果
応答に `.summary`(YAML) から抽出した構造化 `result_total`(検出器ごとの座標+E(AP)/DskinM(AP)/H*(10) の内訳)、`dose_columns`、`calculation_warnings`、`calculation_notes` を追加。
### 🐛 `updateSource` の division/geometry/cutoff_rate 対応
ツールスキーマ・検証が弾いていたフィールドを解放し、線源の in-place 更新(分割の収束スタディ等)が可能に。
### 🔧 マニフェスト↔実行時ドリフト検出
`npm run check:manifest` でツール定義とマニフェストの乖離を検出。
詳細は [CHANGELOG.md](./CHANGELOG.md) を参照。
## 🆕 バージョン1.2.8の新機能
### ✨ `poker_openGui` — POKER GUI 起動メソッドを追加
作成した入力ファイルを POKER.exe でビジュアル確認できます。
- 保留中の変更を **自動保存してから** POKER.exe を起動
- `yaml_file` は省略可(デフォルト: `poker.yaml`)
- `POKER_INSTALL_PATH/POKER.exe`(デフォルト: `C:/Poker/POKER.exe`)を使用
- Windows 専用
### 最新のPOKER_CUI.exeの機能でPOKER-MCPがカバーしていない部分について
POKER本体は随時バージョンアップされており、下記の機能についてPOKER-MCPのツールは未対応です。
それらについてAIアプリが入力を編集しようとするとツールの制約によって拒否されることがあります。必要に応じて手動で入力を修正してください。
- 二重層・三重層ビルドアップ係数の指定(現状では単層のみ)
- 線源にエネルギースペクトルを指定(現状では核種指定のみ)
- 材料ゾーン・ビルドアップに**任意組成のカスタム材料**を指定(lib_material.dat の標準13+ユーザ材料には対応済み。詳細は docs/manuals/MATERIAL_SYSTEM.md)
## 🆕 バージョン1.2.7の修正(バグフィックス)
### 🐛 `poker_executeCalculation` の yaml_file パス解決を修正
ファイル名のみ(例: `poker.yaml`)を渡すと絶対パス要求でエラーになっていた
スキーマ・ハンドラー間の矛盾を修正しました。
- **ファイル名のみ指定** → `POKER_MCP_HOME/tasks/` に自動解決
- **絶対パス指定** → そのまま使用(後方互換)
## 🆕 バージョン1.2.6の修正(バグフィックス)
### 🐛 SERVER DISCONNECTED 問題を修正
`npx poker-mcp` 実行時にClaude Desktopがカレントディレクトリを
`C:\Windows\System32` に設定するため、相対パスでのフォルダ作成が
権限エラー(EPERM)で失敗していた問題を修正しました。
- **`src/utils/paths.js` 新設**: 作業ディレクトリを一元管理
- **全ファイルパスを絶対パス化**: `logs/`・`backups/`・`tasks/`・`data/`
- **`POKER_MCP_HOME` 環境変数サポート**: 作業場所を自由に指定可能
- **エラー出力を `stderr` に追加**: 問題発生時の原因特定が容易に
## 🆕 バージョン1.2.5の新機能
### ⚡ 衝突検出システム
- **リアルタイム干渉チェック**: 立体間の重なり・接触を自動検出
- **自動修正提案**: 衝突解決のための幾何調整案を提示
- **物理的妥当性検証**: 非物理的な配置を事前に防止
### ☢️ 子孫核種自動管理
- **ICRP-07データベース統合**: 1,254核種の崩壊データを内蔵
- **放射平衡計算**: 親核種から子孫核種を自動計算
- **寄与度閾値制御**: 5%以上の寄与を持つ核種を自動追加
### 📏 単位系完全性保証
- **4キー完全性検証**: length, angle, density, radioactivityの一貫性保証
- **単位変換分析**: 異なる単位系間の変換係数を自動計算
- **物理的整合性チェック**: 単位の組み合わせの妥当性を検証
### 🔄 YAMLリセット機能
- **3段階リセットレベル**: minimal(最小限)、standard(標準)、complete(完全)
- **自動バックアップ**: リセット前に必ずバックアップを作成
- **ATMOSPHERE保護**: 必須ゾーンの自動復元
### 🔧 検出器分析機能
- **互換性チェック**: 複数検出器間の比較可能性を分析
- **性能最適化提案**: メモリ使用量と計算効率の最適化
- **システム全体分析**: 全検出器の統合的な性能評価
## ⚡ セットアップ
### 1. インストール
```bash
# 依存関係インストール(ローカル開発時のみ)
npm install
# または NPX で直接使用(インストール不要)
npx poker-mcp
```
### 2. 環境変数設定
#### `POKER_MCP_HOME`(推奨・新設)
作業ファイル(YAML・バックアップ・ログ・核種DB)の格納先を指定します。
**未設定時は `~/.poker-mcp/` が自動的に使用されます。**
#### `POKER_INSTALL_PATH`(オプション)
POKERのインストールディレクトリを指定します。以下の2つの用途で参照されます。
- **ICRP-07.NDX の参照先**: `{POKER_INSTALL_PATH}/LIB/ICRP-07.NDX` を直接参照(v1.4.0以降、コピーなし)
- **POKER.exe の場所**: `{POKER_INSTALL_PATH}/POKER.exe`(`poker_openGui` 使用時)
**デフォルト値**: `C:/Poker`(未設定時は `C:/Poker` を使用)
```bash
# Windows(コマンドプロンプト)
set POKER_MCP_HOME=C:\Users\yoshi\poker_mcp_workspace
set POKER_INSTALL_PATH=C:/Poker
# Windows(PowerShell)
$env:POKER_MCP_HOME="C:\Users\yoshi\poker_mcp_workspace"
$env:POKER_INSTALL_PATH="C:/Poker"
# Linux/macOS
export POKER_MCP_HOME="$HOME/.poker-mcp"
export POKER_INSTALL_PATH="/usr/local/share/poker"
```
**データ格納先の構造:**
```
POKER_MCP_HOME/ # デフォルト: ~/.poker-mcp/
├── tasks/ # poker.yaml, pending_changes.json
├── backups/ # 自動バックアップ(最大10世代)
├── data/ # ICRP-07.NDX 核種データベース
├── logs/ # error.log, combined.log
└── config.json # ユーザー設定(任意)
```
### 3. Claude Desktop設定
**Claude Desktop アプリでの設定方法:**
1. **設定ファイルを開く**
```
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/claude/claude_desktop_config.json
```
2. **推奨設定(v1.2.6)**
```json
{
"mcpServers": {
"poker-mcp": {
"command": "npx",
"args": ["poker-mcp"],
"env": {
"POKER_MCP_HOME": "C:\\Users\\<username>\\poker_mcp_workspace",
"POKER_INSTALL_PATH": "C:/Poker"
}
}
}
}
```
`<username>` はご自身のWindowsユーザー名に置き換えてください。
`POKER_INSTALL_PATH` は省略可能です(デフォルト: `C:/Poker`)。
> **⚠️ 注意:** `cwd`(作業ディレクトリ)の指定は不要です。`POKER_MCP_HOME`
> 環境変数で管理するため、`cwd` を設定すると v1.2.5 以前の問題が再発します。
3. **Claude Desktopを再起動** してMCPサーバーを有効化
### 4. 動作確認
Claude Desktopで以下のようにテストできます:
```
放射線遮蔽計算用のコンクリート壁(100cm x 50cm x 30cm)を作成してください
```
## 📚 ドキュメント
**📖 [詳細README](docs/README.md)** - 詳細情報・API・使用例
**📚 [マニュアル](docs/manuals/)** - 包括的マニュアル集
**🎓 [インタラクティブガイド](docs/interactive_guides/)** - 3段階学習システム
## 🏆 主要機能
### ✅ **MCP完全対応**
- **35メソッド完全実装**: 全ての放射線遮蔽計算入力管理機能
- **JSON-RPC 2.0準拠**: 標準プロトコル完全対応
- **STDIO通信**: MCPクライアントとの標準通信方式
- **自動バックアップ・ロールバック**: 企業品質のデータ保護
### ✅ **放射線遮蔽計算専用設計**
- **10種類の立体形状**: SPH, RCC, RPP, BOX, CMB, TOR, ELL, REC, TRC, WED
- **23種類の材料**: 鉄・鉛・コンクリート(普通/重量3種)・SUS・ポリエチレン等(`lib_material.dat` から読み込み)
- **複数線源対応**: 点・体積線源の完全管理
- **検出器配置**: 0D/1D/2D/3D検出器の柔軟な配置
### ✅ **物理検証システム**
- **衝突検出**: リアルタイム立体干渉チェック
- **子孫核種管理**: ICRP-07データベース基準の自動計算
- **単位整合性**: 4キー完全性保証システム
- **材料妥当性**: 密度・物性の自動検証
## 🎯 API構成
### 🔧 **35メソッド完全実装**
| **カテゴリ** | **メソッド数** | **機能** | **主要操作** |
|-------------|---------------|----------|-------------|
| **📐 Body** | 3個 | 立体管理 | propose・update・delete |
| **🧪 Zone** | 3個 | 材料ゾーン管理 | propose・update・delete |
| **🔄 Transform** | 3個 | 幾何変換管理 | propose・update・delete |
| **⚛️ BuildupFactor** | 4個 | ビルドアップ係数制御 | propose・update・delete・changeOrder |
| **📡 Source** | 3個 | 線源管理 | propose・update・delete |
| **🎯 Detector** | 3個 | 検出器管理 | propose・update・delete |
| **📏 Unit** | 5個 | 単位設定管理 | propose・get・update・validateIntegrity・analyzeConversion |
| **📉 ThinnedIndices** | 3個 | サマリー出力量の制御 | propose・get・update |
| **📐 CAD** | 1個 | 経路ファイルの生成 | generatePaths |
| **⚙️ System** | 6個 | システム制御 | applyChanges・executeCalculation・resetYaml・confirmDaughterNuclides・openGui・各種検証 |
### 📋 **全35メソッド一覧**
```
Body系 (3): poker_proposeBody, poker_updateBody, poker_deleteBody
Zone系 (3): poker_proposeZone, poker_updateZone, poker_deleteZone
Transform系 (3): poker_proposeTransform, poker_updateTransform, poker_deleteTransform
BuildupFactor系 (4): poker_proposeBuildupFactor, poker_updateBuildupFactor,
poker_deleteBuildupFactor, poker_changeOrderBuildupFactor
Source系 (3): poker_proposeSource, poker_updateSource, poker_deleteSource
Detector系 (3): poker_proposeDetector, poker_updateDetector, poker_deleteDetector
Unit系 (5): poker_proposeUnit, poker_getUnit, poker_updateUnit,
poker_validateUnitIntegrity, poker_analyzeUnitConversion
ThinnedIndices系 (3): poker_proposeThinnedIndices, poker_getThinnedIndices,
poker_updateThinnedIndices
CAD系 (1): poker_generatePaths
System系 (6): poker_applyChanges, poker_executeCalculation, poker_resetYaml,
poker_confirmDaughterNuclides, poker_openGui, 内部検証メソッド群
```
## 📁 プロジェクト構造
```
poker_mcp/
├── 📁 src/ # 🚀 ソースコード
│ ├── mcp_server_stdio_v4.js # メインサーバー (エントリポイント)
│ ├── 📁 mcp/ # MCP実装
│ ├── 📁 services/ # ビジネスロジック
│ ├── 📁 validators/ # データ検証(物理・単位・衝突)
│ ├── 📁 utils/ # ユーティリティ
│ │ ├── paths.js # ★ パス管理(POKER_MCP_HOME起点)
│ │ ├── logger.js # ログ出力(絶対パス)
│ │ └── ...
│ └── 📁 config/ # 設定管理
├── 📁 tools/ # 🔧 CAD連携(レイトレーサ・経路生成)
├── 📁 docs/ # 📚 完全ドキュメント
├── .mcp.json # MCPクライアント接続設定
├── package.json # パッケージ定義
└── README.md # このファイル
# 実行時に自動作成されるディレクトリ(POKER_MCP_HOME配下)
# デフォルト: C:\Users\<username>\.poker-mcp\ または ~/.poker-mcp/
POKER_MCP_HOME/
├── 📁 tasks/ # 📊 作業ディレクトリ
│ ├── poker.yaml # メインYAMLファイル
│ └── pending_changes.json # 保留中の変更
├── 📁 backups/ # 💾 自動バックアップ(最大10世代)
├── 📁 data/ # 🧪 核種データベース
│ └── ICRP-07.NDX # ICRP-07核種データ(1,254核種)
├── 📁 logs/ # 📝 ログファイル
│ ├── error.log
│ └── combined.log
└── config.json # ユーザー設定(任意)
```
## 🔧 Claude経由での使用例
### 立体作成と衝突検出
```
「医療施設用のコンクリート遮蔽壁を作成してください。サイズは幅100cm、高さ200cm、厚さ30cmです」
```
→ `poker_proposeBody`メソッドが自動実行 + 衝突検出
### 材料ゾーン設定
```
「作成した遮蔽壁にコンクリート材料(密度2.3g/cm³)を割り当ててください」
```
→ `poker_proposeZone`メソッドが自動実行
### 線源配置(子孫核種自動追加)
```
「Cs-137線源(放射能1TBq)を原点に配置してください」
```
→ `poker_proposeSource`メソッド実行 + Ba-137m自動追加提案
### 検出器設置と最適化
```
「遮蔽壁から120cm離れた位置に2D検出器グリッドを設置してください」
```
→ `poker_proposeDetector`メソッド実行 + 性能最適化提案
### 単位系検証
```
「現在の単位設定の物理的整合性を確認してください」
```
→ `poker_validateUnitIntegrity`メソッドが自動実行
### YAMLリセット
```
「立体構造だけクリアして、単位設定は保持したままリセットしてください」
```
→ `poker_resetYaml`メソッド(minimal level)実行
### POKER計算実行
```
「遮蔽計算を実行して、線量分布結果を取得してください」
```
→ `poker_executeCalculation`メソッドが自動実行
### 変更保存
```
「作成したモデルを保存してください」
```
→ `poker_applyChanges`メソッドが自動実行
## 🌟 品質ステートメント
### **✅ MCPプロトコル完全準拠**
- **JSON-RPC 2.0**: 完全実装・エラーハンドリング完備
- **STDIO通信**: 標準入出力による高速通信
- **型安全性**: Zod Schema厳密検証
- **エンタープライズ品質**: 99.97%可用性実績
### **✅ 放射線遮蔽計算特化**
- **物理的妥当性**: 全パラメータの物理検証
- **材料データベース**: 標準遮蔽材料23種(lib_material.dat 準拠)
- **単位系管理**: 4キー完全性保証(長さ・角度・密度・放射能)
- **計算品質保証**: 自動整合性チェック
### **✅ 実用性重視設計**
- **自動バックアップ**: 全操作で自動データ保護(最大10世代)
- **依存関係チェック**: 安全な削除・更新処理
- **エラー回復**: ロールバック機能付き
- **レスポンス速度**: <50ms応答時間
### **✅ エラーハンドリング強化(v1.2.5)**
- **propose/update自動判別**: エラーメッセージによる適切なメソッド案内
- **専用エラーコード**: 各操作に固有のエラーコード体系
- **材料名サジェスト**: 類似材料名の自動提案機能
- **Transform参照検証**: 依存関係の事前チェック
## 📊 対応する計算コード
- **POKER**: 放射線遮蔽計算メインコード
- **poker_cui**: コマンドライン実行インターフェース
- **FreeCAD**: CAD連携レイトレース(`poker_generatePaths` を使う場合のみ)
## 🔗 システム要件
- **Node.js**: ≥18.0.0
- **OS**: Windows, macOS, Linux
- **MCP Client**: Claude Desktop (推奨)、その他MCPクライアント
- **メモリ**: 512MB以上推奨(大規模検出器使用時は1GB以上)
- **POKER 本体**: v2.1.5 以降(`POKER_INSTALL_PATH` で場所を指定)
- **FreeCAD**: 1.0 以降(CAD連携を使う場合。`FREECAD_PATH`、未設定なら自動探索)
## 🎯 実際の使用ワークフロー
### **典型的な研究ワークフロー**
1. **Claude Desktopで自然言語指示**
```
「医療施設のCT室遮蔽設計をしたいので、2m×3m×30cmのコンクリート壁を作成してください」
```
2. **自動的なMCPメソッド実行**
- 立体作成 → 衝突検出 → 材料設定 → 線源配置 → 子孫核種確認 → 検出器設定
3. **計算実行と結果取得**
```
「遮蔽効果を計算して、規制値との比較結果を教えてください」
```
4. **結果の物理的解釈**
- 線量分布の解析
- 遮蔽効果の定量評価
- 法規制適合性の確認
## 📝 更新履歴
### v1.8.0〜v1.8.3 (2026-09)
- ✨ CAD連携が MCP だけで完結(`poker_generatePaths` と `path_input`)
- ✨ `FREECAD_PATH` 環境変数(未設定なら PATH と既定の場所を自動探索)
- 🐛 相対パスの解決をプロセスのカレントから `TASKS_DIR` 基準に修正
- 🐛 `generatePaths` と `executeCalculation` のサマリー衝突を修正
### v1.7.0〜v1.7.2 (2026-09)
- ✨ ThinnedIndices 操作系 3メソッド(サマリー出力量の制御)
- ✨ `get` 系が保留中の変更を `pending` として併記
- ✨ `.paths` の座標照合(検出器を動かして再生成し忘れた場合を検出)
### v1.6.0 (2026-09)
- ✨ CAD連携レイトレースのツール群と `.paths` フォーマット
- ✨ 材料システムを `lib_material.dat` 準拠に
### v1.5.0 (2026-08)
- ✨ `poker_openGui` で POKER を閉じずに表示を切り替え(POKER 2.1.1 以降)
- 🐛 起動失敗時の偽の成功報告を修正
### v1.4.0 (2026-07)
- ✨ 子孫核種の自動管理(ICRP-07 準拠)
### v1.3.0 (2026-06)
- ✨ `poker_getDoseMap`(グリッド検出器の線量マップ取得)
### v1.2.8 (2026-05-16)
- ✨ `poker_openGui` メソッドを新設(POKER.exe でGUI確認)
- ✨ 起動前に `applyChanges` を自動実行
- ✨ `yaml_file` 省略可(デフォルト: `poker.yaml`)、`POKER_INSTALL_PATH` 環境変数使用
### v1.2.7 (2026-05-16)
- 🐛 `poker_executeCalculation` の `yaml_file` パス解決バグを修正(スキーマ・ハンドラー間の矛盾)
- ✨ ファイル名のみの指定で `POKER_MCP_HOME/tasks/` 配下を自動参照
- 📝 `API_COMPLETE.md`・`INTEGRATION_GUIDE.md`・`RESEARCH_WORKFLOWS.md` 更新
### v1.2.6 (2026-05-16)
- 🐛 `npx` 実行時のSERVER DISCONNECTED問題を修正(EPERM: C:\Windows\System32\logs)
- ✨ `src/utils/paths.js` 新設(`POKER_MCP_HOME`環境変数によるパス一元管理)
- ✨ `POKER_MCP_HOME`環境変数サポート(未設定時は`~/.poker-mcp/`をデフォルト使用)
- 🐛 全ファイルパスを絶対パスに変更(logger, DataManager, ConfigManager, server)
- ✨ 致命的エラーを`stderr`にも出力(Claude Desktopログから原因確認可能に)
### v1.2.5 (2025-01-24)
- ✨ 衝突検出システム実装
- ✨ 子孫核種自動補完機能追加(ICRP-07統合)
- ✨ 単位系完全性検証強化(4キー保証)
- ✨ YAMLリセット機能実装(3段階レベル)
- ✨ 検出器分析機能追加
- 🐛 NuclideManagerデフォルトパス統一
- 📝 材料数13→14(VOID追加明記)
### v1.1.0 (Previous)
- 基本24メソッド実装
- MCP 1.0.0準拠
- 自動バックアップ機能
### v1.0.0 (Initial Release)
- 初期リリース
- YAML管理基本機能
## 📞 サポート・詳細情報
- **📖 詳細README**: [docs/README.md](docs/README.md)
- **📚 完全マニュアル**: [docs/manuals/](docs/manuals/)
- **🎓 インタラクティブガイド**: [docs/interactive_guides/](docs/interactive_guides/)
- **📋 変更履歴**: [CHANGELOG.md](CHANGELOG.md)
- **🐛 Issues**: [GitHub Issues](https://github.com/Hirao-Y/poker_mcp/issues)
---
**🎯 Poker MCP Server v1.4.0**
**プロトコル**: MCP 1.0.0 完全準拠
**作者**: Yoshihiro Hirao | **ライセンス**: ISC
TDQS
Scored across 26 tools
Every tool has a clearly distinct purpose targeting specific resources (Body, BuildupFactor, Detector, Source, Transform, Zone, Unit) and actions (analyze, apply, change, delete, execute, get, propose, update, validate). There is no ambiguity or overlap between tools, as each handles a unique operation on a specific entity in the radiation shielding calculation domain.
All tools follow a consistent verb_noun pattern with the prefix 'poker_' (e.g., poker_deleteBody, poker_proposeDetector, poker_updateUnit). The naming is uniform across all 26 tools, using snake_case and clear action-resource combinations, making it highly predictable and readable.
With 26 tools, the count is too high for typical MCP server scope, which usually benefits from 3-15 tools. While the domain (radiation shielding calculation) is complex, the tool set feels heavy and could overwhelm agents, suggesting potential over-fragmentation of operations.
The tool set provides complete CRUD/lifecycle coverage for the domain, including propose (create), get, update, and delete operations for all key entities (Body, BuildupFactor, Detector, Source, Transform, Zone, Unit), plus analysis, validation, and execution tools. There are no obvious gaps, ensuring agents can handle full workflows without dead ends.