From d1a3c201a45ba217c0054555229d22f3d5d0e685 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Thu, 3 Apr 2025 17:53:58 -0700 Subject: [PATCH] Disable response compression for SSE responses (#208) --- .../McpEndpointRouteBuilderExtensions.cs | 7 ++++++- .../SseServerIntegrationTests.cs | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs b/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs index bb96356..891408d 100644 --- a/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs +++ b/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.DependencyInjection; @@ -39,7 +40,7 @@ public static class McpEndpointRouteBuilderExtensions var requestAborted = context.RequestAborted; response.Headers.ContentType = "text/event-stream"; - response.Headers.CacheControl = "no-store"; + response.Headers.CacheControl = "no-cache,no-store"; var sessionId = MakeNewSessionId(); await using var transport = new SseResponseStreamTransport(response.Body, $"/message?sessionId={sessionId}"); @@ -50,6 +51,10 @@ public static class McpEndpointRouteBuilderExtensions try { + // Make sure we disable all response buffering for SSE + context.Response.Headers.ContentEncoding = "identity"; + context.Features.GetRequiredFeature().DisableBuffering(); + var transportTask = transport.RunAsync(cancellationToken: requestAborted); await using var server = McpServerFactory.Create(transport, mcpServerOptions.Value, loggerFactory, endpoints.ServiceProvider); diff --git a/tests/ModelContextProtocol.Tests/SseServerIntegrationTests.cs b/tests/ModelContextProtocol.Tests/SseServerIntegrationTests.cs index b73a9c0..5dffad9 100644 --- a/tests/ModelContextProtocol.Tests/SseServerIntegrationTests.cs +++ b/tests/ModelContextProtocol.Tests/SseServerIntegrationTests.cs @@ -280,6 +280,21 @@ public class SseServerIntegrationTests : LoggedTest, IClassFixture