From 97d4dc5424cf490bb3aaf2dbb9b6046130463bc8 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Mon, 31 Mar 2025 13:43:57 -0700 Subject: [PATCH 1/2] Still dispose McpSession when MessageProcessingTask throws non-OCE exceptions --- .../Shared/McpJsonRpcEndpoint.cs | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs b/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs index ac0337f9e..3f7417af3 100644 --- a/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs +++ b/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs @@ -94,25 +94,30 @@ public virtual async ValueTask DisposeUnsynchronizedAsync() { _logger.CleaningUpEndpoint(EndpointName); - if (_sessionCts is not null) + try { - await _sessionCts.CancelAsync().ConfigureAwait(false); - } - - if (MessageProcessingTask is not null) - { - try + if (_sessionCts is not null) { - await MessageProcessingTask.ConfigureAwait(false); + await _sessionCts.CancelAsync().ConfigureAwait(false); } - catch (OperationCanceledException) + + if (MessageProcessingTask is not null) { - // Ignore cancellation + try + { + await MessageProcessingTask.ConfigureAwait(false); + } + catch (OperationCanceledException) + { + // Ignore cancellation + } } } - - _session?.Dispose(); - _sessionCts?.Dispose(); + finally + { + _session?.Dispose(); + _sessionCts?.Dispose(); + } _logger.EndpointCleanedUp(EndpointName); } From e1b3e53b5178989911b232d09d7cb72ca3f9c9c8 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Mon, 31 Mar 2025 13:50:16 -0700 Subject: [PATCH 2/2] Put MapMcp in icrosoft.AspNetCore.Builder namespace --- samples/AspNetCoreSseServer/Program.cs | 2 -- .../McpEndpointRouteBuilderExtensions.cs | 5 ++--- src/ModelContextProtocol.AspNetCore/README.md | 1 - tests/ModelContextProtocol.TestSseServer/Program.cs | 3 +-- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/samples/AspNetCoreSseServer/Program.cs b/samples/AspNetCoreSseServer/Program.cs index 774957e88..9f94eb2c7 100644 --- a/samples/AspNetCoreSseServer/Program.cs +++ b/samples/AspNetCoreSseServer/Program.cs @@ -1,5 +1,3 @@ -using ModelContextProtocol.AspNetCore; - var builder = WebApplication.CreateBuilder(args); builder.Services.AddMcpServer().WithToolsFromAssembly(); var app = builder.Build(); diff --git a/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs b/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs index 3dae6cde6..6ddbc6ce3 100644 --- a/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs +++ b/src/ModelContextProtocol.AspNetCore/McpEndpointRouteBuilderExtensions.cs @@ -1,5 +1,4 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.DependencyInjection; @@ -12,7 +11,7 @@ using System.Collections.Concurrent; using System.Security.Cryptography; -namespace ModelContextProtocol.AspNetCore; +namespace Microsoft.AspNetCore.Builder; /// /// Extension methods for to add MCP endpoints. diff --git a/src/ModelContextProtocol.AspNetCore/README.md b/src/ModelContextProtocol.AspNetCore/README.md index 76f7c2ba6..457321d09 100644 --- a/src/ModelContextProtocol.AspNetCore/README.md +++ b/src/ModelContextProtocol.AspNetCore/README.md @@ -30,7 +30,6 @@ dotnet add package ModelContextProtocol.AspNetCore --prerelease ```csharp // Program.cs -using ModelContextProtocol.AspNetCore; using ModelContextProtocol.Server; using System.ComponentModel; diff --git a/tests/ModelContextProtocol.TestSseServer/Program.cs b/tests/ModelContextProtocol.TestSseServer/Program.cs index 4bbc5bfc8..23afc1d6e 100644 --- a/tests/ModelContextProtocol.TestSseServer/Program.cs +++ b/tests/ModelContextProtocol.TestSseServer/Program.cs @@ -1,5 +1,4 @@ -using ModelContextProtocol.AspNetCore; -using ModelContextProtocol.Protocol.Types; +using ModelContextProtocol.Protocol.Types; using ModelContextProtocol.Server; using Serilog; using System.Text;