get_milestone_metrics
Retrieve progress metrics for GitHub project milestones to track completion status and issue details for project management.
Instructions
Get progress metrics for a specific milestone
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| milestoneId | Yes | ||
| includeIssues | Yes |
Implementation Reference
- Core implementation of getMilestoneMetrics: fetches milestone, filters associated issues, calculates metrics like completion percentage, open/closed counts, overdue status, and optionally includes issue details.// Milestone Management 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); }
- src/index.ts:246-247 (handler)MCP tool dispatcher handler that routes 'get_milestone_metrics' calls to ProjectManagementService.getMilestoneMetricscase "get_milestone_metrics": return await this.service.getMilestoneMetrics(args.milestoneId, args.includeIssues);
- ToolDefinition for get_milestone_metrics including Zod input schema, description, and usage examplesexport 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, }, }, ], };
- Zod input validation schema for get_milestone_metrics tool parametersexport const getMilestoneMetricsSchema = z.object({ milestoneId: z.string().min(1, "Milestone ID is required"), includeIssues: z.boolean(), }); export type GetMilestoneMetricsArgs = z.infer<typeof getMilestoneMetricsSchema>;
- src/infrastructure/tools/ToolRegistry.ts:187-187 (registration)Registers the getMilestoneMetricsTool in the central ToolRegistry singletonthis.registerTool(getMilestoneMetricsTool);