Skip to content

Commit 301dbe4

Browse files
authored
Deprecate Builder.customizeRequest() in favor of httpRequestCustomizer() (#791)
Deprecate Builder.customizeRequest() in HttpClientSseClientTransport and HttpClientStreamableHttpTransport customizeRequest() executes its consumer once at build time, freezing headers into the shared requestBuilder. This silently breaks OAuth token refresh scenarios where the Authorization header needs to be updated after the transport is built. Add @deprecated and update Javadoc to clarify the build-time-only semantics and guide users toward httpRequestCustomizer() or asyncHttpRequestCustomizer() which run on every request. Closes #788 Signed-off-by: Daniel Garnier-Moiroux <git@garnier.wf>
1 parent cd2c21c commit 301dbe4

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

mcp-core/src/main/java/io/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,10 +241,17 @@ public Builder requestBuilder(HttpRequest.Builder requestBuilder) {
241241
}
242242

243243
/**
244-
* Customizes the HTTP client builder.
244+
* Applies the given consumer to the shared {@link HttpRequest.Builder} <b>once,
245+
* at build time</b>. Any headers set here are frozen into the template and
246+
* <b>cannot be updated</b> after the transport is built.
245247
* @param requestCustomizer the consumer to customize the HTTP request builder
246248
* @return this builder
249+
* @deprecated Use {@link #requestBuilder(HttpRequest.Builder)} for stable
250+
* headers, or {@link #httpRequestCustomizer(McpSyncHttpClientRequestCustomizer)}
251+
* / {@link #asyncHttpRequestCustomizer(McpAsyncHttpClientRequestCustomizer)} for
252+
* dynamic per-request customization.
247253
*/
254+
@Deprecated
248255
public Builder customizeRequest(final Consumer<HttpRequest.Builder> requestCustomizer) {
249256
Assert.notNull(requestCustomizer, "requestCustomizer must not be null");
250257
requestCustomizer.accept(requestBuilder);

mcp-core/src/main/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransport.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -738,10 +738,17 @@ public Builder requestBuilder(HttpRequest.Builder requestBuilder) {
738738
}
739739

740740
/**
741-
* Customizes the HTTP client builder.
741+
* Applies the given consumer to the shared {@link HttpRequest.Builder} <b>once,
742+
* at build time</b>. Any headers set here are frozen into the template and
743+
* <b>cannot be updated</b> after the transport is built.
742744
* @param requestCustomizer the consumer to customize the HTTP request builder
743745
* @return this builder
746+
* @deprecated Use {@link #requestBuilder(HttpRequest.Builder)} for stable
747+
* headers, or {@link #httpRequestCustomizer(McpSyncHttpClientRequestCustomizer)}
748+
* / {@link #asyncHttpRequestCustomizer(McpAsyncHttpClientRequestCustomizer)} for
749+
* dynamic per-request customization.
744750
*/
751+
@Deprecated
745752
public Builder customizeRequest(final Consumer<HttpRequest.Builder> requestCustomizer) {
746753
Assert.notNull(requestCustomizer, "requestCustomizer must not be null");
747754
requestCustomizer.accept(requestBuilder);

0 commit comments

Comments
 (0)