在构建 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 如何访问外部工具”这一核心概念建立直观而深刻的理解。
和纯 MCP 服务器相比,集成进 FastAPI 的好处是可以同时提供自定义 Web UI 或管理后台。
能不能展示一下如何添加需要认证的 MCP 工具?需要在 header 里带 token 那种。
回 Nora,可以在服务器端用 FastAPI 的依赖注入做认证,MCP 消息端点也能享受到同样的中间件保护。
项目很年轻,但代码质量不错,README 写得清晰,安装步骤没有坑。
uv 这个包管理器很快,第一次用,体验不错。