foehn

io.github.kayhendriksenPublished by GitHub account kayhendriksenv0.5.0Updated Oct 25, 2026

Access Swiss meteorological open data from MeteoSwiss, powered by foehn

VerifiedSTDIODesktop onlyLocation & LifestyleData & Analytics

Overview

AI-generated overview

MCP server that gives an assistant live access to Swiss MeteoSwiss open weather data, including station, radar, forecast and climate collections.

What you can do
  • Query MeteoSwiss open data collections through the bundled MCP server
  • Read station measurements as tabular data and gridded climate, forecast and radar datasets
  • Work across 20+ collections covering weather stations, radar, hail maps, forecasts and climate scenarios
  • Rely on the underlying library to download, convert to Parquet and open grids as xarray or Zarr
When to use it
Useful when you want an assistant to answer questions about Swiss weather, climate or radar data from MeteoSwiss without manually downloading files. It fits analysis and exploration of official Swiss meteorological open data.
Requirements
Runs locally over stdio as a Python package (Python 3.11 or later); install with the mcp extra and start it with the foehn mcp command. Network access to the MeteoSwiss STAC API is needed to fetch data. No accounts, API keys or environment variables are declared.
Before you install
The server downloads data from MeteoSwiss public endpoints and writes files to a local data directory, so disk use and network traffic should be expected. Data is fetched from a third-party public API, and forecast and radar files roll off after a day or two weeks, so recent time slices may be unavailable.

Installation

In SourceWeft

  1. Open foehn in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[foehn]

MeteoSwiss Open Data — Python API, CLI & MCP server · tabular as DataFrames/Parquet, gridded as xarray/Zarr

[PyPI Latest Release] [Python Versions] [MIT License] [OpenSSF Scorecard] [Monthly Downloads]


foehn downloads every MeteoSwiss OGD collection via the STAC API, converts CSV/TXT station data to Parquet with Polars, and opens gridded collections — NetCDF climate grids, GRIB2 forecasts, and ODIM radar composites — as xarray Datasets or Zarr stores. It can optionally ingest everything into Databricks Unity Catalog Delta tables on a daily schedule, and ships an MCP server so LLMs can query Swiss weather data directly.

[Daily weather in Bern, powered by foehn]

Daily weather in Bern, powered by foehn's MCP server and MeteoSwiss open data.

Why foehn?

  • 20+ collections in one command — weather stations, radar, hail maps, forecasts, climate scenarios, and more
  • Tabular and gridded — CSV station data as Polars DataFrames or Parquet; NetCDF, GRIB2 and ODIM radar grids as xarray Datasets or Zarr stores
  • MCP server for LLMs — give your favorite LLM live access to MeteoSwiss data with the MCP server
  • Significantly smaller on disk — columnar Parquet with Zstandard compression vs. raw CSVs
  • Incremental by default — only re-downloads files that changed since your last run, tracked per dataset and time slice in _last_run.json
  • No Spark required locally — download + conversion uses Polars only; Spark is optional for Delta ingestion
  • Ships a Declarative Automation Bundle — ready-to-deploy daily job and historical backfill, no pipeline config needed

Quick start

bash
pip install foehnfoehn download

Recent data (Jan 1 to yesterday) is downloaded and converted to Parquet under ./data/meteoswiss/.

[foehn CLI demo]

Installation

From PyPI:

bash
pip install foehn

From source:

bash
git clone https://github.com/kayhendriksen/foehncd foehnpip install -e .

With extras:

bash
pip install "foehn[databricks]"   # PySpark + Delta, and Polars' build for CPUs without AVX2pip install "foehn[mcp]"          # MCP serverpip install "foehn[grids]"        # xarray + Zarr for all gridded data (NetCDF, GRIB2, radar)

Requires Python 3.11 or later.


Python API

python
import foehn
df = foehn.load("smn", station="BER", frequency="d")

Load data directly into Polars DataFrames, explore metadata, download to disk, and convert to Parquet — all from Python. See the full Python API documentation.


CLI

bash
foehn download smn pollenfoehn load smn --station BER --frequency d

The CLI mirrors the Python API with subcommands for downloading, converting, loading, and inspecting metadata. See the full CLI documentation.


Gridded data

python
ds = foehn.open_dataset("surface_derived_grid", match="rhiresd")  # NetCDF climate gridds = foehn.open_dataset("forecast_icon_ch1", match="YYYYMMDDHHMM-0-t_2m-ctrl")  # one GRIB2 fieldds = 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 climate grids/normals/scenarios, GRIB2 forecasts (ICON-CH1/CH2, KENDA), and HDF5/ODIM radar composites all open as xarray Datasets instead of DataFrames. One extra covers them: pip install "foehn[grids]". See the gridded data documentation.


MCP server

json
{  "mcpServers": {    "foehn": {      "command": "foehn",      "args": ["mcp"]    }  }}

Give any MCP-compatible LLM live access to MeteoSwiss data. See the full MCP server documentation.


Documentation

CollectionsAll 20+ MeteoSwiss datasets, categories, and time slice conventions
Python APILoading data, metadata, downloading, and Parquet conversion
Gridded dataNetCDF grids as xarray Datasets and Zarr stores
CLIAll subcommands, flags, and environment variables
MCP ServerSetup, configuration, and available tools
Databricks PipelineDeclarative Automation Bundle deployment

Data sources


License

MIT

Source: README.md at commit 5605af1

Tools

0
SourceWeft started this package once in an isolated sandbox, without credentials, to list its tools. That failed: the server did not start.

Version history

2
  1. v0.5.0LatestOct 25, 2026
  2. v0.4.0Sep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts