摘要:Stdio:适用于本地进程间通信(如Python/Node.js调用.NET服务)SSE:基于HTTP的轻量级传输,适合Web应用场景WebSocket:实现全双工实时通信,适用于需要高频交互的场景
MCP(Model Context Protocol)作为AI领域的标准化交互协议,其核心价值在于:
1.统一接口规范:通过JSON-RPC标准定义工具调用格式,使LLM可无缝对接数据库、API等外部系统
2.安全通信机制:支持双向认证与数据加密,确保AI与外部系统交互的安全性
3.多传输方式适配:
Stdio:适用于本地进程间通信(如Python/Node.js调用.NET服务)
SSE:基于HTTP的轻量级传输,适合Web应用场景
WebSocket:实现全双工实时通信,适用于需要高频交互的场景
1. 安装和配置 MCP C# SDK
使用 NuGet 包管理器安装 MCP C# SDK。例如:
dotnet add package ModelContextProtocol在项目中引入必要的命名空间:
using ModelContextProtocol;using ModelContextProtocol.Server;2. 实现 MCP 服务器创建
使用 MCP C# SDK 提供的工具和方法,创建一个支持 LLM 的服务器。
示例代码:
// 程序入口配置var builder = Host.CreateApplicationBuilder(args);builder.Services .AddMcpServer .WithHttpListenerSseServerTransport // 选用SSE传输方式 .WithToolsFromAssembly; // 自动注册带[McpServerTool]特性的工具// 工具注册示例[McpServerToolType]public static class DocumentProcessor{ [McpServerTool, Description("PDF文档摘要生成")] public static async Task SummarizePdf( HttpClient httpClient, [Description("文档URL")] string url) { var content = await httpClient.GetStringAsync(url); return await LlmService.GenerateSummary(content); // 调用LLM服务 }}3. MCP 客户端
创建客户端:使用 MCP C# SDK 创建客户端,用于与 MCP 服务器通信。
示例代码:
// 使用Microsoft.Extensions.AI集成OpenAIvar apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY");var aiClient = new OpenAIClient( new ApiKeyCredential(apiKey), new OpenAIClientOptions { Endpoint = new Uri("https://api.openai.com") });// 构建带工具调用能力的LLM客户端var chatClient = new ChatClientBuilder(aiClient) .UseFunctionInvocation .Build;// 生成带工具调用指令的Promptvar prompt = """ 请总结以下PDF文档的核心内容: {{$input}} 需要调用工具时请使用:SummarizePdf(url={{$url}}) """;// 执行LLM推理var result = await chatClient.InvokeAsync(new ChatRequest( prompt, parameters: new Dictionary { { "url", "https://example.com/doc.pdf" } }));集成模式
实现方式
适用场景
直接调用LLM生成参数→客户端调用工具→返回结果
简单工具调用(如天气查询)
代理模式MCP服务器封装复杂逻辑
需要状态管理的操作(如订单处理)
流水线模式多工具串联执行
文档处理(解析→分析→生成)
5. 实现上下文管理
上下文的作用:MCP 通过上下文管理,确保 LLM 在多轮对话中保持一致性和连贯性。
上下文的传递:在每次调用工具时,将上下文信息传递给服务器,服务器根据上下文生成响应。
示例代码:
var context = new McpContext{ UserId = "user123", SessionId = "session456", PreviousMessages = new List { "上次的对话内容" }};var result = await client.CallToolWithContextAsync("GetWeather", new { location = "北京" }, context);6.生产环境部署最佳实践
传输层优化:
高并发场景建议使用WebSocket传输,实测QPS可达800+
跨网络部署时启用gRPC传输(需自定义实现)
安全加固:
// 配置JWT认证builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.Authority = "https://auth.example.com"; options.TokenValidationParameters = new TokenValidationParameters { ValidateAudience = false }; });性能监控:
// 集成Prometheus监控builder.Services.AddMetrics(options => { options.Endpoint = new MetricsEndpointOptions("/metrics");});未来演进方向
多模态支持:集成图像识别、语音处理等能力
边缘计算优化:通过ONNX Runtime实现模型量化部署
学习集成:支持安全的多方数据协作
来源:opendotnet