关于 Open-Meteo MCP Server
Open-Meteo MCP Server 是一个 MCP 服务,让 LLM 可以访问免费的 Open-Meteo 天气 API。它覆盖天气预报、历史气候、空气质量、海洋和洪水数据,无需 API 密钥。
主要功能
- 0117 个工具覆盖预报、历史、空气质量与气候数据
- 02支持 ICON、GFS、ECMWF 等具体模型预报
- 03可通过 stdio 或远程 Streamable HTTP 运行
- 04内存响应缓存,按端点设置不同 TTL
- 05可将端点指向自托管的 Open-Meteo 实例
适用场景
- 01查询某地的历史气温与降水记录
- 02比较不同气象模型对未来几天的预报
- 03获取空气质量指数、紫外线指数与花粉水平
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 17 个天气相关工具,并附带服务端指令帮助模型选择合适的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Open-Meteo MCP 服务
为任何大模型提供准确的天气数据:天气预报、追溯至 1940 年的历史数据、空气质量、海洋状况、洪水和气候预测。
这是一个适用于免费 Open-Meteo API 的 Model Context Protocol 服务。将它接入 Claude Desktop、Claude Code 或任何 MCP 客户端,然后用自然语言提问:
What were the temperatures in London during January 2023?
Compare the ICON and GFS ensemble forecasts for Berlin over the next 5 days.
Give me the current European AQI, UV index and pollen levels in Paris.
无需 API 密钥:Open-Meteo 可免费用于非商业用途。
功能
- 17 个工具,涵盖天气预报、ERA5 历史数据、空气质量、海洋、洪水、季节性、集合预报和 CMIP6 气候数据,以及地理编码和海拔数据
- 特定模型的天气预报,数据来自 DWD ICON、NOAA GFS、Météo-France、ECMWF、JMA、MET Norway 和 Environment Canada GEM
- 专为大模型打造:严格的输入架构、告知模型各工具适用问题的服务说明,以及上限为 25,000 个字符的精简 JSON 响应
- 两种传输方式:供本地客户端使用的 stdio,以及适用于远程部署的无状态 Streamable HTTP,并支持 API 密钥身份验证、速率限制和来源检查
- 内存响应缓存,为每个端点设置 TTL,避免重复请求再次访问 Open-Meteo
- 便于自托管:每个 Open-Meteo 端点都可以指向你自己的实例
快速开始
你需要 Node.js 22 或更高版本。无需预先安装任何内容:首次运行时,npx 会获取此服务。
Claude Desktop
将服务添加到你的 claude_desktop_config.json:
{
"mcpServers": {
"open-meteo": {
"command": "npx",
"args": ["-y", "-p", "open-meteo-mcp-server", "open-meteo-mcp-server"]
}
}
}
Claude Code
claude mcp add open-meteo -- npx -y -p open-meteo-mcp-server open-meteo-mcp-server
其他 MCP 客户端
任何可以启动 stdio 服务的客户端都可以使用相同的命令:npx -y -p open-meteo-mcp-server open-meteo-mcp-server。你也可以通过 npm install -g open-meteo-mcp-server 全局安装,然后运行 open-meteo-mcp-server。
提示
每个数据工具都需要坐标。使用地点名称提问时,模型会先调用
geocoding来解析地点。
工具
| 类别 | 工具 | 可以回答的问题 |
|---|---|---|
| 核心 | weather_forecast | 最多 16 天的天气预报,并为所在位置选择最佳模型。通过 past_days 查询近期过去天气(最多 92 天) |
weather_archive | 1940 年至昨天的历史天气(ERA5 再分析) | |
air_quality | PM2.5、PM10、臭氧、NO₂、花粉、欧洲和美国 AQI、UV 指数 | |
marine_weather | 浪高、浪周期和方向、涌浪、海表温度 | |
geocoding | 将地名或邮政编码转换为坐标 | |
elevation | 坐标对应的地形高度 | |
| 模型 | dwd_icon_forecast | DWD ICON(德国,在欧洲提供高分辨率预报) |
gfs_forecast | NOAA GFS(全球,在北美提供高分辨率预报) | |
meteofrance_forecast | Météo-France AROME 和 ARPEGE | |
ecmwf_forecast | ECMWF IFS 和 AIFS | |
jma_forecast | 日本气象厅 | |
metno_forecast | MET Norway(北欧国家) | |
gem_forecast | 加拿大环境部 GEM | |
| 高级 | ensemble_forecast | 集合成员之间的预报不确定性。必须设置 models |
seasonal_forecast | 未来几周至约 7 个月的展望 | |
climate_projection | CMIP6 气候预测,涵盖 1950 年至 2050 年 | |
flood_forecast | GloFAS 河流流量 |
weather_forecast 是默认选择。特定模型的工具适用于用户指定某个模型,或希望通过每个模型各调用一次来比较模型的情况。
响应
- 除非设置
timezone,否则时间均为 GMT。timezone: "auto"使用所在位置的当地时间。 - 序列中的
null表示模型在该时间没有数值,而不是零。 - 响应超过 25,000 个字符时,会按相同比例缩短其
hourly/daily/minutely_15数组,以保持各序列对齐,并附带truncated: true和truncation_message。缩小日期范围或变量范围即可获取完整数据。
完整的变量和参数列表见各工具的输入架构及 Open-Meteo 文档。
远程部署
设置 TRANSPORT=http,即可通过 /mcp 上的 Streamable HTTP 提供 MCP 服务,而不是使用 stdio:
TRANSPORT=http HOST=0.0.0.0 PORT=3000 API_KEY=your-secret-key npx open-meteo-mcp-server
随后,客户端需在每次请求中发送密钥,格式为 Authorization: Bearer <key> 或 X-API-Key: <key>。容器探针可在不提供密钥的情况下请求 GET /health,并得到 {"status":"ok"}。
此传输方式为无状态:每个 POST /mcp 请求都会单独处理,不会颁发会话 ID,且 GET / DELETE /mcp 会返回 405。工具不会在调用之间保留状态,因此客户端不会丢失任何内容。
重要
服务默认绑定到
127.0.0.1,因此只能从本机访问。设置HOST=0.0.0.0以接受远程连接,并且每次都要设置API_KEY:否则服务将以开放模式运行。
Docker
预构建镜像已发布到 GitHub Container Registry。镜像已绑定到 0.0.0.0:
docker run -d --name open-meteo-mcp -p 3000:3000 \
-e API_KEY=your-secret-key \
ghcr.io/cmer81/open-meteo-mcp:latest
标签与 npm 版本一致,但不带 v 前缀:latest、2.5.1、2.5、2。
仓库中还包含 docker-compose.yml(使用预构建镜像)和 docker-compose.dev.yml(从源代码构建)。将 .env.example 复制为 .env 以进行配置。
claude.ai 流量
每位 claude.ai 用户都会从 Anthropic 的出站 IP 段 160.79.104.0/21 访问远程服务。该网段使用独立的速率限制池(RATE_LIMIT_ANTHROPIC_RPM),这样所有用户就不会共用一个按 IP 计算的额度。在反向代理后运行时,将代理列入 TRUSTED_PROXIES,以便获取真实的客户端 IP。
配置
所有变量均为可选。
服务
| 变量 | 默认值 | 描述 |
|---|---|---|
TRANSPORT | stdio | 使用 http 表示 Streamable HTTP |
PORT | 3000 | HTTP 端口 |
HOST | 127.0.0.1 | 绑定的接口。0.0.0.0 接受远程连接 |
OPEN_METEO_CACHE_MAX_BYTES | 20000000 | 响应缓存大小,以序列化 JSON 的字节数计。0 表示禁用缓存 |
缓存会将预报和集合预报保留 15 分钟,将空气质量和海洋数据保留 30 分钟,将洪水数据保留 1 小时,将季节性数据保留 6 小时,将历史和气候数据保留 24 小时,将地理编码数据保留 7 天,将海拔数据保留 30 天。由于 Open-Meteo 仍在补充数据,结束时间在最近 5 天内的历史数据范围仅保留 1 小时。失败的请求永远不会被缓存。
说明
缓存大小按序列化 JSON 计算,但解析后的对象在内存中会占用约 1.2 到 2.6 倍的空间。默认大小下,缓存占满时会使用约 50 MB 的堆内存。
HTTP 安全
| 变量 | 默认值 | 描述 |
|---|---|---|
API_KEY | 未设置(开放访问) | 每个 /mcp 请求都必须提供的密钥 |
RATE_LIMIT_RPM | 60 | 每个客户端 IP 每分钟的请求数。IPv6 客户端按 /56 网段分组 |
RATE_LIMIT_ANTHROPIC_RPM | 600 | 所有 claude.ai 流量共用的每分钟请求数 |
TRUSTED_PROXIES | 未设置 | 以逗号分隔的 IP 或 CIDR,信任其 X-Forwarded-For |
ALLOWED_ORIGINS | 空 | 以逗号分隔的允许访问的浏览器来源。任何带有未列出 Origin 标头的请求都会收到 403(DNS 重绑定保护)。不带该标头的请求不受影响 |
自定义 Open-Meteo 实例
每个端点都可以重定向,例如指向可自托管的 Open-Meteo:
| 变量 | 默认值 |
|---|---|
OPEN_METEO_API_URL | https://api.open-meteo.com |
OPEN_METEO_ARCHIVE_API_URL | https://archive-api.open-meteo.com |
OPEN_METEO_AIR_QUALITY_API_URL | https://air-quality-api.open-meteo.com |
OPEN_METEO_MARINE_API_URL | https://marine-api.open-meteo.com |
OPEN_METEO_SEASONAL_API_URL | https://seasonal-api.open-meteo.com |
OPEN_METEO_ENSEMBLE_API_URL | https://ensemble-api.open-meteo.com |
OPEN_METEO_GEOCODING_API_URL | https://geocoding-api.open-meteo.com |
OPEN_METEO_FLOOD_API_URL | https://flood-api.open-meteo.com |
OPEN_METEO_CLIMATE_API_URL | https://climate-api.open-meteo.com |
在 Claude Desktop 中,通过服务条目的 env 键传入这些变量。
技能
skills/ 目录包含两个 SKILL.md 指南,帮助助手选择合适的工具和参数:
| 技能 | 适用场景 |
|---|---|
open-meteo | 日常天气:预报、历史数据、空气质量、海洋、海拔 |
open-meteo-advanced | 特定模型、集合预报的不确定性、季节展望、气候预测 |
对于 Claude Code,将它们复制到 ~/.claude/skills/:
cp -r skills/open-meteo skills/open-meteo-advanced ~/.claude/skills/
对于 Claude Desktop,将相关的 SKILL.md 上传到对话中。
开发
git clone https://github.com/cmer81/open-meteo-mcp.git
cd open-meteo-mcp
npm install
npm run build
| 命令 | 描述 |
|---|---|
npm run dev / npm run dev:http | 从源代码运行并自动重新加载(stdio / HTTP) |
npm test | 单元测试(模拟网络) |
npm run typecheck / npm run lint | 类型检查和 Biome lint 检查 |
npm run smoke | 通过真实 MCP 客户端调用实时 API 上的全部 17 个工具。需要先完成构建 |
npm run eval | 大模型可用性基准测试,见下文 |
若要让 Claude Desktop 使用本地构建版本,请使用 "command": "node" 和 "args": ["/path/to/open-meteo-mcp/dist/index.js"]。
评估
evals/evaluation.xml 用于检查仅使用此 MCP 服务工具的大模型能否回答现实问题。这 14 个问题依赖稳定的数据(ERA5 档案、CMIP6 预测、地理编码、海拔),因此预期答案不会变化。
pip install -r evals/scripts/requirements.txt
export ANTHROPIC_API_KEY=... # or put it in .env
npm run build && npm run eval
npm run eval -- --no-server-instructions # baseline without the server instructions
警告
每个问题的评估都会调用真实的 Anthropic API,并消耗额度。这是手动检查,不属于 CI。
欢迎贡献:请参阅 CONTRIBUTING.md。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。