Skip to main content
Glama

sun_summarize

Summarize chat sessions into structured .mdc files using -sun command. Analyze conversations, capture key insights, and save summaries in Chinese (default) or English for efficient review.

Instructions

Summarize current session and save as .mdc file when -sun command is used. Use -sun for Chinese or -sun en for English

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
contextNoOptional: Additional context about the session
functionalityNoOptional: Main functionality or topic of the session
languageNoLanguage for the summary: zh for Chinese (default), en for English
sessionContentYesThe session content to summarize (conversation messages)

Implementation Reference

  • src/server.ts:45-71 (registration)
    Tool registration in the ListToolsRequestSchema handler, defining name, description, and input schema for sun_summarize
    { name: 'sun_summarize', description: 'Summarize current session and save as .mdc file when -sun command is used. Use -sun for Chinese or -sun en for English', inputSchema: { type: 'object', properties: { sessionContent: { type: 'string', description: 'The session content to summarize (conversation messages)', }, functionality: { type: 'string', description: 'Optional: Main functionality or topic of the session', }, context: { type: 'string', description: 'Optional: Additional context about the session', }, language: { type: 'string', enum: ['zh', 'en'], description: 'Language for the summary: zh for Chinese (default), en for English', }, }, required: ['sessionContent'], }, },
  • Main handler function for executing the sun_summarize tool: parses input, generates summary using SessionSummarizer, saves via FileManager, and formats response.
    private async handleSummarize(args: any) { const { sessionContent, functionality, context, language = 'zh' } = args; if (!sessionContent) { throw new Error('Session content is required'); } // Parse session content into messages const sessionData = this.parseSessionContent(sessionContent, context); // Generate summary const summary = await this.summarizer.summarizeSession(sessionData, functionality, language); // Save to file const savedFile = await this.fileManager.saveSummary(summary); const isEnglish = summary.language === 'en'; return { content: [ { type: 'text', text: `✅ ${isEnglish ? 'Session summary saved!' : '会话总结已保存!'} 📁 **${isEnglish ? 'File' : '文件'}**: ${savedFile.filename} 📍 **${isEnglish ? 'Path' : '路径'}**: ${savedFile.path} 🎯 **${isEnglish ? 'Functionality' : '功能'}**: ${summary.functionality} 📊 **${isEnglish ? 'Status' : '状态'}**: ${summary.completionStatus} 💬 **${isEnglish ? 'Messages' : '消息数'}**: ${summary.messageCount} ## ${isEnglish ? 'Core Essence' : '核心精髓'} ${summary.essence} ## ${isEnglish ? 'Key Points' : '关键要点'} ${summary.keyPoints.map(point => `• ${point}`).join('\n')} ## ${isEnglish ? 'Outcomes' : '完成成果'} ${summary.outcomes.map(outcome => `• ${outcome}`).join('\n')} ${summary.nextSteps && summary.nextSteps.length > 0 ? `## ${isEnglish ? 'Next Steps' : '后续步骤'} ${summary.nextSteps.map(step => `• ${step}`).join('\n')}` : ''} --- ${isEnglish ? 'Use `sun_list_summaries` to view all saved summaries' : '使用 `sun_list_summaries` 查看所有保存的总结'} ${isEnglish ? 'Use `sun_get_summary` to get specific summary content' : '使用 `sun_get_summary` 获取特定总结内容'}`, }, ], }; }
  • Core summarization logic in SessionSummarizer class: analyzes session messages, detects functionality, generates structured summary with essence, key points, outcomes, etc.
    async summarizeSession(sessionData: SessionData, functionality?: string, language: 'zh' | 'en' = 'zh'): Promise<SessionSummary> { const messages = sessionData.messages || []; const messageCount = messages.length; // Extract key information from messages const userMessages = messages.filter(m => m.role === 'user'); const assistantMessages = messages.filter(m => m.role === 'assistant'); // Analyze the conversation to extract essence and key points const analysis = this.analyzeConversation(messages, language); // Determine functionality if not provided const detectedFunctionality = functionality || this.detectFunctionality(messages, language); // Generate title const title = this.generateTitle(detectedFunctionality, language); // Determine completion status const completionStatus = this.determineCompletionStatus(messages); const summary: SessionSummary = { title, essence: analysis.essence, completionStatus, keyPoints: analysis.keyPoints, outcomes: analysis.outcomes, nextSteps: analysis.nextSteps, timestamp: new Date().toISOString(), messageCount, functionality: detectedFunctionality, language }; return summary; }
  • Helper function to parse raw session content string into structured SessionData with messages array.
    private parseSessionContent(content: string, context?: string): SessionData { const messages: SessionMessage[] = []; // Try to parse different formats if (content.includes('Human:') || content.includes('Assistant:')) { // Parse conversation format const parts = content.split(/(?=Human:|Assistant:)/); for (const part of parts) { const trimmed = part.trim(); if (!trimmed) continue; if (trimmed.startsWith('Human:')) { messages.push({ role: 'user', content: trimmed.replace('Human:', '').trim(), timestamp: new Date().toISOString(), }); } else if (trimmed.startsWith('Assistant:')) { messages.push({ role: 'assistant', content: trimmed.replace('Assistant:', '').trim(), timestamp: new Date().toISOString(), }); } } } else { // Treat as single message messages.push({ role: 'user', content: content, timestamp: new Date().toISOString(), }); } return { messages, startTime: new Date().toISOString(), context, }; }

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ChenYCL/sun-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server