将 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 FastAPI from 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 app mcp.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 参数。
项目链接
扫码加入技术交流群,备注「开发语言-城市-昵称」
(文:GitHubStore)