Pass session id's to MCP endpoints. (#466)

* Pass session id's to MCP endpoints.

* Update src/ModelContextProtocol/Client/McpClient.cs

Co-authored-by: Stephen Halter <halter73@gmail.com>

* Update src/ModelContextProtocol.AspNetCore/StreamableHttpHandler.cs

Co-authored-by: Stephen Halter <halter73@gmail.com>

* Make init callback asynchronous.

* Address feedback.

---------

Co-authored-by: Stephen Halter <halter73@gmail.com>
This commit is contained in:
Eirik Tsarpalis 2025-06-12 16:56:57 +02:00 • committed by GitHub
commit d7d9eab3f8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -52,6 +52,15 @@ public abstract class HttpServerIntegrationTests : LoggedTest, IClassFixture<Sse
// Assert
Assert.NotNull(client.ServerCapabilities);
Assert.NotNull(client.ServerInfo);
if (ClientTransportOptions.Endpoint.AbsolutePath.EndsWith("/sse"))
{
Assert.Null(client.SessionId);
}
else
{
Assert.NotNull(client.SessionId);
}
}
[Fact]
@ -90,6 +99,35 @@ public abstract class HttpServerIntegrationTests : LoggedTest, IClassFixture<Sse
Assert.Equal("Echo: Hello MCP!", textContent.Text);
}
[Fact]
public async Task CallTool_EchoSessionId_ReturnsTheSameSessionId()
{
// arrange
// act
await using var client = await GetClientAsync();
var result1 = await client.CallToolAsync("echoSessionId", cancellationToken: TestContext.Current.CancellationToken);
var result2 = await client.CallToolAsync("echoSessionId", cancellationToken: TestContext.Current.CancellationToken);
var result3 = await client.CallToolAsync("echoSessionId", cancellationToken: TestContext.Current.CancellationToken);
// assert
Assert.NotNull(result1);
Assert.NotNull(result2);
Assert.NotNull(result3);
Assert.False(result1.IsError);
Assert.False(result2.IsError);
Assert.False(result3.IsError);
var textContent1 = Assert.Single(result1.Content);
var textContent2 = Assert.Single(result2.Content);
var textContent3 = Assert.Single(result3.Content);
Assert.NotNull(textContent1.Text);
Assert.Equal(textContent1.Text, textContent2.Text);
Assert.Equal(textContent1.Text, textContent3.Text);
}
[Fact]
public async Task ListResources_Sse_TestServer()
{