You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用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

火山引擎 最新活动