MCP工具开发:写一个Agent能用的天气查询工具
MCP工具开发:写一个Agent能用的天气查询工具
💡 你将学到
MCP工具开发:写一个Agent能用的天气查询工具
MCP工具开发:写一个Agent能用的天气查询工具
MCP(Model Context Protocol)是Anthropic推出的开放协议,解决"AI怎么调用你的工具"这个问题。协议定好后,Agent能自动学会调用:你不用写提示词、不用做编排,把工具声明出来就行。这篇用免费的天气API,从零写一个Agent能直接用的MCP工具。
一、先搞懂MCP的三个概念
| 概念 | 作用 | 类比 |
|---|---|---|
| Tool(工具) | Agent可调用的函数 | 给AI的"手" |
| Resource(资源) | 可读取的数据/文件 | 给AI的"眼睛" |
| Prompt(提示词模板) | 预置的调用模板 | 给AI的"话术" |
本文只做Tool,最常用也最好上手。
二、准备:Python环境+免费天气API
需要Python 3.10+,装两个包:
pip install "mcp[cli]" fastmcp
天气数据用Open-Meteo:免费、无需API key、无需注册,个人项目随便用(以官网条款为准)。它提供两个接口:geocoding(城市名转坐标)和forecast(按坐标查天气)。
三、写工具:完整代码
from fastmcp import FastMCP
import httpx
mcp = FastMCP("weather")
@mcp.tool
def get_weather(city: str) -> dict:
"""查询指定城市的当前天气。city为城市名,如"北京"或"Beijing"。"""
# 1. 城市名转经纬度
geo = httpx.get(
"https://geocoding-api.open-meteo.com/v1/search",
params={"name": city, "count": 1},
timeout=10,
).json()
if not geo.get("results"):
return {"error": f"找不到城市: {city}"}
lat, lon = geo["results"][0]["latitude"], geo["results"][0]["longitude"]
# 2. 按坐标查天气
weather = httpx.get(
"https://api.open-meteo.com/v1/forecast",
params={"latitude": lat, "longitude": lon, "current_weather": "true"},
timeout=10,
).json()
return {
"city": city,
"temperature_c": weather["current_weather"]["temperature"],
"windspeed_kmh": weather["current_weather"]["windspeed"],
}
if __name__ == "__main__":
mcp.run()
三处关键设计:
- 函数docstring写清楚"什么时候用、参数是什么格式",LLM靠它决定是否调用、传什么参数
- 失败返回结构化错误(
{"error": ...}),Agent能读懂并换一种问法 - 每个HTTP请求都设10秒超时,防止天气接口慢时挂死整个调用
四、运行与接入Agent
开发调试:运行 mcp dev weather.py 打开本地调试界面,可以直接模拟Agent调用看返回。
接入Claude Desktop:在配置文件(claude_desktop_config.json)的 mcpServers 里加一条:
{"mcpServers": {"weather": {"command": "python", "args": ["/path/to/weather.py"]}}}
其他支持MCP的客户端(Cursor、自研Agent等)同样用stdio方式启动本工具。配置完成后问一句"北京现在多少度",Agent会自动调用你的工具,而不是瞎编一个温度。
五、进阶:加第二个工具
再加一个"查未来7天预报"的工具,只需要复制一个函数、改docstring和返回字段。多个工具时,工具名和描述别含糊,否则Agent会选错工具。
六、常见坑
- 描述太短:Agent不知道何时调用。写成"查询X,适用于Y场景,参数Z是……"
- 返回巨大JSON:只返回有用的字段,省token也提高准确率
- 忘设超时:外部API挂起会拖死整个Agent调用
- 密钥写进代码:MCP Server常驻运行,密钥一律走环境变量
常见问题
Q:和Function Calling有什么区别? A:本质都是"给模型注册函数"。MCP的价值是标准化:同一套工具可以接入Claude、Cursor、自研Agent等任意支持MCP的客户端,不用给每家写一套适配。
Q:必须用FastMCP吗? A:不是。官方Python SDK(mcp包)也可以,FastMCP是社区封装,代码更短。TypeScript/Java也有官方SDK。
Q:工具部署在服务器,Agent在本地,怎么连? A:除了stdio(本地进程),MCP还支持HTTP/SSE方式远程连接,把工具部署成服务,客户端配一个URL即可。
注:Open-Meteo的免费额度与使用条款以官网为准;MCP规范持续演进,接口细节以官方文档为准。
相关文章
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。
