epa-mcp-server
Server Details
Search EPA compliance, TRI, Superfund, drinking-water, EJScreen, and AirNow data.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/epa-mcp-server
- GitHub Stars
- 1
- Server Listing
- EPA MCP Server
TDQS
Score is being calculated.
Available Tools
8 toolsepa_get_ejscreenGet EJScreen Environmental Justice IndicatorsRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | Unit for distance. Kilometers are converted to miles (× 0.621371) before the request. | miles |
| distance | No | Buffer radius around the point, in the given unit (default 1). The miles-equivalent must be 15 or less. | |
| latitude | Yes | Latitude in decimal degrees. | |
| longitude | Yes | Longitude in decimal degrees. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when the point is outside EJScreen coverage and no indicators were returned. |
| coverage | No | Whether EJScreen data was available for the point. |
| location | No | The queried location and buffer context. |
| reportUrl | No | Link (absolute URL) to the full EJScreen report for this point and buffer. |
| dataSource | No | Provenance and vintage of the data. |
| demographic | No | EJScreen demographic indicators present for the area. Empty when out of coverage. |
| environmental | No | EJScreen environmental indicators present for the area. Empty when out of coverage. |
| demographicIndex | No | EJScreen Demographic Index. Absent when out of coverage. |
| supplementalDemographicIndex | No | EJScreen Supplemental Demographic Index. Absent when out of coverage. |
epa_get_facilityGet EPA Facility Compliance ProfileRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| registry_id | Yes | EPA FRS Registry ID for the facility (obtained from epa_search_facilities) |
Output Schema
| Name | Required | Description |
|---|---|---|
| zip | No | ZIP code |
| city | No | City |
| name | No | Facility name |
| error | No | Present when the call failed. Absent on success. |
| state | No | 2-letter state abbreviation |
| county | No | County name |
| street | No | Street address |
| fipsCode | No | 5-digit county FIPS code |
| latitude | No | Latitude in decimal degrees |
| programs | No | Program registration flags |
| longitude | No | Longitude in decimal degrees |
| compliance | No | Compliance summary from DFR. Absent when ECHO DFR compliance endpoint unavailable. |
| registryId | No | EPA FRS Registry ID |
| inspections | No | Inspection history records |
| airCompliance | No | CAA-specific compliance details. Present only when facility is registered under CAA (programs.air=true). |
| formalActions | No | Formal enforcement actions on record |
| waterCompliance | No | CWA/NPDES permit and compliance details. Present only when facility is registered under CWA (programs.water=true). |
| complianceStatus | No | Overall compliance status text |
| triReleasesTransfersInLbs | No | Total TRI on/off-site releases and transfers in pounds |
epa_get_tri_releasesGet TRI Chemical Releases for FacilityRead-onlyIdempotentInspect
Query Toxic Release Inventory annual chemical release data for a specific facility. Returns per-chemical release records with chemical name, reporting year, routine on-site releases by medium (air, water, land, underground injection), and the one-time / non-routine release quantity. Quantities are in pounds; dioxin and dioxin-like compounds, which TRI has facilities report in grams, are converted and marked with reportedUnit. TRI data lags ~18 months — the most recent available year is typically 2 years prior to the current calendar year. facility_id is the 15-character TRI facility ID: take it from the facilityId field of epa_search_tri_releases, which also identifies top emitters across a region. A 12-digit EPA Registry ID is a different identifier and matches no TRI records.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Reporting year to retrieve. Defaults to all available years. TRI data is typically available through ~2 years prior to the current year. | |
| facility_id | Yes | 15-character TRI facility ID (e.g. "9867WSNRWD1981S") — the facilityId field returned by epa_search_tri_releases. A 12-digit EPA Registry ID matches no TRI records. | |
| chemical_name | No | Optional filter to restrict results to a specific chemical (partial match, case-insensitive) |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| message | No | Recovery hint when no releases are found — suggests alternative years or checking the facility ID. Absent when releases are returned. |
| releases | No | Per-chemical annual TRI release records for the queried facility |
| facilityId | No | TRI facility ID queried |
epa_search_facilitiesSearch EPA FacilitiesRead-onlyIdempotentInspect
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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City name. Pair with state for best results. | |
| limit | No | Maximum number of facilities to return (1–100) | |
| state | No | 2-letter US state abbreviation (e.g. "WA", "CA") | |
| latitude | No | Latitude in decimal degrees. Pair with longitude and radius_miles for proximity search. | |
| programs | No | Restrict results to facilities registered in these environmental programs. CAA=air, CWA=water, RCRA=waste, TRI=toxic releases, SDWA=drinking water. | |
| zip_code | No | 5-digit ZIP code to search within | |
| longitude | No | Longitude in decimal degrees. Pair with latitude and radius_miles for proximity search. | |
| active_only | No | When true, return only active facilities | |
| radius_miles | No | Search radius in miles around the given latitude/longitude (max 100). Requires latitude and longitude. | |
| has_violation | No | When true, return only facilities with recent significant violations |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| message | No | Recovery hint when no results are found — echoes applied filters and suggests how to broaden the search. Absent when results are returned. |
| facilities | No | Matching EPA facilities |
| totalCount | No | Total facilities matched before the limit was applied |
epa_search_superfundSearch Superfund SitesRead-onlyIdempotentInspect
Search Superfund (CERCLA/SEMS) sites by location or NPL listing status. Returns site name, EPA site ID, NPL status (listed/not listed/proposed), cleanup status, coordinates, and county FIPS code. Accepts either state/city/ZIP or latitude+longitude+radius for proximity searches. Use for "are there Superfund sites near X" questions.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City name (partial match within state) | |
| limit | No | Maximum number of sites to return (1–200) | |
| state | No | 2-letter US state abbreviation to filter sites | |
| latitude | No | Latitude for proximity search (use with longitude and radius_miles) | |
| zip_code | No | 5-digit ZIP code to filter sites | |
| longitude | No | Longitude for proximity search (use with latitude and radius_miles) | |
| npl_status | No | Filter by NPL (National Priorities List) status: listed=final NPL, not-listed=not on NPL, proposed=proposed for listing, all=include all | all |
| radius_miles | No | Search radius in miles from the given coordinates. Required when using latitude+longitude. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| sites | No | Matching Superfund sites |
| message | No | Recovery hint when no sites are found. Absent when sites are returned. |
| totalCount | No | Number of sites returned (may be less than available if limit applied) |
epa_search_tri_releasesSearch TRI Releases by RegionRead-onlyIdempotentInspect
Search Toxic Release Inventory data across facilities in a state or county for a given reporting year. Returns facility name and county, TRI facility ID, chemical name, and the one-time / non-routine release quantity; set include_release_breakdown to add routine on-site releases by medium (air, water, land, and underground-injection), at the cost of a slower call. Quantities are in pounds; dioxin and dioxin-like compounds, which TRI has facilities report in grams, are converted and marked with reportedUnit. Use to identify top polluters in an area or build an environmental exposure profile. Use epa_get_tri_releases for detailed release records for a single facility. TRI data lags ~18 months from the current calendar year.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Reporting year. Defaults to all available years in the state. TRI data lags ~18 months. | |
| limit | No | Maximum number of release records to return (1–200) | |
| state | Yes | 2-letter US state abbreviation (required, e.g. "WA", "TX") | |
| county | No | County name to narrow results within the state, e.g. "King". Case-insensitive partial match on the bare name, so a short name can also match a longer one (LAKE matches LAKE OF THE WOODS; check countyName on each record); a trailing "County", "Parish", or "Borough" is dropped before matching. | |
| chemical_name | No | Optional filter to restrict results to a specific chemical (partial match, case-insensitive) | |
| include_release_breakdown | No | Add routine on-site releases by medium (air, water, land, underground injection) to each record. Costs one extra upstream request, which can add about 20 seconds when EPA has not cached it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit that was applied. Present only when truncated. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Number of release records returned. Present only when truncated. |
| state | No | State queried |
| message | No | Recovery hint when no releases are found. Absent when releases are returned. |
| releases | No | TRI release records for facilities in the queried state and filters |
| truncated | No | True when the result list was capped at the limit — more records may exist. Absent below the limit. |
epa_search_violationsSearch EPA Enforcement CasesRead-onlyIdempotentInspect
Search EPA civil and criminal enforcement cases by state, regulatory program, or date range. Returns case identifier, regulated facility name and Registry ID, programs involved, penalty assessed, settlement date, and case type. Designed for area-level violation discovery — for a single known facility's enforcement history use epa_get_facility instead. At least one of state or zip_code is required.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of cases to return (1–100) | |
| state | No | 2-letter US state abbreviation to filter cases (e.g. "TX", "CA") | |
| program | No | Filter by regulatory program: CAA=Clean Air Act, CWA=Clean Water Act, RCRA=hazardous waste, SDWA=drinking water, CERCLA=Superfund, FIFRA=pesticides, TSCA=toxic substances | |
| zip_code | No | 5-digit ZIP code to filter cases near that area | |
| case_type | No | Filter by case type: civil (regulatory violations), criminal (willful violations), or all | all |
| date_filed_end | No | End date for case filing date range (ISO 8601: YYYY-MM-DD) | |
| date_filed_start | No | Start date for case filing date range (ISO 8601: YYYY-MM-DD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| cases | No | Matching enforcement cases |
| error | No | Present when the call failed. Absent on success. |
| message | No | Recovery hint when no cases are found — echoes filters and suggests broadening. Absent when cases are returned. |
| totalCount | No | Total cases matched before the limit was applied |
epa_search_water_systemsSearch Drinking Water SystemsRead-onlyIdempotentInspect
Search drinking water systems (SDWIS) by state or ZIP code. Returns system name, PWSID, population served, primary water source, and activity status. With has_violation, returns only systems with an open violation — one SDWIS has not marked returned to compliance or closed out when the system was deactivated. At least one of state or zip_code is required.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of systems to return (1–200) | |
| state | No | 2-letter US state abbreviation (e.g. "WA", "CA") | |
| pws_type | No | Filter by public water system type: community=permanent residences, non-transient=regular non-residents (schools, businesses), transient=occasional users (campgrounds) | |
| zip_code | No | 5-digit ZIP code of the water system's address of record — often its owner's or operator's office, which can be far from the area the system serves | |
| has_violation | No | When true, return only systems with an open SDWIS violation (not yet returned to compliance). Works with state, zip_code, or both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| notice | No | Present when the has_violation check read only part of what it needed — the first 1,000 open violation records for the state, the first 1,000 systems in the ZIP, or the first 1,000 open violation records for a group of the ZIP’s systems — so violating systems outside that part may be missing from the results. |
| message | No | Recovery hint when no systems are found. Absent when systems are returned. |
| systems | No | Matching public water systems |
| totalCount | No | Number of systems returned |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
- First observed
epa_get_ejscreen - First observed
epa_get_facility - First observed
epa_get_tri_releases - First observed
epa_search_facilities - First observed
epa_search_superfund - First observed
epa_search_tri_releases - First observed
epa_search_violations - First observed
epa_search_water_systems
Related MCP Connectors
Federal environmental records near any US location, with dates and provenance; never a safety score.
Toxics Release Inventory, Superfund sites, air quality data, and AQI
Search openFDA drug, device, food and adverse-event datasets.
EPA ECHO MCP — wraps EPA ECHO Web Services (free, no auth)
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceWraps EPA ECHO Web Services (free, no auth) to enable querying environmental data via natural language.245 npmMIT
- AlicenseNot gradedqualityBmaintenanceWraps the EPA Envirofacts REST API to provide access to emissions data without authentication.1 npmMIT
- AlicenseAqualityDmaintenanceProvides AI agents with structured access to U.S. EPA environmental data including nearby regulated facilities, chemical releases, water violations, and hazardous waste sites for any U.S. location. Enables comprehensive environmental impact analysis through the EPA Envirofacts API with geocoding support and distance-based filtering.5MIT
- AlicenseNot gradedqualityBmaintenanceEnables querying US EPA Envirofacts data using natural language, providing access to environmental information through the Pipeworx MCP gateway.237 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.