Skip to main content
Glama

search_episodic_memory

Search through user event history and past experiences to retrieve relevant memories based on content queries, enabling personalized AI interactions through comprehensive memory recall.

Instructions

Search episodic memories by content

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results
queryYesSearch query
userIdYesUser identifier

Implementation Reference

  • The tool handler case that validates input parameters (userId, query, limit) and calls memoryStore.searchEpisodicMemory to execute the tool logic, returning the results as JSON text.
    case "search_episodic_memory": { const { userId, query, limit } = request.params.arguments as any; // Validate inputs ValidationUtils.validateUserId(userId); ValidationUtils.validateSearchQuery(query); ValidationUtils.validateLimit(limit); const memories = memoryStore.searchEpisodicMemory(userId, query, limit); return { content: [{ type: "text", text: JSON.stringify(memories, null, 2) }] }; }
  • Input schema defining the expected arguments for the search_episodic_memory tool: userId (required string), query (required string), limit (optional number).
    inputSchema: { type: "object", properties: { userId: { type: "string", description: "User identifier" }, query: { type: "string", description: "Search query" }, limit: { type: "number", description: "Maximum number of results" } }, required: ["userId", "query"]
  • Registration of the search_episodic_memory tool in the list of available tools, including name, description, and input schema.
    { name: "search_episodic_memory", description: "Search episodic memories by content", inputSchema: { type: "object", properties: { userId: { type: "string", description: "User identifier" }, query: { type: "string", description: "Search query" }, limit: { type: "number", description: "Maximum number of results" } }, required: ["userId", "query"] } }
  • Core implementation of episodic memory search: filters user memories where query matches event, context, outcome, or tags (case-insensitive), sorts by recency, and applies limit.
    searchEpisodicMemory(userId: string, query: string, limit?: number): EpisodicMemory[] { const searchTerm = query.toLowerCase(); const memories = Array.from(this.episodicMemory.values()) .filter(memory => memory.userId === userId && (memory.event.toLowerCase().includes(searchTerm) || memory.context.toLowerCase().includes(searchTerm) || memory.outcome?.toLowerCase().includes(searchTerm) || memory.tags?.some(tag => tag.toLowerCase().includes(searchTerm))) ) .sort((a, b) => b.timestamp - a.timestamp); return limit ? memories.slice(0, limit) : memories; }

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

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