在构建 AI 应用时,一个常见的挑战是如何让模型安全、高效地访问外部工具和数据源。模型上下文协议(MCP)正是为解决这一问题而生的开放标准,而 Server-Sent Events(SSE)则是实现 MCP 服务端实时通信的主流方式之一。FastAPI MCP SSE Server 项目为 Python 开发者提供了一个清晰、完整的范例,展示了如何在使用 FastAPI 框架的 Web 应用中,优雅地集成 MCP 的 SSE 传输能力,让 AI 模型能够通过标准化的接口调用你的自研工具。

项目基本信息

信息项详情
项目名称FastAPI MCP SSE Server
GitHub 地址https://github.com/panz2018/fastapi_mcp_sse
项目描述使用 FastAPI 实现的 MCP SSE 集成示例,展示如何在 Web 应用中为 AI 模型提供外部工具访问入口
作者panz2018
开源协议MIT License
开源状态公开状态
LanguagesPython
支持平台Windows / macOS / Linux
最后更新2025-05-14

一、项目介绍

FastAPI MCP SSE Server 是一个精心设计的教学型项目和启动模板。它没有试图实现复杂的功能集,而是聚焦于一件核心事情:用一个清晰的架构,将 MCP 的 SSE 传输能力嵌入到标准的 FastAPI 应用中

核心组成

组件说明
MCP SSE 端点/sse 端点用于建立 SSE 长连接,/messages/ 端点用于消息推送,共同构成 MCP 的传输层
Web 路由//about/status/docs/redoc 等常规 Web 端点,展示如何与 MCP 共存
天气服务示例内置 get_alertsget_forcast 两个 MCP 工具,作为 AI 可调用的外部服务范例
MCP 检查器支持可配合 MCP Inspector 可视化调试和验证 MCP 通信

架构设计理念

项目的核心设计哲学是“清晰的职责分离”。MCP 功能(/sse/messages/)通过独立的路由和服务器逻辑注入到 FastAPI 应用中,与常规 Web 路由共存但互不干扰。这种模块化设计使得开发者可以轻松理解 MCP 的集成方式,并将相同的模式复制到自己的项目中。

二、核心优势

极低的学习门槛

项目代码量精简到一个主服务器文件和一个可选的路由文件,结构一目了然。即使对 MCP 协议不熟悉的开发者,也能在半小时内看懂整个集成流程。

生产级 FastAPI 最佳实践

该项目的结构体现了在生产环境中集成 MCP 的正确方式:使用 uv 作为现代包管理器、创建虚拟环境、通过 pyproject.toml 管理依赖、支持 mcp dev 开发调试工具。它不是“能跑就行”的 demo,而是可以直接用于真实项目的模板。

即开即用的测试工具

内置的天气服务工具提供了两个完整的 MCP 工具范例。你可以立即通过 MCP Inspector 或 Continue VS Code 扩展连接到服务,可视化地测试工具列表、执行功能和查看结果。

灵活的运行方式

提供两种使用方式:使用 uvx 一行命令直接运行(无需克隆仓库),或完整安装以便二次开发。这种设计兼顾了快速体验和深度定制两类用户的需求。

MIT 开源协议

采用完全商业友好的 MIT 协议,你可以自由地将这个模板改造为自己的产品代码。

三、适用场景

为自研 AI Agent 开发工具接入层

如果你正在开发一个需要调用内部 API、数据库或业务逻辑的 AI Agent,这个项目提供了标准化的 MCP 接入模板。你只需仿照 weather.py 的模式注册自己的工具函数,AI 就能通过 MCP 协议发现并调用它们。

学习 MCP 协议与 SSE 传输实现

对于想要理解“MCP 服务端是如何通过 SSE 与 AI 客户端通信”的开发者,这个项目是极佳的学习材料。代码清晰地展示了 SSE 连接建立、消息推送、工具注册和调用的全流程。

快速原型验证

当你想快速验证“让 AI 访问某个内部服务和数据”这一想法时,可以直接克隆这个模板,替换示例工具为你自己的业务逻辑,几分钟内就能搭建出可工作的原型。

与现代 IDE AI 助手集成

项目文档已提供了与 Continue VS Code 扩展的集成配置示例。你也可以将相同的 SSE 端点配置到支持 MCP 的其他客户端(如 Cursor、Claude Desktop 等)中。

四、安装教程

环境要求

工具用途下载/安装方式
Python运行环境3.10 或以上
uvPython 包管理器`powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 \iex"` (Windows)

方式一:一行命令快速运行(无需克隆)

这种方式无需克隆仓库,uvx 会自动从 GitHub 拉取代码并运行:

uvx --from git+https://github.com/panz2018/fastapi_mcp_sse.git start

运行后,服务将在 http://localhost:8000 启动。

方式二:完整安装(适合二次开发)

# 1. 克隆仓库
git clone https://github.com/panz2018/fastapi_mcp_sse.git
cd fastapi_mcp_sse

# 2. 创建虚拟环境
uv venv

# 3. 激活虚拟环境
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate

# 4. 安装依赖
uv pip install -r pyproject.toml

# 5. 启动服务
python src/server.py
# 或使用
uv run start

可用端点一览

启动后,你可以访问以下端点:

端点类型说明
http://localhost:8000Web首页
http://localhost:8000/sseMCPSSE 长连接端点
http://localhost:8000/messages/MCP消息发布端点
http://localhost:8000/docsWebSwagger UI 文档
http://localhost:8000/redocWebReDoc 文档
http://localhost:8000/statusWeb状态查询

使用 MCP Inspector 调试

mcp dev ./src/weather.py

然后在浏览器中打开 http://localhost:5173,将传输类型设置为 SSE,URL 输入 http://localhost:8000/sse,点击 Connect。你就可以在图形界面中查看可用工具并进行测试。

与 Continue VS Code 扩展集成

在 Continue 的配置文件中添加:

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "name": "weather",
          "type": "sse",
          "url": "http://localhost:8000/sse"
        }
      }
    ]
  }
}

五、使用示例

示例一:通过 MCP Inspector 测试工具

  1. 启动服务后,在 MCP Inspector 中连接到 http://localhost:8000/sse
  2. 点击“List Tools”,你会看到两个可用工具:get_alertsget_forcast
  3. 选择 get_forcast,输入参数 {"latitude": 37.7749, "longitude": -122.4194},点击“Run Tool”。
  4. 返回天气预报数据(基于美国国家气象局开放的 API)。

示例二:在 Continue 中使用天气工具

配置集成后,在 VS Code 中向 Continue AI 提问:“帮我查询旧金山的天气警报。” Continue 会自动发现 get_alerts 工具并调用它,返回当前活跃的天气警报信息。

示例三:添加自定义 MCP 工具

假设你想让 AI 访问公司内部的客户数据库。只需仿照 weather.py 的模式:

  1. 创建一个新的工具模块(如 customer.py),定义 get_customer_info 工具。
  2. server.py 中导入并注册该工具。
  3. 重启服务,AI 即可通过 MCP 调用你的客户查询功能。

六、常见问题

问:启动服务时提示端口 8000 已被占用?

答:你可以在 server.py 中修改 uvicorn 的端口配置,或直接终止占用 8000 端口的进程。端口冲突是开发中常见问题,不属于本项目的 bug。

问:MCP Inspector 连接后看不到工具?

答:请确认:

  1. FastAPI 服务已正常启动(检查终端输出)。
  2. MCP Inspector 的传输类型已正确设置为 SSE
  3. URL 输入的是 http://localhost:8000/sse(注意尾部的 /sse 路径)。

问:天气工具返回的数据是真实天气吗?

答:是的。weather.py 中的示例工具通过美国国家气象局的公开 API 获取真实天气数据。你可以替换为自己的数据源或业务逻辑。

问:如何在生产环境中部署这个服务?

答:由于 FastAPI 本身就是生产级框架,你可以使用 uvicorn 配合 gunicorn 作为进程管理器来部署。同时,需要在生产环境中配置 HTTPS 和合理的认证机制(本项目作为模板未包含内置认证,你可以自行添加)。

七、总结

FastAPI MCP SSE Server 是一个精致而实用的项目。它没有试图做一个大而全的 MCP 框架,而是精准地解决了一个具体问题:“如何在现有 FastAPI 应用中快速、正确地集成 MCP 的 SSE 传输能力?” 为此,它提供了一个清晰、完整、可运行的模板,并附带了开发调试工具和 IDE 集成示例。

对于 Python 开发者来说,这个项目既是学习 MCP 协议的极佳起点,也是构建 AI Agent 工具接入层的实用模板。花十分钟启动服务、用 MCP Inspector 探索工具,你会对“AI 如何访问外部工具”这一核心概念建立直观而深刻的理解。

标签: 开发者工具

已有 33 条评论

    1. BenWhite BenWhite

      希望能看到更多工具类型的示例,比如文件操作、数据库查询之类的。

    2. CathyTang CathyTang

      回 Ben,项目的代码结构已经很模块化了,你可以把 weather 服务的逻辑替换成自己的,比如用 sqlite3 查数据库。

    3. DerekWu DerekWu

      项目虽小,五脏俱全,体现了如何用优雅的 Python 代码实现一个现代化的 AI 工具接入层。