使用说明

项目简介

Mcp.Net 是一个Model Context Protocol (MCP) 的 .NET 实现库,用于快速构建MCP服务器。MCP服务器旨在为大型语言模型 (LLM) 应用提供标准化的上下文服务,主要功能包括:

  • 工具 (Tools) 管理: 注册和执行外部功能,允许LLM通过标准协议调用工具。
  • 资源 (Resources) 管理: 托管和管理数据资源,为LLM提供数据访问能力。
  • Prompt 模板 (Prompts) 管理: 定义和渲染Prompt模板,支持定制化的LLM交互模式。

Mcp.Net 提供了服务端和客户端库,以及丰富的示例,方便开发者快速上手和集成。

主要功能点

  • MCP协议实现: 完整实现了MCP协议,支持JSON-RPC通信,确保与MCP客户端的兼容性。
  • 双传输协议支持:
    • Stdio: 适用于命令行工具和直接模型交互,轻量高效。
    • SSE (Server-Sent Events): 适用于Web应用和浏览器集成,支持多客户端并发连接。
  • 工具动态注册与发现: 支持动态注册工具,客户端可以自动发现和调用已注册的工具。
  • 参数JSON Schema验证: 支持使用JSON Schema对工具参数进行验证,确保参数的有效性。
  • 同步与异步工具: 支持同步和异步工具方法,满足不同场景的需求。
  • 灵活的部署方式: 可以作为独立服务器运行,也可以嵌入到ASP.NET Core应用中。

安装步骤

  1. 安装 NuGet 包: 根据需要安装服务端或客户端包。

    • 服务端: 用于构建MCP服务器

      dotnet add package Mcp.Net.Server
    • 客户端: 用于构建MCP客户端,与MCP服务器通信

      dotnet add package Mcp.Net.Client
  2. 创建 MCP 服务器: 在 .NET 项目中,可以使用 'McpServerBuilder' 或直接创建 'McpServer' 实例来构建服务器。

    • 示例代码 (快速开始):

      using Mcp.Net.Server;
      using Mcp.Net.Core.Attributes;
      using System.Reflection;
      using System.Threading.Tasks;
      
      public class ExampleServer
      {
          public static async Task Main(string[] args)
          {
              var server = new McpServer(
                  new ServerInfo { Name = "Example MCP Server", Version = "1.0" }
              );
      
              // 注册工具 (示例工具类)
              server.RegisterToolsFromAssembly(Assembly.GetExecutingAssembly(), null);
      
              // 连接 Stdio 传输并启动服务器
              await server.ConnectAsync(new StdioTransport());
      
              Console.WriteLine("MCP Server started. Press any key to exit.");
              Console.ReadKey();
          }
      }
      
      // 示例工具类
      [McpTool("Calculator", "Math operations")]
      public class CalculatorTools
      {
          [McpTool("add", "Add two numbers")]
          public string Add(
              [McpParameter(required: true, description: "First number")] double a,
              [McpParameter(required: true, description: "Second number")] double b)
          {
              return $"The sum of {a} and {b} is {a + b}";
          }
      }

服务器配置

MCP客户端需要配置MCP服务器的启动命令 (command) 及其参数 (args) 才能与之建立连接。以下是基于 Mcp.Net 仓库信息生成的服务器配置信息示例 (JSON 格式):

{
  "server name": "Mcp.Net Server",
  "transport": "stdio",
  "command": "dotnet run",
  "args": [
    "--project",
    "path/to/Mcp.Net.Examples.SimpleServer/Mcp.Net.Examples.SimpleServer.csproj",
    "--",
    "--stdio"
  ],
  "description": "启动 Mcp.Net 示例 MCP 服务器 (Stdio 传输)",
  "notes": "请根据实际项目路径调整 'command' 和 'args' 中的项目路径。"
}

配置参数说明:

  • 'server name': 服务器的名称,自定义,用于客户端识别。
  • 'transport': 传输协议类型,这里配置为 'stdio' (标准输入输出)。如果使用SSE,则不需要此配置,客户端通过URL连接。
  • 'command': 启动 MCP 服务器的命令,通常是 'dotnet run'。
  • 'args': 传递给 'dotnet run' 命令的参数列表。
    • '--project': 指定 MCP 服务器项目文件路径 ('Mcp.Net.Examples.SimpleServer.csproj')。需要根据实际 SimpleServer 项目的路径进行调整
    • '--': 分隔符,用于分隔 'dotnet run' 命令和应用程序的参数。
    • '--stdio': 告知 SimpleServer 示例应用使用 Stdio 传输模式。
  • 'description': 服务器配置的描述信息,方便用户理解配置用途。
  • 'notes': 配置注意事项,提示用户根据实际情况修改路径。

基本使用方法

  1. 启动 MCP 服务器: 运行配置好的 MCP 服务器启动命令。对于 Stdio 传输,服务器将在控制台启动并监听标准输入输出。对于 SSE 传输,服务器将作为 Web 应用运行,监听配置的端口。

  2. 构建 MCP 客户端: 使用 'Mcp.Net.Client' 库构建 MCP 客户端应用,根据服务器的传输协议选择合适的客户端类型 ('StdioMcpClient' 或 'SseMcpClient')。

  3. 客户端连接服务器: 配置客户端连接到 MCP 服务器。对于 Stdio 传输,客户端和服务器通常通过管道或直接的标准输入输出连接。对于 SSE 传输,客户端需要提供服务器的 URL。

  4. 客户端调用工具: 客户端可以使用 'IMcpClient' 接口提供的方法,例如 'ListTools()' 获取可用工具列表,使用 'CallTool()' 调用具体的工具,并处理工具返回的结果。

    • 示例客户端代码 (调用 'add' 工具):

      using Mcp.Net.Client;
      using Mcp.Net.Core.Content;
      
      public class ExampleClient
      {
          public static async Task Main(string[] args)
          {
              // 创建 Stdio MCP 客户端
              var client = new StdioMcpClient("ExampleClient", "1.0");
              await client.Initialize();
      
              // 调用 "add" 工具
              var result = await client.CallTool("add", new { a = 10, b = 5 });
      
              if (result.Content.FirstOrDefault() is TextContent textContent)
              {
                  Console.WriteLine($"Tool Response: {textContent.Text}");
              }
      
              client.Dispose();
          }
      }

注意: 以上使用说明基于仓库信息和示例代码生成,实际使用时请参考 Mcp.Net 仓库的完整文档和示例。

信息

分类

开发者工具