UNPKG

github-repos-manager-mcp

Version:

Model Context Protocol (MCP) server that enables your MCP client (e.g., Claude Desktop, Cline, Roo Code, Cursor, Windsurf, etc.) to interact with GitHub repositories using your GitHub personal access token.

141 lines (133 loc) 3.69 kB
// src/formatters/milestones.cjs function formatListMilestonesOutput(milestones, owner, repo, state) { if (!Array.isArray(milestones)) { return { content: [ { type: "text", text: `Error: Could not retrieve ${state} milestones for ${owner}/${repo}.`, }, ], isError: true, }; } if (milestones.length === 0) { return { content: [ { type: "text", text: `No ${state} milestones found in ${owner}/${repo}`, }, ], }; } const formatted = milestones .map( (milestone) => `**${milestone.title}** (#${milestone.number})\n` + `State: ${milestone.state}\n` + `Description: ${milestone.description || "No description"}\n` + `Due: ${ milestone.due_on ? new Date(milestone.due_on).toLocaleDateString() : "No due date" }\n` + `Progress: ${milestone.closed_issues}/${ milestone.closed_issues + milestone.open_issues } issues closed\n` + `Created: ${new Date(milestone.created_at).toLocaleDateString()}\n` + `URL: ${milestone.html_url}` ) .join("\n\n"); return { content: [ { type: "text", text: `Found ${milestones.length} ${state} milestones in ${owner}/${repo}:\n\n${formatted}`, }, ], }; } function formatCreateMilestoneOutput(milestone, owner, repo) { if (!milestone || typeof milestone !== "object" || !milestone.number) { return { content: [ { type: "text", text: `Error: Could not create milestone in ${owner}/${repo}.`, }, ], isError: true, }; } return { content: [ { type: "text", text: `Created milestone "${milestone.title}" (#${milestone.number}) in ${owner}/${repo}:\n` + `State: ${milestone.state}\n` + `Description: ${milestone.description || "No description"}\n` + `Due: ${ milestone.due_on ? new Date(milestone.due_on).toLocaleDateString() : "No due date" }\n` + `URL: ${milestone.html_url}`, }, ], }; } function formatEditMilestoneOutput(updatedMilestone, owner, repo) { if ( !updatedMilestone || typeof updatedMilestone !== "object" || !updatedMilestone.number ) { return { content: [ { type: "text", text: `Error: Could not update milestone in ${owner}/${repo}.`, }, ], isError: true, }; } return { content: [ { type: "text", text: `Updated milestone "${updatedMilestone.title}" (#${updatedMilestone.number}) in ${owner}/${repo}:\n` + `State: ${updatedMilestone.state}\n` + `Description: ${updatedMilestone.description || "No description"}\n` + `Due: ${ updatedMilestone.due_on ? new Date(updatedMilestone.due_on).toLocaleDateString() : "No due date" }\n` + `Progress: ${updatedMilestone.closed_issues}/${ updatedMilestone.closed_issues + updatedMilestone.open_issues } issues closed\n` + `URL: ${updatedMilestone.html_url}`, }, ], }; } function formatDeleteMilestoneOutput(milestone_number, owner, repo) { return { content: [ { type: "text", text: `Successfully deleted milestone #${milestone_number} from ${owner}/${repo}`, }, ], }; } module.exports = { formatListMilestonesOutput, formatCreateMilestoneOutput, formatEditMilestoneOutput, formatDeleteMilestoneOutput, };