Skip to content

Commit 0bff451

Browse files
committed
[client] Add call_tool_raw method to get the full tool response to help get structuredContent
1 parent 010ae74 commit 0bff451

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

lib/mcp/client.rb

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,32 @@ def tools
5858
# The exact requirements for `arguments` are determined by the transport layer in use.
5959
# Consult the documentation for your transport (e.g., MCP::Client::HTTP) for details.
6060
def call_tool(tool:, arguments: nil)
61-
response = transport.send_request(request: {
61+
response = call_tool_raw(tool: tool, arguments: arguments)
62+
63+
response.dig("result", "content")
64+
end
65+
66+
# Calls a tool via the transport layer and returns the full response from the server.
67+
#
68+
# @param tool [MCP::Client::Tool] The tool to be called.
69+
# @param arguments [Object, nil] The arguments to pass to the tool.
70+
# @return [Hash] The full JSON-RPC response from the transport.
71+
#
72+
# @example
73+
# tool = client.tools.first
74+
# response = client.call_tool_with_response(tool: tool, arguments: { foo: "bar" })
75+
# structured_content = response.dig("result", "structuredContent")
76+
#
77+
# @note
78+
# The exact requirements for `arguments` are determined by the transport layer in use.
79+
# Consult the documentation for your transport (e.g., MCP::Client::HTTP) for details.
80+
def call_tool_raw(tool:, arguments: nil)
81+
transport.send_request(request: {
6282
jsonrpc: JsonRpcHandler::Version::V2_0,
6383
id: request_id,
6484
method: "tools/call",
6585
params: { name: tool.name, arguments: arguments },
6686
})
67-
68-
response.dig("result", "content")
6987
end
7088

7189
private

0 commit comments

Comments
 (0)