模型上下文协议SDK

一个C#实现的模型上下文协议(MCP)SDK,提供标准I/O通信、工具集成框架和原生AOT兼容等功能,适用于需要模型交互和工具集成的开发场景。

  • by salty-flower
  • C#
  • 本地部署
  • 79 星标
  • 更新于
在 GitHub 查看 salty-flower/ModelContextProtocol.NET

使用说明

模型上下文协议。网

模型上下文协议(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.没有主机

// Create server info
var serverInfo = new Implementation { Name = "Calculator Demo Server", Version = "1.0.0" };

// Configure and build server
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) => {
        // Your tool implementation
    }
);
// ...

var server = builder.Build();
server.Start();
await Task.Delay(-1); // Wait indefinitely

B.托管

var builder = Host.CreateApplicationBuilder();
builder.Services.AddMcpServer(serverInfo, mcp => {
    mcp.AddStdioTransport();
    // same as without hosting
}, keepDefaultLogging: false); // clear default console logging
// ...

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

日志记录配置

McpServerBuilder 用途 Microsoft.Extensions.Logging.ILogger 作为日志记录界面。 使用stdio传输时,日志无法发送到控制台。 您需要配置一个写入其他日志目的地的日志提供程序。

如果没有配置日志提供程序,将使用空日志记录器,导致没有写入日志。

默认情况下,通用主机构建器将添加基于控制台的记录器,即 ILoggerFactory 和 ILogger<T>. AddMcpServer 将默认删除它们,原因与上述相同。 如果你仍然想保留它们,设置 keepDefaultLogging 向 true 在……里面 AddMcpServer.

// Using Serilog
.ConfigureLogging(logging => logging.AddSerilog(yourSerilogLogger))

// Using NLog
.ConfigureLogging(logging => logging.AddNLog())

实施工具

工具作为处理程序实现。 为了与NativeAOT兼容,a JsonTypeInfo 是参数类型所必需的。 然后,您可以实现一个处理程序类来享受依赖注入等。, 或者直接提供功能。

更多文档和实施指南即将发布。

技术细节

建筑

该项目由多个部分组成:

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

开发状态

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

贡献

欢迎投稿!请随时提交pull请求或为bug和功能请求创建问题。

许可证

Apache 2.0