关于 Open-Meteo Weather
Open-Meteo Weather 是面向需要按地名获取天气数据的客户端的轻量 Python MCP 服务。它通过免费的 Open-Meteo API 提供当前天气和逐小时预报,无需 API 密钥。
主要功能
- 01按地名查询当前天气
- 02查询 1–48 小时逐时预报
- 03预报时间采用当地时区
- 04无需 API 密钥
- 05仅依赖标准库的 Python 服务
适用场景
- 01查询城市当前天气
- 02查看未来数小时的降雨概率
- 03获取旅行规划所需的预报
MCP 相关
该 MCP 服务通过 stdio 使用 JSON-RPC 2.0 通信,并向 MCP 客户端提供 `get_weather` 和 `get_hourly_forecast` 工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
2收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| location | string | 是 | 地点名称,例如 'Seattle' 或 'Paris, France'。 |
详细介绍
weather-mcp
一个精简的模型上下文协议服务,只有一个文件。它通过 stdio 使用 JSON-RPC 2.0,并提供两个工具,
get_weather 和 get_hourly_forecast,数据由免费的
Open-Meteo API 提供支持。
没有第三方运行时依赖——仅使用标准库。需要 Python 3.8+。
快速开始:Claude Code
1. 准备终端
每条指令应该粘贴在哪里?
你会用到两个地方:
- 普通的 Terminal 标签页用于运行设置命令。在 Mac 上,打开 Terminal 应用并按 Command + T 打开新标签页。粘贴一条命令,然后按 Return。
- Claude Code 对话用于提问,例如 “东京的天气怎么样?”
如果 Claude 已经在和你聊天,请打开新的 Terminal 标签页来运行设置命令。 保留 Claude 对话在原来的标签页中,以便之后返回。
在 macOS/Linux 上打开 Terminal,或在 Windows 上打开 PowerShell。将本指南中的命令块粘贴到其中。天气问题和以 / 开头的命令(例如 /login 和 /mcp)应在 Claude Code 对话中输入。
如果 Claude Code 已经在终端中打开,请使用新的终端标签页进行设置。
- 按照官方设置指南安装 Claude Code。
在终端中运行
claude --version,检查是否已可用。 然后运行claude并按照登录提示操作;如有需要,在 Claude Code 中输入/login。为后续步骤保留一个单独的终端标签页。 - 按照适用于你操作系统的说明安装 uv。
uv 会提供
uvx,由它为你下载并运行天气软件包。 安装后重新打开终端并运行uvx --version。 如果任一版本检查提示“command not found”,请先完成相应安装再继续。
你需要连接互联网才能下载软件包并获取天气信息。 无需天气 API 密钥。
2. 添加天气服务
在终端中运行:
claude mcp add --scope user weather -- uvx myai-weather-mcp==0.1.2
weather 是你将在 Claude Code 中看到的名称。myai-weather-mcp 是它运行的已发布软件包。用户级作用域使此设置可用于你的所有 Claude Code 项目。无需克隆仓库或单独安装软件包。
如需了解其他设置选项,请参阅 Claude Code MCP 参考。
==0.1.2 固定选择本指南使用的版本,因此后续发布不会悄然改变你的设置。这是有意为之;想要升级时,请参阅更新版本。
如果 weather 已存在,请使用 claude mcp get weather 检查。
如果它已使用上述命令,请继续下一步。要替换较旧的用户级设置,请按照更新版本中的替换步骤操作。
3. 检查连接并查询天气
在终端中运行:
claude mcp get weather
查看是否显示 Connected。如果显示其他状态或找不到服务,请使用下文的连接故障排除。
运行 claude 启动新的 Claude Code 会话,或在现有会话中输入 /mcp 并重新连接 weather。在 Claude Code 的对话提示符处粘贴:
- “使用天气工具告诉我东京当前的天气。”
- “使用逐小时天气预报工具显示东京接下来六小时的天气。”
预期结果包括当前天气状况、以 °F 为单位的温度、以 mph 为单位的风速,以及六行包含当地时间和降雨概率的预报。数值会随天气变化。
更新版本
查看发布说明,并
选择一个已发布的版本。若要替换用户范围的注册项,请先检查
claude mcp get weather,并保存你想保留的自定义设置。然后运行
以下命令,并在添加命令中将 0.1.2 替换为你选择的版本:
claude mcp remove --scope user weather
claude mcp add --scope user weather -- uvx myai-weather-mcp==0.1.2
claude mcp get weather
移除注册项只会删除该客户端配置,不会删除你的仓库 或源文件。如果现有注册项处于本地或项目范围,请在更改前检查 该配置;其中同名的条目可能会覆盖用户范围的条目。
替换后,通过 /mcp 重新连接,或启动新的 Claude Code 会话。
对于 Claude Desktop,请在其配置的 args 中更改版本并重启。
刷新 uv 的缓存不会更改已保存的版本固定项。如果已发布的版本无法找到,请使用你选择的版本运行以下命令:
uvx --refresh myai-weather-mcp==0.1.2
如果终端一直空白且没有报错,说明服务正在等待客户端; 按 Control+C,然后重新连接客户端。请参阅 uv 的工具指南 ,了解有关运行工具和选择版本的更多信息。
连接故障排查
- **没有名为
weather的服务:**运行第 2 步中的添加命令,然后再次检查。 - **连接失败或显示其他非已连接状态:**检查
claude mcp get weather打印的命令和 参数。尝试直接在终端中运行uvx myai-weather-mcp==0.1.2,并查看是否有错误。 如果它启动后没有报错并一直等待,请按 Control+C,然后通过/mcp重新连接。成功启动可确认软件包能够运行;再询问天气以 检查网络连接。 - **找不到
uvx:**安装 uv 并重新打开终端。如果终端能找到它,但客户端找不到,请使用command -v uvx(macOS/Linux)或where.exe uvx(Windows PowerShell)查找其完整路径。在注册项或配置中使用该路径替代uvx;路径包含空格时请加引号。 - **软件包下载失败:**检查你的互联网连接以及软件包名称和版本是否准确。如果选定的版本确实存在,但 uv 无法找到,请使用上面的缓存刷新命令。对于
UnknownIssuer,请参阅下面的 证书错误处理步骤。 - **已连接,但缺少工具:**启动新的 Claude Code 会话,或使用
/mcp检查weather是否已启用并重新连接。 - **直接启动服务后终端一片空白:**服务正在等待 MCP 客户端。这是正常现象;请按 Control+C 并使用上面的客户端设置步骤。
- **Claude Code 提示“Not logged in”:**打开
claude并运行/login。 - **已连接,但天气请求失败:**检查返回的错误以及你的 互联网连接。服务必须能够访问 Open-Meteo 才能获取天气。
- **找不到位置:**尝试使用知名城市的名称。对于未知地点,应返回易于理解的错误,而不是天气预报。
PyPI 证书错误(UnknownIssuer)
如果终端在 uvx 从 pypi.org 获取内容时显示 invalid peer certificate: UnknownIssuer,说明包启动器无法验证该 HTTPS 连接。这会在天气服务启动前发生,并可能在客户端初始化期间显示为 Connection closed。其他连接错误可能由不同原因引起。
尝试使用操作系统已信任的证书:
uvx --system-certs myai-weather-mcp==0.1.2
这对于证书已存储在系统信任库中的受管网络可能有所帮助。此方法会继续启用证书验证。如果服务启动后一直等待且没有报错,请按 Control+C。要在 Claude Code 中使用相同选项,请按照替换注册步骤,使用以下添加命令:
claude mcp add --scope user weather -- uvx --system-certs myai-weather-mcp==0.1.2
对于 Claude Desktop 的 uvx 设置,将 args 改为
["--system-certs", "myai-weather-mcp==0.1.2"]。重新连接或重启客户端,然后询问天气以检查完整连接。如果所选包版本与本指南固定的版本不同,请使用你选择的版本。
如果 uvx 无法识别该标记,请使用其安装方式更新 uv。如果证书验证仍然失败,请咨询网络管理员并参阅 uv 的证书文档。
请保持验证启用;不要使用 --allow-insecure-host 绕过错误。如果现有设置可以正常运行,则无需更改配置。
帮助我们测试
尝试上面的两个问题,以及一个虚构地点,例如 ZzzxqqNowhere。如果有任何不清楚的地方,请提交 issue,并附上你的操作系统、客户端、包版本、操作步骤和错误消息。分享前请删除密码、身份验证代码和其他隐私信息。
工具
| 工具 | 参数 | 返回内容 |
|---|---|---|
get_weather | location(字符串,必填)——地点名称,例如 "Seattle" 或 "Paris, France" | 当前天气状况、温度(°F)和风速(mph),以文本块形式返回。未知地点名称会作为带有 isError: true 的结果返回。 |
get_hourly_forecast | location(字符串,必填);hours(整数,可选,1–48,默认值为 12) | 逐小时返回温度(°F)、降水概率和天气状况,每小时一行。时间戳为该地点的本地时间。超出范围的 hours 值会被限制在有效范围内。 |
用法
以下响应仅为示例快照,不代表当前天气。
将服务接入客户端后,只需用自然语言提问——模型会选择工具并填写参数:
你: 西雅图现在的天气怎么样?
Claude: (调用
get_weather,参数为location: "Seattle") 西雅图(美国)当前天气:阴天,54.2 °F,风速 1.1 mph。
你: 接下来 6 小时东京会下雨吗?
Claude: (调用
get_hourly_forecast,参数为location: "Tokyo"、hours: 6) 会——每小时都有毛毛雨,降水概率从 76 % 升至 89 %。
不使用客户端进行尝试
安装 uv 后,将整个代码块粘贴到使用 bash 或 zsh 的 macOS/Linux 终端中。必要时会下载固定版本的包,并且可在任意文件夹中运行;无需克隆项目或单独安装包。此 Shell 示例不是 PowerShell 语法。
它会直接向服务发送一组简单的 JSON-RPC 请求与响应:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","clientInfo":{"name":"cli"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_weather","arguments":{"location":"Seattle"}}}' \
'{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_hourly_forecast","arguments":{"location":"Tokyo","hours":6}}}' \
| uvx myai-weather-mcp==0.1.2
tools/call 的响应如下:
{"jsonrpc": "2.0", "id": 2, "result": {"content": [{"type": "text",
"text": "Current weather in Seattle, United States:\n Conditions: overcast\n Temperature: 54.2°F\n Wind: 1.1 mph"}]}}
Hourly forecast for Tokyo, Japan (next 6 hours):
2026-09-04 18:00 73.0°F precip 76% dense drizzle
2026-09-04 19:00 72.5°F precip 76% dense drizzle
2026-09-04 20:00 72.2°F precip 78% dense drizzle
2026-09-04 21:00 71.8°F precip 80% slight rain
2026-09-04 22:00 71.7°F precip 84% dense drizzle
2026-09-04 23:00 71.3°F precip 89% moderate drizzle
未知地点名称会作为常规结果返回,并带有 "isError": true:
{"jsonrpc": "2.0", "id": 4, "result": {"content": [{"type": "text",
"text": "Could not find any location named 'Zzzxqq'."}], "isError": true}}
安装
快速入门已通过 uvx 运行已发布的软件包。以下选项是替代方案;无需全部完成。
本指南中始终使用 myai-weather-mcp 作为软件包和启动命令。
openmeteo-mcp 是同一服务的旧版兼容别名。
使用 uv 运行已发布的版本(推荐):
uvx myai-weather-mcp==0.1.2
使用 pipx 安装持久命令:
pipx install myai-weather-mcp==0.1.2
myai-weather-mcp
或者,在已激活的 Python 虚拟环境中使用 python3 -m pip install myai-weather-mcp==0.1.2 安装。
使用 uv 运行 GitHub 上的源码:
uvx --from git+https://github.com/myAI-2025/weather-mcp myai-weather-mcp
此命令使用仓库的默认分支,该分支可能与已发布的版本不同。
运行本地克隆(需要 Git 和 Python 3.8+):
git clone https://github.com/myAI-2025/weather-mcp
python3 weather-mcp/weather_mcp/server.py
在运行 git clone 的同一文件夹中运行第二条命令,或使用脚本的完整路径。在 Windows 上,如果 Python 启动器的名称是 python 而不是 python3,请使用它。
以上命令都会启动服务并等待 MCP 输入。终端空白是正常现象;配置客户端前,按 Control+C 停止服务。
配置客户端
Claude Code
建议使用 快速入门中的 uvx 设置。
如果你已在那里注册了 weather,则无需再次注册。
如果你选择了持久的 pipx 安装方式,可以改用:
claude mcp add --scope user weather -- myai-weather-mcp
对于本地克隆,请将下方示例路径替换为脚本的实际完整路径:
claude mcp add --scope user weather -- python3 /path/to/weather-mcp/weather_mcp/server.py
替换现有注册项时,请先检查,并按照更新版本中的说明操作。重启 Claude Code,或通过 /mcp 重新连接,然后让它使用 get_weather 或 get_hourly_forecast。
Claude Desktop
先按照快速入门中的说明安装 uv。编辑 claude_desktop_config.json
(macOS:~/Library/Application Support/Claude/,Windows:%APPDATA%\Claude\)。
在 mcpServers 下添加 weather 条目,并保留其中已有的其他服务:
{
"mcpServers": {
"weather": {
"command": "uvx",
"args": ["myai-weather-mcp==0.1.2"]
}
}
}
如果 Desktop 找不到 uvx,请将 "uvx" 替换为通过 command -v uvx(macOS)或 where.exe uvx(Windows)找到的完整路径。在 JSON 中,Windows 路径的反斜杠必须加倍,例如 "C:\\Users\\YourName\\.local\\bin\\uvx.exe";请使用你的实际路径。
如果你改用 pipx 安装软件包,请使用 "command": "myai-weather-mcp"(或其完整路径),并省略 args。
退出并重新打开 Claude Desktop,然后让它使用天气工具。本指南的端到端客户端检查是在 Claude Code 中完成的;Desktop 配置是另一种设置方式。
任何其他 MCP 客户端
配置一个 stdio 服务,命令为 uvx,参数为
myai-weather-mcp==0.1.2。如果已进行持久安装,也可以将命令设为
myai-weather-mcp。客户端会启动进程,并通过其 stdin/stdout 交换 JSON-RPC 2.0 消息。请参阅下方的 工作原理。
开发
git clone https://github.com/myAI-2025/weather-mcp
cd weather-mcp
pip install -e ".[dev]"
python3 test_server.py # one line per check
pytest # same checks, pytest-style
测试套件会对网络函数进行猴子补丁,因此可在离线状态下运行。
工作原理
weather_mcp/server.py 从 stdin 读取以换行符分隔的 JSON-RPC 消息,并将响应写入 stdout:
| 方法 | 行为 |
|---|---|
initialize | 回显客户端的 protocolVersion,声明 tools 能力,并返回 serverInfo。 |
notifications/initialized | 通知——不返回响应。 |
tools/list | 返回 get_weather 和 get_hourly_forecast 工具及其输入架构。 |
tools/call | 调用指定的工具:对地点进行地理编码,从 Open-Meteo 获取天气,并格式化为文本块。查询或网络失败时会返回 isError: true,而不是 JSON-RPC 错误。 |
其他任何方法(带有 id) | 返回 JSON-RPC 错误 -32601,表示找不到该方法。 |
上游调用:先调用 Open-Meteo 地理编码接口(geocoding-api.open-meteo.com),再调用天气预报接口(api.open-meteo.com),参数为 current=temperature_2m,wind_speed_10m,weather_code。
致谢
由 Mona (myAI-2025) 创建并维护, 她负责指导项目并在 Claude Code 中进行测试。
在 Claude 和 Claude Code (Anthropic) 以及 ChatGPT 和 Codex (OpenAI) 的 AI 辅助下, 完成了规划、实现、调试、测试、文档编写、打包和发布。
天气数据由 Open-Meteo 提供。 此处致谢所使用的工具和服务,但不表示其提供方赞助或认可本项目。
许可证
MIT — 参见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。