Skip to main content
Glama

search_long_term_memories

Search and activate relevant long-term memories based on current conversation context to provide contextual information and serendipitous recall.

Instructions

Search and activate relevant long-term memories based on current conversation context. Returns activated memories (whose triggers evaluated to true) and random memories for serendipity.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
messagesYes
conversation_idYes
participantsNo

Implementation Reference

  • The MCP tool definition and handler implementation for 'search_long_term_memories'. The handler processes input context, calls LongTermMemoryManager.searchAndActivateMemories, formats the results, and returns activated and random memories.
    { name: 'search_long_term_memories', description: 'Search and activate relevant long-term memories based on current conversation context. Returns activated memories (whose triggers evaluated to true) and random memories for serendipity.', inputSchema: z.object({ messages: z.array(z.object({ role: z.enum(['user', 'assistant', 'system']), content: z.string() })).describe('Recent conversation messages'), conversation_id: z.string().describe('Current conversation ID'), participants: z.object({}).passthrough().optional().describe('Optional participants information') }), handler: async (args) => { try { const context = { messages: args.messages, conversation_id: args.conversation_id, participants: args.participants || {} }; const results = await memoryManager.searchAndActivateMemories(context); const formatMemory = (mem) => ({ name: mem.name, prompt: mem.prompt, createdAt: mem.createdAt.toISOString(), updatedAt: mem.updatedAt?.toISOString() }); return { activated: results.activated.map(formatMemory), random: results.random.map(formatMemory), totalMemories: memoryManager.getMemories().length, formattedText: memoryManager.formatActivatedMemories(results.activated, results.random) }; } catch (error) { return { error: error.message }; } } },
  • Zod input schema for the search_long_term_memories tool, validating messages, conversation_id, and optional participants.
    inputSchema: z.object({ messages: z.array(z.object({ role: z.enum(['user', 'assistant', 'system']), content: z.string() })).describe('Recent conversation messages'), conversation_id: z.string().describe('Current conversation ID'), participants: z.object({}).passthrough().optional().describe('Optional participants information')
  • src/index.js:157-158 (registration)
    Registration of long-term tools, including search_long_term_memories, into the tool registry for the default conversation.
    const longTermTools = createLongTermTools(defaultLongTermManager, defaultStorageManager); longTermTools.forEach(tool => registerTool(tool, 'long-term'));
  • Core helper method in LongTermMemoryManager that evaluates triggers for all memories in the given context, collects activated ones, and selects random memories for serendipity.
    async searchAndActivateMemories(context) { context = context || {}; const activatedMemories = []; const normalizedContextModalities = normalizeModalities(context?.modalities ?? context?.attachments ?? []); const evaluationContext = { ...context, modalities: normalizedContextModalities }; if ('attachments' in evaluationContext || normalizedContextModalities.length > 0) { evaluationContext.attachments = normalizedContextModalities; } // 评估所有记忆的触发条件 for (const memory of this.memories) { try { const triggered = await evaluateTrigger(memory.trigger, evaluationContext); if (triggered) { activatedMemories.push(memory); } } catch (error) { console.error(`Error evaluating trigger for memory "${memory.name}":`, error); } } // 随机选择 2 个记忆(不包括已激活的) const randomMemories = this.getRandomMemories(2, activatedMemories.map(m => m.name)); return { activated: activatedMemories, random: randomMemories }; }
  • src/index.js:291-295 (registration)
    Dynamic recreation and registration of long-term tools per conversation_id during tool call execution, ensuring conversation-specific memory managers.
    manager = await getLongTermManager(conversationId); storage = getStorageManager(conversationId); const tools = createLongTermTools(manager, storage); const tool = tools.find(t => t.name === toolName); result = await withTimeout(tool.handler(validatedArgs), timeout, `Tool ${toolName} timeout`);

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