poker_proposeSource
Propose new radiation sources for Monte Carlo particle transport simulations by defining geometry, nuclide inventory, and spatial division parameters.
Instructions
新しい線源を提案します
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cutoff_rate | Yes | カットオフレート | |
| division | No | 線源の領域分割パラメータ(typeがPOINT以外の場合に必須) | |
| geometry | No | 線源形状パラメータ(typeがPOINT以外の場合に必須) | |
| inventory | Yes | 核種と放射能の組の配列 | |
| name | Yes | 線源の名前(一意である必要があります) | |
| position | No | 線源の位置(x y z形式)、typeがPOINTの場合のみ必須 | |
| type | Yes | 線源タイプ |
Implementation Reference
- src/mcp/handlers/sourceHandlers.js:8-32 (handler)The handler function that executes the logic for the 'poker_proposeSource' tool. It validates the input using validateSourceRequest and delegates the core operation to taskManager.proposeSource, handling specific MCP propose errors.async proposeSource(args) { try { validateSourceRequest(args); const result = await taskManager.proposeSource(args); return { success: true, message: result }; } catch (error) { logger.error('proposeSourceハンドラーエラー', { args, error: error.message }); // マニフェスト仕様のpropose専用エラーコード処理 if (error.code === -32078) { return { success: false, error: error.message, details: { errorCode: error.code, suggestion: 'updateSourceメソッドを使用してください', existingObject: args.name, objectType: '線源' } }; } throw error; } },
- src/mcp/tools/sourceTools.js:6-434 (schema)The input schema defining the parameters and validation rules for the 'poker_proposeSource' tool, including complex oneOf structures for geometry and division based on source type.inputSchema: { type: 'object', properties: { name: { type: 'string', description: '線源の名前(一意である必要があります)', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 }, type: { type: 'string', description: '線源タイプ', enum: ['POINT', 'SPH', 'RCC', 'RPP', 'BOX'] }, position: { type: 'string', description: '線源の位置(x y z形式)、typeがPOINTの場合のみ必須', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, inventory: { type: 'array', description: '核種と放射能の組の配列', minItems: 1, items: { type: 'object', properties: { nuclide: { type: 'string', description: '核種名(元素記号と質量数の連結形式、例: Cs137, Co60)', pattern: '^[A-Z][a-z]{0,2}[0-9]{1,3}[a-z]?$' }, radioactivity: { type: 'number', description: '放射能(単位Bq)', minimum: 0.001, maximum: 1e15 } }, required: ['nuclide', 'radioactivity'], additionalProperties: false } }, geometry: { type: 'object', description: '線源形状パラメータ(typeがPOINT以外の場合に必須)', oneOf: [ { title: 'BOX線源形状', properties: { vertex: { type: 'string', description: '頂点座標(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, edge_1: { type: 'string', description: 'エッジ1ベクトル(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, edge_2: { type: 'string', description: 'エッジ2ベクトル(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, edge_3: { type: 'string', description: 'エッジ3ベクトル(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, transform: { type: 'string', description: '適用する変換名', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 } }, required: ['vertex', 'edge_1', 'edge_2', 'edge_3'], additionalProperties: false }, { title: 'RPP線源形状', properties: { min: { type: 'string', description: '最小座標(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, max: { type: 'string', description: '最大座標(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, transform: { type: 'string', description: '適用する変換名', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 } }, required: ['min', 'max'], additionalProperties: false }, { title: 'SPH線源形状', properties: { center: { type: 'string', description: '中心座標(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, radius: { type: 'number', description: '半径', minimum: 0.001, maximum: 10000 }, transform: { type: 'string', description: '適用する変換名', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 } }, required: ['center', 'radius'], additionalProperties: false }, { title: 'RCC線源形状', properties: { bottom_center: { type: 'string', description: '底面中心座標(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, height_vector: { type: 'string', description: '高さベクトル(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, radius: { type: 'number', description: '半径', minimum: 0.001, maximum: 10000 }, transform: { type: 'string', description: '適用する変換名', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 } }, required: ['bottom_center', 'height_vector', 'radius'], additionalProperties: false } ] }, division: { type: 'object', description: '線源の領域分割パラメータ(typeがPOINT以外の場合に必須)', oneOf: [ { title: 'BOX線源分割(直交座標系)', properties: { edge_1: { type: 'object', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false }, edge_2: { type: 'object', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false }, edge_3: { type: 'object', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false } }, required: ['edge_1', 'edge_2', 'edge_3'], additionalProperties: false }, { title: 'RPP線源分割(直交座標系)', properties: { edge_1: { type: 'object', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false }, edge_2: { type: 'object', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false }, edge_3: { type: 'object', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false } }, required: ['edge_1', 'edge_2', 'edge_3'], additionalProperties: false }, { title: 'SPH線源分割(球面座標系)', properties: { r: { type: 'object', description: 'SPH: 動径方向分割', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false }, theta: { type: 'object', description: 'SPH: 極角方向分割', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false }, phi: { type: 'object', description: 'SPH: 方位角方向分割', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false } }, required: ['r', 'theta', 'phi'], additionalProperties: false }, { title: 'RCC線源分割(円柱座標系)', properties: { r: { type: 'object', description: 'RCC: 動径方向分割', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false }, phi: { type: 'object', description: 'RCC: 方位角方向分割', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false }, z: { type: 'object', description: 'RCC: 軸方向分割', properties: { type: { type: 'string', enum: ['UNIFORM', 'GAUSS_FIRST', 'GAUSS_LAST', 'GAUSS_BOTH', 'GAUSS_CENTER'], default: 'UNIFORM' }, number: { type: 'integer', minimum: 2, maximum: 1000 }, min: { type: 'number', minimum: 0.0, maximum: 1.0, default: 0.0 }, max: { type: 'number', minimum: 0.0, maximum: 1.0, default: 1.0 } }, required: ['type', 'number'], additionalProperties: false } }, required: ['r', 'phi', 'z'], additionalProperties: false } ] }, cutoff_rate: { type: 'number', description: 'カットオフレート', minimum: 0.0001, maximum: 1, default: 0.0001 } }, required: ['name', 'type', 'inventory', 'cutoff_rate'] }
- src/mcp/server.js:43-57 (registration)The MCP server registration for tool calls. Dynamically maps tool names like 'poker_proposeSource' to handler functions (e.g., 'proposeSource') by removing 'poker_' prefix and invoking the corresponding handler.this.server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; logger.info(`MCP Tool実行: ${name}`, { args }); // ハンドラー名をツール名から生成(プレフィックス除去) const handlerName = name.replace('poker_', ''); const handler = this.handlers[handlerName]; if (!handler) { throw new McpError(ErrorCode.MethodNotFound, `Unknown tool: ${name}`); } return await safeExecute(async () => handler(args), { tool: name })(); });
- src/mcp/server.js:38-40 (registration)Registration of the tool list handler that returns allTools, which includes the 'poker_proposeSource' tool definition.this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: allTools }; });
- Factory function that creates the source handlers object, including the proposeSource handler, injected with taskManager.export function createSourceHandlers(taskManager) { return { async proposeSource(args) { try { validateSourceRequest(args); const result = await taskManager.proposeSource(args); return { success: true, message: result }; } catch (error) { logger.error('proposeSourceハンドラーエラー', { args, error: error.message }); // マニフェスト仕様のpropose専用エラーコード処理 if (error.code === -32078) { return { success: false, error: error.message, details: { errorCode: error.code, suggestion: 'updateSourceメソッドを使用してください', existingObject: args.name, objectType: '線源' } }; } throw error; } }, async updateSource(args) { try { validateUpdateSourceRequest(args); const { name, ...updates } = args; const result = await taskManager.updateSource(name, updates); return { success: true, message: result }; } catch (error) { logger.error('updateSourceハンドラーエラー', { args, error: error.message }); // マニフェスト仕様のupdate専用エラーコード処理 if (error.code === -32079) { return { success: false, error: error.message, details: { errorCode: error.code, suggestion: 'proposeSourceメソッドを使用してください', missingObject: args.name, objectType: '線源' } }; } throw error; } }, async deleteSource(args) { try { validateDeleteSourceRequest(args); const result = await taskManager.deleteSource(args.name); return { success: true, message: result }; } catch (error) { logger.error('deleteSourceハンドラーエラー', { args, error: error.message }); throw error; } } }; }