UNPKG

@shirokuma-library/mcp-knowledge-base

Version:

Shirokuma MCP Server for comprehensive knowledge management including issues, plans, documents, and work sessions. All stored data is structured for AI processing, not human readability.

83 lines (82 loc) 2.96 kB
export class CreateItemHandler { useCase; constructor(useCase) { this.useCase = useCase; } async handle(request) { try { const args = request.params.arguments; let related = args.related || []; if (args.related_tasks || args.related_documents) { const tasks = args.related_tasks || []; const docs = args.related_documents || []; related = [...new Set([...related, ...tasks, ...docs])]; delete args.related_tasks; delete args.related_documents; } const input = { ...args, related, }; const result = await this.useCase.execute(input); const response = { id: result.id, type: result.type, title: result.title, related: result.related, }; if (result.related.length > 0) { response.related_tasks = result.related.filter(id => { const [type] = id.split('-'); return ['issues', 'plans', 'bugs', 'features'].includes(type); }); response.related_documents = result.related.filter(id => { const [type] = id.split('-'); return ['docs', 'knowledge', 'sessions', 'dailies'].includes(type); }); } else { response.related_tasks = []; response.related_documents = []; } const createdItem = { ...response, description: args.description, content: args.content, tags: args.tags || [], priority: args.priority, status: args.status, start_date: args.startDate || args.start_date, end_date: args.endDate || args.end_date, version: args.version, created_at: new Date().toISOString(), updated_at: new Date().toISOString(), }; Object.keys(createdItem).forEach(key => { if (createdItem[key] === undefined) { delete createdItem[key]; } }); return { content: [ { type: 'text', text: JSON.stringify({ data: createdItem }, null, 2), }, ], }; } catch (error) { return { content: [ { type: 'text', text: JSON.stringify({ error: error instanceof Error ? error.message : 'Unknown error' }, null, 2), }, ], }; } } }