modelcontextprotocol / modelcontextprotocol/java-sdk

JAVA SDK connectto streamablehttptransport raise "Client failed to initialize by explicit API call"

Open
#882 0 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

needs repro
Dominant language
Java
Stars
3.7k
Forks
1.1k
Avg merge
1d 15h
Merged PRs (30d)
9

Description

JAVA SDK connectto streamablehttptransport raise "Client failed to initialize by explicit API call".
sse is fine.
I searched on issuses, Some similar issues were found, but they were all marked as resolved.

Bug description
JAVA SDK connectto streamablehttptransport raise "Client failed to initialize by explicit API call"

Environment
Please provide as many details as possible: Spring MCP version, Java version, which vector store you use if any, etc
java 17 , main brunch 2026-03-25; v1.1.0

Steps to reproduce

    public static void testmcphttp() {
        String mcpUrl = "http://192.168.190.51:31603/api/mcp/mcpserver/mcp";
        String tk = "gtk849416ca3e3b44a28b9956046895fafe";
        mcpUrl = "http://127.0.0.1:8702/api/mcp/mcpserver/mcp";
        tk = "gtkba06f61af36f4cf597624c73cc23abbc";
        HttpClientStreamableHttpTransport transport = HttpClientStreamableHttpTransport
                .builder("http://127.0.0.1:8702")
                .endpoint("/api/mcp/mcpserver/mcp?tk=" + tk)
                .build();
        McpSyncClient mcpSyncClient = McpClient
                .sync(transport)
                .clientInfo(new McpSchema.Implementation("Sample client", "0.0.0"))
                .build();

        mcpSyncClient.initialize();
    }

Expected behavior


Exception in thread "main" java.lang.RuntimeException: Client failed to initialize by explicit API call
	at io.modelcontextprotocol.client.LifecycleInitializer.lambda$withInitialization$2(LifecycleInitializer.java:288)
	at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94)
	at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
	at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.handleTimeout(FluxTimeout.java:296)
	at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.doTimeout(FluxTimeout.java:281)
	at reactor.core.publisher.FluxTimeout$TimeoutTimeoutSubscriber.onNext(FluxTimeout.java:420)
	at reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162)
	at reactor.core.publisher.MonoDelay$MonoDelayRunnable.propagateDelay(MonoDelay.java:270)
	at reactor.core.publisher.MonoDelay$MonoDelayRunnable.run(MonoDelay.java:285)
	at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)
	at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)
	at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)
	Suppressed: java.lang.Exception: #block terminated with an error
		at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:104)
		at reactor.core.publisher.Mono.block(Mono.java:1779)
		at io.modelcontextprotocol.client.McpSyncClient.initialize(McpSyncClient.java:189)
		at io.modelcontextprotocol.TLCMCP.testmcphttp(TLCMCP.java:33)
		at io.modelcontextprotocol.TLCMCP.main(TLCMCP.java:57)
Caused by: java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 20000ms in 'map' (and no fallback has been configured)
	... 14 more

Minimal Complete Reproducible example

    public static void testmcphttp() {
        String mcpUrl = "http://192.168.190.51:31603/api/mcp/mcpserver/mcp";
        String tk = "gtk849416ca3e3b44a28b9956046895fafe";
        mcpUrl = "http://127.0.0.1:8702/api/mcp/mcpserver/mcp";
        tk = "gtkba06f61af36f4cf597624c73cc23abbc";
        HttpClientStreamableHttpTransport transport = HttpClientStreamableHttpTransport
                .builder("http://127.0.0.1:8702")
                .endpoint("/api/mcp/mcpserver/mcp?tk=" + tk)
                .build();
        McpSyncClient mcpSyncClient = McpClient
                .sync(transport)
                .clientInfo(new McpSchema.Implementation("Sample client", "0.0.0"))
                .build();

        mcpSyncClient.initialize();
    }

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the provided HttpClientStreamableHttpTransport builder example and reproduce the failure using mcpSyncClient.initialize(). Read LifecycleInitializer.java around line 288 and the initialization path leading to the 20-second timeout, then compare the streamable HTTP behavior with the reported working SSE case. Done means the Java SDK initializes successfully for the supplied streamable HTTP endpoint and has a regression test for the behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
api, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.