class Riffer::Mcp::Client
rbs_inline: enabled
Public Class Methods
Source
# File lib/riffer/mcp/client.rb, line 9 def initialize(endpoint:, headers: {}, client: nil) depends_on "mcp" depends_on "faraday" @client = client || begin resolved_headers = Riffer::Helpers::CallOrValue.resolve(headers) transport = MCP::Client::HTTP.new(url: endpoint, headers: resolved_headers) MCP::Client.new(transport: transport) end end
Public Instance Methods
Source
# File lib/riffer/mcp/client.rb, line 34 def tools_call(name, arguments = {}) tool = MCP::Client::Tool.new(name: name, description: nil, input_schema: nil) response = @client.call_tool(tool: tool, arguments: arguments) raise Riffer::Error, response.dig("error", "message") || "MCP tool call failed" if response["error"] if response.dig("result", "isError") message = (response.dig("result", "content") || []).filter_map { |item| item["text"] }.join raise Riffer::Error, message.empty? ? "MCP tool '#{name}' failed" : message end content = response.dig("result", "content") || [] content.filter_map { |item| item["text"] }.join end
Source
# File lib/riffer/mcp/client.rb, line 22 def tools_list @client.tools.map do |tool| { name: tool.name, description: tool.description, input_schema: tool.input_schema, } end end