引言
在当今的科技世界里,API(应用程序编程接口)就像是数字世界的桥梁,连接着各种不同的软件系统。而 MCP(模型上下文协议)则为模型与外部工具的交互提供了标准化的方式,使得大语言模型(LLM)能够更好地调用外部工具,拓展其能力边界。然而,如何将现有的 API 快速、便捷地转换为 MCP 工具,成为了开发者们面临的一个挑战。FastAPI-MCP 项目的出现,就像是一把钥匙,为解决这个问题提供了一个优雅的方案。
本文的目的就是带大家深入了解 FastAPI-MCP 项目,揭开它的神秘面纱,让大家知道如何利用这个强大的工具,将自己的 FastAPI 端点轻松转换为 MCP 工具。
核心概念
FastAPI-MCP 是一个由 Tadata Inc. 开发的零配置工具,它就像是一个神奇的转换器,能够自动将 FastAPI 端点公开为模型上下文协议(MCP)工具。它的设计理念非常独特,采用了 FastAPI-first 的方法,是 FastAPI 的原生扩展,而不仅仅是一个将 API 转换为 MCP 工具的转换器。
这种设计带来了很多优势。首先,它可以利用熟悉的 FastAPI Depends()
进行认证和授权,让 MCP 端点的安全性得到保障,就像是给你的数字大门加上了一把坚固的锁。其次,它通过 ASGI 接口直接与 FastAPI 应用进行通信,避免了 MCP 到 API 的 HTTP 调用,大大提高了通信效率,就像是在高速公路上飞驰一样顺畅。最后,它允许你的 FastAPI 应用和 MCP 服务器统一部署,也支持分开部署,非常灵活,就像是一个可以变形的机器人,能适应各种不同的环境。
配置与使用
开发环境搭建
如果你想使用 FastAPI-MCP,首先要搭建好开发环境。具体步骤如下:
- 确保你安装了 Python 3.10 或更高版本,这是运行项目的基础,就像是建造房子的地基一样重要。
- 安装 uv 包管理器,它可以帮助你管理项目的依赖,就像是一个贴心的管家。
基本使用
使用 FastAPI-MCP 非常简单。下面是一个基本的使用示例:
python
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
app = FastAPI()
mcp = FastApiMCP(app)
# 直接将 MCP 服务器挂载到您的 FastAPI 应用
mcp.mount()
在这个示例中,我们首先创建了一个 FastAPI 应用,然后使用 FastApiMCP
类将其转换为 MCP 服务器,并将 MCP 服务器挂载到 FastAPI 应用上。这样,你的自动生成的 MCP 服务器就可以在https://app.base.url/mcp
访问了,就像是在你的数字世界里开了一扇新的大门。
高级用法
FastAPI-MCP 还提供了很多高级用法,让你可以根据自己的需求对 MCP 服务器进行定制。
自定义模式描述
你可以通过设置 describe_all_responses
和 describe_full_response_schema
参数,在工具描述中包含所有可能的响应模式和完整的 JSON 模式,让工具描述更加详细。示例代码如下:
python
from fastapi import FastAPI
from fastapi_mcp import FastApiMCP
app = FastAPI()
mcp = FastApiMCP(
app,
name="我的 API MCP",
describe_all_responses=True, # 在工具描述中包含所有可能的响应模式
describe_full_response_schema=True # 在工具描述中包含完整的 JSON 模式
)
mcp.mount()
配置 HTTP 超时时间
如果你有一些 API 端点的响应时间超过了默认的 5 秒,你可以通过设置 http_client
参数来增加超时时间。示例代码如下:
python
from examples.shared.apps.items import app
from examples.shared.setup import setup_logging
import httpx
from fastapi_mcp import FastApiMCP
setup_logging()
mcp = FastApiMCP(
app,
http_client=httpx.AsyncClient(timeout=20)
)
mcp.mount()
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
分开部署 MCP 服务器和 FastAPI 应用
你可以创建一个 MCP 服务器,并将其挂载到另一个 FastAPI 应用上,实现分开部署。示例代码如下:
python
from fastapi import FastAPI
from examples.shared.apps.items import app
from examples.shared.setup import setup_logging
from fastapi_mcp import FastApiMCP
setup_logging()
MCP_SERVER_HOST = "localhost"
MCP_SERVER_PORT = 8000
ITEMS_API_HOST = "localhost"
ITEMS_API_PORT = 8001
# 仅将 FastAPI 应用作为 MCP 服务器生成的源
mcp = FastApiMCP(app)
# 将 MCP 服务器挂载到另一个 FastAPI 应用
mcp_app = FastAPI()
mcp.mount(mcp_app)
# 与原始 FastAPI 应用分开运行 MCP 服务器
if __name__ == "__main__":
import uvicorn
uvicorn.run(mcp_app, host="0.0.0.0", port=8000)
应用场景与案例
应用场景介绍
FastAPI-MCP 的应用场景非常广泛。在大语言模型的应用中,它可以让模型更好地调用外部的 API 工具,拓展模型的能力。例如,在智能客服系统中,大语言模型可以通过 MCP 调用企业的订单查询 API、客户信息查询 API 等,为客户提供更准确、更全面的服务。在数据分析领域,大语言模型可以通过 MCP 调用数据处理 API、数据分析 API 等,帮助分析师快速获取和分析数据。
实际案例分享
电商平台有很多 API 接口,如商品查询、订单管理、用户信息管理等。通过使用 FastAPI-MCP,平台可以将这些 API 端点转换为 MCP 工具,让大语言模型可以直接调用这些工具。当用户向智能客服咨询商品信息时,智能客服可以通过 MCP 调用商品查询 API,快速为用户提供商品的详细信息;当用户需要查询订单状态时,智能客服可以通过 MCP 调用订单管理 API,为用户提供订单的最新状态。这样,用户的体验就会得到极大的提升,就像是在购物过程中得到了一个贴心的小助手。
总结与展望
总结
FastAPI-MCP 是一个非常强大的工具,它为开发者提供了一种简单、高效的方式,将 FastAPI 端点转换为 MCP 工具。它的 FastAPI-first 设计理念带来了很多优势,如安全的认证授权、高效的通信和灵活的部署方式。同时,它还提供了丰富的高级用法,让开发者可以根据自己的需求对 MCP 服务器进行定制。
展望
随着大语言模型的不断发展,MCP 协议的应用也会越来越广泛。FastAPI-MCP 作为一个优秀的工具,有望在未来得到更多的改进和完善。例如,它可能会支持更多的 MCP 协议版本,提供更多的认证授权方式,优化性能等。相信在未来,FastAPI-MCP 会成为开发者们在 API 与 MCP 融合领域的得力助手。
附录
相关链接
- 官方文档:FastAPI-MCP 官方文档
- GitHub 仓库:FastAPI-MCP GitHub 仓库
- 社区论坛:MCParty Slack 社区
术语表
- API(应用程序编程接口):是一种允许不同软件系统之间进行通信和交互的接口。通过 API,一个软件系统可以调用另一个软件系统的功能,就像是不同的人之间通过电话进行交流一样。
- MCP(模型上下文协议):是一种标准化的协议,用于规范大语言模型与外部工具之间的交互。通过 MCP,大语言模型可以更好地调用外部工具,拓展其能力边界。
- FastAPI:是一个基于 Python 的现代、快速(高性能)的 Web 框架,用于构建 API。它具有简单易用、高性能等特点,就像是一个高效的建筑工人,可以快速搭建出漂亮的 API 建筑。
- ASGI(异步服务器网关接口):是一种用于 Python Web 应用程序的异步服务器和应用程序之间的接口标准。它允许 Web 应用程序以异步方式处理请求,提高了应用程序的性能和响应速度,就像是一个高效的交通指挥系统,让请求可以快速通过。