From 2a0c27ed9677eb8bcf78ffdb71f09239e19392d0 Mon Sep 17 00:00:00 2001 From: taobaorun Date: Thu, 10 Jul 2025 11:38:30 +0800 Subject: [PATCH 1/2] sse client transport sendMessage return mcp error when status is not success. --- .../client/transport/HttpClientSseClientTransport.java | 5 +++++ 1 file changed, 5 insertions(+) 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 ab48fc0f..625feb52 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java @@ -14,6 +14,8 @@ import java.util.function.Consumer; import java.util.function.Function; +import io.modelcontextprotocol.spec.McpSchema.ErrorCodes; +import io.modelcontextprotocol.spec.McpSchema.JSONRPCResponse.JSONRPCError; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -426,6 +428,9 @@ public Mono sendMessage(JSONRPCMessage message) { if (response.statusCode() != 200 && response.statusCode() != 201 && response.statusCode() != 202 && response.statusCode() != 206) { logger.error("Error sending message: {}", response.statusCode()); + throw new McpError(new JSONRPCError(ErrorCodes.INVALID_REQUEST, + String.format("The server returned a %s status code", response.statusCode()), + response.statusCode())); } }) .doOnError(error -> { From a655c95e2596702b5df9f368f0b6d433a05ae042 Mon Sep 17 00:00:00 2001 From: taobaorun Date: Thu, 10 Jul 2025 12:57:50 +0800 Subject: [PATCH 2/2] fix ut --- .../HttpClientSseClientTransportTests.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java b/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java index e4348be2..38fc6aa7 100644 --- a/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java +++ b/mcp/src/test/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java @@ -120,7 +120,8 @@ void testMessageProcessing() { """); // Subscribe to messages and verify - StepVerifier.create(transport.sendMessage(testMessage)).verifyComplete(); + StepVerifier.create(transport.sendMessage(testMessage).onErrorResume(throwable -> Mono.empty())) + .verifyComplete(); assertThat(transport.getInboundMessageCount()).isEqualTo(1); } @@ -141,7 +142,8 @@ void testResponseMessageProcessing() { Map.of("key", "value")); // Verify message handling - StepVerifier.create(transport.sendMessage(testMessage)).verifyComplete(); + StepVerifier.create(transport.sendMessage(testMessage).onErrorResume(throwable -> Mono.empty())) + .verifyComplete(); assertThat(transport.getInboundMessageCount()).isEqualTo(1); } @@ -165,7 +167,8 @@ void testErrorMessageProcessing() { Map.of("key", "value")); // Verify message handling - StepVerifier.create(transport.sendMessage(testMessage)).verifyComplete(); + StepVerifier.create(transport.sendMessage(testMessage).onErrorResume(throwable -> Mono.empty())) + .verifyComplete(); assertThat(transport.getInboundMessageCount()).isEqualTo(1); } @@ -243,7 +246,11 @@ void testMultipleMessageProcessing() { Map.of("key", "value2")); // Verify both messages are processed - StepVerifier.create(transport.sendMessage(message1).then(transport.sendMessage(message2))).verifyComplete(); + StepVerifier + .create(transport.sendMessage(message1) + .then(transport.sendMessage(message2)) + .onErrorResume(throwable -> Mono.empty())) + .verifyComplete(); // Verify message count assertThat(transport.getInboundMessageCount()).isEqualTo(2);