Class: Llmemory::MCP::Tools::MemoryEpisodes

Inherits:
MCP::Tool
  • Object
show all
Defined in:
lib/llmemory/mcp/tools/memory_episodes.rb

Class Method Summary collapse

Class Method Details

.call(user_id:, query: nil, limit: nil, server_context: nil) ⇒ Object



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