strategic-intelligence-mcp
Version:
Strategic Intelligence MCP Server - connecting technical progress to business outcomes with systematic strategic planning
325 lines • 12 kB
JavaScript
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