UBA Air Quality

io.github.mohammad-abbasi-shPublished by GitHub account mohammad-abbasi-shv0.1.0Updated Nov 14, 2026

Unofficial read-only MCP server for German air quality (UBA) — hourly values + LQI, 400 stations.

VerifiedSTDIODesktop onlyLocation & LifestyleData & Analytics

Overview

AI-generated overview

Read-only MCP server for German UBA air-quality data: hourly pollutant values and the official air-quality index for about 400 stations.

What you can do
  • Find and inspect measuring stations by city, state, type, area or name, with address, coordinates and recent pollutants
  • Get the latest hourly values and air-quality index for a station given by code, id or city name
  • Retrieve hourly measurements over a date range of up to 31 days, with min/max/mean and daily means
  • List the 12 pollutants and the 17 measuring networks
  • Check whether the upstream API is reachable
When to use it
Useful when you want an assistant to answer questions about current or historical air quality in Germany, compare stations or pollutants, or summarize pollution levels over a period without leaving the chat.
Requirements
Runs locally over stdio, typically via uvx from the uba-mcp PyPI package or as python -m uba_mcp.server with the mcp and httpx dependencies. No API key or login; network access to the UBA Air Data API is required.
Before you install
Read-only and unauthenticated, so no credentials are exposed. Data comes from an unofficial third-party wrapper of the Umweltbundesamt API, so availability and accuracy depend on that service; times are returned in CET/CEST as given by the API.

Installation

In SourceWeft

  1. Open UBA Air Quality 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

uba-mcp 🌬️

mcp-name: io.github.mohammad-abbasi-sh/uba-mcp

Unofficial read-only MCP server for UBA air quality — the Umweltbundesamt (German Federal Environment Agency) Air Data API v4: hourly measurements from ~400 German stations (PM10, PM2.5, NO2, O3, SO2, CO, benzene …) since 2016, with the official UBA air-quality index (LQI). No key, no login.

Built by Mohammad Abbasi as part of the "Germany MCP factory". Not affiliated with the Umweltbundesamt.

For AI agents

Add to your MCP client config (stdio):

json
{  "mcpServers": {    "uba": {      "command": "uvx",      "args": ["uba-mcp==0.1.0"]    }  }}

Or run locally: python -m uba_mcp.server (needs mcp<2, httpx).

Tools

ToolDescription
uba_list_stationsMeasuring stations, filterable by city, state, type, area or name
uba_station_detailOne station: address, coordinates, type, data window, recent pollutants
uba_current_air_qualityLatest hourly values + LQI at a station (code, id or city name)
uba_measurementsHourly values over a date range (max 31 days) + min/max/mean & daily means
uba_list_componentsAll 12 pollutants: code, symbol, unit, name
uba_list_networksThe 17 measuring networks (16 Länder + UBA)
uba_healthReachability check (ok / blocked / error) — one polite request

Example output (uba_current_air_quality / Berlin Neukölln, 2026-11-11 09:00 CET):

json
{"station": {"code": "DEBE034", "name": "Berlin Neukölln", "city": "Berlin"}, "hour": {"start": "2026-11-11 09:00:00", "total_index": 2, "total_label": "moderate",  "values": [{"code": "PM2", "value": 17.0, "unit": "µg/m³", "label": "moderate"},             {"code": "PM10", "value": 23.0, "unit": "µg/m³", "label": "good"},             {"code": "O3", "value": 24.0, "unit": "µg/m³", "label": "very good"},             {"code": "NO2", "value": 15.0, "unit": "µg/m³", "label": "good"}]}}

Notes:

  • Stations are found by code (DEBE010 = Berlin Wedding), numeric id, or city name (first active station in that city).
  • The index / total_index (0–4) and labels come from the API itself; they follow the UBA LQI, 2025 revision (hourly means, µg/m³):
ClassNO2PM10PM2.5O3SO2
0 very good0–100–90–50–240–10
1 good11–3010–276–1525–7211–30
2 moderate31–6028–5416–3073–14431–60
3 poor61–10055–9031–50145–24061–100
4 very poor>100>90>50>240>100
  • All times are CET/CEST as returned by the API. Data: UBA Air Data API v4 umweltbundesamt.de/api/air_data/v4 — no key, no login, read-only.

Development

bash
python3 -m venv .venv && .venv/bin/pip install "mcp<2" httpx pytest.venv/bin/pip install -e ..venv/bin/python -m pytest tests/ -q
  • tests/test_domain.py — offline, parses real captured API fixtures
  • tests/test_live.py — 7 cautious live requests against the UBA API

License

MIT


Built by Mohammad Abbasi — Almanibama · mabbasi.ir

Source: README.md at commit 623abcc

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.0LatestNov 14, 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