在构建 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 |
| 开源状态 | 公开状态 |
| Languages | Python |
| 支持平台 | 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_alerts 和 get_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 或以上 | |
| uv | Python 包管理器 | `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:8000 | Web | 首页 |
http://localhost:8000/sse | MCP | SSE 长连接端点 |
http://localhost:8000/messages/ | MCP | 消息发布端点 |
http://localhost:8000/docs | Web | Swagger UI 文档 |
http://localhost:8000/redoc | Web | ReDoc 文档 |
http://localhost:8000/status | Web | 状态查询 |
使用 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 测试工具
- 启动服务后,在 MCP Inspector 中连接到
http://localhost:8000/sse。 - 点击“List Tools”,你会看到两个可用工具:
get_alerts和get_forcast。 - 选择
get_forcast,输入参数{"latitude": 37.7749, "longitude": -122.4194},点击“Run Tool”。 - 返回天气预报数据(基于美国国家气象局开放的 API)。
示例二:在 Continue 中使用天气工具
配置集成后,在 VS Code 中向 Continue AI 提问:“帮我查询旧金山的天气警报。” Continue 会自动发现 get_alerts 工具并调用它,返回当前活跃的天气警报信息。
示例三:添加自定义 MCP 工具
假设你想让 AI 访问公司内部的客户数据库。只需仿照 weather.py 的模式:
- 创建一个新的工具模块(如
customer.py),定义get_customer_info工具。 - 在
server.py中导入并注册该工具。 - 重启服务,AI 即可通过 MCP 调用你的客户查询功能。
六、常见问题
问:启动服务时提示端口 8000 已被占用?
答:你可以在 server.py 中修改 uvicorn 的端口配置,或直接终止占用 8000 端口的进程。端口冲突是开发中常见问题,不属于本项目的 bug。
问:MCP Inspector 连接后看不到工具?
答:请确认:
- FastAPI 服务已正常启动(检查终端输出)。
- MCP Inspector 的传输类型已正确设置为 SSE。
- 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 如何访问外部工具”这一核心概念建立直观而深刻的理解。
代码结构极其清晰,server.py 连 MCP 集成的地方都注释得很清楚,跟着看一遍就懂了 SSE 和 MCP 的关系。
uvx 那一行命令直接跑起来太方便了,不用克隆仓库,不用配环境,适合第一次接触 MCP 的人快速体验。
天气工具用的是真实 API,不是 mock 数据,可以直接看到 AI 调用外部服务的完整流程。
能不能给一个添加自定义业务工具的更详细教程?我跟着 weather.py 改了改,但遇到点问题。
回 Anna,可以在项目的 routes.py 里用 APIRouter 加新路由,然后把 MCP 工具函数注册到 weather.py 类似的位置。源代码已经是很好的参考了。