Skip to main content
Glama
Hirao-Y

Poker Task Management MCP

by Hirao-Y

poker_proposeDetector

Propose new detectors by defining unique names, origin coordinates, grid dimensions, and optional transformations for task management in poker simulations.

Instructions

新しい検出器を提案します

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
gridNoエッジベクトルと分割数の組の配列(配列の数が検出器の次元を表す: 1D/2D/3D)
nameYes検出器の名前(一意である必要があります)
originYes検出器の基準位置(x y z形式)
show_path_traceYes透過線の経路トレースをサマリーに出力するか
transformNo適用する変換名(オプション)

Implementation Reference

  • Core handler function 'proposeDetector' for the MCP tool 'poker_proposeDetector'. Parses arguments, validates, delegates to TaskManager, performs structure analysis, and returns formatted response with success status and detector analysis.
    async proposeDetector(args) { try { const { name, origin, show_path_trace, transform = null } = args; let grid = args.grid; // デフォルト値なしで取得 // gridパラメータの文字列→配列変換 if (typeof grid === 'string') { try { grid = JSON.parse(grid); } catch (e) { grid = undefined; } } // show_path_traceの型変換(文字列から真偽値へ) const pathTrace = typeof show_path_trace === 'string' ? show_path_trace === 'true' : show_path_trace; // show_path_trace が必須になったことを確認 if (pathTrace === undefined) { throw new ValidationError('show_path_trace は必須パラメータです'); } logger.info('検出器提案開始', { name, origin, gridCount: grid ? grid.length : 0, hasTransform: !!transform, pathTrace: pathTrace }); // DetectorValidator統合のため、TaskManagerの包括的検証を利用 const result = await taskManager.proposeDetector(name, origin, pathTrace, { grid, transform }); // 検出器の分析情報を追加取得 const detectorData = { name, origin, show_path_trace: pathTrace, ...(grid !== undefined && { grid }), ...(transform && { transform }) }; const analysisResult = taskManager.analyzeDetectorStructure(detectorData); logger.info('検出器提案完了', { name, dimension: analysisResult.dimension, complexity: analysisResult.complexity }); return { success: true, message: result, detector: { name, type: analysisResult.type, dimension: analysisResult.dimension, complexity: analysisResult.complexity, origin, gridDimensions: grid ? grid.length : 0, hasTransform: !!transform, pathTrace: show_path_trace }, analysis: { isOptimal: analysisResult.isOptimal, suggestions: analysisResult.suggestions, performance: analysisResult.performance } }; } catch (error) { logger.error('検出器提案エラー', { args, error: error.message }); // マニフェスト仕様のpropose専用エラーコード処理 if (error.code === -32082) { return { success: false, error: error.message, details: { errorCode: error.code, suggestion: 'updateDetectorメソッドを使用してください', existingObject: args.name, objectType: '検出器' } }; } throw error; } },
  • Tool specification for 'poker_proposeDetector' including name, description, and detailed inputSchema with oneOf for point detectors (no grid) and volumetric detectors (with grid array).
    { name: 'poker_proposeDetector', description: '新しい検出器を提案します', inputSchema: { type: 'object', oneOf: [ { // 点検出器スキーマ(gridプロパティなし) properties: { name: { type: 'string', description: '検出器の名前(一意である必要があります)', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 }, origin: { 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 }, show_path_trace: { type: 'boolean', description: '透過線の経路トレースをサマリーに出力するか', default: false } }, required: ['name', 'origin', 'show_path_trace'], additionalProperties: false, not: { required: ['grid'] } // gridの存在を禁止 }, { // 線/面/体積検出器スキーマ(gridプロパティ必須) properties: { name: { type: 'string', description: '検出器の名前(一意である必要があります)', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 }, origin: { type: 'string', description: '検出器の基準位置(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, grid: { type: 'array', description: 'エッジベクトルと分割数の組の配列(1要素=線検出器、2要素=面検出器、3要素=体積検出器)', minItems: 1, maxItems: 3, items: { type: 'object', properties: { edge: { type: 'string', description: 'エッジベクトル(x y z形式)', pattern: '^-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?\\s+-?\\d+(\\.\\d+)?$' }, number: { type: 'integer', description: '分割数', minimum: 1, maximum: 10000 } }, required: ['edge', 'number'], additionalProperties: false } }, transform: { type: 'string', description: '適用する変換名(オプション)', pattern: '^[a-zA-Z0-9_]+$', maxLength: 50 }, show_path_trace: { type: 'boolean', description: '透過線の経路トレースをサマリーに出力するか', default: false } }, required: ['name', 'origin', 'grid', 'show_path_trace'], additionalProperties: false } ] } },
  • MCP server request handler for tool calls. Maps tool name 'poker_proposeDetector' to handler 'proposeDetector' by removing 'poker_' prefix and executes it with arguments.
    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 })(); });
  • MCP server request handler for listing tools, returns allTools array which includes the 'poker_proposeDetector' tool definition with schema.
    this.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: allTools }; });
  • Integration of detector handlers (including proposeDetector) into the all handlers object returned by createAllHandlers.
    ...createDetectorHandlers(taskManager),

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