From 27523d3ac31bc0aa80bb7411080a117eb655e458 Mon Sep 17 00:00:00 2001 From: chaoice <12228095+chaoice@users.noreply.github.com> Date: Wed, 2 Apr 2025 10:40:48 +0800 Subject: [PATCH] Update HttpClientSseClientTransport.java fix: switch HttpClient to HTTP/1.1 to prevent body loss with Python servers This change modifies the HttpClient configuration to explicitly use HTTP_1_1 instead of the default HTTP_2, resolving a critical compatibility issue with Python-based servers (uvicorn/starlette) that cannot properly handle HTTP/2 upgrade requests with bodies. The issue occurs because: 1. Java's HttpClient attempts to upgrade to HTTP/2 (h2c) while simultaneously sending request bodies 2. Python servers (particularly with HttpToolsProtocol) prioritize protocol upgrade handling, causing the body parsing to be skipped or interrupted 3. This results in request bodies being lost during transmission --- .../client/transport/HttpClientSseClientTransport.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 696efdffd..962a38d2a 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java @@ -133,7 +133,7 @@ public HttpClientSseClientTransport(HttpClient.Builder clientBuilder, String bas this.baseUri = baseUri; this.sseEndpoint = sseEndpoint; this.objectMapper = objectMapper; - this.httpClient = clientBuilder.connectTimeout(Duration.ofSeconds(10)).build(); + this.httpClient = clientBuilder.version(HttpClient.Version.HTTP_1_1).connectTimeout(Duration.ofSeconds(10)).build(); this.sseClient = new FlowSseClient(this.httpClient); }