MCP Server

探索 FastAPI-MCP:开启 API 与 MCP 融合新旅程

引言 在当今的科技世界里,AP...

标签:

引言

在当今的科技世界里,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,首先要搭建好开发环境。具体步骤如下:

  1. 确保你安装了 Python 3.10 或更高版本,这是运行项目的基础,就像是建造房子的地基一样重要。
  2. 安装 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 融合领域的得力助手。

附录

相关链接

术语表

  • API(应用程序编程接口):是一种允许不同软件系统之间进行通信和交互的接口。通过 API,一个软件系统可以调用另一个软件系统的功能,就像是不同的人之间通过电话进行交流一样。
  • MCP(模型上下文协议):是一种标准化的协议,用于规范大语言模型与外部工具之间的交互。通过 MCP,大语言模型可以更好地调用外部工具,拓展其能力边界。
  • FastAPI:是一个基于 Python 的现代、快速(高性能)的 Web 框架,用于构建 API。它具有简单易用、高性能等特点,就像是一个高效的建筑工人,可以快速搭建出漂亮的 API 建筑。
  • ASGI(异步服务器网关接口):是一种用于 Python Web 应用程序的异步服务器和应用程序之间的接口标准。它允许 Web 应用程序以异步方式处理请求,提高了应用程序的性能和响应速度,就像是一个高效的交通指挥系统,让请求可以快速通过。探索 FastAPI-MCP:开启 API 与 MCP 融合新旅程

相关导航