关于 foehn
foehn 是用于处理 MeteoSwiss 开放气象数据的 Python API、命令行工具和 MCP 服务。它支持表格与网格数据,可将站点数据转为 Parquet,并将网格数据作为 xarray 数据集或 Zarr 存储打开。
主要功能
- 01通过 STAC 下载 MeteoSwiss 数据集
- 02将站点数据转换为 Parquet
- 03以 xarray 或 Zarr 打开网格
- 04增量下载数据集
- 05可选导入 Databricks Delta
适用场景
- 01加载瑞士站点观测数据进行分析
- 02探索气候网格和雷达合成数据
- 03向兼容 MCP 的 LLM 提供气象数据
MCP 相关
MCP 服务为兼容 MCP 的客户端提供 MeteoSwiss 开放数据的实时访问,可通过 `foehn mcp` 配置运行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MeteoSwiss 开放数据 — Python API、CLI 和 MCP 服务 · 表格数据以 DataFrames/Parquet 表示,网格数据以 xarray/Zarr 表示
foehn 通过 STAC API 下载 MeteoSwiss OGD 的所有数据集,使用 Polars 将 CSV/TXT 站点数据转换为 Parquet,并将网格数据集(NetCDF 气候网格、GRIB2 预报和 ODIM 雷达合成数据)作为 xarray Dataset 或 Zarr 存储打开。它还可选择按日计划将所有数据导入 Databricks Unity Catalog Delta 表,并提供 MCP 服务,让大模型能够直接查询瑞士天气数据。
由 foehn 的 MCP 服务和 MeteoSwiss 开放数据提供支持的伯尔尼每日天气。
为什么选择 foehn?
- 一条命令处理 20 多个数据集 — 气象站、雷达、冰雹图、预报、气候情景等
- 表格数据和网格数据 — CSV 站点数据可作为 Polars DataFrame 或 Parquet;NetCDF、GRIB2 和 ODIM 雷达网格可作为 xarray Dataset 或 Zarr 存储
- 面向大模型的 MCP 服务 — 通过 MCP 服务让你喜爱的大模型实时访问 MeteoSwiss 数据
- 磁盘占用显著更小 — 与原始 CSV 相比,列式 Parquet 使用 Zstandard 压缩
- 默认增量处理 — 仅重新下载自上次运行以来发生变化的文件,并在
_last_run.json中按数据集和时间片记录 - 本地无需 Spark — 下载和转换仅使用 Polars;导入 Delta 时可选用 Spark
- 附带声明式自动化 Bundle — 可直接部署的每日作业和历史数据回填,无需配置流水线
快速开始
pip install foehn
foehn download
系统会下载从 1 月 1 日到昨天的最新数据,并将其转换为 Parquet,保存到 ./data/meteoswiss/。
安装
从 PyPI 安装:
pip install foehn
从源代码安装:
git clone https://github.com/kayhendriksen/foehn
cd foehn
pip install -e .
安装可选依赖:
pip install "foehn[databricks]" # PySpark + Delta, and Polars' build for CPUs without AVX2
pip install "foehn[mcp]" # MCP server
pip install "foehn[grids]" # xarray + Zarr for all gridded data (NetCDF, GRIB2, radar)
需要 Python 3.11 或更高版本。
Python API
import foehn
df = foehn.load("smn", station="BER", frequency="d")
直接将数据加载到 Polars DataFrame 中、探索元数据、下载到磁盘并转换为 Parquet,所有操作均可通过 Python 完成。请参阅完整的 Python API 文档。
CLI
foehn download smn pollen
foehn load smn --station BER --frequency d
CLI 与 Python API 相对应,提供用于下载、转换、加载和检查元数据的子命令。请参阅完整的 CLI 文档。
网格数据
ds = foehn.open_dataset("surface_derived_grid", match="rhiresd") # NetCDF climate grid
ds = foehn.open_dataset("forecast_icon_ch1", match="YYYYMMDDHHMM-0-t_2m-ctrl") # one GRIB2 field
ds = foehn.open_dataset("radar_precip", match="cpcYYDDDHHMM") # one radar composite
# Forecast and radar files roll off after a day / two weeks: fill in a recent time.
# A match that finds nothing lists the times the collection holds now.
foehn.to_zarr("surface_derived_grid", match="rhiresd") # Zarr store
NetCDF 气候网格/气候常年值/情景、GRIB2 预报(ICON-CH1/CH2、KENDA)和 HDF5/ODIM 雷达合成数据均可作为 xarray Dataset 打开,而非 DataFrame。只需安装一个额外依赖即可使用:pip install "foehn[grids]"。请参阅网格数据文档。
MCP 服务
{
"mcpServers": {
"foehn": {
"command": "foehn",
"args": ["mcp"]
}
}
}
让任何兼容 MCP 的大模型实时访问 MeteoSwiss 数据。请参阅完整的 MCP 服务文档。
文档
| 数据集 | 20 多个 MeteoSwiss 数据集、类别和时间切片约定 |
| Python API | 数据加载、元数据、下载和 Parquet 转换 |
| 网格数据 | 作为 xarray Datasets 和 Zarr 存储读取 NetCDF 网格 |
| 命令行界面 | 所有子命令、标志和环境变量 |
| MCP 服务 | 设置、配置和可用工具 |
| Databricks Pipeline | 声明式 Automation Bundle 部署 |
数据源
| STAC API | https://data.geo.admin.ch/api/stac/v1 |
| 文档 | https://opendatadocs.meteoswiss.ch |
| MeteoSwiss OGD | https://github.com/MeteoSwiss/opendata |
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。