fix: return protocol errors for invalid arguments and server errors
Per the MCP spec, invalid arguments and server errors are protocol errors (JSON-RPC error responses), not tool execution errors (isError: true). PR #165 moved all error cases to isError: true, and PR #231 only restored protocol errors for unknown tools. This fixes the remaining two cases: invalid arguments (-32602) and server errors (-32603). Ref: https://modelcontextprotocol.io/specification/2024-11-05/server/tools#error-handling
This commit is contained in:
parent
56319902dd
commit
8dd0379f16
1 changed files with 59 additions and 59 deletions
|
|
@ -199,7 +199,7 @@ module MCP
|
|||
response[:result][:content][0][:content]
|
||||
end
|
||||
|
||||
test "tool with required server_context fails when server has no context" do
|
||||
test "tool with required server_context returns protocol error in JSON-RPC format when server has no context" do
|
||||
server_no_context = Server.new(
|
||||
name: "test_server_no_context",
|
||||
tools: [ToolWithRequiredContext],
|
||||
|
|
@ -217,10 +217,10 @@ module MCP
|
|||
|
||||
response = server_no_context.handle(request)
|
||||
|
||||
assert_nil response[:error], "Expected no JSON-RPC error"
|
||||
assert response[:result][:isError]
|
||||
assert_equal "text", response[:result][:content][0][:type]
|
||||
assert_match(/Internal error calling tool tool_with_required_context: /, response[:result][:content][0][:text])
|
||||
assert_nil response[:result]
|
||||
assert_equal(-32603, response[:error][:code])
|
||||
assert_equal "Internal error", response[:error][:message]
|
||||
assert_match(/Internal error calling tool tool_with_required_context: /, response[:error][:data])
|
||||
end
|
||||
|
||||
test "call_tool_with_args correctly detects server_context parameter presence" do
|
||||
|
|
|
|||
Loading…
Reference in a new issue