@pipeworx/epa-aqs
Connect: https://gateway.pipeworx.io/epa-aqs/mcp · Install: one-click buttons
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
EPA’s Air Quality System — the quality-assured, regulatory-grade archive of
ambient air measurements from ~10,000 US monitoring sites. Distinct from the
airnow pack, which serves provisional real-time AQI for the last few days.
Tools
aqs_list_parameters(list, pc?, state?, county?)— parameter codes, classes, states, counties, sites, agencies.aqs_sample_data(param, bdate, edate, by?, state?, county?, site?, cbsa?, bbox?, limit?)— raw measured sample values.aqs_annual_summary(param, bdate, edate, ...)— annual means, maxima, percentiles, exceedance counts, completeness.aqs_monitors(param, bdate, edate, ...)— monitor metadata, networks, methods, open/close dates.
Auth
BYO only today. EPA AQS authenticates with two values, an email and a
key, issued together. A pack gets one credential slot, so both halves travel in
_apiKey:
?_apiKey=<email>:<key>— email and key together, or?_apiKey=<key>withemail=<your-email>.
Register free and instantly: GET https://aqs.epa.gov/data/api/signup?email=<your-email>.
EPA emails the key to that address.
The platform fallback env var is PLATFORM_EPA_AQS_KEY, and it must be
stored in the <email>:<key> form. It is not provisioned as of 2026-09-17
(fleet #2212) — the gateway is at Cloudflare’s 250-text-binding cap, so it goes
in through the platform key store rather than wrangler secret put.
There is no keyless or demo path. EPA’s own documentation names a shared
test account ([email protected] / test); it is permanently over its daily quota —
verified 2026-09-17, it answers
{"error":"Daily limit for account use exceeded. Retry later."} — so it is
deliberately not wired in. Serving that as data would read as an outage of ours.
Data source
https://aqs.epa.gov/data/api — docs at https://aqs.epa.gov/aqsweb/documents/data_api.html
Things the next person would otherwise rediscover:
- Dates are
YYYYMMDDwith no separators. The tools takeYYYY-MM-DD. bdateandedatemust be in the SAME calendar year. EPA’s rejection does not say so plainly; this pack checks first and says it.- Trouble arrives as HTTP 200. Authentication and quota problems come back in
Header[0].statusor as a bare{"error": ...}, never as a 4xx. Both are raised as errors here rather than as an emptyDataarray. paramtakes at most 5 codes per request.
Tools
- aqs_list_parameters — Look up the EPA AQS code lists the other tools in this pack need — pollutant parameter codes, parameter classes, states, counties, sites and monitoring agencies. Call this FIRST to turn “ozone” into 4
- aqs_sample_data — Raw measured air-pollutant sample values from EPA AQS for a date range — the regulatory record, by site, county, state or CBSA. AUTHORITATIVE for “what was the actual ozone/PM2.5/lead concentration he
- aqs_annual_summary — EPA AQS annual summary statistics for a pollutant and area — arithmetic mean, maximum, 98th/99th percentile, exceedance counts, observation completeness and the certification status behind each. This
- aqs_monitors — EPA AQS monitor metadata for an area — which pollutants are measured where, by which agency, with what method and network membership (NCore, PAMS, SLAMS), the monitoring objective, and each monitor’s
Tools
aqs_annual_summary— EPA AQS annual summary statistics for a pollutant and area — arithmetic mean, maximum, 98th/99th percentile, exceedance counts, observation completeness and the certification status behind each. Thisaqs_list_parameters— Look up the EPA AQS code lists the other tools in this pack need — pollutant parameter codes, parameter classes, states, counties, sites and monitoring agencies. Call this FIRST to turn ozone into 442aqs_monitors— EPA AQS monitor metadata for an area — which pollutants are measured where, by which agency, with what method and network membership (NCore, PAMS, SLAMS), the monitoring objective, and each monitor'saqs_sample_data— Raw measured air-pollutant sample values from EPA AQS for a date range — the regulatory record, by site, county, state or CBSA. AUTHORITATIVE for what was the actual ozone/PM2.5/lead concentration her