IQAir MCP Server
IQAir MCP Server
Ein MCP-Server, der Echtzeit-Luftqualitätsdaten von IQAir bereitstellt – entwickelt durch Reverse Engineering der IQAir-Website (kein offizieller API-Schlüssel erforderlich).
Er wurde für die Jakarta-Luftqualitätsseite (https://www.iqair.com/id/air-quality/indonesia/jakarta/jakarta) erstellt, funktioniert aber für jeden IQAir-Standort.
Was er zurückgibt
Für einen Standort erhalten Sie:
US-AQI und der Hauptschadstoff
Schadstoffwerte pro Schadstoff: PM2.5, PM10, O₃, SO₂ (AQI + Konzentration)
Wetter: Temperatur, Luftfeuchtigkeit, Druck, Wind
Anzahl der Messstationen
7-Tage- und 72-Stunden-Vorhersagen
Koordinaten / Zeitzone
Werkzeuge
Werkzeug | Beschreibung |
| Vollständiger Jakarta-Bericht (aktuell + Vorhersagen). |
| Nur aktuelle Bedingungen in Jakarta (leichter). |
| Jakarta-Vorhersage ( |
| Beliebiger Standort, z. B. |
path ist das Segment nach /<locale>/air-quality/ in einer IQAir-URL – country/state/city.
Wie es funktioniert (Reverse Engineering)
IQAir ist eine React Router v7 (Remix)-App auf Vercel. Jede Luftqualitätsseite stellt ihre Loader-Payload unter derselben URL mit einem .data-Suffix bereit:
GET /id/air-quality/indonesia/jakarta/jakarta.data?_routes=routes%2F%24(locale).air-quality.%24Die Antwort ist turbo-stream-codiert (ein indexreferenzierter Pool mit verzögerten Promise-Chunks), dekodiert von turbo_stream.py.
Anti-Bot: der Vercel-Sicherheits-Checkpoint
Die Website ist durch den Checkpoint von Vercel geschützt. Beim Reverse Engineering haben wir festgestellt:
Einfache
requests/httpx-Aufrufe → HTTP 429 (Challenge-Seite).curl_cffimit Chrome-TLS-Impersonation → immer noch 429 (JS/WASM-Challenge ist erforderlich, nicht nur ein passender TLS-Fingerabdruck).Selbst ein gültiges
_vcrcs-Cookie, das von einem Nicht-Browser-Client wiedergegeben wird → 429 (TLS/JA3-Fingerabdruck wird validiert).Headless Chromium → Checkpoint wird nie gelöscht (Headless wird erkannt).
Headful Chromium → wird in ~3 s gelöscht.
Der Client (iqair_client.py) steuert also ein Headful-Chromium mit einem persistenten Profil: Er löst den Checkpoint einmal, speichert das _vcrcs-Cookie im Profil und führt den .data-Abruf aus dem Seitenkontext heraus aus, sodass der echte TLS-Stack des Browsers und das gelöste Cookie verwendet werden. Das Fenster wird außerhalb des Bildschirms platziert, damit es Sie nicht stört.
Einrichtung
cd iqair-mcp
pip install -r requirements.txt
python -m playwright install chromiumEine Desktop-Sitzung / Anzeige ist erforderlich (der Browser muss headful laufen).
Ausführen
python server.py # stdio (for MCP clients)
python server.py --transport sse # SSE on http://localhost:8000Bei einem MCP-Client registrieren
{
"mcpServers": {
"iqair": {
"command": "python",
"args": ["C:\\path-to-mcp\\iqair-mcp\\server.py"]
}
}
}Dateien
server.py– FastMCP-Server, der die Werkzeuge bereitstellt.iqair_client.py– Browser-gestützter Client (Challenge-Lösung + Abruf + Normalisierung).turbo_stream.py– Dekoder für das turbo-stream.data-Format von React Router.requirements.txt– Abhängigkeiten.
Überleben bei RDP-Trennungen
Der Checkpoint erzwingt einen Headful-Browser, und ein außerhalb des Bildschirms laufendes Headful-Chromium kann seine Rendering-Oberfläche verlieren (und sterben), wenn eine RDP-Sitzung getrennt oder gesperrt wird. Der Server überlebt dies auf zwei Ebenen:
Automatische Wiederherstellung – Wenn ein Aufruf auf einen „target/browser closed"-Fehler stößt, reißt der Client den toten Browser ab und startet ihn einmal transparent neu.
Watchdog-Heartbeat – Ein Hintergrundthread pingt den Browser alle
keepalive_seconds(Standard 60 s); wenn er tot/nicht reagiert, baut er ihn proaktiv neu auf und löst die Challenge erneut, sodass eine Trennung nie einen toten Browser für den nächsten Werkzeugaufruf hinterlässt. Warme Aufrufe nach einer Wiederbelebung kehren in ~1–2 s ohne erneutes Lösen zurück.
Zusätzlich wurden Bildschirmschoner/Auto-Sperre für den aktuellen Benutzer deaktiviert (HKCU\Control Panel\Desktop → ScreenSaveActive=0, ScreenSaveTimeOut=0), damit eine verbundene Sitzung sich nicht unter dem Browser selbst sperrt. Dies ist pro Benutzer und umkehrbar.
Vollständig konsolenlose Setups (eine Live-Desktop-Sitzung mit niemandem verbunden) erfordern Administratorrechte – entweder eine Maschinenrichtlinie
MaxDisconnectionTime=0unterHKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Servicesoder eine geplante Aufgabetsconzur Konsole. Diese werden hier nicht angewendet (keine Erhöhung auf diesem Domänenkonto); der Watchdog + die automatische Wiederherstellung decken den Trennungsfall ohne sie ab.
Hinweise & Einschränkungen
Der erste Aufruf pro Sitzung kostet einen einmaligen ~3 s Browserstart + Challenge-Lösung; nachfolgende Aufrufe nutzen die warme Sitzung.
Eine verbundene Desktop-Sitzung wird weiterhin empfohlen; der Watchdog behandelt kurze Trennungen/Sperren durch Neuerstellung, aber die Maschine muss eine Sitzung haben, um überhaupt einen Headful-Browser rendern zu können.
Die Daten sind das, was IQAir derzeit veröffentlicht (Werte werden in Echtzeit aktualisiert).
Dies verlässt sich auf den internen (undokumentierten) Datenendpunkt von IQAir; Änderungen an der Website können eine Aktualisierung der Routen-ID oder des Dekoders erfordern.
Für den persönlichen/lehrreichen Gebrauch – respektieren Sie die Nutzungsbedingungen von IQAir.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Air Quality MCP — wraps air-quality-api.open-meteo.com (free, no auth)
EPA AirNow MCP — official US real-time AQI + forecast (free key)
WAQI MCP — World Air Quality Index (free key)
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nanparam/iqair-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server