foehn について
foehn は、MeteoSwiss のオープン気象データを扱う Python API、コマンドラインツール、MCP サーバーです。表形式と格子データの両方に対応し、観測所データを Parquet に変換したり、格子を xarray データセットや Zarr ストアとして開いたりできます。
主な機能
- 01STAC 経由での MeteoSwiss データ取得
- 02観測所データの Parquet 変換
- 03xarray または Zarr での格子データ読込
- 04データセットの差分ダウンロード
- 05オプションの Databricks Delta 取り込み
活用シーン
- 01スイスの観測所データを読み込んで分析
- 02気候格子やレーダー合成データの調査
- 03MCP 対応 LLM への気象データ提供
MCP 対応
MCP サーバーは、MCP 対応クライアントに MeteoSwiss のオープンデータへのライブアクセスを提供します。`foehn mcp` で起動するよう設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MeteoSwiss オープンデータ — Python API、CLI、MCP サーバー · 表形式データはDataFrame/Parquet、グリッドデータはxarray/Zarr
foehnは、MeteoSwiss OGDのすべてのコレクションをSTAC API経由でダウンロードし、Polarsを使ってCSV/TXTの観測所データをParquetに変換します。また、NetCDF気候グリッド、GRIB2予報、ODIMレーダー合成画像などのグリッドコレクションを、xarrayのデータセットまたはZarrストアとして開きます。必要に応じて、すべてのデータを毎日のスケジュールでDatabricks Unity CatalogのDeltaテーブルに取り込むこともできます。また、LLMがスイスの気象データを直接クエリできるように、MCP サーバーも提供しています。
foehnのMCPサーバーとMeteoSwissのオープンデータを利用した、ベルンの日々の天気です。
foehnを選ぶ理由
- 1つのコマンドで20以上のコレクションに対応 — 気象観測所、レーダー、雹マップ、予報、気候シナリオなど
- 表形式とグリッド形式に対応 — CSVの観測所データはPolars DataFrameまたはParquetとして、NetCDF、GRIB2、ODIMレーダーグリッドはxarrayデータセットまたはZarrストアとして扱えます
- LLM向けMCP サーバー — MCP サーバーを使って、お気に入りのLLMにMeteoSwissデータへのリアルタイムアクセスを提供します
- ディスク上のサイズを大幅に削減 — 生のCSVと比べ、Zstandard圧縮を使用した列指向のParquetで容量を削減します
- デフォルトで増分処理 — 前回の実行以降に変更されたファイルのみを再ダウンロードします。データセットと時間スライスごとに
_last_run.jsonで追跡します - ローカルでSparkは不要 — ダウンロードと変換にはPolarsのみを使用します。Deltaへの取り込みにはSparkを任意で使用できます
- Declarative Automation Bundleを同梱 — パイプライン設定なしで、すぐにデプロイできる毎日のジョブと過去データのバックフィルを利用できます
クイックスタート
pip install foehn
foehn download
直近のデータ(1月1日から昨日まで)がダウンロードされ、./data/meteoswiss/にParquet形式で変換されます。
インストール
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形式のレーダー合成画像は、すべてDataFrameではなくxarrayデータセットとして開きます。これらは1つの追加機能で利用できます:pip install "foehn[grids]"。グリッドデータのドキュメントをご覧ください。
MCP server
{
"mcpServers": {
"foehn": {
"command": "foehn",
"args": ["mcp"]
}
}
}
MCP 互換の LLM に、MeteoSwiss データへのリアルタイムアクセスを提供します。MCP サーバーの完全なドキュメントをご覧ください。
ドキュメント
| コレクション | 20 種類以上の MeteoSwiss データセット、カテゴリ、時間スライスの規則 |
| Python API | データの読み込み、メタデータ、ダウンロード、Parquet への変換 |
| グリッドデータ | xarray Dataset および Zarr ストアとしての NetCDF グリッド |
| CLI | すべてのサブコマンド、フラグ、環境変数 |
| 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 サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。