Skip to main content
Glama
jakedx6
by jakedx6

get_project_analytics

Analyze project performance by calculating metrics like completion rate, velocity, and team performance to gain insights and make data-driven decisions.

Instructions

Get comprehensive analytics and insights for projects

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_idsNoSpecific project IDs to analyze (optional)
time_rangeNoTime range for analyticsmonth
metricsNoSpecific metrics to calculate
include_predictionsNoInclude predictive analytics and forecasts
benchmark_comparisonNoCompare against historical benchmarks

Implementation Reference

  • Main handler function that executes the get_project_analytics tool. Parses input with Zod schema, fetches project data, calculates specified metrics using helper functions, optionally adds predictions and benchmarks, generates insights and recommendations.
    export const getProjectAnalytics = requireAuth(async (args: any) => { const { project_ids, time_range, metrics, include_predictions, benchmark_comparison } = GetProjectAnalyticsSchema.parse(args) logger.info('Getting project analytics', { project_ids, time_range, metrics }) // Get projects to analyze const projects = project_ids ? await Promise.all(project_ids.map(id => supabaseService.getProject(id))) : await supabaseService.getProjects({}, { limit: 100 }) const analytics: any = { time_range, projects_analyzed: projects.length, generated_at: new Date().toISOString(), metrics: {} } // Calculate requested metrics for (const metric of metrics) { try { switch (metric) { case 'completion_rate': analytics.metrics.completion_rate = await calculateCompletionRate(projects, time_range) break case 'velocity': analytics.metrics.velocity = await calculateVelocity(projects, time_range) break case 'team_performance': analytics.metrics.team_performance = await calculateTeamPerformance(projects, time_range) break case 'resource_utilization': analytics.metrics.resource_utilization = await calculateResourceUtilization(projects, time_range) break case 'quality_metrics': analytics.metrics.quality_metrics = await calculateQualityMetrics(projects, time_range) break case 'collaboration_index': analytics.metrics.collaboration_index = await calculateCollaborationIndex(projects, time_range) break } } catch (error) { logger.error(`Failed to calculate ${metric}:`, error) analytics.metrics[metric] = { error: 'Calculation failed' } } } // Add predictions if requested if (include_predictions) { analytics.predictions = await generatePredictions(projects, analytics.metrics, time_range) } // Add benchmark comparison if requested if (benchmark_comparison) { analytics.benchmarks = await getBenchmarkComparison(analytics.metrics, time_range) } // Generate insights and recommendations analytics.insights = generateAnalyticsInsights(analytics.metrics, projects) analytics.recommendations = generateAnalyticsRecommendations(analytics.metrics, analytics.insights) return analytics })
  • Zod schema for validating input parameters to the get_project_analytics tool.
    const GetProjectAnalyticsSchema = z.object({ project_ids: z.array(z.string()).optional(), time_range: z.enum(['week', 'month', 'quarter', 'year', 'all']).default('month'), metrics: z.array(z.enum(['completion_rate', 'velocity', 'team_performance', 'resource_utilization', 'quality_metrics', 'collaboration_index'])).default(['completion_rate', 'velocity', 'team_performance']), include_predictions: z.boolean().default(false), benchmark_comparison: z.boolean().default(false) })
  • MCPTool definition exporting the tool metadata including name, description, and input schema for registration.
    export const getProjectAnalyticsTool: MCPTool = { name: 'get_project_analytics', description: 'Get comprehensive analytics and insights for projects', inputSchema: { type: 'object', properties: { project_ids: { type: 'array', items: { type: 'string' }, description: 'Specific project IDs to analyze (optional)' }, time_range: { type: 'string', enum: ['week', 'month', 'quarter', 'year', 'all'], default: 'month', description: 'Time range for analytics' }, metrics: { type: 'array', items: { type: 'string', enum: ['completion_rate', 'velocity', 'team_performance', 'resource_utilization', 'quality_metrics', 'collaboration_index'] }, default: ['completion_rate', 'velocity', 'team_performance'], description: 'Specific metrics to calculate' }, include_predictions: { type: 'boolean', default: false, description: 'Include predictive analytics and forecasts' }, benchmark_comparison: { type: 'boolean', default: false, description: 'Compare against historical benchmarks' } } } }
  • Export mapping tool names to their handler functions, used for registration in the MCP system.
    export const analyticsInsightsHandlers = { get_project_analytics: getProjectAnalytics, get_team_productivity: getTeamProductivity, get_workspace_health: getWorkspaceHealth, generate_custom_report: generateCustomReport }
  • Helper function to calculate completion rate metric, one of several used by the handler.
    async function calculateCompletionRate(projects: any[], timeRange: string): Promise<any> { const projectStats = await Promise.all(projects.map(async (project) => { const tasks = await supabaseService.getTasks({ project_id: project.id }) const completedTasks = tasks.filter(t => t.status === 'done') return { project_id: project.id, project_name: project.name, total_tasks: tasks.length, completed_tasks: completedTasks.length, completion_rate: tasks.length > 0 ? (completedTasks.length / tasks.length) * 100 : 0 } })) const overallRate = projectStats.reduce((sum, stats) => sum + stats.completion_rate, 0) / projectStats.length return { overall_completion_rate: Math.round(overallRate * 10) / 10, project_breakdown: projectStats, trend: 'stable', // Would calculate actual trend time_range: timeRange } }

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/jakedx6/helios9-MCP-Server'

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