Improve progress reporting (#145)
* 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
This commit is contained in:
parent
0294c574a6
commit
2c75acded8
1 changed files with 627 additions and 228 deletions
31
src/ModelContextProtocol/TokenProgress.cs
Normal file
31
src/ModelContextProtocol/TokenProgress.cs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue