@pipeworx/airnow

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

Connect to just the @pipeworx/airnow pack

https://gateway.pipeworx.io/airnow/mcp — only @pipeworx/airnow’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

US EPA AirNow — official current and forecast air quality index (AQI) for every US reporting area, plus hourly per-site monitor observations. Keyless: reads AirNow’s public file products on files.airnowtech.org live per call.

AirNow retired its keyed web service (www.airnowapi.org/aq/*) on 2026-10-01; every call returned HTTP 410 until this pack was moved to the file products (fleet #2808). The retired-service notice at docs.airnowapi.org/webservices/retired redirects to a login page, so the file products are the only public route left.

Tools

  • current_by_zip(zip_code, distance_miles?) — latest observed AQI per pollutant for the reporting area nearest a ZIP, with yesterday’s AQI and the other reporting areas inside the radius.
  • current_by_location(latitude, longitude, distance_miles?) — same, for a lat/lon.
  • forecast_by_zip(zip_code, date?, distance_miles?) — issued forecasts (today
    • up to 3 days) per pollutant, with Action Day flag and forecaster discussion. Omit date for every issued day; forecast_days_available lists them.
  • observations_in_bbox(bbox, start_date, end_date, parameters?, data_type?, verbose?) — hourly per-site AQI and concentrations inside minLon,minLat,maxLon,maxLat for a span of UTC hours (YYYY-MM-DDTHH), max 24 hours per call (one ~1 MB upstream file per hour). Pollutants: OZONE, PM25, PM10, NO2, CO, SO2 (AQI exists for the first four only).

Every response carries data_as_of (the upstream file’s Last-Modified), source (the file URL) and found. A miss is {found:false, reason, hint}: zip_not_in_airnow_index, no_reporting_area_in_radius, no_forecast_area_in_radius, no_forecast_for_date, hours_not_published, no_sites_in_bbox.

Auth

None. No key, no account.

Data sources

All under https://files.airnowtech.org/airnow/ (an S3 bucket AirNow rewrites hourly; format fact sheets in airnow/docs/):

FileUsed byRefresh
today/cityzipcodes.csv — ZIP → city, state, lat, lon (27k rows)*_by_zipdaily
today/reportingarea.dat — per reporting area: yesterday (Y), current observed (O), forecast (F) rowscurrent_*, forecast_by_ziphourly
YYYY/YYYYMMDD/HourlyAQObs_YYYYMMDDHH.dat — per-site AQI + concentrations, one file per UTC hourobservations_in_bbox~30-60 min after the hour

Quirks worth knowing:

  • Forecasts two or more days out often carry a category but a null AQI — that is how the agencies issue them, not a parse gap.
  • The current-hour HourlyAQObs file does not exist until AirNow publishes it; those hours are listed in hours_not_yet_published rather than erroring.
  • “Nearest reporting area” is by great-circle distance to the area’s published centroid, so a ZIP on a metro edge may resolve to the neighbouring region (ZIP 10001 → “New York City Region”, 10 mi). other_areas_in_radius shows the alternatives.
  • The gateway caches airnow results for 10 minutes (CACHE_TTL_OVERRIDES); the pack also keeps the parsed files in the isolate for 10 min (reporting area) / 24 h (ZIP index) / 6 h (hourly files).

Tools

  • current_by_zip — Latest observed air quality index (AQI) for the EPA AirNow reporting area nearest a US ZIP code: one row per pollutant (ozone, PM2.5, PM10) with the AQI value, category (Good / Moderate / Unhealthy …)
  • current_by_location — Latest observed air quality index (AQI) for the EPA AirNow reporting area nearest a latitude/longitude in the US: one row per pollutant with AQI value, category, observation hour, agency and yesterday
  • forecast_by_zip — EPA AirNow air quality (AQI) forecast for a US ZIP code — today and up to three days ahead, per pollutant, with the forecast category, Action Day flag and the forecaster’s discussion text. Pass a date
  • observations_in_bbox — Hourly EPA AirNow monitoring-site observations inside a bounding box for a span of UTC hours (max 24 hours per call): per site and hour, the AQI for ozone, PM2.5, PM10 and NO2 and the measured concent

Tools

  • current_by_location — Latest observed air quality index (AQI) for the EPA AirNow reporting area nearest a latitude/longitude in the US: one row per pollutant with AQI value, category, observation hour, agency and yesterday
  • current_by_zip — Latest observed air quality index (AQI) for the EPA AirNow reporting area nearest a US ZIP code: one row per pollutant (ozone, PM2.5, PM10) with the AQI value, category (Good / Moderate / Unhealthy …)
  • forecast_by_zip — EPA AirNow air quality (AQI) forecast for a US ZIP code — today and up to three days ahead, per pollutant, with the forecast category, Action Day flag and the forecaster's discussion text. Pass a date
  • observations_in_bbox — Hourly EPA AirNow monitoring-site observations inside a bounding box for a span of UTC hours (max 24 hours per call): per site and hour, the AQI for ozone, PM2.5, PM10 and NO2 and the measured concent

Regenerated from source · build October 30, 2026