N2.McpCore

A.NET库,为实现提供核心抽象和实用程序 模型上下文协议(MCP) 服务器。此软件包使您能够构建符合MCP的服务器,这些服务器可以与AI助手和其他MCP客户端集成。
特性
- 多框架支持:目标。NET标准2.0。NET标准2.1。NET 8.0以及。净值10.0
- JSON-RPC 2.0实现:完整的JSON-RPC协议支持请求/响应处理
- MCP协议合规性:实施MCP规范版本“2024-11-05”
- 可扩展架构:基类和接口便于服务器实现
- 类型安全模型:支持JSON序列化的强类型协议模型
- 工具框架:内置支持定义和执行MCP工具
安装
通过NuGet包管理器安装:
dotnet add package N2.Mcp.Core或者通过包管理器控制台:
Install-Package N2.Mcp.Core快速开始
1.创建自定义MCP服务器
现在每个工具都有自己的 CallAsync 委托,因此您不再需要覆盖 CallToolAsync.直接在上分配处理程序 McpTool 定义:
using McpCore.Server;
using McpCore.Protocol;
public class MyMcpServer : McpServer
{
public MyMcpServer() : base(
new McpServerInfo { Name = "my-server", Version = "1.0.0" },
new McpServerCapabilities { Tools = new McpToolsCapability() })
{
}
protected override McpTool[] GetAvailableTools() =>
[
new McpTool
{
Name = "get_weather",
Description = "Get current weather for a location",
CallAsync = GetWeatherAsync,
InputSchema = new McpInputSchema
{
Type = "object",
Properties = new Dictionary
{
["location"] = new McpPropertyDefinition
{
Type = "string",
Description = "City name"
}
},
Required = ["location"]
}
}
];
private Task GetWeatherAsync(Dictionary arguments)
{
var location = arguments.GetStringArgument("location") ?? "unknown";
return Task.FromResult(new McpToolCallResult
{
Content =
[
new McpContent { Type = "text", Text = $"Weather in {location}: Sunny, 72°F" }
]
});
}
}2.处理JSON-RPC请求
var server = new MyMcpServer();
// Handle incoming JSON-RPC request
var request = new JsonRpcRequest
{
Id = 1,
Method = "tools/list",
Params = null
};
var response = await server.ProcessRequestAsync(request);建筑
图书馆主要由三个部分组成:
- JsonRpc:具有请求/响应/错误模型的JSON-RPC 2.0协议实现
- 协议:MCP特定的协议模型,包括初始化、工具和功能
- 服务器:具有可扩展方法处理程序的基础服务器实现
MCP服务器生命周期
- 初始化:客户端发送
initialize具有能力的请求 - 已初始化:客户端发送
initialized完成握手的通知 - 准备就绪:服务器现在可以处理
tools/list和tools/call请求:
有关详细的体系结构文档,请参阅 CLAUDE.md.
从源头构建
# Clone the repository
git clone https://github.com/kaalenco/n2-mcp-core.git
cd n2-mcp-core
# Build the solution
dotnet build src/N2.McpCore.sln
# Build for release
dotnet build src/N2.McpCore.sln -c Release贡献
欢迎投稿!请确保:
- 代码遵循现有的架构模式
- 所有代码分析警告均已解决(警告被视为错误)
- 为公共API提供XML文档
- 在所有目标框架中测试更改
许可证
该项目根据学术自由许可证v3.0(AFL-3.0)获得许可。看 许可证 了解详情。
版权所有(c)2025 Kaalenco-保留所有权利
更新日志
1.1.0
重大变更
GetAvailableTools()现在是abstract子类必须实现它;默认的空数组实现已被删除。CallToolAsync()不再是virtual。覆盖它没有效果。工具调度现在由内部处理McpServer通过McpTools词典在initialized握手。- 从返回空工具数组的服务器
GetAvailableTools()现在将投掷InvalidOperationException在...期间initialized握手。必须至少注册一个工具。
新功能
McpTool.CallAsync新Func, Task>?委托财产。直接在上指定工具的处理程序McpTool定义而不是中心switch在CallToolAsync.- 工具查找是 不区分大小写 工具名称为 修剪过的 在查找之前,降低对微小客户端变化的敏感性。
- 描述性错误:调用没有
CallAsync指定投掷InvalidOperationException("Tool 'x' is not callable"). CallToolAsync现在验证了这一点parameters不是null在继续之前。- 已添加单元测试项目(
N2.McpCore.Unittests,NUnit,目标net8.0和net10.0). - 目标框架已更新:
.NET 9.0被替换为.NET 10.0.
从1.0.x迁移
- 删除任何
override的CallToolAsync在您的服务器子类中。 - 添加a
CallAsync委派给每个人McpTool返回由GetAvailableTools(). - 确保
GetAvailableTools()返回至少一个工具,或保护initialized相应地流动。
______________________________________________________________________
1.0.1 — 1.0.0
初始版本基于JSON-RPC 2.0基础、MCP协议模型, McpServer 基类和stdio传输助手。
______________________________________________________________________
