AI编程之 FastMCP 速成教程
FastMCP是一个Python框架,用于快速搭建MCP(模型上下文协议)服务器和客户端,让大模型能够安全、规范地调用外部工具和获取数据。它通过简单的装饰器语法(@mcp.tool和@mcp.resource)将普通Python函数转化为大模型可用的工具和数据资源,自动处理协议封装、类型验证和网络通信。开发者无需了解复杂协议细节,只需编写常规Python函数并添加类型注解和文档字符串,就能让大模型
一、FastMCP 是个啥?白话解释
FastMCP 是一个Python 框架,专门用来快速搭建MCP 服务器和客户端。MCP 全称Model Context Protocol(模型上下文协议),简单说就是大模型和外部世界沟通的标准化语言。
想象一下:大模型是个聪明的大脑,但它自己没手没脚,没法查天气、算数据、控制设备。MCP 就像给大脑装了个标准化的 "接口",让它能安全、规范地调用外部工具和获取数据;而 FastMCP 就是这个接口的 "快速搭建工具包",让你不用懂复杂的协议细节,几行 Python 就能搞定。
核心作用:
- 让大模型能调用函数 / 工具(比如计算器、API、自动化脚本)
- 让大模型能获取结构化数据(比如用户信息、实时行情、配置参数)
- 提供安全的通信方式(权限控制、数据验证)
- 标准化接口,一次开发,多个大模型都能用
二、快速上手:3 分钟搭个 MCP 服务器
1. 安装 FastMCP(30 秒)
打开命令行,输入以下命令(二选一,推荐用 uv 更快):
# 方法1:用pip安装
pip install fastmcp
# 方法2:用uv安装(更快,推荐)
uv pip install fastmcp
2. 第一个 MCP 服务器:计算器 + 问候语(2 分钟)
创建文件my_server.py,复制以下代码:
# 从fastmcp库导入核心类
from fastmcp import FastMCP
# 1. 初始化MCP服务器实例(起个名字)
mcp = FastMCP(name="我的第一个MCP服务器", description="能算加减、会打招呼的服务器")
# 2. 注册工具(大模型能调用的函数,类似POST接口)
# 用@mcp.tool装饰器,把普通函数变成MCP工具
@mcp.tool
def add(a: int, b: int) -> int:
"""加法运算:计算两个整数的和""" # 文档字符串会自动变成工具描述,给大模型看
return a + b
@mcp.tool
def subtract(a: int, b: int) -> int:
"""减法运算:计算两个整数的差"""
return a - b
@mcp.tool
def greet(name: str, language: str = "zh") -> str:
"""根据姓名和语言生成问候语
参数:
name: 要问候的人名字
language: 语言(zh中文,en英文,默认中文)
"""
greetings = {
"zh": f"你好,{name}!欢迎使用FastMCP服务器~",
"en": f"Hello, {name}! Welcome to FastMCP server~"
}
return greetings.get(language, "你好,朋友!") # 语言不存在时的默认值
# 3. 注册资源(大模型能获取的数据,类似GET接口)
# 用@mcp.resource装饰器,定义资源路径
@mcp.resource("system_info") # 资源路径:system_info
def get_system_info() -> dict:
"""获取服务器系统信息"""
return {
"server_name": "我的第一个MCP服务器",
"version": "1.0",
"functions": ["add", "subtract", "greet"],
"resources": ["system_info"]
}
@mcp.resource("greeting://{name}") # 动态资源路径:greeting://张三
def get_personalized_greeting(name: str) -> str:
"""获取个性化问候语(通过路径参数)"""
return f"欢迎你,{name}!这是专属你的问候~"
# 4. 启动服务器(默认端口8000)
if __name__ == "__main__":
mcp.run(port=8000, reload=True) # reload=True:代码修改后自动重启,方便调试
3. 启动服务器(10 秒)
命令行输入:
python my_server.py
看到类似这样的输出就成功了:
INFO: Started server process [12345]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
三、核心概念:工具 (Tool) vs 资源 (Resource)(白话理解)
| 概念 | 白话解释 | 类比 | 装饰器 |
|---|---|---|---|
| 工具 (Tool) | 大模型能主动调用的功能,会产生计算或副作用 | 像手机里的 APP(计算器、拍照) | @mcp.tool |
| 资源 (Resource) | 大模型能获取的静态 / 动态数据,一般不改变系统状态 | 像手机里的相册、通讯录 | @mcp.resource("路径") |
关键区别:
- 工具:需要大模型传参数,执行后返回结果(比如算 1+1)
- 资源:可以通过路径直接访问,获取数据(比如查系统信息)
FastMCP 会自动帮你做这些事:
- 生成工具 / 资源的描述(给大模型看)
- 验证输入参数的类型(防止传错数据)
- 处理网络通信和协议封装(不用你写 HTTP 接口)
- 提供标准的 MCP 协议响应格式
四、客户端怎么用?和大模型交互(完整示例)
服务器搭好了,怎么让大模型用它?这里写一个 Python 客户端示例,模拟大模型调用过程:
1. 客户端代码(my_client.py)
import asyncio
from fastmcp import Client
from fastmcp.client.transports import SSETransport # 用SSE协议通信(常用)
async def main():
# 1. 连接到本地MCP服务器
transport = SSETransport("http://localhost:8000/mcp")
async with Client(transport) as client:
print("=== 1. 获取资源:system_info ===")
system_info = await client.get_resource("system_info")
print("服务器信息:", system_info)
print("\n=== 2. 获取动态资源:greeting://豆包 ===")
greeting = await client.get_resource("greeting://豆包")
print("个性化问候:", greeting)
print("\n=== 3. 调用工具:add(10, 20) ===")
add_result = await client.call_tool("add", a=10, b=20)
print("10+20 =", add_result)
print("\n=== 4. 调用工具:greet(豆包, en) ===")
greet_result = await client.call_tool("greet", name="豆包", language="en")
print("英文问候:", greet_result)
print("\n=== 5. 调用工具:subtract(50, 15) ===")
subtract_result = await client.call_tool("subtract", a=50, b=15)
print("50-15 =", subtract_result)
# 运行客户端
if __name__ == "__main__":
asyncio.run(main())
2. 运行客户端(确保服务器已启动)
命令行输入:
python my_client.py
预期输出:
=== 1. 获取资源:system_info ===
服务器信息: {'server_name': '我的第一个MCP服务器', 'version': '1.0', 'functions': ['add', 'subtract', 'greet'], 'resources': ['system_info']}
=== 2. 获取动态资源:greeting://豆包 ===
个性化问候: 欢迎你,豆包!这是专属你的问候~
=== 3. 调用工具:add(10, 20) ===
10+20 = 30
=== 4. 调用工具:greet(豆包, en) ===
英文问候: Hello, 豆包! Welcome to FastMCP server~
=== 5. 调用工具:subtract(50, 15) ===
50-15 = 35
五、进阶玩法:给大模型用的实用工具(天气查询示例)
让我们升级服务器,添加一个能查天气的工具(用 requests 库调用公开 API):
1. 安装依赖
pip install requests # 用于发送HTTP请求
2. 升级后的服务器代码(weather_server.py)
from fastmcp import FastMCP
import requests # 新增:导入requests库
mcp = FastMCP(name="天气查询服务器", description="能查全球天气的MCP服务器")
# 新增:天气查询工具
@mcp.tool
def get_weather(city: str, unit: str = "c") -> dict:
"""查询指定城市的天气
参数:
city: 城市名称(如北京、上海、New York)
unit: 温度单位(c=摄氏度,f=华氏度,默认摄氏度)
返回:
包含天气状况、温度、湿度等信息的字典
"""
try:
# 调用公开天气API(这里用的是wttr.in,免费无需API Key)
url = f"https://wttr.in/{city}?format=j1" # j1表示返回JSON格式
response = requests.get(url, timeout=10)
response.raise_for_status() # 抛出HTTP错误
data = response.json()
# 解析天气数据
current_condition = data["current_condition"][0]
temp_c = int(current_condition["temp_C"])
temp_f = int(current_condition["temp_F"])
weather_desc = current_condition["weatherDesc"][0]["value"]
humidity = current_condition["humidity"]
# 根据单位返回结果
if unit == "f":
temp = temp_f
unit_str = "°F"
else:
temp = temp_c
unit_str = "°C"
return {
"city": city,
"weather": weather_desc,
"temperature": f"{temp}{unit_str}",
"humidity": f"{humidity}%",
"unit": unit
}
except Exception as e:
return {"error": f"查询天气失败:{str(e)}"}
# 启动服务器
if __name__ == "__main__":
mcp.run(port=8000, reload=True)
3. 客户端调用天气工具
修改客户端代码,添加:
print("\n=== 6. 调用工具:get_weather(北京) ===")
weather_result = await client.call_tool("get_weather", city="北京")
print("北京天气:", weather_result)
运行后就能看到北京的实时天气了!
六、常见问题与调试技巧(白话版)
1. 服务器启动失败?
- 检查端口 8000 是否被占用(换个端口:
mcp.run(port=8080)) - 确保 FastMCP 版本正确(
pip install --upgrade fastmcp) - 检查 Python 版本(推荐 3.9+)
2. 客户端连接失败?
- 先确认服务器已启动(看控制台输出)
- 检查 URL 是否正确(
http://localhost:8000/mcp) - 关闭防火墙或允许 Python 访问网络
3. 大模型不会调用工具?
- 确保工具函数有详细的文档字符串(大模型靠这个理解工具用途)
- 类型注解要完整(比如
a: int,不要写a) - 用
fastmcp dev server.py命令启动开发模式,查看工具描述是否正确
4. 怎么让 Claude / 豆包等大模型用我的服务器?
- 在大模型的设置里找到 "MCP 服务器" 或 "工具集成" 选项
- 输入服务器地址:
http://localhost:8000/mcp(本地)或公网 IP + 端口(远程) - 大模型会自动发现你的工具和资源,就能直接调用了
七、总结:FastMCP 的核心价值
FastMCP 让你用 Python 写普通函数,就能给大模型提供工具和数据,不用懂复杂的协议细节。它的核心优势是:
- 简单:装饰器 + 类型注解,几行代码搞定
- 标准化:遵循 MCP 协议,兼容所有支持 MCP 的大模型
- 高效:自动处理类型验证、协议封装、网络通信
- 灵活:支持工具、资源、提示等多种交互方式
现在你已经掌握了 FastMCP 的基本用法,可以开始给大模型开发专属工具了!比如:
- 连接数据库查数据
- 控制智能家居设备
- 自动化办公流程
- 调用企业内部 API
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)