poker-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +241 -0
  2. package/config/mcp-manifest.json +1713 -0
  3. package/config/package-lock.json +1335 -0
  4. package/config/poker_mcp.code-workspace +8 -0
  5. package/package.json +51 -0
  6. package/src/config/ConfigManager.js +120 -0
  7. package/src/config/default.json +62 -0
  8. package/src/mcp/handlers/bodyHandlers.js +63 -0
  9. package/src/mcp/handlers/buildupFactorHandlers.js +43 -0
  10. package/src/mcp/handlers/calculationHandlers.js +265 -0
  11. package/src/mcp/handlers/detectorHandlers.js +201 -0
  12. package/src/mcp/handlers/index.js +43 -0
  13. package/src/mcp/handlers/sourceHandlers.js +25 -0
  14. package/src/mcp/handlers/transformHandlers.js +26 -0
  15. package/src/mcp/handlers/unitHandlers.js +305 -0
  16. package/src/mcp/handlers/zoneHandlers.js +83 -0
  17. package/src/mcp/middleware/errorHandler.js +49 -0
  18. package/src/mcp/middleware/requestValidator.js +129 -0
  19. package/src/mcp/server.js +76 -0
  20. package/src/mcp/tools/bodyTools.js +185 -0
  21. package/src/mcp/tools/buildupFactorTools.js +82 -0
  22. package/src/mcp/tools/calculationTools.js +58 -0
  23. package/src/mcp/tools/commonTools.js +22 -0
  24. package/src/mcp/tools/detectorTools.js +131 -0
  25. package/src/mcp/tools/index.js +34 -0
  26. package/src/mcp/tools/sourceTools.js +726 -0
  27. package/src/mcp/tools/sourceTools_fixed_part2.js +41 -0
  28. package/src/mcp/tools/transformTools.js +73 -0
  29. package/src/mcp/tools/unitTools.js +137 -0
  30. package/src/mcp/tools/zoneTools.js +65 -0
  31. package/src/mcp_server_stdio_v4.js +45 -0
  32. package/src/routes/restApi.js +184 -0
  33. package/src/services/CalculationService.js +525 -0
  34. package/src/services/DataManager.js +738 -0
  35. package/src/services/TaskManager.js +1622 -0
  36. package/src/utils/MaterialAlternatives.js +189 -0
  37. package/src/utils/errorHandler.js +68 -0
  38. package/src/utils/errors.js +37 -0
  39. package/src/utils/logger.js +24 -0
  40. package/src/utils/logger_no_color.js +28 -0
  41. package/src/utils/mcpErrors.js +225 -0
  42. package/src/validators/CMBValidator.js +191 -0
  43. package/src/validators/DetectorValidator.js +512 -0
  44. package/src/validators/ManifestValidator.js +249 -0
  45. package/src/validators/NuclideValidator.js +171 -0
  46. package/src/validators/PhysicsValidator.js +401 -0
  47. package/src/validators/PhysicsValidatorSimple.js +87 -0
  48. package/src/validators/SourceValidator.js +515 -0
  49. package/src/validators/TransformValidator.js +472 -0
  50. package/src/validators/UnitValidator.js +562 -0
@@ -0,0 +1,726 @@
1
+ // mcp/tools/sourceTools.js - Enhanced with oneOf geometry structure (マニフェスト完全対応版)
2
+ export const sourceTools = [
3
+ {
4
+ name: 'poker_proposeSource',
5
+ description: '新しい線源を提案します',
6
+ inputSchema: {
7
+ type: 'object',
8
+ properties: {
9
+ name: {
10
+ type: 'string',
11
+ description: '線源の名前(一意である必要があります)',
12
+ pattern: '^[a-zA-Z0-9_]+$',
13
+ maxLength: 50
14
+ },
15
+ type: {
16
+ type: 'string',
17
+ description: '線源タイプ',
18
+ enum: ['POINT', 'SPH', 'RCC', 'RPP', 'BOX']
19
+ },
20
+ position: {
21
+ type: 'string',
22
+ description: '線源の位置(x y z形式)、typeがPOINTの場合のみ必須',
23
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
24
+ },
25
+ inventory: {
26
+ type: 'array',
27
+ description: '核種と放射能の組の配列',
28
+ minItems: 1,
29
+ items: {
30
+ type: 'object',
31
+ properties: {
32
+ nuclide: {
33
+ type: 'string',
34
+ description: '核種名(元素記号と質量数の連結形式、例: Cs137, Co60)',
35
+ pattern: '^[A-Z][a-z]{0,2}[0-9]{1,3}[a-z]?$'
36
+ },
37
+ radioactivity: {
38
+ type: 'number',
39
+ description: '放射能(単位Bq)',
40
+ minimum: 0.001,
41
+ maximum: 1e15
42
+ }
43
+ },
44
+ required: ['nuclide', 'radioactivity'],
45
+ additionalProperties: false
46
+ }
47
+ },
48
+ geometry: {
49
+ type: 'object',
50
+ description: '線源形状パラメータ(typeがPOINT以外の場合に必須)',
51
+ oneOf: [
52
+ {
53
+ title: 'BOX線源形状',
54
+ properties: {
55
+ vertex: {
56
+ type: 'string',
57
+ description: '頂点座標(x y z形式)',
58
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
59
+ },
60
+ edge_1: {
61
+ type: 'string',
62
+ description: 'エッジ1ベクトル(x y z形式)',
63
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
64
+ },
65
+ edge_2: {
66
+ type: 'string',
67
+ description: 'エッジ2ベクトル(x y z形式)',
68
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
69
+ },
70
+ edge_3: {
71
+ type: 'string',
72
+ description: 'エッジ3ベクトル(x y z形式)',
73
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
74
+ },
75
+ transform: {
76
+ type: 'string',
77
+ description: '適用する変換名',
78
+ pattern: '^[a-zA-Z0-9_]+$',
79
+ maxLength: 50
80
+ }
81
+ },
82
+ required: ['vertex', 'edge_1', 'edge_2', 'edge_3'],
83
+ additionalProperties: false
84
+ },
85
+ {
86
+ title: 'RPP線源形状',
87
+ properties: {
88
+ min: {
89
+ type: 'string',
90
+ description: '最小座標(x y z形式)',
91
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
92
+ },
93
+ max: {
94
+ type: 'string',
95
+ description: '最大座標(x y z形式)',
96
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
97
+ },
98
+ transform: {
99
+ type: 'string',
100
+ description: '適用する変換名',
101
+ pattern: '^[a-zA-Z0-9_]+$',
102
+ maxLength: 50
103
+ }
104
+ },
105
+ required: ['min', 'max'],
106
+ additionalProperties: false
107
+ },
108
+ {
109
+ title: 'SPH線源形状',
110
+ properties: {
111
+ center: {
112
+ type: 'string',
113
+ description: '中心座標(x y z形式)',
114
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
115
+ },
116
+ radius: {
117
+ type: 'number',
118
+ description: '半径',
119
+ minimum: 0.001,
120
+ maximum: 10000
121
+ },
122
+ transform: {
123
+ type: 'string',
124
+ description: '適用する変換名',
125
+ pattern: '^[a-zA-Z0-9_]+$',
126
+ maxLength: 50
127
+ }
128
+ },
129
+ required: ['center', 'radius'],
130
+ additionalProperties: false
131
+ },
132
+ {
133
+ title: 'RCC線源形状',
134
+ properties: {
135
+ bottom_center: {
136
+ type: 'string',
137
+ description: '底面中心座標(x y z形式)',
138
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
139
+ },
140
+ height_vector: {
141
+ type: 'string',
142
+ description: '高さベクトル(x y z形式)',
143
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
144
+ },
145
+ radius: {
146
+ type: 'number',
147
+ description: '半径',
148
+ minimum: 0.001,
149
+ maximum: 10000
150
+ },
151
+ transform: {
152
+ type: 'string',
153
+ description: '適用する変換名',
154
+ pattern: '^[a-zA-Z0-9_]+$',
155
+ maxLength: 50
156
+ }
157
+ },
158
+ required: ['bottom_center', 'height_vector', 'radius'],
159
+ additionalProperties: false
160
+ }
161
+ ]
162
+ },
163
+ division: {
164
+ type: 'object',
165
+ description: '線源の領域分割パラメータ(typeがPOINT以外の場合に必須)',
166
+ oneOf: [
167
+ {
168
+ title: 'BOX線源分割(直交座標系)',
169
+ properties: {
170
+ edge_1: {
171
+ type: 'object',
172
+ properties: {
173
+ type: {
174
+ type: 'string',
175
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
176
+ default: 'UNIFORM'
177
+ },
178
+ number: {
179
+ type: 'integer',
180
+ minimum: 2,
181
+ maximum: 1000
182
+ },
183
+ min: {
184
+ type: 'number',
185
+ minimum: 0.0,
186
+ maximum: 1.0,
187
+ default: 0.0
188
+ },
189
+ max: {
190
+ type: 'number',
191
+ minimum: 0.0,
192
+ maximum: 1.0,
193
+ default: 1.0
194
+ }
195
+ },
196
+ required: ['type', 'number'],
197
+ additionalProperties: false
198
+ },
199
+ edge_2: {
200
+ type: 'object',
201
+ properties: {
202
+ type: {
203
+ type: 'string',
204
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
205
+ default: 'UNIFORM'
206
+ },
207
+ number: {
208
+ type: 'integer',
209
+ minimum: 2,
210
+ maximum: 1000
211
+ },
212
+ min: {
213
+ type: 'number',
214
+ minimum: 0.0,
215
+ maximum: 1.0,
216
+ default: 0.0
217
+ },
218
+ max: {
219
+ type: 'number',
220
+ minimum: 0.0,
221
+ maximum: 1.0,
222
+ default: 1.0
223
+ }
224
+ },
225
+ required: ['type', 'number'],
226
+ additionalProperties: false
227
+ },
228
+ edge_3: {
229
+ type: 'object',
230
+ properties: {
231
+ type: {
232
+ type: 'string',
233
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
234
+ default: 'UNIFORM'
235
+ },
236
+ number: {
237
+ type: 'integer',
238
+ minimum: 2,
239
+ maximum: 1000
240
+ },
241
+ min: {
242
+ type: 'number',
243
+ minimum: 0.0,
244
+ maximum: 1.0,
245
+ default: 0.0
246
+ },
247
+ max: {
248
+ type: 'number',
249
+ minimum: 0.0,
250
+ maximum: 1.0,
251
+ default: 1.0
252
+ }
253
+ },
254
+ required: ['type', 'number'],
255
+ additionalProperties: false
256
+ }
257
+ },
258
+ required: ['edge_1', 'edge_2', 'edge_3'],
259
+ additionalProperties: false
260
+ },
261
+ {
262
+ title: 'RPP線源分割(直交座標系)',
263
+ properties: {
264
+ edge_1: {
265
+ type: 'object',
266
+ properties: {
267
+ type: {
268
+ type: 'string',
269
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
270
+ default: 'UNIFORM'
271
+ },
272
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
273
+ min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 },
274
+ max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 }
275
+ },
276
+ required: ['type', 'number'],
277
+ additionalProperties: false
278
+ },
279
+ edge_2: {
280
+ type: 'object',
281
+ properties: {
282
+ type: {
283
+ type: 'string',
284
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
285
+ default: 'UNIFORM'
286
+ },
287
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
288
+ min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 },
289
+ max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 }
290
+ },
291
+ required: ['type', 'number'],
292
+ additionalProperties: false
293
+ },
294
+ edge_3: {
295
+ type: 'object',
296
+ properties: {
297
+ type: {
298
+ type: 'string',
299
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
300
+ default: 'UNIFORM'
301
+ },
302
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
303
+ min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 },
304
+ max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 }
305
+ },
306
+ required: ['type', 'number'],
307
+ additionalProperties: false
308
+ }
309
+ },
310
+ required: ['edge_1', 'edge_2', 'edge_3'],
311
+ additionalProperties: false
312
+ },
313
+ {
314
+ title: 'SPH線源分割(球面座標系)',
315
+ properties: {
316
+ r: {
317
+ type: 'object',
318
+ description: 'SPH: 動径方向分割',
319
+ properties: {
320
+ type: {
321
+ type: 'string',
322
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
323
+ default: 'UNIFORM'
324
+ },
325
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
326
+ min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 },
327
+ max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 }
328
+ },
329
+ required: ['type', 'number'],
330
+ additionalProperties: false
331
+ },
332
+ theta: {
333
+ type: 'object',
334
+ description: 'SPH: 極角方向分割',
335
+ properties: {
336
+ type: {
337
+ type: 'string',
338
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
339
+ default: 'UNIFORM'
340
+ },
341
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
342
+ min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 },
343
+ max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 }
344
+ },
345
+ required: ['type', 'number'],
346
+ additionalProperties: false
347
+ },
348
+ phi: {
349
+ type: 'object',
350
+ description: 'SPH: 方位角方向分割',
351
+ properties: {
352
+ type: {
353
+ type: 'string',
354
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
355
+ default: 'UNIFORM'
356
+ },
357
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
358
+ min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 },
359
+ max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 }
360
+ },
361
+ required: ['type', 'number'],
362
+ additionalProperties: false
363
+ }
364
+ },
365
+ required: ['r', 'theta', 'phi'],
366
+ additionalProperties: false
367
+ },
368
+ {
369
+ title: 'RCC線源分割(円柱座標系)',
370
+ properties: {
371
+ r: {
372
+ type: 'object',
373
+ description: 'RCC: 動径方向分割',
374
+ properties: {
375
+ type: {
376
+ type: 'string',
377
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
378
+ default: 'UNIFORM'
379
+ },
380
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
381
+ min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 },
382
+ max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 }
383
+ },
384
+ required: ['type', 'number'],
385
+ additionalProperties: false
386
+ },
387
+ phi: {
388
+ type: 'object',
389
+ description: 'RCC: 方位角方向分割',
390
+ properties: {
391
+ type: {
392
+ type: 'string',
393
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
394
+ default: 'UNIFORM'
395
+ },
396
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
397
+ min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 },
398
+ max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 }
399
+ },
400
+ required: ['type', 'number'],
401
+ additionalProperties: false
402
+ },
403
+ z: {
404
+ type: 'object',
405
+ description: 'RCC: 軸方向分割',
406
+ properties: {
407
+ type: {
408
+ type: 'string',
409
+ enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'],
410
+ default: 'UNIFORM'
411
+ },
412
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
413
+ min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 },
414
+ max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 }
415
+ },
416
+ required: ['type', 'number'],
417
+ additionalProperties: false
418
+ }
419
+ },
420
+ required: ['r', 'phi', 'z'],
421
+ additionalProperties: false
422
+ }
423
+ ]
424
+ },
425
+ cutoff_rate: {
426
+ type: 'number',
427
+ description: 'カットオフレート',
428
+ minimum: 0.0001,
429
+ maximum: 1,
430
+ default: 0.0001
431
+ }
432
+ },
433
+ required: ['name', 'type', 'inventory', 'cutoff_rate']
434
+ }
435
+ },
436
+ {
437
+ name: 'poker_updateSource',
438
+ description: '既存放射線源のパラメータを更新します',
439
+ inputSchema: {
440
+ type: 'object',
441
+ properties: {
442
+ name: {
443
+ type: 'string',
444
+ description: '更新対象線源名'
445
+ },
446
+ position: {
447
+ type: 'string',
448
+ description: '新しい線源位置 (x y z形式)'
449
+ },
450
+ inventory: {
451
+ type: 'array',
452
+ description: '新しい核種インベントリ',
453
+ items: {
454
+ type: 'object',
455
+ properties: {
456
+ nuclide: {
457
+ type: 'string',
458
+ description: '核種名(連結形式、例: Cs137, Co60)',
459
+ pattern: '^[A-Z][a-z]{0,2}[0-9]{1,3}[a-z]?$'
460
+ },
461
+ radioactivity: {
462
+ type: 'number',
463
+ description: '放射能 (Bq)',
464
+ minimum: 0.001,
465
+ maximum: 1e15
466
+ }
467
+ },
468
+ required: ['nuclide', 'radioactivity']
469
+ },
470
+ minItems: 1
471
+ },
472
+ geometry: {
473
+ type: 'object',
474
+ description: '新しい線源形状パラメータ(完全なoneOf制約付き)',
475
+ oneOf: [
476
+ {
477
+ title: 'BOX線源形状',
478
+ properties: {
479
+ vertex: {
480
+ type: 'string',
481
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
482
+ },
483
+ edge_1: {
484
+ type: 'string',
485
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
486
+ },
487
+ edge_2: {
488
+ type: 'string',
489
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
490
+ },
491
+ edge_3: {
492
+ type: 'string',
493
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
494
+ },
495
+ transform: {
496
+ type: 'string',
497
+ description: '適用する変換名',
498
+ pattern: '^[a-zA-Z0-9_]+$',
499
+ maxLength: 50
500
+ }
501
+ },
502
+ required: ['vertex', 'edge_1', 'edge_2', 'edge_3'],
503
+ additionalProperties: false
504
+ },
505
+ {
506
+ title: 'RPP線源形状',
507
+ properties: {
508
+ min: {
509
+ type: 'string',
510
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
511
+ },
512
+ max: {
513
+ type: 'string',
514
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
515
+ },
516
+ transform: {
517
+ type: 'string',
518
+ description: '適用する変換名',
519
+ pattern: '^[a-zA-Z0-9_]+$',
520
+ maxLength: 50
521
+ }
522
+ },
523
+ required: ['min', 'max'],
524
+ additionalProperties: false
525
+ },
526
+ {
527
+ title: 'SPH線源形状',
528
+ properties: {
529
+ center: {
530
+ type: 'string',
531
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
532
+ },
533
+ radius: {
534
+ type: 'number',
535
+ minimum: 0.001,
536
+ maximum: 10000
537
+ },
538
+ transform: {
539
+ type: 'string',
540
+ description: '適用する変換名',
541
+ pattern: '^[a-zA-Z0-9_]+$',
542
+ maxLength: 50
543
+ }
544
+ },
545
+ required: ['center', 'radius'],
546
+ additionalProperties: false
547
+ },
548
+ {
549
+ title: 'RCC線源形状',
550
+ properties: {
551
+ bottom_center: {
552
+ type: 'string',
553
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
554
+ },
555
+ height_vector: {
556
+ type: 'string',
557
+ pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$'
558
+ },
559
+ radius: {
560
+ type: 'number',
561
+ minimum: 0.001,
562
+ maximum: 10000
563
+ },
564
+ transform: {
565
+ type: 'string',
566
+ description: '適用する変換名',
567
+ pattern: '^[a-zA-Z0-9_]+$',
568
+ maxLength: 50
569
+ }
570
+ },
571
+ required: ['bottom_center', 'height_vector', 'radius'],
572
+ additionalProperties: false
573
+ }
574
+ ]
575
+ },
576
+ division: {
577
+ type: 'object',
578
+ description: '新しい線源分割パラメータ(完全なoneOf制約付き)',
579
+ oneOf: [
580
+ {
581
+ title: 'BOX線源分割',
582
+ properties: {
583
+ edge_1: {
584
+ type: 'object',
585
+ properties: {
586
+ type: { enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'] },
587
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
588
+ min: { type: 'number', minimum: 0.0, maximum: 1.0 },
589
+ max: { type: 'number', minimum: 0.0, maximum: 1.0 }
590
+ },
591
+ required: ['type', 'number'],
592
+ additionalProperties: false
593
+ },
594
+ edge_2: {
595
+ type: 'object',
596
+ properties: {
597
+ type: { enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'] },
598
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
599
+ min: { type: 'number', minimum: 0.0, maximum: 1.0 },
600
+ max: { type: 'number', minimum: 0.0, maximum: 1.0 }
601
+ },
602
+ required: ['type', 'number'],
603
+ additionalProperties: false
604
+ },
605
+ edge_3: {
606
+ type: 'object',
607
+ properties: {
608
+ type: { enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'] },
609
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
610
+ min: { type: 'number', minimum: 0.0, maximum: 1.0 },
611
+ max: { type: 'number', minimum: 0.0, maximum: 1.0 }
612
+ },
613
+ required: ['type', 'number'],
614
+ additionalProperties: false
615
+ }
616
+ },
617
+ required: ['edge_1', 'edge_2', 'edge_3'],
618
+ additionalProperties: false
619
+ },
620
+ {
621
+ title: 'SPH線源分割',
622
+ properties: {
623
+ r: {
624
+ type: 'object',
625
+ properties: {
626
+ type: { enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'] },
627
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
628
+ min: { type: 'number', minimum: 0.0, maximum: 1.0 },
629
+ max: { type: 'number', minimum: 0.0, maximum: 1.0 }
630
+ },
631
+ required: ['type', 'number'],
632
+ additionalProperties: false
633
+ },
634
+ theta: {
635
+ type: 'object',
636
+ properties: {
637
+ type: { enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'] },
638
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
639
+ min: { type: 'number', minimum: 0.0, maximum: 1.0 },
640
+ max: { type: 'number', minimum: 0.0, maximum: 1.0 }
641
+ },
642
+ required: ['type', 'number'],
643
+ additionalProperties: false
644
+ },
645
+ phi: {
646
+ type: 'object',
647
+ properties: {
648
+ type: { enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'] },
649
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
650
+ min: { type: 'number', minimum: 0.0, maximum: 1.0 },
651
+ max: { type: 'number', minimum: 0.0, maximum: 1.0 }
652
+ },
653
+ required: ['type', 'number'],
654
+ additionalProperties: false
655
+ }
656
+ },
657
+ required: ['r', 'theta', 'phi'],
658
+ additionalProperties: false
659
+ },
660
+ {
661
+ title: 'RCC線源分割',
662
+ properties: {
663
+ r: {
664
+ type: 'object',
665
+ properties: {
666
+ type: { enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'] },
667
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
668
+ min: { type: 'number', minimum: 0.0, maximum: 1.0 },
669
+ max: { type: 'number', minimum: 0.0, maximum: 1.0 }
670
+ },
671
+ required: ['type', 'number'],
672
+ additionalProperties: false
673
+ },
674
+ phi: {
675
+ type: 'object',
676
+ properties: {
677
+ type: { enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'] },
678
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
679
+ min: { type: 'number', minimum: 0.0, maximum: 1.0 },
680
+ max: { type: 'number', minimum: 0.0, maximum: 1.0 }
681
+ },
682
+ required: ['type', 'number'],
683
+ additionalProperties: false
684
+ },
685
+ z: {
686
+ type: 'object',
687
+ properties: {
688
+ type: { enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'] },
689
+ number: { type: 'integer', minimum: 2, maximum: 1000 },
690
+ min: { type: 'number', minimum: 0.0, maximum: 1.0 },
691
+ max: { type: 'number', minimum: 0.0, maximum: 1.0 }
692
+ },
693
+ required: ['type', 'number'],
694
+ additionalProperties: false
695
+ }
696
+ },
697
+ required: ['r', 'phi', 'z'],
698
+ additionalProperties: false
699
+ }
700
+ ]
701
+ },
702
+ cutoff_rate: {
703
+ type: 'number',
704
+ description: '新しいカットオフレート',
705
+ minimum: 0,
706
+ maximum: 1
707
+ }
708
+ },
709
+ required: ['name']
710
+ }
711
+ },
712
+ {
713
+ name: 'poker_deleteSource',
714
+ description: '放射線源を削除します',
715
+ inputSchema: {
716
+ type: 'object',
717
+ properties: {
718
+ name: {
719
+ type: 'string',
720
+ description: '削除対象線源名'
721
+ }
722
+ },
723
+ required: ['name']
724
+ }
725
+ }
726
+ ];