使用MCP Java SDK 0.11.0通过HTTPS传输初始化客户端时触发McpError的问题求助
MCP Java SDK 0.11.0通过HTTPS传输初始化客户端时触发McpError的问题求助
各位好,我目前正在基于MCP Java SDK(版本io.modelcontextprotocol.sdk:mcp:0.11.0)开发一个聊天类型的插件,碰到了一个让我头疼的问题:当使用HTTPS传输方式时,客户端初始化直接失败,抛出了io.modelcontextprotocol.spec.McpError: Client failed to initialize by explicit API call错误。
问题核心
当使用HTTPS传输时,客户端在初始化阶段就报错,但相同的服务器环境下:
- VS Code通过HTTPS能完美连接服务器
- 我们的Java客户端用SSE传输也能成功连接并交互
上下文信息
- MCP服务器是内部实现的,VS Code的HTTPS连接正常,说明服务器完全支持MCP-over-HTTP规范
- Java客户端用SSE传输能成功连接同一服务器,证明认证逻辑、网络连通性都没有问题
- 只有Java SDK的HTTPS传输会在初始化阶段失败
相关代码片段
if ("http".equalsIgnoreCase(transportType)) { // 注:实际使用的是HTTPS格式的URL HttpClientStreamableHttpTransport.Builder builder = HttpClientStreamableHttpTransport.builder(mcpUrl) .customizeRequest(requestBuilder -> { System.out.println("Customizing request for HTTP MCP client: " + mcpUrl); // 若存在认证头则添加 if (authHeader != null && !authHeader.isEmpty()) { authHeader.forEach((key, value) -> { requestBuilder.setHeader(key, value); }); } }) .endpoint(URI.create(mcpUrl).getRawPath()); client = McpClient.async(builder.build()).requestTimeout(Duration.ofSeconds(60)).build(); } client.initialize().block();
底层堆栈跟踪
java.lang.RuntimeException: Failed to send message: DummyEvent[responseInfo=jdk.internal.net.http.ResponseInfoImpl@fbe869d] at io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport.lambda$sendMessage$27(HttpClientStreamableHttpTransport.java:512) ... at io.modelcontextprotocol.client.transport.ResponseSubscribers$BodilessResponseLineSubscriber.hookOnComplete(ResponseSubscribers.java:287)
关键观察点
- 错误精确发生在调用
client.initialize().block()的瞬间 - 堆栈中出现
BodilessResponseLineSubscriber.hookOnComplete,暗示HTTP响应的处理逻辑可能存在异常 - 认证和网络层面无问题(SSE传输正常),问题应该聚焦在Java SDK的HTTPS传输与服务器的交互细节上
我的疑问
- 有没有其他开发者遇到过这个特定的McpError(HTTP传输初始化失败)?
- Java SDK的HTTP传输实现,和VS Code的HTTP客户端在处理MCP初始化请求时,存在哪些差异?
- 这个问题会不会和HTTP头、请求方法,或者Java SDK特有的连接处理逻辑有关?
HttpClientStreamableHttpTransport有没有什么额外的配置项可以尝试解决这个问题?
内容来源于stack exchange




