UNPKG

@boundless-oss/atlas

Version:

Atlas - MCP Server for comprehensive startup project management

159 lines 8.2 kB
/** * MCP Client utility for web dashboard * Provides interface to call MCP tools from the web dashboard */ let mcpClient = null; export function getMCPClient() { // In a real implementation, this would connect to the MCP server // For now, we'll return a mock client that can simulate tool calls if (!mcpClient) { mcpClient = createMockMCPClient(); } return mcpClient; } function createMockMCPClient() { return { async callTool(toolName, args) { console.log(`Mock MCP call: ${toolName}`, args); // Return mock data based on tool name switch (toolName) { case 'get_epic_progress': return { epicId: args.epicId, epicTitle: 'Mock Epic', progress: { completionPercentage: 65, completedStories: 8, totalStories: 12, inProgressStories: 3, blockedStories: 1 }, storyPoints: { total: 34, completed: 22, completionPercentage: 65 }, statusBreakdown: { todo: 1, inProgress: 3, review: 0, done: 8 } }; case 'get_team_velocity_trend': return { velocityTrend: [ { sprintId: 'sprint-1', sprintName: 'Sprint 1', completedPoints: 21, plannedPoints: 25 }, { sprintId: 'sprint-2', sprintName: 'Sprint 2', completedPoints: 23, plannedPoints: 25 }, { sprintId: 'sprint-3', sprintName: 'Sprint 3', completedPoints: 26, plannedPoints: 30 }, { sprintId: 'sprint-4', sprintName: 'Sprint 4', completedPoints: 24, plannedPoints: 25 }, { sprintId: 'sprint-5', sprintName: 'Sprint 5', completedPoints: 28, plannedPoints: 30 } ], summary: { averageVelocity: 24.4, trendDirection: 'increasing', consistency: { standardDeviation: 2.5, coefficientOfVariation: 0.10 } } }; case 'get_cycle_time_metrics': return { stories: [ { storyId: 'story-1', title: 'User Login', cycleTimeDays: 3.5, timeInEachStatus: { todo: 0.5, inProgress: 2, review: 0.5, done: 0.5 } }, { storyId: 'story-2', title: 'Dashboard', cycleTimeDays: 5, timeInEachStatus: { todo: 1, inProgress: 3, review: 0.5, done: 0.5 } } ], summary: { totalStories: 2, completedStories: 2, averageCycleTimeDays: 4.25, medianCycleTimeDays: 4.25, bottlenecks: { longestPhase: 'inProgress', averageTimeInPhase: { todo: 0.75, inProgress: 2.5, review: 0.5, done: 0.5 } } } }; case 'get_cross_sprint_analytics': return { sprints: [ { name: 'Sprint 1', completionRate: 85, storiesCompleted: 17, storiesTotal: 20, velocity: 85 }, { name: 'Sprint 2', completionRate: 92, storiesCompleted: 23, storiesTotal: 25, velocity: 92 }, { name: 'Sprint 3', completionRate: 78, storiesCompleted: 18, storiesTotal: 23, velocity: 78 }, { name: 'Sprint 4', completionRate: 95, storiesCompleted: 19, storiesTotal: 20, velocity: 95 }, { name: 'Sprint 5', completionRate: 88, storiesCompleted: 22, storiesTotal: 25, velocity: 88 } ], trends: { averageCompletionRate: 87.6, velocityTrend: 'stable', predictability: 'high' } }; case 'get_epic_timeline': return { epicId: args.epicId, timeline: [ { sprintId: 'sprint-1', sprintName: 'Sprint 1', status: 'completed', storiesCompleted: 3, totalStories: 4, pointsCompleted: 13, totalPoints: 17, completionPercentage: 76 }, { sprintId: 'sprint-2', sprintName: 'Sprint 2', status: 'active', storiesCompleted: 2, totalStories: 5, pointsCompleted: 8, totalPoints: 21, completionPercentage: 38 } ], summary: { totalSprints: 2, sprintsCompleted: 1, estimatedSprintsRemaining: 2 } }; case 'validate_epic_requirements': return { epicId: args.epicId, overallValid: false, validationResults: [ { check: 'All stories completed', passed: false, message: '3 stories remaining incomplete' }, { check: 'Acceptance criteria met', passed: true, message: 'All completed stories meet acceptance criteria' }, { check: 'No blocked stories', passed: false, message: '1 story is currently blocked' }, { check: 'Epic goals achieved', passed: true, message: 'All epic goals have been satisfied' } ], summary: { totalChecks: 4, passed: 2, failed: 2 } }; case 'generate_epic_burndown': return { epicId: args.epicId, chartData: [ { date: new Date(Date.now() - 14 * 24 * 60 * 60 * 1000).toISOString(), remainingPoints: 55, idealPoints: 55 }, { date: new Date(Date.now() - 10 * 24 * 60 * 60 * 1000).toISOString(), remainingPoints: 47, idealPoints: 44 }, { date: new Date(Date.now() - 6 * 24 * 60 * 60 * 1000).toISOString(), remainingPoints: 38, idealPoints: 33 }, { date: new Date(Date.now() - 2 * 24 * 60 * 60 * 1000).toISOString(), remainingPoints: 25, idealPoints: 22 }, { date: new Date().toISOString(), remainingPoints: 20, idealPoints: 11 } ], summary: { totalPoints: 55, remainingPoints: 20, completedPoints: 35, burnRate: 2.5, projectedCompletion: 'On track' } }; default: return { success: true, message: `Mock response for ${toolName}` }; } } }; } // Initialize MCP client connection export async function initializeMCPClient() { try { // In production, this would establish a real connection to the MCP server console.log('Initializing MCP client connection...'); mcpClient = createMockMCPClient(); return true; } catch (error) { console.error('Failed to initialize MCP client:', error); return false; } } //# sourceMappingURL=mcp-client.js.map