analyze_task_complexity
Evaluate task complexity, estimate effort, assess risks, and generate recommendations using AI-powered analysis for GitHub projects. Enhance planning and decision-making for teams.
Instructions
Perform detailed AI-powered analysis of task complexity, effort estimation, risk assessment, and provide actionable recommendations
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| currentEstimate | No | ||
| includeBreakdown | Yes | ||
| includeRecommendations | Yes | ||
| includeRisks | Yes | ||
| projectContext | No | ||
| taskDescription | Yes | ||
| taskTitle | Yes | ||
| teamExperience | Yes |
Implementation Reference
- Main handler function executing the tool: creates mock task, analyzes complexity via TaskGenerationService, generates breakdown/risks/recommendations/confidence, formats responseasync function executeAnalyzeTaskComplexity(args: AnalyzeTaskComplexityArgs): Promise<MCPResponse> { const taskService = new TaskGenerationService(); try { // Create a mock task for analysis const mockTask = { id: 'analysis-task', title: args.taskTitle, description: args.taskDescription, complexity: 5 as TaskComplexity, // Will be updated by analysis estimatedHours: args.currentEstimate || 0, priority: TaskPriority.MEDIUM, status: TaskStatus.PENDING, dependencies: [], acceptanceCriteria: [], tags: [], aiGenerated: false, subtasks: [], createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() }; // Perform complexity analysis const analysis = await taskService.analyzeTaskComplexity(mockTask); // Generate detailed breakdown const breakdown = generateEffortBreakdown(analysis.estimatedHours, args.teamExperience); // Assess risks const risks = args.includeRisks ? assessTaskRisks(args, analysis) : []; // Generate recommendations const recommendations = args.includeRecommendations ? generateTaskRecommendations(args, analysis, risks) : []; // Calculate confidence level const confidence = calculateConfidenceLevel(args, analysis); // Format response const summary = formatComplexityAnalysis(args, analysis, breakdown, risks, recommendations, confidence); return ToolResultFormatter.formatSuccess('analyze_task_complexity', { summary, analysis: { originalComplexity: mockTask.complexity, newComplexity: analysis.newComplexity, estimatedHours: analysis.estimatedHours, confidence, breakdown, risks, recommendations } }); } catch (error) { process.stderr.write(`Error in analyze_task_complexity tool: ${error}\n`); return ToolResultFormatter.formatSuccess('analyze_task_complexity', { error: `Failed to analyze task complexity: ${error instanceof Error ? error.message : 'Unknown error'}`, success: false }); } }
- Zod schema defining input parameters for the analyze_task_complexity toolconst analyzeTaskComplexitySchema = z.object({ taskTitle: z.string().min(3).describe('Title of the task to analyze'), taskDescription: z.string().min(10).describe('Detailed description of the task'), currentEstimate: z.number().optional().describe('Current effort estimate in hours (if any)'), teamExperience: z.enum(['junior', 'mid', 'senior', 'mixed']).default('mixed') .describe('Team experience level'), projectContext: z.string().optional().describe('Additional project context'), includeBreakdown: z.boolean().default(true).describe('Whether to include effort breakdown'), includeRisks: z.boolean().default(true).describe('Whether to include risk analysis'), includeRecommendations: z.boolean().default(true).describe('Whether to include recommendations') });
- src/infrastructure/tools/ToolRegistry.ts:273-273 (registration)Registration of the analyzeTaskComplexityTool in the central ToolRegistrythis.registerTool(analyzeTaskComplexityTool);
- src/index.ts:453-454 (registration)Dispatch case in main server handler that calls the executeAnalyzeTaskComplexity functioncase "analyze_task_complexity": return await executeAnalyzeTaskComplexity(args);
- Helper function to generate effort breakdown by activity type based on total hours and team experiencefunction generateEffortBreakdown(totalHours: number, teamExperience: string) { // Adjust percentages based on team experience let analysisPercent = 0.15; let implementationPercent = 0.60; let testingPercent = 0.20; let documentationPercent = 0.05; switch (teamExperience) { case 'junior': analysisPercent = 0.20; implementationPercent = 0.55; testingPercent = 0.20; documentationPercent = 0.05; break; case 'senior': analysisPercent = 0.10; implementationPercent = 0.65; testingPercent = 0.20; documentationPercent = 0.05; break; } return { analysis: Math.round(totalHours * analysisPercent), implementation: Math.round(totalHours * implementationPercent), testing: Math.round(totalHours * testingPercent), documentation: Math.round(totalHours * documentationPercent), total: totalHours }; }