你是否曾经想把自己的FastAPI应用变成一个MCP服务器,让AI可以直接调用你的API端点?却不想手动编写MCP工具的样板代码?今天要介绍的开源项目FastAPI MCP工具,正是为了解决这个问题而设计的。它是一个零配置工具,可以自动将FastAPI端点作为MCP工具暴露出来,并支持认证。
项目基本信息
| 信息项 | 详情 |
|---|---|
| 项目名称 | FastAPI MCP工具 |
| GitHub地址 | https://github.com/tadata-org/fastapi-mcp |
| 项目描述 | 一款零配置工具,可自动将FastAPI作为MCP工具。 |
| 作者 | tadata-org |
| 开源协议 | MIT License |
| 开源状态 | 公开状态 |
| Languages | Python |
| 支持平台 | Windows / macOS / Linux |
| 最后更新 | 2026-04-23 |
一、项目介绍
FastAPI MCP工具是一个Python库,它可以将你的FastAPI应用自动转换为MCP服务器。与传统的“OpenAPI转MCP”工具不同,它采用FastAPI优先的方法,直接使用FastAPI的原生依赖项和ASGI接口。
这个工具的核心特性包括:
- 内置认证:使用现有的FastAPI依赖项进行认证
- 零配置:只需指向你的FastAPI应用即可工作
- 保留模式:保留请求模型和响应模型的模式
- 保留文档:保留所有端点的文档,就像Swagger中的一样
- 灵活部署:将MCP服务器挂载到同一个应用上,或单独部署
- ASGI传输:直接使用FastAPI的ASGI接口进行高效通信
二、核心优势
零配置自动转换
只需几行代码,就能将现有的FastAPI应用自动转换为MCP服务器,无需手动编写MCP工具定义。
原生FastAPI集成
不是简单的OpenAPI转换器,而是FastAPI的原生扩展:
- 使用熟悉的FastAPI
Depends()进行认证和授权 - 直接使用ASGI接口,消除额外的HTTP调用
- 保留所有端点文档
统一或分离部署
可以选择将MCP服务器挂载到同一个FastAPI应用上,也可以单独部署,灵活性高。
保留数据模型
自动保留Pydantic请求模型和响应模型的模式,确保数据类型安全。
开源免费
MIT许可证,代码完全公开,可自由使用和修改。
三、适用场景
为现有API添加MCP支持
如果你已经有一个FastAPI应用,想让它支持MCP协议,FastAPI-MCP是最快的方案。
AI后端服务开发
开发AI应用的后端时,可以直接用FastAPI-MCP暴露业务接口,让AI直接调用。
快速原型验证
快速将API原型转换为MCP工具,测试AI与后端服务的交互。
微服务集成
将多个FastAPI微服务分别转换为MCP服务器,通过MCP客户端统一调用。
四、安装教程
系统要求
| 工具 | 用途 | 下载/安装方式 | |
|---|---|---|---|
| Python | 运行环境 | [https://python.org/] (版本要求:3.10 或以上,推荐3.12) | |
| uv | Python包管理器(推荐) | `curl -LsSf https://astral.sh/uv/install.sh | sh` |
| FastAPI项目 | 需要转换的应用 | 已有或新建 |
安装步骤
第一步:安装fastapi-mcp
使用uv(推荐):
uv add fastapi-mcp或使用pip:
pip install fastapi-mcp第二步:添加到FastAPI应用
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
app = FastAPI()
# 创建MCP实例
mcp = FastApiMCP(app)
# 将MCP服务器挂载到FastAPI应用
mcp.mount()第三步:启动应用
uv run uvicorn main:app --reload现在,你的MCP服务器可以在https://app.base.url/mcp访问。
第四步:配置MCP客户端
在Claude Desktop或Cursor的MCP配置中,添加:
{
"mcpServers": {
"my-fastapi-mcp": {
"url": "http://localhost:8000/mcp"
}
}
}五、使用示例
示例1:基本FastAPI应用
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
from pydantic import BaseModel
app = FastAPI()
mcp = FastApiMCP(app)
class Item(BaseModel):
name: str
price: float
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
@app.post("/items/")
def create_item(item: Item):
return {"name": item.name, "price": item.price}
mcp.mount()启动后,所有端点会自动转换为MCP工具。
示例2:带认证的MCP
from fastapi import FastAPI, Depends, HTTPException
from fastapi_mcp import FastApiMCP
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
app = FastAPI()
mcp = FastApiMCP(app)
security = HTTPBearer()
def verify_token(credentials: HTTPAuthorizationCredentials = Depends(security)):
if credentials.credentials != "secret-token":
raise HTTPException(status_code=401)
return credentials.credentials
@app.get("/secure-data")
def get_secure_data(token: str = Depends(verify_token)):
return {"data": "sensitive information"}
mcp.mount()MCP服务器会自动使用相同的认证依赖项。
示例3:单独部署MCP服务器
如果你不想将MCP服务器挂载到同一个应用上,可以单独创建:
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
from myapp import app as my_fastapi_app # 原有的FastAPI应用
mcp = FastApiMCP(my_fastapi_app)
# 创建新的FastAPI应用用于MCP
mcp_app = FastAPI()
mcp_app.mount("/mcp", mcp.as_asgi())示例4:自定义MCP路径
mcp = FastApiMCP(app)
mcp.mount(path="/custom-mcp-path")示例5:仅暴露特定端点
目前FastAPI-MCP会暴露所有端点。如果需要过滤,可以通过FastAPI的路由分组或使用前缀来实现。
六、常见问题
问题1:Python版本要求
解决方案:FastAPI-MCP需要Python 3.10或以上版本,推荐3.12。使用python --version检查版本。
问题2:MCP端点无法访问
解决方案:
- 确认已调用
mcp.mount() - 检查端口是否正确(默认8000)
- 访问
http://localhost:8000/mcp验证
问题3:认证如何工作?
解决方案:FastAPI-MCP会复用FastAPI端点中的Depends()认证依赖项。MCP客户端调用时,需要在请求中包含正确的认证信息。
问题4:是否支持流式响应?
解决方案:FastAPI-MCP使用ASGI传输,支持流式响应。但具体取决于你的端点实现。
问题5:与OpenAPI转换器有什么区别?
解决方案:FastAPI-MCP不是解析OpenAPI文档,而是直接使用FastAPI应用的ASGI接口,因此更高效、更准确,且保留认证逻辑。
七、总结
FastAPI MCP工具是MCP生态中一个极具创新性的项目。它让FastAPI开发者可以用最少的代码,将现有API转换为MCP服务器,实现“零配置”的MCP集成。
这个项目的最大价值在于:
- 零配置:几行代码就能让FastAPI应用支持MCP
- FastAPI原生:不是笨重的转换器,而是原生的扩展
- 保留认证:复用现有的FastAPI依赖项
- 灵活部署:可挂载到同一应用或单独部署
- MIT许可证:可自由使用和修改
如果你是一个FastAPI开发者,希望让AI能够调用你的API,FastAPI MCP工具是最高效的解决方案。
单独部署也支持,灵活性很高。
Python 3.10+是硬性要求,老版本不支持。
uv安装比pip快多了,推荐使用。
文档保留得很完整,AI能看懂端点说明。
Pydantic模型自动转换,类型安全有保障。