From 1326db231e4a76f844803a653ec8d44e4e649448 Mon Sep 17 00:00:00 2001 From: Jack Amadeo Date: Fri, 13 Jun 2025 12:05:46 -0400 Subject: [PATCH] fix: handle JsonRPC error variants as responses (#2903) --- crates/mcp-client/examples/integration_test.rs | 6 ++++++ crates/mcp-client/src/client.rs | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/crates/mcp-client/examples/integration_test.rs b/crates/mcp-client/examples/integration_test.rs index b16af1be97..d4aa74751c 100644 --- a/crates/mcp-client/examples/integration_test.rs +++ b/crates/mcp-client/examples/integration_test.rs @@ -110,6 +110,12 @@ where let collected_events_after = events.lock().await.len(); assert_eq!(collected_events_after - collected_eventes_before, n_steps); + let error_result = client + .call_tool("add", serde_json::json!({ "a": "foo", "b": "bar" })) + .await; + assert!(error_result.is_err()); + println!("Error result: {error_result:#?}\n"); + // List resources let resources = client.list_resources(None).await?; println!("Resources: {resources:#?}\n"); diff --git a/crates/mcp-client/src/client.rs b/crates/mcp-client/src/client.rs index 474592fdd7..e00e758f60 100644 --- a/crates/mcp-client/src/client.rs +++ b/crates/mcp-client/src/client.rs @@ -135,7 +135,8 @@ where Ok(message) => { tracing::info!("Received message: {:?}", message); match message { - JsonRpcMessage::Response(JsonRpcResponse { id: Some(id), .. }) => { + JsonRpcMessage::Response(JsonRpcResponse { id: Some(id), .. }) + | JsonRpcMessage::Error(JsonRpcError { id: Some(id), .. }) => { service_ptr.respond(&id.to_string(), Ok(message)).await; } _ => {