使用说明

项目简介

mcpdotnet 是 Model Context Protocol (MCP) 的 .NET 实现,旨在帮助 .NET 开发者轻松构建 MCP 服务器和客户端应用。该库提供了 MCP 协议的核心功能,使得 .NET 应用能够以标准化的方式为大型语言模型 (LLM) 提供上下文信息和功能。

主要功能点

  • 核心 MCP 协议实现: 提供完整的 MCP 协议规范的 .NET 实现。
  • 资源管理: 支持 MCP 资源的托管和数据访问能力。
  • 工具注册与执行: 允许注册和执行工具,供 LLM 客户端调用外部功能。
  • Prompt 模板处理: 支持 Prompt 模板的定义和渲染,实现可定制的 LLM 交互模式。
  • 传输协议支持: 客户端支持 Stdio 和 SSE 传输协议,服务器端支持 Stdio 传输协议。
  • 全面的 MCP 能力支持: 支持 Tool, Resource, Prompt, Sampling, Roots 等 MCP 定义的所有核心能力。
  • 易于集成: 提供简洁的 API 和扩展方法,方便 .NET 应用集成 MCP 功能。

安装步骤

  1. 使用 NuGet 包管理器安装 'mcpdotnet' 包:

    dotnet add package mcpdotnet

服务器配置

MCP 服务器需要通过客户端配置连接信息才能使用。以下是一个典型的 JSON 格式服务器配置示例,用于连接一个基于 Stdio 传输的 MCP 服务器:

{
  "id": "my-mcp-server",  // 服务器的唯一标识符,客户端用此 ID 引用
  "name": "我的 MCP 服务器", // 服务器的显示名称,方便用户识别
  "transportType": "Stdio", // 传输协议类型,这里指定为 Stdio
  "transportOptions": {    // 传输协议选项,根据 Stdio 协议要求配置
    "command": "服务器启动命令", // MCP 服务器的可执行文件启动命令,例如 "dotnet" 或 "node"
    "arguments": "服务器启动参数"   // 启动命令的参数,例如 "MyMcpServer.dll" 或 "server.js"
  }
}

参数注释:

  • 'id': 客户端用于唯一标识和引用此服务器配置的 ID,可以自定义,例如 "my-mcp-server"。
  • 'name': 服务器的名称,用于在客户端界面显示,例如 "我的 MCP 服务器"。
  • 'transportType': 传输协议类型,必须设置为 '"Stdio"' (标准输入输出管道)。
  • 'transportOptions': 传输协议的具体配置选项,是一个 JSON 对象。
    • 'command': 重要,MCP 服务器的可执行文件启动命令。例如,如果服务器是 .NET 应用,则可能是 '"dotnet"';如果是 Node.js 应用,则可能是 '"node"'。请根据实际服务器的启动方式填写。
    • 'arguments': 重要,MCP 服务器启动命令的参数。例如,如果服务器是编译后的 .NET DLL 文件 'MyMcpServer.dll',则参数应为 '"MyMcpServer.dll"';如果是 Node.js 的 'server.js' 文件,则参数应为 '"server.js"'。请根据实际服务器的启动方式和入口文件填写。

注意: 'command' 和 'arguments' 必须根据您实际部署和运行的 MCP 服务器进行配置。上述示例值仅为演示,请替换为您的服务器启动命令和参数。 MCP 客户端会使用这些配置信息来启动并连接到 MCP 服务器。

基本使用方法

创建 MCP 客户端并连接服务器 (客户端)

// 客户端配置选项
var options = new McpClientOptions()
{
    ClientInfo = new() { Name = "MyClientApp", Version = "1.0.0" }
};

// 服务器配置信息 (根据上面服务器配置示例修改)
var config = new McpServerConfig
{
    Id = "my-mcp-server",
    Name = "我的 MCP 服务器",
    TransportType = TransportTypes.Stdio,
    TransportOptions = new Dictionary<string, string>
    {
        ["command"] = "服务器启动命令", // 替换为您的服务器启动命令
        ["arguments"] = "服务器启动参数"  // 替换为您的服务器启动参数
    }
};

// 创建 MCP 客户端工厂
var factory = new McpClientFactory(
    [config], // 传入服务器配置
    options,
    NullLoggerFactory.Instance // 建议使用实际的 LoggerFactory 实例进行日志记录
);

// 获取指定 ID 的 MCP 客户端实例
var client = await factory.GetClientAsync("my-mcp-server");

// 现在可以使用 client 对象与 MCP 服务器进行交互,例如列出工具、调用工具等
var tools = await client.ListToolsAsync();

创建 MCP 服务器 (服务器端)

// 创建主机构建器
var builder = Host.CreateApplicationBuilder(args);

// 添加 MCP 服务器服务
builder.Services.AddMcpServer()
    .WithStdioServerTransport()  // 使用 Stdio 传输协议
    .WithTools();             // 自动注册当前程序集中的所有工具

// 构建应用
var app = builder.Build();

// 运行应用 (启动 MCP 服务器)
await app.RunAsync();

定义工具 (服务器端)

[McpToolType] // 标记为工具类型容器
public static class MyTools
{
    [McpTool(Description = "一个简单的回声工具")] // 标记为 MCP 工具,并添加描述
    public static string Echo([McpParameter(true)] string message) // 定义工具方法,message 参数为必需
    {
        return "服务器回显: " + message;
    }
}

更多详细用法和高级功能,请参考仓库中的示例代码和测试用例。

信息

分类

开发者工具