Skip to main content
Glama

sun_get_summary

Retrieve saved conversation summaries to review key insights, outcomes, and next steps from chat sessions.

Instructions

Get content of a specific summary file

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filenameYesName of the summary file to retrieve

Implementation Reference

  • src/server.ts:80-94 (registration)
    Registration of the sun_get_summary tool in the ListToolsRequestSchema handler, defining name, description, and input schema.
    { name: 'sun_get_summary', description: 'Get content of a specific summary file', inputSchema: { type: 'object', properties: { filename: { type: 'string', description: 'Name of the summary file to retrieve', }, }, required: ['filename'], }, }, ] as Tool[],
  • Primary handler function for executing the sun_get_summary tool. It validates the filename argument, calls FileManager.getSummary to retrieve the file content, and formats the MCP response with the summary markdown or an error.
    private async handleGetSummary(args: any) { const { filename } = args; if (!filename) { throw new Error('Filename is required'); } const content = await this.fileManager.getSummary(filename); if (!content) { return { content: [ { type: 'text', text: `❌ 未找到文件: ${filename}`, }, ], }; } return { content: [ { type: 'text', text: `📄 **${filename}** ${content}`, }, ], }; }
  • Input schema definition for the sun_get_summary tool, specifying an object with a required 'filename' string property.
    inputSchema: { type: 'object', properties: { filename: { type: 'string', description: 'Name of the summary file to retrieve', }, }, required: ['filename'], },
  • Core file retrieval logic invoked by the tool handler. Reads the specified .mdc summary file, parses its metadata, and returns a SavedSummaryFile object or null if not found.
    async getSummary(filename: string): Promise<SavedSummaryFile | null> { const filePath = path.join(this.sunDir, filename); try { const exists = await fs.pathExists(filePath); if (!exists) { return null; } const content = await fs.readFile(filePath, 'utf-8'); const stats = await fs.stat(filePath); const summary = this.parseSummaryFromMarkdown(content, filename); return { filename, path: filePath, summary, createdAt: stats.birthtime.toISOString() }; } catch (error) { console.error(`Failed to get summary ${filename}:`, error); return null; } }
  • Helper function that parses the markdown content of a summary file to extract structured SessionSummary data, supporting both English and Chinese.
    private parseSummaryFromMarkdown(content: string, filename: string): SessionSummary { // Detect language from content const isEnglish = content.includes('Session Overview') || content.includes('Timestamp'); // Extract title (first # heading) const titleMatch = content.match(/^# (.+)$/m); const title = titleMatch ? titleMatch[1] : filename.replace('.mdc', ''); // Extract basic info (support both languages) const timestampMatch = content.match(/\*\*(Timestamp|时间戳)\*\*: (.+)$/m); const statusMatch = content.match(/\*\*(Completion Status|完成状态)\*\*: (.+)$/m); const messageCountMatch = content.match(/\*\*(Message Count|消息数量)\*\*: (\d+)$/m); // Extract essence (support both languages) const essenceMatch = content.match(/## (Core Essence|核心精髓)\n([\s\S]*?)\n\n## /) || content.match(/## (Core Essence|核心精髓)\n([\s\S]*?)$/); const essence = essenceMatch ? essenceMatch[2].trim() : ''; // Extract key points (support both languages) const keyPointsMatch = content.match(/## (Key Points|关键要点)\n([\s\S]*?)\n\n## /) || content.match(/## (Key Points|关键要点)\n([\s\S]*?)$/); const keyPoints = keyPointsMatch ? keyPointsMatch[2].split('\n').filter(line => line.startsWith('- ')).map(line => line.substring(2)) : []; // Extract outcomes (support both languages) const outcomesMatch = content.match(/## (Outcomes|完成成果)\n([\s\S]*?)(\n\n## |\n\n---)/); const outcomes = outcomesMatch ? outcomesMatch[2].split('\n').filter(line => line.startsWith('- ')).map(line => line.substring(2)) : []; return { title, essence, completionStatus: (statusMatch ? statusMatch[2] : 'unknown') as any, keyPoints, outcomes, timestamp: timestampMatch ? timestampMatch[2] : new Date().toISOString(), messageCount: messageCountMatch ? parseInt(messageCountMatch[2]) : 0, functionality: filename.split('_').slice(2).join('_').replace('.mdc', ''), language: isEnglish ? 'en' : 'zh' }; }

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