From 42978c0197424450ce46ed5c3298f80404a1e13d Mon Sep 17 00:00:00 2001 From: Daniel Garnier-Moiroux Date: Mon, 2 Nov 2026 15:49:22 +0100 Subject: [PATCH] HttpServletStreamableServerTransportProvider: avoid completing async context twice Close the session transport instead of the async context: close() is idempotent and swallows failures to complete the context. Signed-off-by: Daniel Garnier-Moiroux --- .../HttpServletStreamableServerTransportProvider.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java b/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java index 29765a2eb..7ce830499 100644 --- a/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java +++ b/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java @@ -621,7 +621,9 @@ else if (message instanceof McpSchema.JSONRPCRequest jsonrpcRequest) { } catch (Exception e) { logger.error("Failed to handle request stream: {}", e.getMessage()); - asyncContext.complete(); + // The transport may already have completed the async context, when + // the failure comes from a message it could not send + sessionTransport.close(); } } else {