Add elicitation capability (#467)

* Add elicitation capability
This commit is contained in:
Stephen Toub 2025-05-29 22:03:03 -04:00 • committed by GitHub
commit 5cc7c00456
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -39,9 +39,11 @@ public class TestServerTransport : ITransport
if (message is JsonRpcRequest request)
{
if (request.Method == RequestMethods.RootsList)
await ListRoots(request, cancellationToken);
await ListRootsAsync(request, cancellationToken);
else if (request.Method == RequestMethods.SamplingCreateMessage)
await Sampling(request, cancellationToken);
await SamplingAsync(request, cancellationToken);
else if (request.Method == RequestMethods.ElicitationCreate)
await ElicitAsync(request, cancellationToken);
else
await WriteMessageAsync(request, cancellationToken);
}
@ -53,7 +55,7 @@ public class TestServerTransport : ITransport
OnMessageSent?.Invoke(message);
}
private async Task ListRoots(JsonRpcRequest request, CancellationToken cancellationToken)
private async Task ListRootsAsync(JsonRpcRequest request, CancellationToken cancellationToken)
{
await WriteMessageAsync(new JsonRpcResponse
{
@ -65,7 +67,7 @@ public class TestServerTransport : ITransport
}, cancellationToken);
}
private async Task Sampling(JsonRpcRequest request, CancellationToken cancellationToken)
private async Task SamplingAsync(JsonRpcRequest request, CancellationToken cancellationToken)
{
await WriteMessageAsync(new JsonRpcResponse
{
@ -74,6 +76,15 @@ public class TestServerTransport : ITransport
}, cancellationToken);
}
private async Task ElicitAsync(JsonRpcRequest request, CancellationToken cancellationToken)
{
await WriteMessageAsync(new JsonRpcResponse
{
Id = request.Id,
Result = JsonSerializer.SerializeToNode(new ElicitResult { Action = "decline" }, McpJsonUtilities.DefaultOptions),
}, cancellationToken);
}
private async Task WriteMessageAsync(JsonRpcMessage message, CancellationToken cancellationToken = default)
{
await _messageChannel.Writer.WriteAsync(message, cancellationToken);