Skip to main content
Glama

backup_memories

Backup conversation memories to files with metadata and timestamps. Export short-term and long-term memories from Memory MCP Server for preservation and analysis.

Instructions

將指定對話的所有記憶備份到文件。支持導出短期和長期記憶,包含完整的元數據和時間戳。

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
conversation_idYes對話 ID
output_pathNo輸出文件路徑(默認為 data/backups/)
include_short_termNo是否包含短期記憶
include_long_termNo是否包含長期記憶
compressNo是否壓縮(保留用於將來實現)

Implementation Reference

  • The async handler that implements the backup_memories tool logic: loads specified memories, creates timestamped JSON backup file in data/backups/, returns file path, memory counts, and size.
    async handler(args) {
      const { conversation_id, output_path, include_short_term, include_long_term } = args;
    
      try {
        const storage = getStorageManager(conversation_id);
        const backup = {
          version: '1.0',
          timestamp: new Date().toISOString(),
          conversation_id,
          short_term: null,
          long_term: null
        };
    
        let totalMemories = 0;
    
        // 加載短期記憶
        if (include_short_term) {
          const shortTerm = await storage.loadShortTermMemories();
          backup.short_term = shortTerm;
          totalMemories += shortTerm.length;
        }
    
        // 加載長期記憶
        if (include_long_term) {
          const longTerm = await storage.loadLongTermMemories();
          backup.long_term = longTerm;
          totalMemories += longTerm.length;
        }
    
        // 確定輸出路徑
        const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
        const defaultPath = path.join(__dirname, '../../data/backups');
        const backupDir = output_path || defaultPath;
    
        await fs.mkdir(backupDir, { recursive: true });
    
        const fileName = `backup_${conversation_id}_${timestamp}.json`;
        const filePath = path.join(backupDir, fileName);
    
        // 寫入備份文件
        const content = JSON.stringify(backup, null, 2);
        await fs.writeFile(filePath, content, 'utf-8');
    
        const sizeKB = (Buffer.byteLength(content, 'utf-8') / 1024).toFixed(2);
    
        return {
          success: true,
          backup_path: filePath,
          total_memories: totalMemories,
          short_term_count: backup.short_term?.length || 0,
          long_term_count: backup.long_term?.length || 0,
          size_kb: sizeKB,
          timestamp: backup.timestamp
        };
      } catch (error) {
        return {
          success: false,
          error: error.message
        };
      }
    }
  • Zod input schema for backup_memories tool parameters.
    inputSchema: z.object({
      conversation_id: z.string().describe('對話 ID'),
      output_path: z.string().optional().describe('輸出文件路徑(默認為 data/backups/)'),
      include_short_term: z.boolean().default(true).describe('是否包含短期記憶'),
      include_long_term: z.boolean().default(true).describe('是否包含長期記憶'),
      compress: z.boolean().default(false).describe('是否壓縮(保留用於將來實現)')
    }),
  • Tool definition pushed to the tools array returned by createBackupTools, including name, description, schema, and handler.
    tools.push({
      name: 'backup_memories',
      description: '將指定對話的所有記憶備份到文件。支持導出短期和長期記憶,包含完整的元數據和時間戳。',
      inputSchema: z.object({
        conversation_id: z.string().describe('對話 ID'),
        output_path: z.string().optional().describe('輸出文件路徑(默認為 data/backups/)'),
        include_short_term: z.boolean().default(true).describe('是否包含短期記憶'),
        include_long_term: z.boolean().default(true).describe('是否包含長期記憶'),
        compress: z.boolean().default(false).describe('是否壓縮(保留用於將來實現)')
      }),
      async handler(args) {
        const { conversation_id, output_path, include_short_term, include_long_term } = args;
    
        try {
          const storage = getStorageManager(conversation_id);
          const backup = {
            version: '1.0',
            timestamp: new Date().toISOString(),
            conversation_id,
            short_term: null,
            long_term: null
          };
    
          let totalMemories = 0;
    
          // 加載短期記憶
          if (include_short_term) {
            const shortTerm = await storage.loadShortTermMemories();
            backup.short_term = shortTerm;
            totalMemories += shortTerm.length;
          }
    
          // 加載長期記憶
          if (include_long_term) {
            const longTerm = await storage.loadLongTermMemories();
            backup.long_term = longTerm;
            totalMemories += longTerm.length;
          }
    
          // 確定輸出路徑
          const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
          const defaultPath = path.join(__dirname, '../../data/backups');
          const backupDir = output_path || defaultPath;
    
          await fs.mkdir(backupDir, { recursive: true });
    
          const fileName = `backup_${conversation_id}_${timestamp}.json`;
          const filePath = path.join(backupDir, fileName);
    
          // 寫入備份文件
          const content = JSON.stringify(backup, null, 2);
          await fs.writeFile(filePath, content, 'utf-8');
    
          const sizeKB = (Buffer.byteLength(content, 'utf-8') / 1024).toFixed(2);
    
          return {
            success: true,
            backup_path: filePath,
            total_memories: totalMemories,
            short_term_count: backup.short_term?.length || 0,
            long_term_count: backup.long_term?.length || 0,
            size_kb: sizeKB,
            timestamp: backup.timestamp
          };
        } catch (error) {
          return {
            success: false,
            error: error.message
          };
        }
      }
    });
  • src/index.js:161-162 (registration)
    Registers all backup tools (including backup_memories) from createBackupTools into the server's toolRegistry with 'backup' scope.
    const backupTools = createBackupTools(getShortTermManager, getLongTermManager, getStorageManager);
    backupTools.forEach(tool => registerTool(tool, 'backup'));

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/win10ogod/memory-mcp-server'

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