From 948d48f6e9ba513a3508ddb187cfaec4ec325149 Mon Sep 17 00:00:00 2001 From: RameshReddy Adutla Date: Wed, 4 Mar 2026 20:23:03 +0000 Subject: [PATCH] Add X-Accel-Buffering: no header to SSE responses Proxy servers like Nginx buffer responses by default, which causes SSE streams to be delayed. Adding the X-Accel-Buffering: no header instructs reverse proxies to disable response buffering for SSE endpoints, ensuring real-time streaming delivery. Applied to all three SSE response locations: - HttpServletSseServerTransportProvider (SSE endpoint) - HttpServletStreamableServerTransportProvider (GET and POST SSE) Fixes #293 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../server/transport/HttpServletSseServerTransportProvider.java | 1 + .../transport/HttpServletStreamableServerTransportProvider.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java b/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java index d3648a06f..0a919f068 100644 --- a/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java +++ b/mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletSseServerTransportProvider.java @@ -287,6 +287,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) response.setHeader("Cache-Control", "no-cache"); response.setHeader("Connection", "keep-alive"); response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("X-Accel-Buffering", "no"); String sessionId = UUID.randomUUID().toString(); AsyncContext asyncContext = request.startAsync(); 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 95edb63a0..8eaf20376 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 @@ -316,6 +316,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) response.setHeader("Cache-Control", "no-cache"); response.setHeader("Connection", "keep-alive"); response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("X-Accel-Buffering", "no"); AsyncContext asyncContext = request.startAsync(); asyncContext.setTimeout(0); @@ -523,6 +524,7 @@ else if (message instanceof McpSchema.JSONRPCRequest jsonrpcRequest) { response.setHeader("Cache-Control", "no-cache"); response.setHeader("Connection", "keep-alive"); response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("X-Accel-Buffering", "no"); AsyncContext asyncContext = request.startAsync(); asyncContext.setTimeout(0);