
本文档使用C#语言引用类库ModelContextProtocol 1.1.0。首先了解一下怎么通知。mcp可使用Json-RPC协议进行通信在通信时需要带上唯一的Id。在ModelContextProtocol类库中提供SendNotificationAsync进行实现。ModelContextProtocol官方实例using ModelContextProtocol; using ModelContextProtocol.Protocol; using ModelContextProtocol.Server; using System.ComponentModel; namespace EverythingServer.Tools; [McpServerToolType] public class LongRunningTool { [McpServerTool(Name longRunningOperation), Description(Demonstrates a long running operation with progress updates)] public static async Taskstring LongRunningOperation( McpServer server, RequestContextCallToolRequestParams context, int duration 10, int steps 5) { var progressToken context.Params?.ProgressToken; var stepDuration duration / steps; for (int i 1; i steps 1; i) { await Task.Delay(stepDuration * 1000); if (progressToken is not null) { //参数1可以自定义根据业务进行调整 //参数2通知的主要内容。 await server.SendNotificationAsync(notifications/progress, new { DataTimeDateTime.Now, Progress i, Total steps, progressToken }); } } return $Long running operation completed. Duration: {duration} seconds. Steps: {steps}.; } }测试结果首先初始化获取SessionId参数//请求内容 { id: 1, jsonrpc: 2.0, method: initialize } //注返回的SessionId在结果的Header中。请求方式PostHeader中添加Mcp-Session-Id{ id: 5, jsonrpc: 2.0, method: tools/call, params: { arguments: { duration: 10, steps: 5 }, name: longRunningOperation, _meta: { progressToken: 5, } } }返回结果event: message data: {method:notifications/progress,params:{dataTime:2026-03-12T11:24:02.0650511\u002B08:00,progress:1,total:5,progressToken:5,_meta:{traceparent:00-42c8e08ad79e37e2994a3281d4dd4f40-12481cb00442bda3-01}},jsonrpc:2.0} event: message data: {method:notifications/progress,params:{dataTime:2026-03-12T11:24:04.1063487\u002B08:00,progress:2,total:5,progressToken:5,_meta:{traceparent:00-42c8e08ad79e37e2994a3281d4dd4f40-8fb8fe66e322a794-01}},jsonrpc:2.0} event: message data: {method:notifications/progress,params:{dataTime:2026-03-12T11:24:06.1136731\u002B08:00,progress:3,total:5,progressToken:5,_meta:{traceparent:00-42c8e08ad79e37e2994a3281d4dd4f40-c8d9c44f655556b5-01}},jsonrpc:2.0} event: message data: {method:notifications/progress,params:{dataTime:2026-03-12T11:24:08.117121\u002B08:00,progress:4,total:5,progressToken:5,_meta:{traceparent:00-42c8e08ad79e37e2994a3281d4dd4f40-d13d9d41491839e7-01}},jsonrpc:2.0} event: message data: {method:notifications/progress,params:{dataTime:2026-03-12T11:24:10.129892\u002B08:00,progress:5,total:5,progressToken:5,_meta:{traceparent:00-42c8e08ad79e37e2994a3281d4dd4f40-5ae4e347dddb7722-01}},jsonrpc:2.0} event: message data: {method:notifications/progress,params:{dataTime:2026-03-12T11:24:12.1450282\u002B08:00,progress:6,total:5,progressToken:5,_meta:{traceparent:00-42c8e08ad79e37e2994a3281d4dd4f40-c43f7141197de3cd-01}},jsonrpc:2.0} event: message data: {result:{content:[{type:text,text:Long running operation completed. Duration: 10 seconds. Steps: 5.}]},id:5,jsonrpc:2.0}