get_milestone_metrics
Retrieve progress metrics for a GitHub project milestone, including task status and issue details, to track project milestones and manage development workflows efficiently.
Instructions
Get progress metrics for a specific milestone
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| includeIssues | Yes | ||
| milestoneId | Yes |
Implementation Reference
- The main handler function implementing get_milestone_metrics tool logic. Fetches milestone details and associated issues, computes metrics like open/closed counts, completion percentage, overdue status, and days remaining.async getMilestoneMetrics(id: string, includeIssues: boolean = false): Promise<MilestoneMetrics> { try { const milestone = await this.milestoneRepo.findById(id); if (!milestone) { throw new ResourceNotFoundError(ResourceType.MILESTONE, id); } const allIssues = await this.issueRepo.findAll(); const issues = allIssues.filter(issue => issue.milestoneId === milestone.id); const totalIssues = issues.length; const closedIssues = issues.filter( issue => issue.status === ResourceStatus.CLOSED || issue.status === ResourceStatus.COMPLETED ).length; const openIssues = totalIssues - closedIssues; const completionPercentage = totalIssues > 0 ? Math.round((closedIssues / totalIssues) * 100) : 0; const now = new Date(); let isOverdue = false; let daysRemaining: number | undefined = undefined; if (milestone.dueDate) { const dueDate = new Date(milestone.dueDate); isOverdue = now > dueDate; daysRemaining = Math.ceil((dueDate.getTime() - now.getTime()) / (1000 * 60 * 60 * 24)); } return { id: milestone.id, title: milestone.title, dueDate: milestone.dueDate, openIssues, closedIssues, totalIssues, completionPercentage, status: milestone.status, issues: includeIssues ? issues : undefined, isOverdue, daysRemaining: daysRemaining && daysRemaining > 0 ? daysRemaining : undefined }; } catch (error) { throw this.mapErrorToMCPError(error); } }
- Tool definition including input schema (milestoneId: string, includeIssues: boolean) and description.export const getMilestoneMetricsTool: ToolDefinition<GetMilestoneMetricsArgs> = { name: "get_milestone_metrics", description: "Get progress metrics for a specific milestone", schema: getMilestoneMetricsSchema as unknown as ToolSchema<GetMilestoneMetricsArgs>, examples: [ { name: "Get milestone progress", description: "Get progress metrics for milestone #2", args: { milestoneId: "2", includeIssues: true, }, }, ], };
- src/infrastructure/tools/ToolRegistry.ts:187-187 (registration)Registers the getMilestoneMetricsTool in the central tool registry during initialization.this.registerTool(getMilestoneMetricsTool);
- src/index.ts:246-247 (handler)MCP server dispatch handler that routes tool calls to the service implementation.case "get_milestone_metrics": return await this.service.getMilestoneMetrics(args.milestoneId, args.includeIssues);