* Improve progress reporting - Enable injecting an `IProgress<>` into a tool call to report progress when the client has supplied a progress token - Add a custom type for ProgressToken and ProgressNotification to map to the schema - Simplify RequestId to match ProgressToken's shape - Serialize StdioClientTransport's SendMessageAsync implementation - Add strongly-typed names for all request methods - Change all request IDs created by McpJsonRpcEndpoint to include a guid for that endpoint * Address PR feedback
31 lines
1 KiB
C#
31 lines
1 KiB
C#
using ModelContextProtocol.Protocol.Messages;
|
|
using ModelContextProtocol.Server;
|
|
using ModelContextProtocol.Shared;
|
|
|
|
namespace ModelContextProtocol;
|
|
|
|
/// <summary>
|
|
/// Provides an <see cref="IProgress{ProgressNotificationValue}"/> tied to a specific progress token and that will issue
|
|
/// progress notifications to the supplied endpoint.
|
|
/// </summary>
|
|
internal sealed class TokenProgress(IMcpServer server, ProgressToken progressToken) : IProgress<ProgressNotificationValue>
|
|
{
|
|
/// <inheritdoc />
|
|
public void Report(ProgressNotificationValue value)
|
|
{
|
|
_ = server.SendMessageAsync(new JsonRpcNotification()
|
|
{
|
|
Method = NotificationMethods.ProgressNotification,
|
|
Params = new ProgressNotification()
|
|
{
|
|
ProgressToken = progressToken,
|
|
Progress = new()
|
|
{
|
|
Progress = value.Progress,
|
|
Total = value.Total,
|
|
Message = value.Message,
|
|
},
|
|
},
|
|
}, CancellationToken.None);
|
|
}
|
|
}
|