Model Context Protocol (MCP) 的 C# SDK 实现。
请参阅 src/ModelContextProtocol.NET.Demo.Calculator 中的计算器演示,该演示涵盖了:
安装 服务器包:
dotnet add package ModelContextProtocol.NET.Server --prerelease
对于托管集成,请添加 服务器托管包:
dotnet add package ModelContextProtocol.NET.Server.Hosting --prerelease
// 创建服务器信息
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); // 无限等待
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 传输时,日志无法发送到控制台。
您需要配置一个写入其他日志目标的日志提供程序。
如果没有配置日志提供程序,则会使用空日志,导致不写入任何日志。
通用主机构建器默认添加基于控制台的日志记录器,即 ILoggerFactory 和 ILogger<T>。
AddMcpServer 默认会删除它们,原因同上。
如果您仍然希望保留它们,请在 AddMcpServer 中将 keepDefaultLogging 设置为 true。
// 使用 Serilog
.ConfigureLogging(logging => logging.AddSerilog(yourSerilogLogger))
// 使用 NLog
.ConfigureLogging(logging => logging.AddNLog())
工具是通过处理器实现的。
为了兼容原生 AOT,参数类型需要 JsonTypeInfo。
然后您可以实现一个处理器类以享受依赖注入等功能,
或者直接提供一个函数。
更多文档和实现指南即将推出。
项目被划分为多个组件:
该项目正在积极开发中。虽然核心功能如标准 I/O 通信和工具集成已经完成并可用,但一些高级功能仍在实施中。
欢迎贡献!请随时提交拉取请求或创建问题报告错误和功能请求。
Apache 2.0