Automatically fall back from Streamable HTTP to SSE on the client by default (#456)
This commit is contained in:
parent
adb2098e4d
commit
317f468807
1 changed files with 489 additions and 49 deletions
|
|
@ -1,5 +1,6 @@
|
|||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using ModelContextProtocol.Client;
|
||||
|
||||
namespace ModelContextProtocol.AspNetCore.Tests;
|
||||
|
||||
|
|
@ -34,4 +35,112 @@ public class MapMcpStreamableHttpTests(ITestOutputHelper outputHelper) : MapMcpT
|
|||
|
||||
Assert.Equal("TestCustomRouteServer", mcpClient.ServerInfo.Name);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task StreamableHttpMode_Works_WithRootEndpoint()
|
||||
{
|
||||
Builder.Services.AddMcpServer(options =>
|
||||
{
|
||||
options.ServerInfo = new()
|
||||
{
|
||||
Name = "StreamableHttpTestServer",
|
||||
Version = "1.0.0",
|
||||
};
|
||||
}).WithHttpTransport(ConfigureStateless);
|
||||
await using var app = Builder.Build();
|
||||
|
||||
app.MapMcp();
|
||||
|
||||
await app.StartAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
await using var mcpClient = await ConnectAsync("/", new()
|
||||
{
|
||||
Endpoint = new Uri("http://localhost/"),
|
||||
TransportMode = HttpTransportMode.AutoDetect
|
||||
});
|
||||
|
||||
Assert.Equal("StreamableHttpTestServer", mcpClient.ServerInfo.Name);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task AutoDetectMode_Works_WithRootEndpoint()
|
||||
{
|
||||
Builder.Services.AddMcpServer(options =>
|
||||
{
|
||||
options.ServerInfo = new()
|
||||
{
|
||||
Name = "AutoDetectTestServer",
|
||||
Version = "1.0.0",
|
||||
};
|
||||
}).WithHttpTransport(ConfigureStateless);
|
||||
await using var app = Builder.Build();
|
||||
|
||||
app.MapMcp();
|
||||
|
||||
await app.StartAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
await using var mcpClient = await ConnectAsync("/", new()
|
||||
{
|
||||
Endpoint = new Uri("http://localhost/"),
|
||||
TransportMode = HttpTransportMode.AutoDetect
|
||||
});
|
||||
|
||||
Assert.Equal("AutoDetectTestServer", mcpClient.ServerInfo.Name);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task AutoDetectMode_Works_WithSseEndpoint()
|
||||
{
|
||||
Assert.SkipWhen(Stateless, "SSE endpoint is disabled in stateless mode.");
|
||||
|
||||
Builder.Services.AddMcpServer(options =>
|
||||
{
|
||||
options.ServerInfo = new()
|
||||
{
|
||||
Name = "AutoDetectSseTestServer",
|
||||
Version = "1.0.0",
|
||||
};
|
||||
}).WithHttpTransport(ConfigureStateless);
|
||||
await using var app = Builder.Build();
|
||||
|
||||
app.MapMcp();
|
||||
|
||||
await app.StartAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
await using var mcpClient = await ConnectAsync("/sse", new()
|
||||
{
|
||||
Endpoint = new Uri("http://localhost/sse"),
|
||||
TransportMode = HttpTransportMode.AutoDetect
|
||||
});
|
||||
|
||||
Assert.Equal("AutoDetectSseTestServer", mcpClient.ServerInfo.Name);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SseMode_Works_WithSseEndpoint()
|
||||
{
|
||||
Assert.SkipWhen(Stateless, "SSE endpoint is disabled in stateless mode.");
|
||||
|
||||
Builder.Services.AddMcpServer(options =>
|
||||
{
|
||||
options.ServerInfo = new()
|
||||
{
|
||||
Name = "SseTestServer",
|
||||
Version = "1.0.0",
|
||||
};
|
||||
}).WithHttpTransport(ConfigureStateless);
|
||||
await using var app = Builder.Build();
|
||||
|
||||
app.MapMcp();
|
||||
|
||||
await app.StartAsync(TestContext.Current.CancellationToken);
|
||||
|
||||
await using var mcpClient = await ConnectAsync(options: new()
|
||||
{
|
||||
Endpoint = new Uri("http://localhost/sse"),
|
||||
TransportMode = HttpTransportMode.Sse
|
||||
});
|
||||
|
||||
Assert.Equal("SseTestServer", mcpClient.ServerInfo.Name);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue