Redmine MCP serverを実装する

  • mcp-server-redmine GitHub - yonaka15/mcp-server-redmine: MCP server for Redmine
    • 実装中らしく, チケット操作の機能についてはチケット一覧しかない
    • => MCPのTool定義, Toolのハンドラ定義, Redmine API clientの実装が綺麗に分かれているので追加しやすかった
type ToolResponse = {
    content: { type: string, content: string }[]
    isError: boolean
};
 
show_issue: async (args: Record<string, unknown>): Promise<ToolResponse> => {
  try {
    const id = asNumber(args.id);
    // チケットコメント(journals)を含める
    const { issue } = await client.issues.getIssue(id, { include: "journals" });
    return {
      content: [{ type: "text", text: formatIssue(issue) }],
      isError: false,
    };
  } catch (error) {
    return {
      content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }],
      isError: true,
    };
  }
},