使用fastapi-mcp改造fastapi服务为MCP服务供智能体使用案例
“ 使用MCP协议就可以解耦智能体和工具的开发,使得其可配置。”
对智能体来说除了大模型之外,最重要的就是其工具;在之前的开发过程中,使用函数作为智能体的工具,但由于每家模型服务商的标准都不一样,因此开发起来相对比较麻烦,并且无法标准化;因此才有了MCP(模型上下文协议)的出现,目的就是统一智能体工具的开发,其作用就类似于USB接口。
通过MCP协议就可以把智能体开发和工具开发完全拆分开来,智能体是智能体,工具是工具;在需要的时候,直接把工具加入到智能体中即可使用,通过可插拔的方式,可以达到快速改造智能体功能的目的。
如果再把提示词和记忆模块做成动态可配置,那么就可以通过配置的方式,快速搭建不同功能的智能体。
fastapi-mcp改造fastapi项目
什么是fastapi-mcp?
- FastAPI-MCP是一个基于python FastAPI框架开发的开源项目,可以自动识别并暴露FastAPI接口为MCP工具
- 拥有FastAPI框架的所有优点,如异步高并发、独立远程部署、OpenAPI文档
- 提供SSE、mcp-remote接入方式,支持设置授权访问,适配各种支持MCP协议客户端
- FastAPI-MCP开源地址:https://github.com/tadata-org/fastapi\_mcp,原理图如下所示:

其实说了那么多,简单来说就是fastapi-mcp可以和fastapi无缝集成,直接把你的fastapi项目变成MCP服务,通过工具调用的方式动态集成到智能体中。
fastapi-mcp的主要功能:
- 自动发现与转换
:自动扫描FastAPI应用中的所有端点,转换为MCP工具格式,无需手动注册 - 文档完整性保留
:完整继承Swagger文档描述和参数校验规则,确保AI调用准确性 - 灵活部署模式
:支持挂载到原应用或独立部署,适配不同架构需求 - 智能端点筛选
:通过operation_id或标签控制暴露的接口范围 - 动态热更新
:运行时可刷新服务目录,自动包含新增端点 - 多协议支持
:原生兼容SSE协议,通过mcp-proxy适配非SSE客户端
如何运行fastapi-mcp?
fastapi-mcp的安装方式有两种,一种是使用uv,另一种是使用传统的pip。
# 使用uv uv add fastapi-mcp #使用pip pip install fastapi-mcp
fastapi-mcp的挂载方式:
from fastapi import FastAPI from fastapi_mcp import FastApiMCP app = FastAPI() mcp = FastApiMCP( app, # 可选参数 name="My API MCP" ) # 将 MCP 服务器直接挂载到 FastAPI 应用 mcp.mount() if __name__ == "__main__": uvicorn.run("index:app", host="0.0.0.0", port=8000, reload=True)
启动之后就可以通过http://localhost:8000/mcp访问mcp服务;当然,在fastapi服务中,可能你并不需要把所有的接口都暴露成mcp服务,因此你可以使用不同的参数来控制暴露的接口:
自定义暴露的端点
from fastapi import FastAPI from fastapi_mcp import FastApiMCP app = FastAPI() # 只包含特定操作 mcp = FastApiMCP( app, include_operations=["get_user", "create_user"] ) # 排除特定操作 mcp = FastApiMCP( app, exclude_operations=["delete_user"] ) # 只包含具有特定标签的操作 mcp = FastApiMCP( app, include_tags=["users", "public"] ) # 排除具有特定标签的操作 mcp = FastApiMCP( app, exclude_tags=["admin", "internal"] ) # 结合操作 ID 和标签(包含模式) mcp = FastApiMCP( app, include_operations=["user_login"], include_tags=["public"] ) mcp.mount()
关于过滤的注意事项:
- 不能同时使用
include_operations和exclude_operations - 不能同时使用
include_tags和exclude_tags - 可以结合操作过滤和标签过滤(例如,使用
include_operations和include_tags) - 当结合过滤器时,将采用贪婪方法。匹配任一条件的端点将被包含
然后你就可以使用支持mcp服务的客户端连接mcp服务,如claude,cherry studio等等;只需要在这些工具的配置文件中加入以下配置:
# windows { "mcpServers": { "my-api-mcp-proxy": { "command": "mcp-proxy", "args": ["http://127.0.0.1:8000/mcp"] } } } # macos { "mcpServers": { "my-api-mcp-proxy": { "command": "你自己安装的mcp-proxy路径 可以使用which mcp-proxy命令查找", "args": ["http://127.0.0.1:8000/mcp"] } } }
总之,在智能体的开发中,使用MCP协议,可以把智能体的开发和工具的开发隔离开来,只需要按照标准的MCP协议开发即可;在智能体中就可以使用插拔的方式调用需要的工具。
(文:AI探索时代)