IT评测·应用市场-qidao123.com技术社区

标题: .NET MCP 文档 [打印本页]

作者: 伤心客    时间: 7 天前
标题: .NET MCP 文档
MCP 概述

MCP(Model Context Protocol)是由 Anthropic 推出的一种开放协议,类似 AI 的 USB-C 扩展坞,用于在大模型和数据源之间建立安全的通信(授权),让 AI 应用可以或许安全地访问和操作当地或长途数据,比方操作当地文件、欣赏器和 Web 服务。

为了更好地明白 MCP,我们可以用一个简单的类比:如果把 AI 比作电脑主机,那么 MCP 就相当于 USB 协议,而 MCP Server 则类似于各种 USB 设备(如摄像头、麦克风等)。通过实现 MCP Server,我们可以让 AI 轻松毗连到各种数据源,大大扩展其功能范围。

MCP 协议的核心价值在于标准化了 AI 模型与外部工具和数据源的交互方式,使开发者可以或许创建可被多种 AI 应用步伐使用的工具和服务。这种标准化的接口极大地简化了 AI 应用的开发过程,并进步了工具和服务的可重用性。

MCP 的主要特点


MCP 服务器

MCP 服务器是实现 MCP 协议的服务端,负责注册和提供工具,处理客户端的工具调用哀求,并返回效果。服务器可以使用多种传输方式与客户端通信,如标准输入输出、SSE 或 WebSocket。

MCP 客户端

MCP 客户端是实现 MCP 协议的客户端,负责毗连到 MCP 服务器,获取可用工具列表,调用工具,并处理返回效果。客户端通常与 LLM 集成,使 LLM 可以或许使用 MCP 工具。

.NET MCP 实现项目对比

在 .NET 生态系统中,现在有几个主要的 MCP 实现项目,它们各有特点。以下是这些项目标对比分析:

官方 C# SDK:csharp-sdk

这是 Model Context Protocol(MCP)官方提供的 C# SDK,为 MCP 服务器和客户端提供简单易用的接口,主要由微软维护。该项目已经成为 MCP 社区的官方 SDK 项目,迩来发布了 0.1.0-preview 版本。
GitHub 仓库: 
  1. https://github.com/modelcontextprotocol/csharp-sdk
复制代码

MCPSharp

MCPSharp 是一个 .NET 库,旨在帮助开发者构建 Model Context Protocol(MCP)服务器和客户端。它提供了创建 MCP 合规的工具和函数、毗连现有 MCP 服务器、将 .NET 方法袒露为 MCP 端点、处理 MCP 协议细节和 JSON-RPC 通信等功能。
特点:


GitHub 仓库: 
  1. https://github.com/afrise/MCPSharp
复制代码

mcpdotnet

mcpdotnet 是一个 .NET 实现的模型上下文协议(MCP),使 .NET 应用步伐可以或许与 MCP 客户端和服务器进行交互。该项目已经进入归档状态,相干的开发工作都集中到了官方的 csharp-sdk。
特点:


GitHub 仓库: 
  1. https://github.com/PederHP/mcpdotnet
复制代码
ModelContextProtocol.NET

ModelContextProtocol.NET 是一个 C# SDK,实现了模型上下文协议(MCP)。
特点:


GitHub仓库:
  1. https://github.com/salty-flower/ModelContextProtocol.NET
复制代码

服务器端实现

根本结构

使用官方的 C# SDK (csharp-sdk) 实现 MCP 服务器的根本结构如下:
这段代码展示了如何创建一个根本的 MCP 服务器,它使用标准输入输出(stdio)作为传输方式,并自动注册当前步伐集中的全部工具。
关键组件说明:


工具注册与实现

在 MCP 服务器中,工具是通过特性(Attribute)来注册的。下面是一个简单的工具实现示例:
  1. [McpServerToolType]
  2. public static class EchoTool
  3. {
  4.     [McpServerTool, Description("Echoes the message back to the client.")]
  5.     public static string Echo(string message) => $"hello {message}";
  6. }
复制代码


更复杂的工具可以使用依赖注入和服务器交互:

在 QuickstartWeatherServer 示例中,我们可以看到更现实的工具实现:
  1. [McpServerToolType]
  2. public static class WeatherTools
  3. {
  4.     [McpServerTool, Description("Get weather alerts for a US state.")]
  5.     public static async Task GetAlerts(
  6.         HttpClient client,
  7.         [Description("The US state to get alerts for.")] string state)
  8.     {
  9.         var jsonElement = await client.GetFromJsonAsync($"/alerts/active/area/{state}");
  10.         var alerts = jsonElement.GetProperty("features").EnumerateArray();
  11.         if (!alerts.Any())
  12.         {
  13.             return "No active alerts for this state.";
  14.         }
  15.         return string.Join("\n-\n", alerts.Select(alert =>
  16.         {
  17.             JsonElement properties = alert.GetProperty("properties");
  18.             return $"""
  19.                 Event: {properties.GetProperty("event").GetString()}
  20.                 """;
  21.         }));
  22.     }
  23. }
复制代码

工具注册特性说明:


服务配置

MCP 服务器的配置主要通过 .NET 的依赖注入系统完成。以下是一个配置 HttpClient 的示例:
  1. builder.Services.AddSingleton(_ =>
  2. {
  3.     var client = new HttpClient() { BaseAddress = new Uri("https://api.weather.gov") };
  4.     client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("weather-tool", "1.0"));
  5.     return client;
  6. });
复制代码
​​​​
高级配置选项:


客户端实现

毗连到 MCP 服务器

使用官方的 C# SDK 毗连到 MCP 服务器的根本代码如下:​​​​​​​
  1. var mcpClient = await McpClientFactory.CreateAsync(new()
  2. {
  3.     Id = "demo-server",
  4.     Name = "Demo Server",
  5.     TransportType = TransportTypes.StdIo,
  6.     TransportOptions = new()
  7.     {
  8.         ["command"] = command,
  9.         ["arguments"] = arguments,
  10.     }
  11. });
复制代码

这段代码创建了一个 MCP 客户端,并毗连到指定的服务器。TransportType 指定了通信方式(这里是标准输入输出),TransportOptions 提供了额外的配置选项。
支持的传输类型:


工具调用

毗连到服务器后,客户端可以列出可用的工具并调用它们:​​​​​​​
  1. var tools = await mcpClient.ListToolsAsync();
  2. foreach (var tool in tools)
  3. {
  4.     Console.WriteLine($"Connected to server with tools: {tool.Name}");
  5. }
  6. // 调用工具示例
  7. var result = await mcpClient.CallToolAsync(
  8.     "echo",
  9.     new Dictionary() { ["message"] = "Hello MCP!" },
  10.     CancellationToken.None);
  11. // 输出结果
  12. Console.WriteLine(result.Content.First(c => c.Type == "text").Text);
复制代码
​​​​​​​
工具调用参数说明:


效果处理:

工具调用效果包含一个 Content 集合,每个内容项都有一个 Type 和一个 Text。常见的内容类型包括:

与 Claude 模型集成

MCP 客户端可以与 Claude 等 AI 模型集成,使模型可以或许使用 MCP 工具:​​​​​​​
  1. var anthropicClient = new AnthropicClient(new APIAuthentication(builder.Configuration["ANTHROPIC_API_KEY"]))
  2.     .Messages
  3.     .AsBuilder()
  4.     .UseFunctionInvocation()
  5.     .Build();
  6. var options = new ChatOptions
  7. {
  8.     MaxOutputTokens = 1000,
  9.     ModelId = "claude-3-5-sonnet-20240229",
  10.     Tools = [.. tools]
  11. };
  12. // 使用 Claude 模型处理用户查询
  13. await foreach (var message in anthropicClient.GetStreamingResponseAsync(query, options))
  14. {
  15.     Console.Write(message);
  16. }
复制代码

集成步骤说明:

Cursor 配置与集成

MCP Server 添加步骤

在 Cursor 中配置 MCP Server 的步骤如下:
Cursor MCP 服务器配置界面示例




传输类型配置

Cursor 支持两种主要的传输类型:
stdio

用于标准输入输出通信,实用于当地运行的 MCP 服务器。
配置方式:输入可实行命令
示例:
  1. npx -y @smithery/cli@latest run @mzxrai/mcp-webresearch --config "{}"
复制代码
sse

用于服务器发送事件通信,实用于长途 MCP 服务器。
配置方式:输入服务器 URL
示例:
  1. https://example.com/mcp
复制代码
工具使用方法

在 Cursor 的 Composer 中使用 MCP 工具时,你可以:

工具使用示例:

用户: 搜索关键词 cursor mcp server,列出 Top 5 热度的关键词
Claude: 我将使用 Web Search 工具来搜索这些关键词。​​​​​​​
  1. 工具调用:Web Search参数:{"query": "cursor mcp server"}
复制代码

Claude: 根据搜索效果,关于 "cursor mcp server" 的 Top 5 热度关键词是:
最佳实践与示例

服务器端最佳实践


客户端最佳实践


集成示例

以下是一个将 MCP 客户端与 Claude 模型集成的完整示例:​​​​​​​
  1. using Anthropic.SDK;
  2. using Microsoft.Extensions.AI;
  3. using Microsoft.Extensions.Configuration;
  4. using Microsoft.Extensions.DependencyInjection;
  5. using Microsoft.Extensions.Hosting;
  6. using ModelContextProtocol.Client;
  7. using ModelContextProtocol.Protocol.Transport;
  8. using System.ComponentModel;
  9. var builder = Host.CreateApplicationBuilder(args);
  10. builder.Configuration
  11.     .AddEnvironmentVariables()
  12.     .AddUserSecrets();
  13. var (command, arguments) = GetCommandAndArguments(args);
  14. await using var mcpClient = await McpClientFactory.CreateAsync(new()
  15. {
  16.     Id = "demo-server",
  17.     Name = "Demo Server",
  18.     TransportType = TransportTypes.StdIo,
  19.     TransportOptions = new()
  20.     {
  21.         ["command"] = command,
  22.         ["arguments"] = arguments,
  23.     }
  24. });
  25. var tools = await mcpClient.ListToolsAsync();
  26. foreach (var tool in tools)
  27. {
  28.     Console.WriteLine($"Connected to server with tools: {tool.Name}");
  29. }
  30. var anthropicClient = new AnthropicClient(new APIAuthentication(builder.Configuration["ANTHROPIC_API_KEY"]))
  31.     .Messages
  32.     .AsBuilder()
  33.     .UseFunctionInvocation()
  34.     .Build();
  35. var options = new ChatOptions
  36. {
  37.     MaxOutputTokens = 1000,
  38.     ModelId = "claude-3-5-sonnet-20240229",
  39.     Tools = [.. tools]
  40. };
  41. Console.ForegroundColor = ConsoleColor.Green;
  42. Console.WriteLine("MCP Client Started!");
  43. Console.ResetColor();
  44. PromptForInput();
  45. while(Console.ReadLine() is string query && !("exit".Equals(query, StringComparison.OrdinalIgnoreCase)))
  46. {
  47.     if (string.IsNullOrWhiteSpace(query))
  48.     {
  49.         PromptForInput();
  50.         continue;
  51.     }
  52.     await foreach (var message in anthropicClient.GetStreamingResponseAsync(query, options))
  53.     {
  54.         Console.Write(message);
  55.     }
  56.     Console.WriteLine();
  57.     PromptForInput();
  58. }
  59. static void PromptForInput()
  60. {
  61.     // 提示用户输入
  62. }
  63. static (string, string) GetCommandAndArguments(string[] args)
  64. {
  65.     // 解析命令行参数
  66. }
复制代码


这个示例展示了如何创建 MCP 客户端,毗连到服务器,获取可用工具,并将这些工具与 Claude 模型集成,使模型可以或许使用这些工具来响应用户查询。
结论

本文档详细介绍了 .NET 使用 MCP 的相干内容,包括服务器端实现、客户端实现以及 Cursor 集成配置等方面。通过使用 MCP,开发者可以创建强大的工具和服务,使 AI 模型可以或许安全地访问和操作各种数据源。
随着 MCP 生态系统的不断发展,我们可以期待更多的功能和改进。官方的 C# SDK 提供了一个稳定的底子,使 .NET 开发者可以或许轻松地实现 MCP 服务器和客户端。
我们鼓励开发者探索 MCP 的各种可能性,创建创新的工具和服务,并为 MCP 社区做出贡献。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4