使用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。

# 使用uvuv add fastapi-mcp#使用pippip install fastapi-mcp
fastapi-mcp的挂载方式:
from fastapi import FastAPIfrom fastapi_mcp import FastApiMCPapp = 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 FastAPIfrom fastapi_mcp import FastApiMCPapp = 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探索时代)

发表评论