Skip to main content
Glama
Hirao-Y

Poker Task Management MCP

by Hirao-Y

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
NameRequiredDescriptionDefault
cutoff_rateYesカットオフレート
divisionNo線源の領域分割パラメータ(typeがPOINT以外の場合に必須)
geometryNo線源形状パラメータ(typeがPOINT以外の場合に必須)
inventoryYes核種と放射能の組の配列
nameYes線源の名前(一意である必要があります)
positionNo線源の位置(x y z形式)、typeがPOINTの場合のみ必須
typeYes線源タイプ

Implementation Reference

  • 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;
      }
    },
  • 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']
    }
  • 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 })();
    });
  • 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;
          }
        }
      };
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Hirao-Y/poker_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server