prune_memories
Remove outdated or low-importance memories from the AGI MCP Server based on customizable criteria like age, importance, and access frequency to optimize memory storage.
Instructions
Permanently delete memories based on criteria
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| criteria | No |
Implementation Reference
- src/memory-manager.js:813-855 (handler)Core handler function in MemoryManager that executes the pruning logic: updates old, low-importance, rarely-accessed archived memories to 'deleted' status and logs the changes.async pruneMemories(criteria = {}) { try { const { maxAge = 1095, // 3 years minImportance = 0.1, maxAccessCount = 2, status = 'archived' } = criteria; const cutoffDate = new Date(Date.now() - maxAge * 24 * 60 * 60 * 1000); const prunedMemories = await this.db .update(schema.memories) .set({ status: 'deleted' }) .where( and( eq(schema.memories.status, status), lt(schema.memories.createdAt, cutoffDate), lt(schema.memories.importance, minImportance), lte(schema.memories.accessCount, maxAccessCount) ) ) .returning({ id: schema.memories.id, content: schema.memories.content, type: schema.memories.type }); // Record deletion events for (const memory of prunedMemories) { await this.db.insert(schema.memoryChanges).values({ memoryId: memory.id, changeType: 'deletion', newValue: { reason: 'Pruned based on criteria', criteria } }); } return prunedMemories; } catch (error) { console.warn('Memory pruning failed:', error.message); return []; } }
- src/tools/memory-tools.js:314-346 (schema)Input schema definition for the prune_memories tool, defining the criteria object structure with defaults for age, importance, access count, and status.name: "prune_memories", description: "Permanently delete memories based on criteria", inputSchema: { type: "object", properties: { criteria: { type: "object", properties: { max_age: { type: "integer", description: "Maximum age in days", default: 1095 }, min_importance: { type: "number", description: "Minimum importance threshold", default: 0.1 }, max_access_count: { type: "integer", description: "Maximum access count", default: 2 }, status: { type: "string", description: "Memory status to prune", default: "archived" } } } } } },
- mcp.js:641-643 (registration)Tool dispatch registration in MCP server's CallToolRequestSchema handler: maps tool calls to memoryManager.pruneMemories and formats response.case "prune_memories": const prunedMemories = await memoryManager.pruneMemories(args.criteria || {}); return { content: [{ type: "text", text: JSON.stringify(prunedMemories, null, 2) }] };
- mcp.js:340-372 (registration)Tool registration in MCP server's ListToolsRequestSchema response, including name, description, and input schema.name: "prune_memories", description: "Permanently delete memories based on criteria", inputSchema: { type: "object", properties: { criteria: { type: "object", properties: { max_age: { type: "integer", description: "Maximum age in days", default: 1095 }, min_importance: { type: "number", description: "Minimum importance threshold", default: 0.1 }, max_access_count: { type: "integer", description: "Maximum access count", default: 2 }, status: { type: "string", description: "Memory status to prune", default: "archived" } } } } } },