19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/llmemory/mcp/tools/memory_episodes.rb', line 19
def call(user_id:, query: nil, limit: nil, server_context: nil)
memory = Llmemory::LongTerm::Episodic::Memory.new(user_id: user_id)
cap = (limit || 10).to_i
episodes = if query.to_s.strip.empty?
memory.recent_episodes(limit: cap)
else
memory.search_candidates(query, top_k: cap).filter_map { |c| memory.find_episode(c[:id]) }
end
if episodes.empty?
return ::MCP::Tool::Response.new([{ type: "text", text: "No episodes for user #{user_id}." }])
end
lines = episodes.map do |ep|
"[#{ep.id}] (importance: #{ep.importance}; outcome: #{ep.outcome || 'n/a'}) #{ep.summary || ep.searchable_text[0, 120]}"
end
::MCP::Tool::Response.new([{ type: "text", text: lines.join("\n") }])
rescue => e
::MCP::Tool::Response.new([{ type: "text", text: "Error listing episodes: #{e.message}" }], error: true)
end
|