Use Kestrel for all in-memory HTTP tests (#225)
* Add route pattern parameter to MapMcp * Add configureOptionsAsync * Use Kestrel for all in-memory HTTP tests * Use ApplicationStopping token for SSE responses * Use RegisterNotificationHandler in MapMcp tests * Work around SocketsHttpHandler bug where it doesn't call DispseAsync on the stream returned by the ConnectCallback
This commit is contained in:
parent
848c9df433
commit
faf12b6a94
1 changed files with 631 additions and 642 deletions
|
|
@ -1,4 +1,5 @@
|
|||
using ModelContextProtocol.Protocol.Types;
|
||||
using Microsoft.AspNetCore.Connections;
|
||||
using ModelContextProtocol.Protocol.Types;
|
||||
using ModelContextProtocol.Server;
|
||||
using Serilog;
|
||||
using System.Text;
|
||||
|
|
@ -372,18 +373,34 @@ public class Program
|
|||
};
|
||||
}
|
||||
|
||||
public static async Task MainAsync(string[] args, ILoggerProvider? loggerProvider = null, CancellationToken cancellationToken = default)
|
||||
public static async Task MainAsync(string[] args, ILoggerProvider? loggerProvider = null, IConnectionListenerFactory? kestrelTransport = null, CancellationToken cancellationToken = default)
|
||||
{
|
||||
Console.WriteLine("Starting server...");
|
||||
|
||||
int port = args.Length > 0 && uint.TryParse(args[0], out var parsedPort) ? (int)parsedPort : 3001;
|
||||
|
||||
var builder = WebApplication.CreateSlimBuilder(args);
|
||||
builder.WebHost.ConfigureKestrel(options =>
|
||||
var builder = WebApplication.CreateEmptyBuilder(new()
|
||||
{
|
||||
options.ListenLocalhost(port);
|
||||
Args = args,
|
||||
});
|
||||
|
||||
if (kestrelTransport is null)
|
||||
{
|
||||
int port = args.Length > 0 && uint.TryParse(args[0], out var parsedPort) ? (int)parsedPort : 3001;
|
||||
builder.WebHost.ConfigureKestrel(options =>
|
||||
{
|
||||
options.ListenLocalhost(port);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
// Add passed-in transport before calling UseKestrelCore() to avoid the SocketsHttpHandler getting added.
|
||||
builder.Services.AddSingleton(kestrelTransport);
|
||||
}
|
||||
|
||||
builder.WebHost.UseKestrelCore();
|
||||
builder.Services.AddLogging();
|
||||
builder.Services.AddRoutingCore();
|
||||
|
||||
builder.Logging.AddConsole();
|
||||
ConfigureSerilog(builder.Logging);
|
||||
if (loggerProvider is not null)
|
||||
{
|
||||
|
|
@ -393,6 +410,8 @@ public class Program
|
|||
builder.Services.AddMcpServer(ConfigureOptions);
|
||||
|
||||
var app = builder.Build();
|
||||
app.UseRouting();
|
||||
app.UseEndpoints(_ => { });
|
||||
|
||||
app.MapMcp();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue