From 759a4c18811a140d8680eb532d9114278e1b7c1d Mon Sep 17 00:00:00 2001 From: logan Date: Thu, 19 Jun 2025 06:21:42 +0900 Subject: [PATCH] fix(client): Fixes a bug in McpClientSession.sendRequest() where it waited until timeout when receiving error responses such as 4xx or 5xx. Returning failedFuture() when an error is detected in HttpClientSseClientTransport.sendMessage() resolves the issue. --- .../transport/HttpClientSseClientTransport.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java b/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java index 99cf2a625..6005c4496 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java @@ -420,12 +420,15 @@ public Mono sendMessage(JSONRPCMessage message) { .build(); return Mono.fromFuture( - httpClient.sendAsync(request, HttpResponse.BodyHandlers.discarding()).thenAccept(response -> { - if (response.statusCode() != 200 && response.statusCode() != 201 && response.statusCode() != 202 - && response.statusCode() != 206) { - logger.error("Error sending message: {}", response.statusCode()); - } - })); + httpClient.sendAsync(request, HttpResponse.BodyHandlers.discarding()) + .thenCompose(response -> { + int status = response.statusCode(); + if (status != 200 && status != 201 && status != 202 && status != 206) { + return CompletableFuture.failedFuture(new McpError("Error sending message: " + status)); + } + return CompletableFuture.completedFuture(null); + }) + ); } catch (IOException e) { if (!isClosing) {