accueil / serveurs / Dev & Code / io.github.cyanheads/epa-mcp-server
io.github.cyanheads/epa-mcp-server
serveur MCP (Model Context Protocol) · epa-mcp-server 0.5.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que io.github.cyanheads/epa-mcp-server est sûr ?
Au dernier audit MCP Hub, le serveur MCP « io.github.cyanheads/epa-mcp-server » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 9 outils
- epa_get_air_quality≈ 1771 tokens
Get current AQI observations or the issued AQI forecast for a US location from the AirNow API. Provide either zip_code or both latitude and longitude. Current mode returns the latest hourly NowCast AQI for each pollutant (PM2.5, ozone, PM10) from the closest monitor within 50 miles, with the monitor site name, site ID, and reporting agency; pollutants in one reporting area can come from different monitors. Forecast mode returns every day the reporting area's agency has issued (typically one to five), each with the AQI category, an action-day flag, and the issue date, plus the agency's forecast discussion when one exists; some agencies forecast a category without an AQI number. In forecast mode, set forecast_date to keep only the forecast valid on that date; current mode rejects it. Data are preliminary — suitable for awareness, not regulatory, trend, or enforcement decisions. Responses are cached for ~1 hour.
Paramètres, retour & exemple (5)
Paramètresmode· string · optionnel · current | forecast
Data mode: "current" for the latest hourly observations, "forecast" for every forecast day the reporting area has issuedlatitude· number · optionnel
Latitude in decimal degrees (use with longitude instead of zip_code)zip_code· string · optionnel
5-digit US ZIP code for the locationlongitude· number · optionnel
Longitude in decimal degrees (use with latitude instead of zip_code)forecast_date· string · optionnel
Forecast mode only (rejected in current mode): keep just the forecast valid on this date (YYYY-MM-DD). Omit to get every issued forecast day. When no issued day matches, the result is empty and its message lists the issued dates.
Exemple d'appel{"name": "epa_get_air_quality", "arguments": {"mode": "current", "latitude": 1, "zip_code": "texte", "longitude": 1, "forecast_date": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"mode": "texte", "error": {}, "message": "texte", "attribution": "texte", "observations": []}} - epa_get_ejscreen≈ 2102 tokens
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.
Paramètres, retour & exemple (4)
Paramètresunit· string · optionnel · miles | kilometers
Unit for distance. Kilometers are converted to miles (× 0.621371) before the request.distance· number · optionnel
Buffer radius around the point, in the given unit (default 1). The miles-equivalent must be 15 or less.latitude· number · requis
Latitude in decimal degrees.longitude· number · requis
Longitude in decimal degrees.
Exemple d'appel{"name": "epa_get_ejscreen", "arguments": {"latitude": 1, "longitude": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"error": {}, "notice": "texte", "coverage": {}, "location": {}, "reportUrl": "texte", "dataSource": "texte", "demographic": [], "environmental": [], "demographicIndex": {}, "supplementalDemographicIndex": {}}} - epa_get_facility≈ 2826 tokens
Retrieve a full compliance profile for a single EPA-regulated facility by EPA Registry ID. Returns facility metadata, ECHO's facility-level compliance status, a per-statute (CAA, CWA, RCRA, SDWA, and others ECHO tracks) compliance summary, the newest 100 inspections and other compliance monitoring records from the last five years, five years of formal enforcement actions with penalties, the latest TRI release total, and the facility's TRI facility IDs for epa_get_tri_releases. Use epa_search_facilities to discover Registry IDs. For area-level enforcement discovery use epa_search_violations instead.
Paramètres, retour & exemple (1)
Paramètresregistry_id· string · requis
EPA FRS Registry ID for the facility (obtained from epa_search_facilities)
Exemple d'appel{"name": "epa_get_facility", "arguments": {"registry_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"zip": "texte", "city": "texte", "name": "texte", "error": {}, "state": "texte", "county": "texte", "notice": "texte", "street": "texte", "fipsCode": "texte", "latitude": 1, "programs": {}, "longitude": 1}} - epa_get_tri_releases≈ 1478 tokens
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, or from the triFacilityIds of epa_get_facility for a facility you already hold a Registry ID for. A 12-digit EPA Registry ID is a different identifier and matches no TRI records.
Paramètres, retour & exemple (3)
Paramètresyear· integer · optionnel
Reporting year to retrieve. Omit for all available years, newest first. At most 500 filings are returned; narrow with year or chemical_name when capped. TRI data is typically available through ~2 years prior to the current year.facility_id· string · requis
15-character TRI facility ID (e.g. "9867WSNRWD1981S") — the facilityId field returned by epa_search_tri_releases, or an entry of epa_get_facility triFacilityIds. A 12-digit EPA Registry ID matches no TRI records.chemical_name· string · optionnel
Optional filter to restrict results to a specific chemical (partial match, case-insensitive). Commas, apostrophes, brackets, and Greek letters are matched as written, e.g. "4,4'-Methylenedianiline".
Exemple d'appel{"name": "epa_get_tri_releases", "arguments": {"facility_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"cap": 1, "error": {}, "shown": 1, "notice": "texte", "message": "texte", "guidance": "texte", "releases": [], "truncated": true, "facilityId": "texte"}} - epa_search_facilities≈ 1724 tokens
Search EPA-regulated facilities by location, environmental program, or compliance status across CAA, CWA, RCRA, TRI, and SDWA. Returns facility name, EPA Registry ID, coordinates, county FIPS code, per-program registration flags, five-year inspection and 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.
Paramètres, retour & exemple (10)
Paramètrescity· string · optionnel
City name, case-insensitive; matches cities that begin with it ("TACOMA", or "SEAT" for SEATTLE and SEATAC). Pair with state.limit· integer · optionnel
Maximum number of facilities to return (1–100)state· string · optionnel
2-letter US state abbreviation (e.g. "WA", "CA")latitude· number · optionnel
Latitude in decimal degrees. Pair with longitude and radius_miles for proximity search.programs· array · optionnel
Restrict results to facilities registered in one environmental program — ECHO filters on a single program per search, so pass one value. CAA=air, CWA=water, RCRA=hazardous waste, TRI=toxic releases, SDWA=drinking water.zip_code· string · optionnel
5-digit ZIP code to search withinlongitude· number · optionnel
Longitude in decimal degrees. Pair with latitude and radius_miles for proximity search.active_only· boolean · optionnel
When true, return only facilities with an active permitradius_miles· number · optionnel
Search radius in miles around the given latitude/longitude (max 100). Requires latitude and longitude.has_violation· boolean · optionnel
When true, return only facilities with at least one program in significant noncompliance (complianceStatus "Significant Violation")
Exemple d'appel{"name": "epa_search_facilities", "arguments": {"city": "texte", "limit": 1, "state": "texte", "latitude": 1, "programs": [], "zip_code": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"error": {}, "message": "texte", "facilities": [], "totalCount": 1}} - epa_search_superfund≈ 1212 tokens
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.
Paramètres, retour & exemple (8)
Paramètrescity· string · optionnel
City name (partial match within state, case-insensitive). Punctuation is matched as written ("St. Louis", "Coeur d'Alene").limit· integer · optionnel
Maximum number of sites to return (1–200)state· string · optionnel
2-letter US state abbreviation to filter siteslatitude· number · optionnel
Latitude for proximity search (use with longitude and radius_miles)zip_code· string · optionnel
5-digit ZIP code to filter siteslongitude· number · optionnel
Longitude for proximity search (use with latitude and radius_miles)npl_status· string · optionnel · listed | not-listed | proposed | all
Filter by NPL (National Priorities List) status: listed=final NPL, not-listed=not on NPL, proposed=proposed for listing, all=include allradius_miles· number · optionnel
Search radius in miles from the given coordinates. Required when using latitude+longitude.
Exemple d'appel{"name": "epa_search_superfund", "arguments": {"city": "texte", "limit": 1, "state": "texte", "latitude": 1, "zip_code": "texte", "longitude": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"error": {}, "sites": [], "notice": "texte", "message": "texte", "totalCount": 1}} - epa_search_tri_releases≈ 1709 tokens
Search Toxic Release Inventory data across facilities in a state or county, for one reporting year or, without year, every available year newest first. 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.
Paramètres, retour & exemple (6)
Paramètresyear· integer · optionnel
Reporting year. Omit to search every available year in the state, newest reporting year first, so limit keeps the most recent filings. TRI data lags ~18 months.limit· integer · optionnel
Maximum number of release records to return (1–200)state· string · requis
2-letter US state abbreviation (required, e.g. "WA", "TX")county· string · optionnel
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. Punctuation is matched as written ("Prince George's").chemical_name· string · optionnel
Optional filter to restrict results to a specific chemical (partial match, case-insensitive). Commas, apostrophes, brackets, and Greek letters are matched as written, e.g. "4,4'-Methylenedianiline".include_release_breakdown· boolean · optionnel
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.
Exemple d'appel{"name": "epa_search_tri_releases", "arguments": {"state": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"cap": 1, "error": {}, "shown": 1, "state": "texte", "notice": "texte", "message": "texte", "releases": [], "truncated": true}} - epa_search_violations≈ 1498 tokens
Search EPA civil and criminal enforcement cases by state, ZIP code, regulatory program, case type, or filing-date range. Returns case identifier, programs involved, penalty assessed, settlement and filing dates, 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.
Paramètres, retour & exemple (7)
Paramètreslimit· integer · optionnel
Maximum number of cases to return (1–100)state· string · optionnel
2-letter US state abbreviation to filter cases (e.g. "TX", "CA")program· string · optionnel · CAA | CWA | RCRA | SDWA | CERCLA | FIFRA | TSCA
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. Matches any law a case cites, so a returned case's programsViolated (its primary law) can differ.zip_code· string · optionnel
5-digit ZIP code of the case's facility locationcase_type· string · optionnel · civil | criminal | all
Filter by case type: civil (regulatory violations), criminal (willful violations), or all. A filing-date range covers civil cases only: with a date, all returns civil cases and criminal is rejected.date_filed_end· ? · optionnel
Latest filing date, inclusive (YYYY-MM-DD). Civil cases only. Omit, or pass "", for no upper bound.date_filed_start· ? · optionnel
Earliest filing date, inclusive (YYYY-MM-DD). Civil cases only. Omit, or pass "", for no lower bound.
Exemple d'appel{"name": "epa_search_violations", "arguments": {"limit": 1, "state": "texte", "program": "CAA", "zip_code": "texte", "case_type": "civil", "date_filed_end": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"cases": [], "error": {}, "notice": "texte", "message": "texte", "totalCount": 1}} - epa_search_water_systems≈ 1226 tokens
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.
Paramètres, retour & exemple (5)
Paramètreslimit· integer · optionnel
Maximum number of systems to return (1–200)state· string · optionnel
2-letter US state abbreviation (e.g. "WA", "CA")pws_type· string · optionnel · community | non-transient | transient
Filter by public water system type: community=permanent residences, non-transient=regular non-residents (schools, businesses), transient=occasional users (campgrounds)zip_code· string · optionnel
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 serveshas_violation· boolean · optionnel
When true, return only systems with an open SDWIS violation (not yet returned to compliance). Works with state, zip_code, or both.
Exemple d'appel{"name": "epa_search_water_systems", "arguments": {"limit": 1, "state": "texte", "pws_type": "community", "zip_code": "texte", "has_violation": true}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"error": {}, "notice": "texte", "message": "texte", "systems": [], "totalCount": 1}}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».