Nabu.NET通过[McpTool]属性将现有ASP.NET Core Web API一键发布为MCP工具,认证/授权/中间件全保留,输入Schema从CLR类型自动生成。
Nabu.Mcp.AspNetCore 将现有的 ASP.NET Core 控制器操作和 Minimal API 路由处理程序发布为 Model Context Protocol 工具——无需重写 API。每个工具调用都通过应用程序自己的管道重放为真实的 HTTP 请求,因此认证、授权、验证、过滤器和中间件的运行方式与通过 HTTP 访问时完全一致。
完整的集成方式如下:
[HttpGet("{id:guid}")]
[McpTool] // <- 就这样就够了
public ActionResult<TodoItem> GetById(Guid id) => ...
app.MapGet("/customers/{id}", (int id) => ...)
.McpTool(); // <- Minimal APIs 同理
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddNabuMcp(options =>
{
options.ServerName = "my-api";
options.RequireAuthorization = true; // 保护 MCP 端点本身
options.ToolVisibility = McpToolVisibility.Authorized; // 只向调用方暴露其有权调用的工具
});
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
app.UseNabuMcp(); // 在 /mcp 提供 MCP 服务
app.MapControllers();
app.Run();
curl -X POST http://localhost:5000/mcp \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
工具描述来自 XML 文档;输入模式从 CLR 类型、数据注解和可空性自动生成。[Authorize]、策略和角色在每次调用时都会被强制执行——同一个操作,对于同一调用方,通过 HTTP 返回 403,通过 MCP 返回的是 isError 工具结果,且 tools/list 可以向每个调用方只展示其实际有权调用的工具。
直接方法调用会悄无声息地丢弃使操作保持安全的一切:[Authorize] 由中间件和过滤器强制执行,ModelState 由模型绑定填充,限流和异常处理都在方法外部。Nabu 则在启动时捕获应用程序的 RequestDelegate,为每个工具调用推送一个合成的 HttpContext——携带调用方的身份和转发的凭证——穿过完整的管道。
可以对同一个操作重复应用 [McpTool],使用不同的名称、参数子集和固定常量。
tools/list 会结合你自己的授权策略进行评估。
模型提供的参数永远无法覆盖 Authorization、Cookie 或代理请求头。
Nabu.Mcp.ModelContextProtocol 通过官方 MCP C# SDK 提供相同的工具。
netstandard2.0(ASP.NET Core 2.1+)、net8.0、net10.0。MIT 协议许可。