Skip to main content
Glama

get_milestone_metrics

Retrieve progress metrics for GitHub project milestones to track completion status and analyze issue data.

Instructions

Get progress metrics for a specific milestone

Input Schema

NameRequiredDescriptionDefault
milestoneIdYes
includeIssuesYes

Input Schema (JSON Schema)

{ "properties": { "includeIssues": { "type": "boolean" }, "milestoneId": { "type": "string" } }, "required": [ "milestoneId", "includeIssues" ], "type": "object" }

Implementation Reference

  • Core handler implementation: Fetches milestone data, retrieves all issues assigned to it, calculates open/closed counts, completion percentage, overdue status, and days remaining. Optionally includes issue details.
    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); } }
  • Zod schema definition for tool input validation: requires milestoneId (string) and includeIssues (boolean).
    // Schema for get_milestone_metrics tool export const getMilestoneMetricsSchema = z.object({ milestoneId: z.string().min(1, "Milestone ID is required"), includeIssues: z.boolean(), }); export type GetMilestoneMetricsArgs = z.infer<typeof getMilestoneMetricsSchema>;
  • ToolDefinition object defining the tool name, description, schema reference, and usage examples.
    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, }, }, ], };
  • Registers the getMilestoneMetricsTool in the central ToolRegistry singleton during initialization.
    this.registerTool(getMilestoneMetricsTool);
  • MCP tool dispatcher: Handles call_tool requests for get_milestone_metrics by delegating to ProjectManagementService.getMilestoneMetrics.
    case "get_milestone_metrics": return await this.service.getMilestoneMetrics(args.milestoneId, args.includeIssues);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HarshKumarSharma/MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server