将 FastAPI 应用端点自动转换为 MCP 的开源工具FastAPI-MCP

项目简介

用于将 FastAPI 应用端点自动转换为 MCP 的开源工具,无需复杂配置,它通过直接集成 FastAPI 应用,自动发现所有端点并保留其请求/响应模型和文档,方便开发者快速部署 MCP 服务


核心功能

  • 无缝集成: 将 MCP 服务直接挂载到 FastAPI 应用,或独立部署

  • 零配置: 自动识别 FastAPI 端点并转为 MCP 工具

  • 保留文档: 端点的 Swagger 文档和模型架构完整保留

  • 灵活部署: 支持在同一应用或不同应用中运行 MCP 服务

  • 自定义选项: 可通过操作 ID 或标签过滤暴露的端点,调整工具命名和描述


使用场景

  • 开发者希望快速将 FastAPI 的 API 端点暴露为 MCP 工具,供支持 MCP 的客户端(如 Cursor、Claude Desktop)使用

  • 适用于需要 AI 模型与 API 交互的场景,例如通过 MCP 协议调用 API


进阶功能

  • 自定义端点: 可指定暴露或排除特定端点(通过操作 ID 或标签)

  • 动态更新: 支持在添加新端点后刷新 MCP 服务

  • 独立部署: 可将 MCP 服务与 FastAPI 应用分开运行

  • SSE 支持: 通过 Server-Sent Events (SSE) 与 MCP 客户端(如 Cursor)连接,或使用 mcp-proxy 支持非 SSE 客户端(如 Claude Desktop)


基本用法

使用 FastAPI-MCP 最简单的方法是将 MCP 服务器直接添加到您的 FastAPI 应用程序中:

from fastapi import FastAPIfrom fastapi_mcp import FastApiMCP
app = FastAPI()
mcp = FastApiMCP(    app,
    # Optional parameters    name="My API MCP",    description="My API description",    base_url="http://localhost:8000",)
# Mount the MCP server directly to your FastAPI appmcp.mount()

就这样!您自动生成的 MCP 服务器现在可在 https://app.base.url/mcp 处访问。


工具命名

FastAPI-MCP 使用您的 FastAPI 路由中的operation_id 作为 MCP 工具名称。当您没有指定 operation_id 时,FastAPI 会自动生成一个,但这些名称可能难以理解。

比较以下两个端点定义:

# Auto-generated operation_id (something like "read_user_users__user_id__get")@app.get("/users/{user_id}")async def read_user(user_id: int):    return {"user_id": user_id}
# Explicit operation_id (tool will be named "get_user_info")@app.get("/users/{user_id}", operation_id="get_user_info")async def read_user(user_id: int):    return {"user_id": user_id}

为了更清晰、更直观的工具名称,我们建议在 FastAPI 路由定义中添加显式的 operation_id 参数。


项目链接

https://github.com/tadata-org/fastapi_mcp

扫码加入技术交流群,备注开发语言-城市-昵称

(文:GitHubStore)

发表评论