From 7f7e00e1d81093ef3236b753f1de1d6d3c178872 Mon Sep 17 00:00:00 2001 From: RameshReddy Adutla Date: Wed, 4 Mar 2026 20:09:26 +0000 Subject: [PATCH] Fix: Replace Mono.zip with Mono.when in StdioServerTransportProvider#sendMessage Mono.zip() on Mono sources cancels the slower publisher when the faster one completes empty, which can cause the inbound or outbound ready signal to be prematurely cancelled. Mono.when() correctly waits for all sources to complete before proceeding. Fixes #303 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../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(); }