UNPKG

strategic-intelligence-mcp

Version:

Strategic Intelligence MCP Server - connecting technical progress to business outcomes with systematic strategic planning

325 lines 12 kB
import { StrategicCollaboration } from '../collaboration/strategicCollaboration.js'; export class CollaborationTools { storage; collaboration; constructor(storage) { this.storage = storage; this.collaboration = new StrategicCollaboration(); } async createCollaborationSession(params) { try { const session = this.collaboration.createSession(params); if (!params.scheduled) { // Mark session as started if not scheduled session.started = new Date().toISOString(); } return { success: true, data: { session, templates: params.templateId ? this.collaboration.getTemplates() : undefined } }; } catch (error) { return { success: false, error: `Failed to create collaboration session: ${error instanceof Error ? error.message : 'Unknown error'}` }; } } async addSessionContribution(params) { try { const contribution = this.collaboration.addContribution(params.sessionId, params.participantId, { type: params.type, content: params.content, metadata: params.metadata }); if (!contribution) { throw new Error('Failed to add contribution - session not found or not active'); } return { success: true, data: { contribution, participantContributions: this.getParticipantContributions(params.sessionId, params.participantId) } }; } catch (error) { return { success: false, error: `Failed to add contribution: ${error instanceof Error ? error.message : 'Unknown error'}` }; } } async recordSessionDecision(params) { try { const decision = this.collaboration.recordDecision(params.sessionId, { decision: params.decision, rationale: params.rationale, votingRecord: params.votingRecord, implementation: params.implementation, risks: params.risks, dependencies: params.dependencies }); if (!decision) { throw new Error('Failed to record decision - session not found or not active'); } return { success: true, data: { decision, autoGeneratedActionItem: this.getLatestActionItem(params.sessionId) } }; } catch (error) { return { success: false, error: `Failed to record decision: ${error instanceof Error ? error.message : 'Unknown error'}` }; } } async createSessionActionItem(params) { try { const actionItem = this.collaboration.createActionItem(params.sessionId, { title: params.title, description: params.description, owner: params.owner, assignedBy: params.assignedBy, dueDate: params.dueDate, priority: params.priority, relatedDecisions: params.relatedDecisions, relatedGoals: params.relatedGoals }); if (!actionItem) { throw new Error('Failed to create action item - session not found'); } return { success: true, data: { actionItem, sessionActionItems: this.getSessionActionItems(params.sessionId) } }; } catch (error) { return { success: false, error: `Failed to create action item: ${error instanceof Error ? error.message : 'Unknown error'}` }; } } async updateSessionActionItem(params) { try { const success = this.collaboration.updateActionItem(params.sessionId, params.actionItemId, { participantId: params.participantId, update: params.update, newStatus: params.newStatus }); if (!success) { throw new Error('Failed to update action item - not found'); } const session = this.collaboration.getSession(params.sessionId); const actionItem = session?.actionItems.find(ai => ai.id === params.actionItemId); return { success: true, data: { actionItem, allActionItems: this.getSessionActionItems(params.sessionId) } }; } catch (error) { return { success: false, error: `Failed to update action item: ${error instanceof Error ? error.message : 'Unknown error'}` }; } } async completeCollaborationSession(params) { try { const session = this.collaboration.completeSession(params.sessionId, { keyDecisions: params.keyDecisions, nextSteps: params.nextSteps, followUp: params.followUp }); if (!session) { throw new Error('Failed to complete session - not found or not active'); } const summary = this.collaboration.generateSessionSummary(params.sessionId); return { success: true, data: { session, summary, metrics: { duration: summary?.duration || 0, totalContributions: summary?.participation.contributions || 0, decisionsReached: summary?.outcomes.decisions || 0, actionItemsCreated: summary?.outcomes.actionItems || 0 } } }; } catch (error) { return { success: false, error: `Failed to complete session: ${error instanceof Error ? error.message : 'Unknown error'}` }; } } async getCollaborationSession(params) { try { const session = this.collaboration.getSession(params.sessionId); if (!session) { throw new Error('Session not found'); } const summary = this.collaboration.generateSessionSummary(params.sessionId); return { success: true, data: { session, summary, templates: this.collaboration.getTemplates() } }; } catch (error) { return { success: false, error: `Failed to get session: ${error instanceof Error ? error.message : 'Unknown error'}` }; } } async listCollaborationSessions(params) { try { const sessions = this.collaboration.getSessions(params); const sessionSummaries = sessions.map(session => ({ id: session.id, title: session.title, type: session.type, status: session.status, scheduled: session.scheduled, participantCount: session.participants.length, contributionCount: session.contributions.length, decisionCount: session.decisions.length, actionItemCount: session.actionItems.length })); return { success: true, data: { sessions: sessionSummaries, fullSessions: sessions, summary: { total: sessions.length, byType: this.groupByType(sessions), byStatus: this.groupByStatus(sessions) } } }; } catch (error) { return { success: false, error: `Failed to list sessions: ${error instanceof Error ? error.message : 'Unknown error'}` }; } } async getCollaborationTemplates() { try { const templates = this.collaboration.getTemplates(); return { success: true, data: { templates, summary: { total: templates.length, byType: this.groupTemplatesByType(templates) } } }; } catch (error) { return { success: false, error: `Failed to get templates: ${error instanceof Error ? error.message : 'Unknown error'}` }; } } async generateSessionReport(params) { try { const session = this.collaboration.getSession(params.sessionId); if (!session) { throw new Error('Session not found'); } const summary = this.collaboration.generateSessionSummary(params.sessionId); if (!summary) { throw new Error('Failed to generate summary'); } const report = { session: { id: session.id, title: session.title, type: session.type, status: session.status, duration: summary.duration, participants: session.participants }, participation: summary.participation, outcomes: summary.outcomes, keyContributions: summary.keyContributions, decisionsTimeline: summary.decisionsTimeline, nextSteps: summary.nextSteps, agenda: session.agenda.map(item => ({ title: item.title, status: item.status, notes: item.notes })) }; return { success: true, data: report }; } catch (error) { return { success: false, error: `Failed to generate report: ${error instanceof Error ? error.message : 'Unknown error'}` }; } } // Helper methods getParticipantContributions(sessionId, participantId) { const session = this.collaboration.getSession(sessionId); return session?.contributions.filter(c => c.participantId === participantId).length || 0; } getLatestActionItem(sessionId) { const session = this.collaboration.getSession(sessionId); return session?.actionItems[session.actionItems.length - 1]; } getSessionActionItems(sessionId) { const session = this.collaboration.getSession(sessionId); return session?.actionItems || []; } groupByType(sessions) { return sessions.reduce((acc, session) => { acc[session.type] = (acc[session.type] || 0) + 1; return acc; }, {}); } groupByStatus(sessions) { return sessions.reduce((acc, session) => { acc[session.status] = (acc[session.status] || 0) + 1; return acc; }, {}); } groupTemplatesByType(templates) { return templates.reduce((acc, template) => { acc[template.type] = (acc[template.type] || 0) + 1; return acc; }, {}); } } //# sourceMappingURL=collaborationTools.js.map