返回市场
模型上下文协议.NET

模型上下文协议.NET

作者:salty-flower80 星标更新:2025-07-13

项目介绍

ModelContextProtocol.NET

NuGet 版本

Model Context Protocol (MCP) 的 C# SDK 实现。

功能

已完成

  • ✅ 标准 I/O 通信
  • ✅ 工具集成框架
  • ✅ 原生 AOT 兼容
  • ✅ 计算器演示实现

正在开发中

  • 🚧 WebSocket 支持
  • 🚧 资源管理
  • 🚧 提示系统

演示

请参阅 src/ModelContextProtocol.NET.Demo.Calculator 中的计算器演示,该演示涵盖了:

  • 日志设置
  • 工具处理器实现
  • 请求/响应处理
  • 错误管理

快速开始

安装 服务器包

dotnet add package ModelContextProtocol.NET.Server --prerelease

对于托管集成,请添加 服务器托管包

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

A. 无托管

// 创建服务器信息
var serverInfo = new Implementation { Name = "计算器演示服务器", Version = "1.0.0" };

// 配置并构建服务器
var builder = new McpServerBuilder(serverInfo).AddStdioTransport();
builder.Services.AddLogging(<见下文>);
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 作为日志接口。 当使用标准 I/O 传输时,日志无法发送到控制台。 您需要配置一个写入其他日志目标的日志提供程序。

如果没有配置日志提供程序,则会使用空日志,导致不写入任何日志。

通用主机构建器默认添加基于控制台的日志记录器,即 ILoggerFactoryILogger<T>AddMcpServer 默认会删除它们,原因同上。 如果您仍然希望保留它们,请在 AddMcpServer 中将 keepDefaultLogging 设置为 true

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

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

实现工具

工具是通过处理器实现的。 为了兼容原生 AOT,参数类型需要 JsonTypeInfo。 然后您可以实现一个处理器类以享受依赖注入等功能, 或者直接提供一个函数。

更多文档和实现指南即将推出。

技术细节

架构

项目被划分为多个组件:

  • 核心库:包含基本协议实现
  • 服务器组件:处理通信和请求处理
  • 服务器托管:将 MCP 服务器集成到 .NET 通用主机
  • 演示:提供工作示例
    • 计算器应用程序

开发状态

该项目正在积极开发中。虽然核心功能如标准 I/O 通信和工具集成已经完成并可用,但一些高级功能仍在实施中。

贡献

欢迎贡献!请随时提交拉取请求或创建问题报告错误和功能请求。

许可证

Apache 2.0