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_skills.rb', line 19
def call(user_id:, query: nil, limit: nil, server_context: nil)
memory = Llmemory::LongTerm::Procedural::Memory.new(user_id: user_id)
cap = (limit || 10).to_i
skills = if query.to_s.strip.empty?
memory.skills(limit: cap)
else
memory.search_candidates(query, top_k: cap).filter_map { |c| memory.get_skill(c[:id]) }
end
if skills.empty?
return ::MCP::Tool::Response.new([{ type: "text", text: "No skills for user #{user_id}." }])
end
lines = skills.map do |s|
"[#{s.id}] #{s.name} v#{s.version} (#{s.kind}) — success rate #{format('%.2f', s.success_rate)} (#{s.success_count}/#{s.success_count + s.failure_count})"
end
::MCP::Tool::Response.new([{ type: "text", text: lines.join("\n") }])
rescue => e
::MCP::Tool::Response.new([{ type: "text", text: "Error listing skills: #{e.message}" }], error: true)
end
|