irm-kmi-mcp
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")
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,enorde. 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)
| File | Size | Uploaded | |
|---|---|---|---|
| irm_kmi_mcp-1.1.0.tar.gz | 32.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|