🧠 图解记忆: 框架让注册能力很快,生产质量取决于校验、权限、超时和可观测性。
💡 答案要点
FastMCP = 最流行的Python MCP Server开发框架
安装:
bash
pip install fastmcp最小示例(20行代码):
展开 Python 代码示例(38 行)
python
# server.py
from fastmcp import FastMCP
# 创建MCP Server
mcp = FastMCP("我的第一个MCP服务器")
# 注册工具
@mcp.tool()
def get_weather(city: str) -> dict:
"""查询城市天气"""
# 实际调用天气API
weather_data = call_weather_api(city)
return {
"city": city,
"temperature": weather_data["temp"],
"condition": weather_data["condition"]
}
@mcp.tool()
def calculate(order_amount: float, discount: float = 0.0) -> dict:
"""计算订单最终价格"""
final_price = order_amount * (1 - discount)
return {
"original": order_amount,
"discount": discount,
"final": round(final_price, 2)
}
# 注册资源
@mcp.resource("user://{user_id}/profile")
def get_user_profile(user_id: str) -> str:
"""读取用户资料"""
profile = load_from_database(user_id)
return json.dumps(profile)
# 启动服务器
if __name__ == "__main__":
mcp.run()工具定义详细参数:
python
@mcp.tool(
name="search_products", # 工具名(唯一标识)
description="搜索商品列表", # 描述(AI用于理解工具用途)
annotations={ # 额外元信息
"readOnlyHint": True, # 只读工具(不修改数据)
"idempotentHint": True, # 幂等工具(可安全重试)
}
)
def search_products(
keyword: str, # 必选参数
category: str = "all", # 可选参数(带默认值)
min_price: float | None = None, # 可选参数(可选类型)
limit: int = 10 # 可选参数(默认10)
) -> list[dict]:
"""搜索商品的完整实现"""
query = build_search_query(keyword, category, min_price)
results = database.execute(query).fetchmany(limit)
return [{"id": r[0], "name": r[1], "price": r[2]} for r in results]资源定义:
python
@mcp.resource(
"orders://{order_id}", # URI模板
mime_type="application/json" # MIME类型
)
def get_order(order_id: str) -> str:
"""获取订单详情"""
order = db.query("SELECT * FROM orders WHERE id = ?", order_id)
return json.dumps(order)
@mcp.resource(
"config://app", # 静态资源
name="AppConfig", # 资源名
description="应用配置信息"
)
def get_config() -> str:
"""返回应用配置"""
return json.dumps(APP_CONFIG)Prompts(提示模板):
python
@mcp.prompt(
name="code_review",
description="代码审查模板"
)
def code_review_prompt(
language: str,
code: str,
focus: str = "security"
) -> str:
"""生成代码审查Prompt"""
return f"""请审查以下{language}代码,重点关注{focus}问题:
```{language}
{code}审查要求:
- 找出潜在Bug
- 提出改进建议
- 给出安全评估(如果是安全审查)"""
**运行和测试:**
```bash
# 方式1:命令行运行
python server.py
# 方式2:stdio模式(供Claude Code使用)
python server.py --stdio
# 方式3:测试模式
fastmcp dev server.py # 热重载开发模式Claude Code中配置:
json
// .claude/mcp.json
{
"mcpServers": {
"my-weather-server": {
"command": "python",
"args": ["/path/to/server.py", "--stdio"],
"env": {
"API_KEY": "your-api-key"
}
}
}
}面试话术:
"我用FastMCP开发过企业内部MCP Server,核心就是三步:1)@mcp.tool()装饰器注册工具;2)@mcp.resource()装饰器注册资源;3)@mcp.prompt()装饰器注册Prompt模板。20行代码能跑一个可用Server,但生产环境要注意错误处理、日志记录、超时控制这些。Claude Code里配置mcp.json就能直接用,数据全程不离开本地,安全性很好。"
