ModelContextProtocol.NET

ModelContextProtocol.NET

site icon
2025.01.25 71
C#工具集成通信框架开发效率
ModelContextProtocol.NET 是一个基于 C# 的 SDK,实现了 Model Context Protocol (MCP)。它提供了标准 I/O 通信、工具集成框架等功能,并支持 Native AOT 兼容。适用于需要高效工具集成和通信的开发场景。
View on GitHub

Overview

基本能力

产品定位

ModelContextProtocol.NET 是一个基于 C# 的 SDK,实现了 Model Context Protocol (MCP),旨在提供高效的通信和工具集成框架。

核心功能

  • 标准 I/O 通信:支持通过标准输入输出进行通信。
  • 工具集成框架:提供工具处理器的实现和集成能力。
  • Native AOT 兼容:支持 Native AOT 编译,提升性能。
  • 计算器演示实现:包含一个完整的计算器演示,展示日志设置、工具处理器实现、请求/响应处理和错误管理。

适用场景

  • 需要高效工具集成和通信的开发场景。
  • 需要 Native AOT 兼容的项目。
  • 需要标准 I/O 通信的应用程序。

工具列表

  • Calculator Demo:展示完整的计算器功能,包括日志设置、工具处理器实现等。

常见问题解答

  • 日志配置:当使用 stdio 传输时,日志无法发送到控制台,需要配置其他日志目标。
  • 工具实现:工具可以作为处理器类实现,享受依赖注入等功能,或直接提供函数。

使用教程

使用依赖

安装 the server package

dotnet add package ModelContextProtocol.NET.Server --prerelease

对于托管集成,安装 the server hosting package

dotnet add package ModelContextProtocol.NET.Server.Hosting --prerelease

安装教程

A. 无托管

// 创建服务器信息
var serverInfo = new Implementation { Name = "Calculator Demo Server", Version = "1.0.0" };

// 配置和构建服务器
var builder = new McpServerBuilder(serverInfo).AddStdioTransport();
builder.Services.AddLogging(<see below>);
builder.Tools.AddHandler<YourToolHandler>();
builder.Tools.AddFunction(
    name: "YourToolName",
    description: "YourToolDescription",
    parameterTypeInfo: YourParameterTypeJsonContext.Default.YourParameterType,
    handler: (YourParameterType parameters, CancellationToken ct) => {
        // 你的工具实现
    }
);
// ...

var server = builder.Build();
server.Start();
await Task.Delay(-1); // 无限等待

B. 有托管

var builder = Host.CreateApplicationBuilder();
builder.Services.AddMcpServer(serverInfo, mcp => {
    mcp.AddStdioTransport();
    // 同无托管
}, keepDefaultLogging: false); // 清除默认控制台日志
// ...

var host = builder.Build();
await host.RunAsync();

调试方式

日志配置

McpServerBuilder 使用 Microsoft.Extensions.Logging.ILogger 作为日志接口。 当使用 stdio 传输时,日志无法发送到控制台,需要配置其他日志目标。

// 使用 Serilog
.ConfigureLogging(logging => logging.AddSerilog(yourSerilogLogger))

// 使用 NLog
.ConfigureLogging(logging => logging.AddNLog())

许可证

该项目遵循 Apache 2.0 开源许可条款。