add_comment
Enables users to add comments to GitHub issues within a Kanban board, supporting Markdown formatting and optional issue state updates for streamlined task management.
Instructions
タスクにコメントを追加
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | コメントの内容(Markdown形式対応) | |
| issue_number | Yes | タスク(Issue)のID | |
| repo | Yes | GitHubリポジトリ名 | |
| state | No | コメント時に変更するissueの状態(オプション) |
Implementation Reference
- src/handlers/comment-handlers.ts:8-71 (handler)The main handler function that executes the add_comment tool logic: adds a comment to a GitHub issue using gh CLI, optionally changes issue state, and returns updated issue info.export async function handleAddComment(args: { repo: string; issue_number: string; body: string; state?: 'open' | 'closed'; }): Promise<ToolResponse> { const tempFile = 'comment_body.md'; try { // ステータスの変更が指定されている場合は先に処理 if (args.state) { try { const command = args.state === 'closed' ? 'close' : 'reopen'; await execAsync( `gh issue ${command} ${args.issue_number} --repo ${args.repo}` ); console.log(`Issue status changed to ${args.state}`); } catch (error) { console.error('Failed to change issue status:', error); throw new McpError( ErrorCode.InternalError, `Failed to change issue status: ${(error as Error).message}` ); } } // コメントを追加 const fullPath = await writeToTempFile(args.body, tempFile); try { await execAsync( `gh issue comment ${args.issue_number} --repo ${args.repo} --body-file "${fullPath}"` ); } catch (error) { console.error('Failed to add comment:', error); throw new McpError( ErrorCode.InternalError, `Failed to add comment: ${(error as Error).message}` ); } // 更新後のissue情報を取得して返却 try { const { stdout: issueData } = await execAsync( `gh issue view ${args.issue_number} --repo ${args.repo} --json number,title,state,url` ); return { content: [ { type: 'text', text: issueData, }, ], }; } catch (error) { console.error('Failed to get issue data:', error); throw new McpError( ErrorCode.InternalError, `Failed to get issue data: ${(error as Error).message}` ); } } finally { await removeTempFile(tempFile); } }
- src/schemas/comment-schemas.ts:1-23 (schema)JSON schema defining the input parameters for the add_comment tool: repo, issue_number, body, and optional state.export const addCommentSchema = { type: 'object', properties: { repo: { type: 'string', description: 'GitHubリポジトリ名', }, issue_number: { type: 'string', description: 'タスク(Issue)のID', }, body: { type: 'string', description: 'コメントの内容(Markdown形式対応)', }, state: { type: 'string', enum: ['open', 'closed'], description: 'コメント時に変更するissueの状態(オプション)', }, }, required: ['repo', 'issue_number', 'body'], };
- src/server.ts:57-60 (registration)Registration of the 'add_comment' tool in the MCP server's listTools response, specifying name, description, and input schema.name: 'add_comment', description: 'タスクにコメントを追加', inputSchema: addCommentSchema, },
- src/handlers/tool-handlers.ts:75-84 (helper)Dispatcher logic in handleToolRequest that validates arguments and calls the handleAddComment function for the 'add_comment' tool.case 'add_comment': { if (!args?.issue_number || !args?.body) { throw new McpError(ErrorCode.InvalidParams, 'Issue number and body are required'); } return await handleAddComment({ repo: fullRepo, issue_number: args.issue_number as string, body: args.body as string, }); }