From 3f1160ec17f0e6dca96e1e0f63667c5578deb05b Mon Sep 17 00:00:00 2001 From: Jack Amadeo Date: Fri, 13 Jun 2025 10:55:44 -0400 Subject: [PATCH] fix: handle JsonRPC error variants as responses --- 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 b16af1be9790..d4aa74751ceb 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 474592fdd7aa..e00e758f60d5 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; } _ => {