Skip to content

v0.129.0

Choose a tag to compare

@gutzbenj gutzbenj released this 27 Jul 21:40
· 37 commits to main since this release
cd07e64

Added

  • Add an optional Model Context Protocol (MCP) endpoint at /mcp on the REST API, exposing the data
    endpoints as MCP tools over the streamable-HTTP transport (via FastMCP).
    The tools are made agent-friendly (workflow instructions, clean tool names, hidden noise
    endpoints, permissive output validation) so even small models can drive them. Enable it with the
    mcp extra (pip install wetterdienst[mcp]), which is included in the Docker image
  • Add DWD weather alerts (CAP warnings) provider (dwd/alerts) with Python API, CLI alerts
    command and REST /api/alerts endpoint: all active warnings, one row per alert, with a GeoJSON
    MultiPolygon geometry, on community (Gemeinde) or district (Landkreis) granularity; a date
    selects a historical snapshot from DWD's rolling ~48-hour window
  • Parse DWD radar site BUFR products (echo top, reflectivity) into a polars DataFrame on
    RadarResult.df, opt-in via the read_bufr setting (requires the eccodes and bufr extras)
  • Add RMI (Belgium) observation provider with 10-minute, hourly and daily resolution
    from the automatic weather station (AWS) network (no authentication required)
  • Add CHMI (Czechia) observation provider with 10-minute, hourly, daily, monthly and annual
    resolution (no authentication required)
  • Add FMI (Finland) observation provider with hourly and daily resolution
    (no authentication required)

Changed

  • Add descriptions to every field of the REST request models (stations, values, interpolate,
    summarize, history, issues). They surface in the REST API's OpenAPI schema (/docs) and in the
    generated MCP tool parameters, making both surfaces self-documenting.
  • REST API and CLI: the with_metadata and with_stations options now default to false on the
    stations, values, interpolate, summarize and history commands/endpoints, so output
    contains just the requested data by default. Pass with_metadata=true / with_stations=true
    (or --with_metadata=true / --with_stations=true) to include the provider-metadata and station
    blocks as before.
  • Reduce DWD MOSMIX/DMO KML parsing memory by streaming the zipped KML instead of
    decompressing it fully in memory (~6.5x lower peak RSS on MOSMIX-S)
  • Refresh locked dependencies to their latest compatible versions (polars 1.43.1, pyarrow 25,
    fastapi 0.140.7, uvicorn 0.51, and others). Update the dev toolchain (ruff 0.16, ty 0.0.64) and
    adopt their new checks: ignore CPY001 (no per-file copyright headers) and PLR0917
    (too-many-positional-arguments, sibling of the already-ignored PLR0913), fix a
    log.exception() call outside an exception handler, wrap implicitly concatenated test URLs, and
    narrow the DWD-derived available-dates set so min()/max() no longer see datetime | None

Fixed

  • Parse NOAA GHCN-hourly (GHCNh) timestamps from the provided ISO date column instead of
    reconstructing them from separate year/month/day/hour/minute fields
  • Fix the about fields CLI command, which crashed with a TypeError because it forwarded
    resolution as a separate argument to describe_fields()
  • Report coverage cleanly for metadata-less standalone networks (dwd/radar, dwd/alerts):
    about coverage and /api/coverage now return a clear message instead of crashing with an
    AttributeError / HTTP 500