* Remove `McpEndpoint` & `IMcpClient` * Revise naming, add abstract classes * Fix missing renames * Move extension methods to instance methods * Add back old API, but obsoleted * Add back obsoleted factory classes * Move deprecation attributes * `SseClientTransport` -> `HttpClientTransport` * Update src/ModelContextProtocol.Core/Server/AugmentedServiceProvider.cs Co-authored-by: Stephen Halter <halter73@gmail.com> * PR feedback * PR feedback * Add back dispose lock * Fix docs projects * PR feedback * Undo `docs/*.md` changes --------- Co-authored-by: Stephen Halter <halter73@gmail.com>
44 lines
No EOL
1.4 KiB
C#
44 lines
No EOL
1.4 KiB
C#
using System.ComponentModel;
|
|
using ModelContextProtocol;
|
|
using ModelContextProtocol.Protocol;
|
|
using ModelContextProtocol.Server;
|
|
|
|
namespace Progress.Tools;
|
|
|
|
[McpServerToolType]
|
|
public class LongRunningTools
|
|
{
|
|
[McpServerTool, Description("Demonstrates a long running tool with progress updates")]
|
|
public static async Task<string> LongRunningTool(
|
|
McpServer server,
|
|
RequestContext<CallToolRequestParams> context,
|
|
int duration = 10,
|
|
int steps = 5)
|
|
{
|
|
var progressToken = context.Params?.ProgressToken;
|
|
var stepDuration = duration / steps;
|
|
|
|
for (int i = 1; i <= steps; i++)
|
|
{
|
|
await Task.Delay(stepDuration * 1000);
|
|
|
|
// <snippet_SendProgress >
|
|
if (progressToken is not null)
|
|
{
|
|
await server.SendNotificationAsync("notifications/progress", new ProgressNotificationParams
|
|
{
|
|
ProgressToken = progressToken.Value,
|
|
Progress = new ProgressNotificationValue
|
|
{
|
|
Progress = i,
|
|
Total = steps,
|
|
Message = $"Step {i} of {steps} completed.",
|
|
},
|
|
});
|
|
}
|
|
// </snippet_SendProgress >
|
|
}
|
|
|
|
return $"Long running tool completed. Duration: {duration} seconds. Steps: {steps}.";
|
|
}
|
|
} |