From 13e2d3409b092c131b512f9105997e16c9c62153 Mon Sep 17 00:00:00 2001 From: neerajbhatt Date: Sun, 24 May 2026 08:11:46 +0530 Subject: [PATCH] fix: replace Mono.zip with Mono.when in StdioServerTransportProvider#sendMessage Mono.zip requires actual values from each source to produce a Tuple2, but inboundReady and outboundReady are Sinks.One that only emit completion signals via tryEmitValue(null). This causes Mono.zip to never complete, hanging sendMessage. Mono.when correctly waits for completion signals without requiring values. Closes #303 --- .../server/transport/StdioServerTransportProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransportProvider.java b/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransportProvider.java index 66cc304d6..2a5e42a1d 100644 --- a/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransportProvider.java +++ b/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransportProvider.java @@ -160,7 +160,7 @@ public StdioMcpSessionTransport() { @Override public Mono sendMessage(McpSchema.JSONRPCMessage message) { - return Mono.zip(inboundReady.asMono(), outboundReady.asMono()).then(Mono.defer(() -> { + return Mono.when(inboundReady.asMono(), outboundReady.asMono()).then(Mono.defer(() -> { if (outboundSink.tryEmitNext(message).isSuccess()) { return Mono.empty(); }