Add McpClient/Session methods using .Protocol types (#1063)

This commit is contained in:
Stephen Toub 2025-12-05 13:45:12 -05:00 • committed by GitHub
commit 4a84412331
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -130,7 +130,9 @@ public class McpServerTests : LoggedTest
await using var server = McpServer.Create(transport, _options, LoggerFactory);
SetClientCapabilities(server, new ClientCapabilities());
var action = async () => await server.SampleAsync(new CreateMessageRequestParams { Messages = [], MaxTokens = 1000 }, CancellationToken.None);
var action = async () => await server.SampleAsync(
new CreateMessageRequestParams { Messages = [], MaxTokens = 1000 },
CancellationToken.None);
// Act & Assert
await Assert.ThrowsAsync<InvalidOperationException>(action);
@ -147,7 +149,9 @@ public class McpServerTests : LoggedTest
var runTask = server.RunAsync(TestContext.Current.CancellationToken);
// Act
var result = await server.SampleAsync(new CreateMessageRequestParams { Messages = [], MaxTokens = 1000 }, CancellationToken.None);
var result = await server.SampleAsync(
new CreateMessageRequestParams { Messages = [], MaxTokens = 1000 },
CancellationToken.None);
Assert.NotNull(result);
Assert.NotEmpty(transport.SentMessages);
@ -167,7 +171,9 @@ public class McpServerTests : LoggedTest
SetClientCapabilities(server, new ClientCapabilities());
// Act & Assert
await Assert.ThrowsAsync<InvalidOperationException>(async () => await server.RequestRootsAsync(new ListRootsRequestParams(), CancellationToken.None));
await Assert.ThrowsAsync<InvalidOperationException>(async () => await server.RequestRootsAsync(
new ListRootsRequestParams(),
CancellationToken.None));
}
[Fact]
@ -201,7 +207,9 @@ public class McpServerTests : LoggedTest
SetClientCapabilities(server, new ClientCapabilities());
// Act & Assert
await Assert.ThrowsAsync<InvalidOperationException>(async () => await server.ElicitAsync(new ElicitRequestParams { Message = "" }, CancellationToken.None));
await Assert.ThrowsAsync<InvalidOperationException>(async () => await server.ElicitAsync(
new ElicitRequestParams { Message = "" },
CancellationToken.None));
}
[Fact]
@ -943,4 +951,54 @@ public class McpServerTests : LoggedTest
await server.DisposeAsync();
await serverTask;
}
[Fact]
public async Task NotifyProgressAsync_WithRequestParams_SendsNotification()
{
await using TestServerTransport transport = new();
var options = CreateOptions();
var server = McpServer.Create(transport, options, LoggerFactory);
Task serverTask = server.RunAsync(TestContext.Current.CancellationToken);
var progressParams = new ProgressNotificationParams
{
ProgressToken = new("test-token"),
Progress = new()
{
Progress = 25,
Total = 100,
Message = "Sending progress via params",
},
};
await server.NotifyProgressAsync(progressParams, TestContext.Current.CancellationToken);
// Verify the notification was sent
var notification = Assert.IsType<JsonRpcNotification>(
transport.SentMessages.FirstOrDefault(m => m is JsonRpcNotification n && n.Method == NotificationMethods.ProgressNotification));
Assert.NotNull(notification);
var sentProgress = JsonSerializer.Deserialize<ProgressNotificationParams>(notification.Params, McpJsonUtilities.DefaultOptions);
Assert.NotNull(sentProgress);
Assert.Equal("test-token", sentProgress.ProgressToken.ToString());
Assert.Equal(25, sentProgress.Progress.Progress);
Assert.Equal(100, sentProgress.Progress.Total);
Assert.Equal("Sending progress via params", sentProgress.Progress.Message);
await server.DisposeAsync();
await serverTask;
}
[Fact]
public async Task NotifyProgressAsync_WithRequestParams_NullThrows()
{
await using TestServerTransport transport = new();
var options = CreateOptions();
await using var server = McpServer.Create(transport, options, LoggerFactory);
await Assert.ThrowsAsync<ArgumentNullException>("requestParams",
() => server.NotifyProgressAsync((ProgressNotificationParams)null!, TestContext.Current.CancellationToken));
}
}