Search and retrieve EPA environmental data: facility compliance (ECHO), toxic releases (TRI), Superfund sites, drinking water systems, environmental-justice screening (EJScreen), and real-time air quality (AirNow). STDIO or Streamable HTTP.
Five tools with complete input schemas, strong descriptions (avg 180 chars), and clear naming. All tools follow verb_noun pattern (epa_get_*, epa_search_*). Descriptions include context, data sources, and caveats (e.g., 'Data is preliminary', 'TRI data lags ~18 months'). Parameters are well-typed with enums, ranges, and constraints. However, output schemas are not documented, LLMs cannot see what fields to expect from responses. Error handling is absent; no guidance on retryability or recovery. Missing tool annotations (readOnlyHint present but not destructiveHint/idempotentHint). No pagination guidance despite search_facilities returning up to 100 results.
Get current AQI observations or forecasts for a location from the AirNow API. Returns per-pollutant AQI values (PM2.5, ozone, CO, SO2, NO2), AQI category (Good through Hazardous), reporting area name, and observation timestamp. Provide either zip_code or both latitude and longitude. Set mode to "forecast" and provide forecast_date for next-day projections. Data is preliminary — suitable for awareness and informational use, not regulatory decisions. Responses are cached for ~1 hour.
Get EJScreen environmental-justice indicators for a point and surrounding buffer. Returns the 13 EJScreen environmental indicators (PM2.5, ozone, diesel particulate, NO2, lead paint, traffic proximity, Superfund/RMP/hazardous-waste/wastewater proximity, underground storage tanks, drinking-water non-compliance, and RSEI toxic air releases) and 6 demographic indicators (people of color, low income, limited English, less than high school, under 5, over 64), each with national and state percentiles plus EJ Index values, along with the Demographic Index and Supplemental Demographic Index. Data is EJScreen v2.2 (2022) served via the community-maintained EJAM API (api.ejanalysis.com, Public Environmental Data Partners), which rehosts EJScreen after EPA discontinued public access in 2025 — not a live EPA endpoint. Provide latitude, longitude, and a buffer distance (default 1 mile, max 15 miles). Points outside US coverage return a coverage note instead of indicators.
Retrieve a full compliance profile for a single EPA-regulated facility by EPA Registry ID. Returns facility metadata, per-program compliance status, inspection history, formal enforcement actions, penalty totals, and TRI release summary. Use epa_search_facilities to discover Registry IDs. For area-level enforcement discovery use epa_search_violations instead.
Output schemas not documented. LLMs cannot see what fields responses contain, forcing them to guess downstream field names and risking broken tool chains.
No error handling guidance. Tools lack recovery hints (e.g., 'If facility not found, try epa_search_facilities'). Errors will not guide LLM retry logic.
Tool annotations incomplete. readOnlyHint present but destructiveHint and idempotentHint missing. LLMs cannot infer safety properties.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Query Toxic Release Inventory annual chemical release data for a specific facility. Returns per-chemical release records with chemical name, total release quantity, and reporting year. TRI data lags ~18 months — the most recent available year is typically 2 years prior to the current calendar year. Obtain facility_id (TRI facility ID) from epa_search_facilities. Use epa_search_tri_releases to identify top emitters across a region.
Search EPA-regulated facilities by location, industry program, or compliance status across all environmental programs (CAA, CWA, RCRA, TRI, SDWA). Returns facility name, EPA Registry ID, coordinates, county FIPS code, per-program registration flags, inspection counts, penalty totals, and TRI release totals. Registry IDs returned here feed epa_get_facility and epa_get_tri_releases. Supports proximity search via latitude + longitude + radius_miles. At least one geographic filter (zip_code, state, city, or a complete latitude+longitude+radius_miles triple) is required — unscoped searches time out.
epa_search_facilities returns up to 100 results but no pagination guidance. Large result sets risk context window exhaustion. Limit should be capped at 20-50 with next_cursor support.
Parameter descriptions lack format/constraint details. E.g., 'forecast_date' says 'ISO 8601 format (YYYY-MM-DD)' but no validation guidance if LLM passes wrong format.