Put MapMcp in Microsoft.AspNetCore.Builder namespace (#171)

* Still dispose McpSession when MessageProcessingTask throws non-OCE exceptions

* Put MapMcp in icrosoft.AspNetCore.Builder namespace
This commit is contained in:
Stephen Halter 2025-03-31 14:35:28 -07:00 • committed by GitHub
commit 57a526ec30
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 21 additions and 21 deletions

View file

@ -1,5 +1,3 @@
using ModelContextProtocol.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer().WithToolsFromAssembly();
var app = builder.Build();

View file

@ -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 ModelContextProtocol.Utils.Json;
using System.Collections.Concurrent;
using System.Security.Cryptography;
namespace ModelContextProtocol.AspNetCore;
namespace Microsoft.AspNetCore.Builder;
/// <summary>
/// Extension methods for <see cref="IEndpointRouteBuilder"/> to add MCP endpoints.

View file

@ -30,7 +30,6 @@ dotnet add package ModelContextProtocol.AspNetCore --prerelease
```csharp
// Program.cs
using ModelContextProtocol.AspNetCore;
using ModelContextProtocol.Server;
using System.ComponentModel;

View file

@ -94,25 +94,30 @@ internal abstract class McpJsonRpcEndpoint : IAsyncDisposable
{
_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);
}

View file

@ -1,5 +1,4 @@
using ModelContextProtocol.AspNetCore;
using ModelContextProtocol.Protocol.Types;
using ModelContextProtocol.Protocol.Types;
using ModelContextProtocol.Server;
using Serilog;
using System.Text;