PrefectHQ/fastmcp · 上手攻略
- 仓库:PrefectHQ/fastmcp
- 链接:https://github.com/PrefectHQ/fastmcp
- 分类:skill / agent
- 作者:Tom
- 更新:2026-07-10
这是什么
FastMCP 是构建 MCP(Model Context Protocol)服务器和客户端的 Python 框架,由 Prefect(知名工作流编排平台)维护。它让你用几行 Python 代码就能把任意函数暴露为 MCP 工具,并支持通过 STDIO 或 HTTP 两种传输方式连接 LLM。
解决什么问题: 手写 MCP 服务器要处理协议细节、JSON-RPC 通信、传输层选择、认证等大量模板代码。FastMCP 把这些全部封装,你只需写业务逻辑函数的签名和 docstring,其余 MCP 协议层面的东西自动生成。
📌 背景:FastMCP 1.0 已被合并进官方 MCP Python SDK,但独立的 FastMCP 项目仍在活跃维护,当前每日下载量超过 100 万次,据官方称所有 MCP 服务器中约 70% 运行着某种形式的 FastMCP 代码。
快速安装
# 推荐用 uv(更快更干净)
uv pip install fastmcp
# 或用 pip
pip install fastmcp
⚠️ 如果你之前装了 FastMCP 3.2 或更早版本,升级后可能遇到
import fastmcp报错,执行pip install --force-reinstall fastmcp即可解决(uv 不受影响)。
如需图形化工具 UI 组件(app=True 参数),额外安装:
pip install "fastmcp[apps]"
核心用法
1. 创建 MCP 服务器(最简方式)
# my_server.py
from fastmcp import FastMCP
mcp = FastMCP("MyServer")
@mcp.tool
def greet(name: str) -> str:
"""Greet a user by name."""
return f"Hello, {name}!"
if __name__ == "__main__":
mcp.run()
只需四行,你就拥有了一个完整的 MCP 服务器。FastMCP 自动从函数签名和 docstring 生成 JSON Schema 工具描述,LLM 看到的就是一个有类型、有说明的工具。
2. 添加带 UI 的工具(交互卡片)
安装 fastmcp[apps] 后,可以用 app=True 让工具在支持 FastMCP 的客户端中渲染成交互式 UI(基于 Prefab 组件库):
from prefab_ui.app import PrefabApp
from prefab_ui.components import Column, Heading, Text, Badge
from fastmcp import FastMCP
mcp = FastMCP("MyServer")
@mcp.tool(app=True)
def greet(name: str) -> PrefabApp:
"""Greet someone with a visual card."""
with Column(gap=4):
Heading(f"Hello, {name}!")
Badge("Success", variant="success")
return PrefabApp()
工具接收参数和普通工具完全一样,但返回值是组件树,由对话界面渲染成图表、表单等视觉元素。
3. 添加资源和提示模板
资源(只读数据):
@mcp.resource("data://config")
def get_config() -> dict:
return {"theme": "dark", "version": "1.0"}
提示模板(LLM 专用消息模板):
@mcp.prompt
def analyze_data(data_points: list[float]) -> str:
formatted = ", ".join(str(p) for p in data_points)
return f"Please analyze these data points: {formatted}"
4. 启动服务器
方式一:代码中直接运行
# STDIO 传输(默认,本地/CLI 场景)
mcp.run()
# HTTP 传输(远程访问场景)
mcp.run(transport="http", host="127.0.0.1", port=8000)
方式二:FastMCP CLI
# STDIO 模式(忽略代码中的 mcp.run() 参数)
fastmcp run my_server.py:mcp
# HTTP 模式
fastmcp run my_server.py:mcp --transport http --port 8000
💡 CLI 方式不会执行
if __name__ == "__main__"代码块,直接导入 server 对象并运行,适合与 MCP 客户端集成。
5. 连接 MCP 服务器(客户端)
import asyncio
from fastmcp import Client
client = Client("http://localhost:8000/mcp")
async def call_tool(name: str):
async with client:
result = await client.call_tool("greet", {"name": name})
print(result)
asyncio.run(call_tool("Ford"))
客户端用法注意事项:
- 客户端是异步的,需要 async with
- 可以在同一个 context 中做多次调用
6. 服务器说明文档(Instructions)
给服务器加一段说明,帮助 LLM 理解如何使用:
mcp = FastMCP(
"DataAnalysis",
instructions="提供数据分析工具。使用 get_summary() 获取数据概览。",
)
传输方式对比
| 传输方式 | 使用场景 | 配置 |
|---|---|---|
| STDIO(默认) | 本地 MCP 客户端(如 Claude Desktop)连接子进程 | mcp.run() 无参数 |
| HTTP | 远程服务器,需要网络访问 | mcp.run(transport="http", port=8000) |
| SSE(已废弃) | 旧版 Web 传输,不推荐 | — |
典型适用场景
- 快速为 LLM 工具箱:把现有的 Python 函数库(数据处理、文件操作、API 调用)暴露为 MCP 工具,让 Claude/GPT 等模型直接调用
- 构建内部知识库工具:把 RAG 管道、数据库查询包装成 MCP 资源(Resource),供 LLM 检索上下文
- 多工具 MCP 服务器:公司内部搭建统一的 MCP Server,所有 AI 工具(代码审查、发布流程、监控告警)集中管理
- 原型验证 MCP 协议:新工具/功能先用 FastMCP 快速原型,再按需深入定制协议层
坑与注意
⚠️ __main__ 块建议写上:使用 CLI 方式运行 fastmcp run 时,CLI 会跳过 if __name__ == "__main__" 块而直接导入 server 对象。两种方式混用时,代码块写上更安全。
⚠️ 导入报错先 force-reinstall:从 FastMCP 3.2 升级上来的用户,第一次 import 可能失败,用 pip install --force-reinstall fastmcp 解决。
⚠️ app=True 需要 fastmcp[apps]:这个 extra 不在默认依赖里,缺少时会报错。
⚠️ HTTP 传输无内置认证:直接暴露在公网的 HTTP MCP 服务器没有认证机制,生产环境建议配合反向代理(nginx/Caddy)做 TLS + 认证,或使用 Prefect Horizon(企业级 MCP 网关)管理访问。
⚠️ Python 异步风格:FastMCP 客户端是异步的,如果你想在同步代码中调用,需要用 asyncio.run() 包装。
⚠️ MCP 协议仍在演进:Anthropic 持续更新 MCP 协议,部分细节(如认证流程)尚在变化中,关注官方更新频道。
与同类对比
| 项目 | 语言 | 定位 | 上手难度 | 生产成熟度 |
|---|---|---|---|---|
| FastMCP | Python | MCP 服务器/客户端快速构建 | ⭐ 极低 | ⭐⭐⭐⭐⭐(100万次/天) |
| MCP Python SDK(官方) | Python | MCP 协议底层实现 | ⭐⭐⭐ 中等 | ⭐⭐⭐⭐ |
| mcp-server-python(官方) | Python | 官方示例服务器 | ⭐⭐ | ⭐⭐⭐ |
| ModelFusion | TypeScript/JS | 多模型 + MCP 支持 | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| Cargo(MCP Rust SDK) | Rust | MCP 协议 Rust 实现 | ⭐⭐⭐⭐ | ⭐⭐⭐ |
FastMCP 是目前 Python 生态里最快的 MCP 服务器开发方式,协议细节全部隐藏,适合快速原型到中等规模生产使用。复杂定制场景再考虑直接用 MCP Python SDK。
一句话推荐结论
要给 LLM Agent 快速添加工具调用能力?用 FastMCP,装饰器一加、函数即工具,5 行代码从零到 MCP 服务器跑起来。 每天百万次下载量已经证明了它的江湖地位。