modelcontextprotocol / modelcontextprotocol/java-sdk

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

Aperta
#882 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

needs repro
Lingua principale
Java
Stelle
3.7k
Fork
1.1k
Merge medio
1g 15h
PR unite (30g)
9

Descrizione

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();
    }

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia con l'esempio fornito del builder HttpClientStreamableHttpTransport e riproduci il fallimento usando mcpSyncClient.initialize(). Leggi LifecycleInitializer.java intorno alla riga 288 e il percorso di inizializzazione che porta al timeout di 20 secondi, quindi confronta il comportamento di streamable HTTP con il caso SSE segnalato come funzionante. Il lavoro è completato quando il Java SDK viene inizializzato correttamente per l'endpoint streamable HTTP fornito ed esiste un test di regressione per questo comportamento.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
java
Ambito
api, networking
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.