@ cyanheads/ open- meteo- mcp- server (中文(简体) )
地理编码地点、获取全球天气预报、历史气候、海洋条件、空气质量和地形高地。 (原始内容存档于2012-10-12). STIO or Streamable HTTP.
概览
来自开放气象的全球天气:预报,历史回溯到1940年,海洋条件,空气质量,概率共通,河流排出,气候预测. 查查任何地点的名字, 抽取小时和每日变量, 运行 SQL 对大结果。 不需要 API 密钥 .
工具
| 工具 | 说明 |
|---|---|
openmeteo_search_locations | 确定一个地名,以与国家、区域、时区和人口进行排序坐标 |
openmeteo_get_forecast | 目前的情况和每天每小时预报16天,过去最多92天,与最佳匹配者或选定的模特并肩进行 |
openmeteo_get_historical | 1940年至今,从重新分析档案到现在的每小时/每天的历史 |
openmeteo_get_marine | 波浪、膨胀和海平面状况:以公制或帝国单位计,目前、最多8个预报日或档案范围 |
openmeteo_get_air_quality | 模拟CAMS污染物、花粉和AQI:当前,最多7个预测日,或存档范围 |
openmeteo_get_elevation | 哥白尼DEM地势高地:最多1 000对坐标对,每对呼叫进行第一次抽样,其余报告重新提交 |
openmeteo_get_ensemble | 按成员分列的超额和不确定性预测(最多64个成员,最多35天) |
openmeteo_get_flood | GloFAS河流排出量:预测或日期范围为~6个月(接受自1984-01-01;排出量从1997-01-01起),来自无缝或所选择的v4型号 |
openmeteo_get_climate | 1950-2050年经偏差校正的每日CMIP6预测,最多7个模型 |
openmeteo_dataframe_describe | 列出在 DataCanvas 上设置的表格和列 |
openmeteo_dataframe_query | 运行只读的 SQL SELECT 相对于已安排的表格 |
openmeteo_dataframe_drop | 从 DataCanvas (opt- in) 中删除一个已分级的表格或视图 |
服务器还发布代理技能, open-meteo-guide (单位:千美元)skill://open-meteo-guide/SKILL.md源代码 skills/open-meteo-guide/:哪一个工具可以回答哪个问题,加上超常概率的门,霜,比较一个正常的,气候变化,冲浪斑点,河细胞,以及AQI计时.
能力参考
openmeteo_search_locations 工具
- 一个空地
name("巴黎",不是"法国巴黎"),可选country(ISO 3166-1 alpha-2:两个字母,无论什么情况,从来不是国名)和language(默认)en(三);count1 - 10, 默认 5 - 每个结果都带有坐标,一个IANA
timezone, (中文(简体) ),country编号 :country_code, (中文(简体) ),admin1编号 :admin2, (中文(简体) ),population,以及feature_code; 无匹配失败为no_results - A 类
notice旗上标有无效或分100 000人口的顶级相配,这往往意味着一个历史外来地名("Bangalore","Calcutta") - 缺少下面的本地标记查询
en(a) 用其文字所指的语文重审一次;effective_language重试成功时命名它( r) :上海→zh)),结果回到本地化
openmeteo_get_forecast 工具
- 至少其中一个
current_variables, (中文(简体) ),hourly_variables,或daily_variables(每个最多50个),每个也作为一个逗号连接字符串接受,并在Open-Meteo自己的密钥下接受current, (中文(简体) ),hourly, (中文(简体) ),daily· ;forecast_days1-16(违约7),past_days0-92( 默认 0) cell_selection(单位:千美元)land, (中文(简体) ),sea, (中文(简体) ),nearest)取出答题的网格:省略出题,Open-Meteo从陆地取出答题,所以一分出境外读取岸上条件. 设定sea在水上加一点(风能航行,冲浪,或离岸风能航行),在地上加一点,即是默认的。 回应latitude编号 :longitude将响应的单元格命名- 时间戳
hourly编号 :daily记录hourly_units编号 :daily_units· ;current_variables添加acurrent来自15分钟数据的对象(interval900个)加current_units - 选择
models读取 Open-Meteobest_match· ;models比较确定型号(例如:.ncep_gfs_seamless, (中文(简体) ),ecmwf_ifs025, (中文(简体) ),dwd_icon_seamless; 更古老的拼写像gfs_seamless”). 每个小时和每天的栏目都有2+型号带有型号后缀models反应一致.current_variables最多只使用一个模型(current_multi_model(中文(简体) ) - 一个当时没有数据的区域模型从一个多模型反应中被放弃:
notice命名它,或者,当一个模型留下了无后缀的列时,说这些值不能归为模型;当每个被请求的模型都错过时,调用失败为:coverage_gap - 偏爱
past_days结束openmeteo_get_historical在上周, 存档的 ERA5 组件滞后
openmeteo_get_historical 工具
start_date财务报告和审定财务报表end_date所需(YYYY-MM-DD,从1940-01-01起),加上其中至少一个hourly_variables编号 :daily_variables,在预测工具上命名(列表或一个逗号连接字符串,也列在下方)hourly编号 :daily(中文(简体) )cell_selection(单位:千美元)land, (中文(简体) ),sea, (中文(简体) ),nearest与预测工具相同:省略了陆地细胞的答案,所以离岸点读取岸上的条件;sea移动到水上- 选择
models读取最佳匹配(IFS HRES + ERA5 + ERA5- Land,来源按日期不同);最多8个models针入出处。 ERA5家族在一周后运行,ecmwf_ifs没有拖延,和cerra仅涵盖欧洲 - 输出回声
models返回时date_range; 2+ 型号,每列带有模型名后缀. 此时没有数据的模型( :cerra从多模式反应中放弃notice命名它,或当一个模型留下了无后缀的列时(era5,cerra),说这些值不能归结于模型
openmeteo_get_marine 工具
- 每个呼叫一个窗口 :
forecast_days1-8 (上游默认7) 与past_days0-92年,或astart_date编号 :end_date存档范围可追溯到至少 2022 年 。 混合失败为forecast_window_conflict,作为date_range_incomplete,且上游范围以外的日期接受为date_out_of_range - 至少其中一个
current_variables, (中文(简体) ),hourly_variables,或daily_variables(波高、波长、波高、波高、波高、海平面温度); 被保护的水返回到近零波, 内地返回的点数为零(在notice),海岸附近的一个陆地点从附近的一个有真实值的海细胞中解答而无通知(请检查答复是否)latitude编号 :longitude那是你所说的水ocean_current_velocity已经没有海洋了 current_variables使用小时名称并添加一个current来自15分钟数据的对象(interval900个)加current_units,与任意一个窗口并列;每日名称失败为variable_wrong_cadencelength_unit(单位:千美元)metric编号 :imperial确定每个高度,sea_level_height_msl包括,以米或英尺计;wind_speed_unit(单位:千美元)kmh, (中文(简体) ),mph, (中文(简体) ),ms, (中文(简体) ),kn(组数)ocean_current_velocity· ;temperature_unit(单位:千美元)celsius编号 :fahrenheit(组数)sea_surface_temperature。Open-Meteo转换值*_units标记它们的地图( e)mph读取mp/h(中文(简体) )
openmeteo_get_air_quality 工具
- 每个呼叫一个窗口 :
forecast_days1-7 (上游默认 5) 与past_days0-92年,或astart_date编号 :end_date存档范围为2022年8月(us_aqi一天后开始)。 一样forecast_window_conflict, (中文(简体) ),date_range_incomplete,以及date_out_of_range作为海洋工具的拒绝 - 至少其中一个
current_variables联合国current对象,interval3600号或hourly_variables:PM2.5,PM10,NO2,SO2,O3,CO,粉尘,花粉,欧美AQI. Pollen只为欧洲做模特 在花粉季节; 在其他地方它回来无效notice说吧 data_source: "CAMS"将每个响应标记为建模网格数据,而不是站点测量
openmeteo_get_elevation 工具
- 平行
latitudes[]编号 :longitudes[]最多为 1 000对的阵列; 长度不均, 以coordinate_count_mismatch,在全数组上进行比较 - 在一项上游请求中取样前100对(Elevation API的每个请求限制);
unprocessed_count说还有多少人next_offset何处恢复——重新提交latitudes.slice(next_offset)财务报告和审定财务报表longitudes.slice(next_offset)直至next_offset实值null. 调用100个或更少的返回0编号 :null。每个样本的一对都算作一个呼叫 与 Open-Meteo 的每个IP 限制(每分钟600个) , 所以一分钟内的第七个100平方块会回来rate_limited elevations[]按输入顺序,每个{ latitude, longitude, elevation_m }哥白尼德国马克(~90米);elevation_m实值null在DEM没有价值的情况下(纬度90),其余的呼叫没有成功
openmeteo_get_ensemble 工具
- 至少其中一个
hourly_variables编号 :daily_variables· ;forecast_days1 - 35 (违约7),past_days0-92. 大多数模型在16天内结束(ncep_gefs05运行到第34天左右。过去,栏是无效的notice说数据结束之处 models使用一个综艺名称(例如:.ecmwf_ifs025_ensemble51名成员;gem_global_ensemble, 21); 省略或空白选择ecmwf_ifs025_ensemble,在modelcell_selection(单位:千美元)land, (中文(简体) ),sea, (中文(简体) ),nearest)在预测工具上发挥作用:省略了,一个土地单元格答案;答复latitude编号 :longitude将响应的单元格命名- 每个变量返回每个成员的列(
temperature_2m_member01.)最多64名成员;member_count排除控制运行。 在其覆盖范围以外被询问的区域模型作为一个不可重复的输入错误失败;切换到全球模型
openmeteo_get_flood 工具
daily_variables需要(最多20个),全部为立方米/秒:river_discharge加统计river_discharge_mean编号 :_median编号 :_min编号 :_max编号 :_p25编号 :_p75,在预测运行的日子里搭载综艺节目并重复river_discharge重新分析天数- 每个呼叫一个模式:
forecast_days1–210(目前的GloFAS运行时间约为6个月;后天无效),或 astart_date编号 :end_date1984-01-01年接受范围,但从1997-01-01开始排放,更早的日子是无效的。 混合失败为forecast_days_conflict,作为date_range_incomplete,上游范围以外的日期接受为date_out_of_range - 选择
models读取seamless_v4数字 :consolidated_v42023-08-05年之前的重新分析,forecast_v4从那时开始运行.models: ["consolidated_v4"]阅读1997-01-01至2025-05-31年的再分析(该期间以外的数值,以及forecast_days(三);forecast_v42023-06-01开通. 输出回声models; 使用 2+ 型号,每列带有模型名后缀notice名称无跨度 - 排出物来自离坐标最近的GloFAS 0.05°的网格细胞,不可靠地来自你所指的河流上的细胞;当值远低于河道所携带的时,将坐标跨出航道并进行比较. GloFAS 覆盖范围以外的 Null
openmeteo_get_climate 工具
start_date编号 :end_date1950-01-01至2050-12-31以及daily_variables需要( API 仅为每日); 最多 7 CMIP6models,比如说.CMCC_CM2_VHR4, (中文(简体) ),MRI_AGCM3_2_S- 有了2+模型,每个变量被后缀为模型名;一个单一或省略的模型返回平原名. 模型不携带的变数是无效的
cell_selection(单位:千美元)land, (中文(简体) ),sea, (中文(简体) ),nearest与预测工具相同,但反应除外latitude编号 :longitude当值随它而变化时,它们可以保持不变,所以它们不会显示哪个单元格已回答
openmeteo_dataframe_describe 工具
- 拿着
canvas_id返回一个溢出天气工具; 列出每个表格的name, (中文(简体) ),kind, (中文(简体) ),row_count,加上画布expires_at - 失败作为
canvas_not_enabled当帆布关闭,或canvas_not_found当身份不明或超过其24小时滑行 TTL 时
openmeteo_dataframe_query 工具
canvas_id加上只读SELECT对抗舞台table_name· ;rows握住第一个limit行( 默认 25, 每个整行, 数值从不剪切) 。 一个更大的limit返回最多为一万行(或CANVAS_DEFAULT_ROW_LIMIT当下)和anotice这么说的.row_count准确的总数和truncated实值true当它超过rows; 页使用OFFSET <rows.length>下的一个ORDER BY- 页面的大小取决于
limit和所选的列,所以从一个成员后缀的组合表格中选择问题需要的列,而不是SELECT *。一个回复最多载有8 000 000个行数据的字符(所写为JSON的行,这个字符需要按其逃出长度计算);一个较大的页面被拒绝,因为result_too_large,永远不要剪接, 并且留言说有多少领先的行适合 - 如果计数失败或运行过5秒,行仍然返回,
row_count是一个下限count_error说明原因(例如:.count_timeout(中文(简体) ) - 失败作为
canvas_not_enabled, (中文(简体) ),canvas_not_found, (中文(简体) ),missing_table, (中文(简体) ),system_catalog_access(系统目录被封锁,DuckDB元数据视图的名称也一样)pg_class用作列别名、CTE名称或表格别名),或result_too_large。从查询引擎中转发的错误消息被切入到2000个字符,保留其代码和reason
openmeteo_dataframe_drop 工具
- 默认关闭: 列为已禁用直至
OPENMETEO_DATAFRAME_DROP_ENABLED=true canvas_id加上准确table_name从openmeteo_dataframe_describe; 删除该表格或视图并返回dropped编辑remaining_tables。未显示返回的名称dropped: false,所以重复下降是安全的- 失败作为
canvas_not_enabled, (中文(简体) ),canvas_not_found,或invalid_table_name(不是普通的 SQL 标识符,或保留的关键字)
特征
建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.
Open-Meteo 专用设备 :
- 没有非商业用途的 API 密钥; 商业用途需要 Open-Meteo 付费的 API 级
- 专栏API 响应重塑为每时标记录
*_units地图,在不同的预测和存档中使用相同的可变名称 - Data Canvas 7个气象工具的外溢效应:
CANVAS_PROVIDER_TYPE=duckdb(默认)超预算结果作为DuckDB表(答复载有canvas_id, (中文(简体) ),table_name, (中文(简体) ),truncated: true; 与none它返回一个有边框的预览并truncated: true models在预测,历史,综艺,气候,和洪水工具上不是允许列表,所以一个模型Open-Meteo在没有服务器更新的情况下添加了后期的作品
方便代理输出 :
- 第一工作流程:
openmeteo_search_locations返回 IANA 数据timezone与坐标,准备任何气象工具timezone输入( 默认)auto(中文(简体) ) - 可变列表和模型列表取一个数组或一个逗号连接字符串(
"temperature_2m,precipitation"; 计 数*_variables字段还回答 Open-Meteo 自己的current, (中文(简体) ),hourly,以及daily工具有字段的键 - 输入的拒绝 :
variable_wrong_cadence(名称正确字段),request_too_large(将输入命名为窄),coverage_gap(数据集网格或模型域外的坐标),date_out_of_range(范围外的日期、海洋、空气质量、气候或洪水终点接受),以及rate_limited; 仅Too many concurrent requests先重审 超过三次尝试的停电失败upstream_unavailable,或upstream_timeout上次尝试超时时 - 请求 URL 从未出现在错误数据或客户端可见日志中
- 一个
notice对于数据本身无法显示的每个响应:无服务的可变名称,在数据集覆盖范围外的无效,以及溢出行去的地方
开始
连接到主机实例, 没有安装 :
claude mcp add --transport http open-meteo-mcp-server https://open-meteo.caseyjhand.com/mcp
或者在当地运行它:
claude mcp add open-meteo-mcp-server -- npx -y @cyanheads/open-meteo-mcp-server
对于其他客户端,请将此添加到 MCP 配置文件中 :
{
"mcpServers": {
"open-meteo-mcp-server": {
"command": "npx",
"args": ["-y", "@cyanheads/open-meteo-mcp-server"]
}
}
}
非商业用途不需要 API 密钥; 商业用途需要 Open-Meteo 付费 API 级。对于 Docker 或源构建,参见 运行服务器。 。 。 .
配置
每个变量都是可选的.
| 变量 | 说明 | 默认 |
|---|---|---|
OPEN_METEO_API_BASE_URL | 预测和高地API基础URL. | https://api.open-meteo.com |
OPEN_METEO_ARCHIVE_BASE_URL | 历史档案 API Base URL. | https://archive-api.open-meteo.com |
OPEN_METEO_MARINE_BASE_URL | 海洋API基地URL. | https://marine-api.open-meteo.com |
OPEN_METEO_AIR_QUALITY_BASE_URL | CAMS空气质量API基础URL. | https://air-quality-api.open-meteo.com |
OPEN_METEO_GEOCODING_BASE_URL | 地理编码 API 基础 URL. | https://geocoding-api.open-meteo.com |
OPEN_METEO_ENSEMBLE_BASE_URL | 集成 API 基础 URL. | https://ensemble-api.open-meteo.com |
OPEN_METEO_FLOOD_BASE_URL | GloFAS洪水API基础URL. | https://flood-api.open-meteo.com |
OPEN_METEO_CLIMATE_BASE_URL | CMIP6气候API基础URL. | https://climate-api.open-meteo.com |
CANVAS_PROVIDER_TYPE | duckdb 阶段性超预算天气结果在DataCanvas上,并启用了数据框架工具; none 返回边框预览. | duckdb |
OPENMETEO_DATAFRAME_DROP_ENABLED | true 制造 openmeteo_dataframe_drop 可调用;否则列为已禁用. | false |
OPENMETEO_CLAMP_LIMITS | true 降低一个 openmeteo_dataframe_query limit (一) 超过按呼号计的上限,并附有通知; false 广告封顶为最大值并拒绝更大的值. | true |
MCP_TRANSPORT_TYPE | 运输: stdio 或者说 http。 。 。 . | stdio |
MCP_HTTP_PORT | HTTP 服务器端口. | 3010 |
MCP_SESSION_MODE | HTTP 会话模式 : stateless, (中文(简体) ), stateful,或 auto。 。 。 . | stateless |
MCP_AUTH_MODE | 认证 : none, (中文(简体) ), jwt,或 oauth。 。 。 . | none |
MCP_LOG_LEVEL | 日志级别 (debug, (中文(简体) ), info, (中文(简体) ), notice, (中文(简体) ), warning, (中文(简体) ), error) (中文(简体) ). | info |
LOGS_DIR | 日志文件目录(只有Node.js). | <project-root>/logs |
STORAGE_PROVIDER_TYPE | 存储后端 : in-memory, (中文(简体) ), filesystem, (中文(简体) ), supabase, (中文(简体) ), cloudflare-kv/r2/d1。 。 。 . | in-memory |
OTEL_ENABLED | 启用 打开几何。 。 。 . | false |
见 .env.example 用于完整可选覆盖列表.
运行服务器
地方发展
要求数 Bun v 1.4.4 (单位:千美元) 或更高(或Node.js v24+).
-
克隆并安装 :
git clone https://github.com/cyanheads/open-meteo-mcp-server.git cd open-meteo-mcp-server && bun install -
构建和运行 :
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
运行检查和测试 :
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
夹克
docker run --rm -p 3010:3010 ghcr.io/cyanheads/open-meteo-mcp-server:latest
图像默认为 HTTP 传输、 无国籍会话模式和日志到 /var/log/open-meteo-mcp-server运行到一个 MCP 客户端的 stdio,使用 "command": "docker" 与 "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/open-meteo-mcp-server:latest"]为了在当地建设, docker build -t open-meteo-mcp-server .; OpenTeleometry 端点依赖性默认安装——用 --build-arg OTEL_ENABLED=false 以略去它们.
项目结构
| 目录 | 目的 |
|---|---|
src/index.ts | createApp() 入口——注册工具,初始化Open-Meteo服务和DataCanvas. |
src/config | 服务器特定环境变量与Zod解析并验证. |
src/mcp-server/tools/definitions | 工具定义*.tool.ts),每个工具一个文件. |
src/mcp-server/tools | 共享工具助手——模型目录,cadence验证,专栏重塑,外溢,响应通知. |
src/services/open-meteo | Open-Meteo APIs的HTTP客户端——重试,错误分类,覆盖-gap拒绝. |
src/services/canvas-accessor.ts | DataCanvas 与可溢出工具共享访问器. |
skills/ | 通过 MCP 和 npm 软件包, Docker 图像,以及 .mcpb 捆绑( e)open-meteo-guide) (中文(简体) ). |
tests/ | 单位,整合,模糊,和烟雾测试. |
发展指南
见 CLAUDE.md 发展准则和建筑规则。 简本:
- 搬运工投掷,框架渔获量——否
try/catch在工具逻辑中 - 使用
ctx.log请求范围伐木,ctx.state租户范围储存 - 登记册中的新工具
tools[]阵列src/index.ts - 环绕外部 API 调用: 验证 生 → 规范到域类型 → 返回输出计划; 永远不要编织缺失的字段
归属
气象数据来源 Open-Meteo.com (中文(简体) ),许可证 CC BY 4.0 (英语)。 。 。 .
捐款
问题值得欢迎。 提交前进行检查和测试:
bun run devcheck
bun run test
许可证
阿帕奇-2.0 — 见 自由主义 详细情况.