From fce7a6bad3a4c969e8a518bddafcf1f44f8638d6 Mon Sep 17 00:00:00 2001 From: jookunshuai Date: Fri, 20 Jun 2025 17:11:19 +0800 Subject: [PATCH] fix: copy request builder to prevent side effects in HTTP transports (#333) - Add .copy() call before modifying requestBuilder in FlowSseClient - Add .copy() call before modifying requestBuilder in HttpClientSseClientTransport - Prevents unintended mutations of shared builder instances --- .../modelcontextprotocol/client/transport/FlowSseClient.java | 3 ++- .../client/transport/HttpClientSseClientTransport.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mcp/src/main/java/io/modelcontextprotocol/client/transport/FlowSseClient.java b/mcp/src/main/java/io/modelcontextprotocol/client/transport/FlowSseClient.java index 50af35c..abfafa5 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/client/transport/FlowSseClient.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/transport/FlowSseClient.java @@ -121,7 +121,8 @@ public class FlowSseClient { * @throws RuntimeException if the connection fails with a non-200 status code */ public void subscribe(String url, SseEventHandler eventHandler) { - HttpRequest request = this.requestBuilder.uri(URI.create(url)) + HttpRequest request = this.requestBuilder.copy() + .uri(URI.create(url)) .header("Accept", "text/event-stream") .header("Cache-Control", "no-cache") .GET() 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 99cf2a6..d951349 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java @@ -415,7 +415,8 @@ public class HttpClientSseClientTransport implements McpClientTransport { try { String jsonText = this.objectMapper.writeValueAsString(message); URI requestUri = Utils.resolveUri(baseUri, endpoint); - HttpRequest request = this.requestBuilder.uri(requestUri) + HttpRequest request = this.requestBuilder.copy() + .uri(requestUri) .POST(HttpRequest.BodyPublishers.ofString(jsonText)) .build();