@pipeworx/waqi

Connect: https://pipeworx.io/mcp — every tool in the catalog, including @pipeworx/waqi’s. Install: one-click buttons

Connect to just the @pipeworx/waqi pack

https://gateway.pipeworx.io/waqi/mcp — only @pipeworx/waqi’s own tools, nothing else in the catalog.

No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.

Tools: 4

World Air Quality Index MCP — 12k+ real-time AQI stations worldwide.

Tools

  • get_aqi_by_city(city)
  • get_aqi_by_location(latitude, longitude)
  • get_aqi_by_station(station_id)
  • search_stations(keyword)

Auth

Data source

https://api.waqi.info/ — ?token= query param.

Freshness (fleet #3741)

A monitoring station that stops reporting keeps serving its last value, so an upstream feed can answer with a plausible AQI that is months old. Every reading from this pack therefore carries measured_at, the station identity, data_age_hours, freshness (fresh | stale | unknown) and freshness_bound_hours (24).

  • get_aqi_by_city and get_aqi_by_location never present a reading older than 24h as current. If the matched station is stale they use the nearest station within 100 km that is reporting (station_selection: "fallback_fresher_station", with skipped_stale_station naming what was passed over), or they error naming the station, its measured_at and its age.
  • get_aqi_by_station returns the station that was asked for, labelled with its age, because the caller chose it.
  • City matching: see “Place resolution” below.

Place resolution (fleet #3751)

The publisher’s city resolver can map a name to the wrong place (“Venice” to a station in Dayton, Ohio). get_aqi_by_city therefore accepts "city" or "city, country" (also "Roma Italia"), and verifies that the matched station’s own name is the requested city (exact, a listed exonym such as Venice/Venezia, or one letter off such as Rome/Roma) and, when a qualifier is given, that its country or region agrees. A station that fails is never served: if stations whose own name is the city report in one place, that one is used (station_selection: "resolved_by_search", rejected_upstream_match names what was refused); if several places share the name they are listed; otherwise the call errors naming the station it matched. Every city response carries a place block with the requested and matched place.

Source: World Air Quality Index Project, station network.

Tools

  • get_aqi_by_city — Latest AQI for a city from the World Air Quality Index Project station network. Accepts “city” or “city, country” (e.g. “Rome, Italy”). The matched station is checked against the requested place: a st
  • get_aqi_by_location — Latest AQI for the WAQI station nearest a lat/lon. Carries measured_at, data_age_hours and freshness; a station silent for over 24h is replaced by a reporting one within 100 km or the call errors.
  • get_aqi_by_station — Latest AQI for a specific WAQI station by UID (numeric). Returned as asked even if the station has gone quiet, so check freshness and data_age_hours (stale = over 24h).
  • search_stations — Search stations by keyword (city/region name). Returns station UID, name, current AQI, and location.

Tools

  • get_aqi_by_city — Latest AQI for a city from the World Air Quality Index Project station network. Accepts city or city, country (e.g. Rome, Italy ). The matched station is checked against the requested place: a station
  • get_aqi_by_location — Latest AQI for the WAQI station nearest a lat/lon. Carries measured_at, data_age_hours and freshness; a station silent for over 24h is replaced by a reporting one within 100 km or the call errors.
  • get_aqi_by_station — Latest AQI for a specific WAQI station by UID (numeric). Returned as asked even if the station has gone quiet, so check freshness and data_age_hours (stale = over 24h).
  • search_stations — Search stations by keyword (city/region name). Returns station UID, name, current AQI, and location.

Regenerated from source · build October 30, 2026