Skip to main content

irm-kmi-mcp

License: MIT Python 3.10+ PyPI version

An MCP server exposing official Belgian weather data from the Royal Meteorological Institute of Belgium (IRM/KMI): observed conditions, daily and hourly forecasts, a radar-based rain nowcast, pollen levels and weather warnings, for MCP clients such as Claude, Hermes or Openclaw.

"What's the weather in Namur?"            →  current_conditions("Namur")
"Forecast for Oostende, 5 days, in Dutch" →  daily_forecast("Oostende", days=5, language="nl")
"Will it rain soon in Brussels?"          →  rain_forecast("Bruxelles")
"How bad is the pollen today?"            →  pollen()
"Any warnings in Belgium right now?"      →  warnings(country="BE")

irm-kmi-mcp on Glama

Features

  • Observed conditions: temperature, condition, UV index, sunrise/sunset from the nearest IRM weather station.
  • Daily forecast (1–8 days): min/max temperature, condition, wind, precipitation, sunrise/sunset, plus the official IRM text bulletin in fr/nl/en/de (can be omitted to save tokens).
  • Hourly forecast (1–49 h): temperature, precipitation, pressure, wind and gusts — every row carries an absolute ISO-8601 timestamp (Brussels time).
  • Rain nowcast: radar-based precipitation per 10-minute frame for roughly the next 5 hours; answers "will it rain soon?" far more cheaply than the hourly forecast.
  • Pollen levels: official daily pollen levels (grasses, birch, mugwort, …) when in season.
  • Official weather warnings: yellow/orange/red alerts, either for a single municipality (with level and validity period) or country-wide (filterable to BE, NL or LU).
  • Locations by name or coordinates: "Namur", "Bruxelles", "Oostende", … resolved through the IRM's own city search, or given directly as WGS84 latitude/longitude.
  • Token-lean output: unknown fields are omitted rather than sent as nulls.
  • Caching & resilience: weather data is cached for 10 minutes, city lookups for 24 hours; transient network errors are retried automatically.

Tools

Every location-taking tool accepts either commune (municipality name) or latitude + longitude (WGS84).

Tool Parameters (besides location) Returns
current_conditions — temperature, condition (ww code + canonical English label), UV index, day/night, sunrise/sunset
daily_forecast days (1–8, default 3), language (fr/nl/en/de), include_text (default true) per day: temps, condition (ww code + label), wind, precipitation, sunrise/sunset, official text
hourly_forecast hours (1–49, default 24) per hour: absolute time, temperature, condition (ww code + label), precipitation, pressure, wind
rain_forecast language unit, official IRM hint, precipitation per 10-min frame (only frames expecting rain)
pollen — per-species pollen level (none, active, low, moderate, high, very high), national
warnings language, country (BE/NL/LU, country-wide only) alert type (name + canonical slug), text; level + validity for a municipality, per-region level/validity otherwise

Data source & disclaimer

⚠️ Unofficial. This project is not affiliated with the IRM/KMI. It works by calling the same backend service that powers the official IRM mobile app. That service was never meant for public use: it is undocumented and it can break or disappear without notice. Please use it for personal, low-frequency purposes only.

The API surface was reverse-engineered and documented by Jules Dejaeghere in jdejaegh/irm-kmi-api and jdejaegh/irm-kmi-ha. Many thanks for the groundwork. This project is not affiliated with, sponsored or endorsed by the IRM/KMI.

Installation

From PyPI:

pip install irm-kmi-mcp

…or run it zero-install on every invocation with uvx (recommended for MCP clients — no venv to manage):

uvx irm-kmi-mcp

See Development below for installing from source.

Usage

Run the server (stdio transport):

irm-kmi-mcp
# or
python -m irm_kmi_mcp

Claude Desktop

Zero-install with uvx (recommended):

{
  "mcpServers": {
    "irm-kmi-mcp": {
      "command": "uvx",
      "args": ["irm-kmi-mcp"]
    }
  }
}

Or, after pip install irm-kmi-mcp:

{
  "mcpServers": {
    "irm-kmi-mcp": {
      "command": "irm-kmi-mcp"
    }
  }
}

To set a default language (see Configuration), add an "env" key to either form, e.g. "env": { "IRM_LANG": "fr" }.

Hermes Agent

After pip install irm-kmi-mcp (so the irm-kmi-mcp command is on PATH):

# config.yaml
mcp_servers:
  irm-kmi-mcp:
    command: "irm-kmi-mcp"
    enabled: true
    # env:
    #   IRM_LANG: "fr"  # optional: default language for official texts

No API keys or configuration required. The daily request key is derived automatically.

Configuration

  • IRM_LANG: default language for official texts (bulletins, warning texts, day names, wind directions): fr, nl, en or de. Unset or invalid values fall back to English. Read once at server startup; set it before launching the server.

Development

Install from source in an editable dev environment:

git clone https://github.com/kthys/irm-kmi-mcp.git
cd irm-kmi-mcp
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/pytest
.venv/bin/ruff check .

Tests run against recorded API responses (tests/fixtures/) with a mocked HTTP transport, so no network access is required. Re-record fixtures after upstream API changes.

Release files for irm-kmi-mcp 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for irm-kmi-mcp 1.1.0
File Size Uploaded
irm_kmi_mcp-1.1.0.tar.gz 32.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for irm-kmi-mcp 1.1.0
File Interpreter ABI Platform
irm_kmi_mcp-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 58.1 kB

Release files / irm_kmi_mcp-1.1.0.tar.gz

Download URL irm_kmi_mcp-1.1.0.tar.gz
Size 32.9 kB
Tags Source
SHA-256 checksum
How to use checksums
e7141d39dd2be0a78a775fca788647220520355cfe787200baf2c42ee87a86db
BLAKE2b-256 checksum
How to use checksums
b674a5a05625c8180c2aac1287a66f88ae5362c9abc1b98b636794c859c33454
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / irm_kmi_mcp-1.1.0-py3-none-any.whl

Download URL irm_kmi_mcp-1.1.0-py3-none-any.whl
Size 25.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8b65775333c0593a04441f1d7593b6304fec6cd134b438afbc5476f7828564e0
BLAKE2b-256 checksum
How to use checksums
82787a16a4aa03715964646cf687685e4c2b1ae15d3edbf3963495fd6a1fde53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

1.1.2

2 release files

1.1.1

2 release files

This release

1.1.0 This release

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page