MCP服务器生成工具

AutoMCP是一个自动从ASP.NET Core API生成MCP(模型上下文协议)服务器的工具,使API端点能够被AI助手和其他MCP兼容客户端访问。

  • by wertzui
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 wertzui/AutoMCP

使用说明

# 自动MCP 从ASP自动创建MCP(模型上下文协议)服务器。NET核心API。

🚀 概述

AutoMCP弥合了ASP之间的差距。NET核心API和AI驱动工具,通过自动将您的API端点公开为MCP工具。只需几行代码,您现有的API控制器就可以被AI助手和其他兼容MCP的客户端访问。

📦 安装

安装主软件包:

dotnet add package AutoMcp

要获得OData支持,还需要安装:

dotnet add package AutoMcp.OData

🎯 快速开始

将AutoMCP添加到您的ASP中。NET Core应用程序 Program.cs:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();

// Add MCP server with automatic API endpoint discovery
builder.Services.AddMcpServer()
 .WithHttpTransport()
    .WithOData()    // Optional: Add OData query support. Must be called before WithAutoMcp()
    .WithAutoMcp();      // Automatically expose API endpoints as MCP tools

var app = builder.Build();

app.UseAuthorization();
app.MapControllers();
app.MapMcp("mcp");  // Map MCP endpoint at /mcp

app.Run();

试试这个例子

该存储库包含一个完整的工作示例。NET Aspire支持。要运行它:

# Clone the repository
git clone https://github.com/wertzui/AutoMCP
cd AutoMCP/src/AutoMcp

# Run the Aspire app host
dotnet run --project AutoMcp.AppHost

Aspire仪表板将打开,显示配置了AutoMCP的API运行示例。MCP检查员将被指向正确的终点。

🔧 核心方法

WithAutoMcp()

这 WithAutoMcp() 方法是AutoMCP的核心。它会自动发现ASP中的所有API端点。NET Core应用程序并生成相应的MCP工具。

它的作用:

  • 自动发现:扫描所有控制器操作,并为每个端点创建MCP工具
  • 模式生成:自动为请求参数和响应类型生成JSON模式
  • 元数据抽取:使用端点元数据,如 [Description] 或 [ProducesResponseType] 为AI客户端提供上下文的属性
  • 行动结果:正确打开ASP。NET核心 ActionResult<T> 类型

配置选项:

builder.Services.AddMcpServer()
    .WithAutoMcp(
        serializerOptions: customJsonOptions,  // Optional: Custom JSON serialization options
        apiDescriptionGroupCollectionProvider: provider  // Optional: Custom API description provider
    );

控制器示例:

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    [HttpGet(Name = "GetWeatherForecast")]
    [Description("Get the weather forecast for the given date.")]
    public ActionResult<WeatherForecast> Get(DateOnly date)
    {
        var forecast = new WeatherForecast
        {
        Date = date,
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = "Sunny"
        };
        
        return Ok(forecast);
    }
}

此控制器操作自动成为名为的MCP工具 WeatherForecast_Get 与:

  • 描述来自 [Description] 属性
  • 正确的参数模式 date 参数
  • 基于的响应架构 WeatherForecast 类型

WithOData()

这 WithOData() 该方法添加了对OData查询选项的支持,在MCP工具中启用了强大的过滤、排序和分页功能。

它的作用:

  • 查询支持:启用 $filter, $orderby, $top, $skip, $select,以及其他OData查询选项
  • JSON序列化:添加自定义JSON转换器以正确序列化和反序列化 ODataQueryOptions<T>
  • 模式集成:将OData查询模式集成到MCP工具定义中
  • 类型保存:维护MCP边界上的类型信息

配置:

builder.Services.AddMcpServer()
 .WithAutoMcp()
    .WithOData();  // Enable OData query support

OData示例:

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly IQueryable<WeatherForecast> _repository = 
     GetWeatherForecasts().AsQueryable();

    [HttpGet("multiple", Name = "GetMultipleWeatherForecasts")]
    [Description("Get multiple weather forecasts with filtering and sorting options.")]
    public ActionResult<IEnumerable<WeatherForecast>> GetMultiple(
        ODataQueryOptions<WeatherForecast> options)
    {
     return Ok(options.ApplyTo(_repository));
    }
}

随着 WithOData(),AI客户端现在可以使用强大的过滤器查询您的API:

  • $filter=temperatureC gt 20 -获得高于20°C的预报
  • $orderby=date desc -按日期降序排序
  • $top=10 -只获取前10个结果
  • $skip=5&$top=10 -分页支持

🎨 特性

自动生成刀具

  • ✅ 自动发现所有API终结点
  • ✅ 为参数和响应生成正确的JSON模式
  • ✅ 处理复杂类型和嵌套对象
  • ✅ 支持异步和同步控制器操作

OData集成

  • ✅ 完全支持OData查询语法
  • ✅ 过滤、排序、分页
  • ✅ 复杂的查询表达式

ASP。NET核心集成

  • ✅ 使用标准ASP。NET核心控制器
  • ✅ 尊重路由和HTTP方法约束
  • ✅ 与ASP集成。NET核心依赖注入
  • ✅ 在整个请求管道中维护HttpContext

开发者体验

  • ✅ 所需配置最少
  • ✅ 使用现有的API元数据和属性
  • ✅ 全面的错误处理和记录

📚 运作原理

  1. 发现阶段: WithAutoMcp() 扫描应用程序的API描述以查找所有终结点
  2. 模式生成:对于每个端点,它生成:
    • 使用反射和JSON模式生成输入参数模式
    • 基于返回类型和 [ProducesResponseType] 属性
  3. 工具注册:每个端点都成为一个MCP工具,其名称如下 {ControllerName}_{ActionName}
  4. 调用:当AI客户端调用该工具时:
    • 使用配置的JSON选项对参数进行反序列化
    • 使用正确的路由创建模拟HTTP请求
    • 控制器操作是通过ASP。NET Core的管道
    • 结果被序列化并返回给客户端

🔍 高级配置

自定义JSON序列化

var customJsonOptions = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
    WriteIndented = true
};

builder.Services.AddMcpServer()
    .WithAutoMcp(serializerOptions: customJsonOptions);

📖 示例用例

数据分析

使用OData过滤和分页查询大型数据集。

内容管理

使用复杂的查询表达式检索和过滤内容。

商业智能

使AI助手能够使用转换为OData查询的自然语言查询业务数据。

🛠️ 需求

  • .NET 9.0或更高版本
  • ASP。NET核心

📄 许可证

该项目在the Unlicense下发布到公共领域。看 许可证 了解详情。

🤝 贡献

欢迎投稿!请随时提交问题和拉取请求。

📞 支持