Access EPA environmental data — facility compliance (ECHO), toxic releases (TRI), Superfund sites, drinking water systems, and real-time air quality (AirNow) via MCP. STDIO or Streamable HTTP.
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- !No standard license detected
git clone https://github.com/cyanheads/epa-mcp-server{
"mcpServers": {
"epa": {
"command": "node",
"args": ["/path/to/epa-mcp-server/dist/index.js"],
"env": {
"AIRNOW_API_KEY": "<airnow_api_key>"
}
}
}
}AIRNOW_API_KEYResumen de MCP Servers
<div align="center">
<h1>@cyanheads/epa-mcp-server</h1>
<p><b>Access EPA environmental data — facility compliance (ECHO), toxic releases (TRI), Superfund sites, drinking water systems, and real-time air quality (AirNow) via MCP. STDIO or Streamable HTTP.</b>
<div>8 Tools • 2 Resources</div>
</p>
</div>
<div align="center">
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/epa-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/epa-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
</div>
<div align="center">
[](https://github.com/cyanheads/epa-mcp-server/releases/latest/download/epa-mcp-server.mcpb) [](https://cursor.com/en/install-mcp?name=epa-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvZXBhLW1jcC1zZXJ2ZXIiXSwiZW52Ijp7IkFJUk5PV19BUElfS0VZIjoieW91ci1hcGkta2V5In19) [](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22epa-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fepa-mcp-server%22%5D%2C%22env%22%3A%7B%22AIRNOW_API_KEY%22%3A%22your-api-key%22%7D%7D)
[](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)
</div>
---
## Tools
8 tools spanning EPA facility compliance, toxic chemical releases, Superfund cleanup sites, drinking water safety, and real-time air quality:
| Tool | Description |
|:---|:---|
| `epa_search_facilities` | Search EPA-regulated facilities by location, industry, or compliance status across all environmental programs (CAA, CWA, RCRA, TRI, SDWA). Returns facility name, EPA Registry ID, coordinates, county FIPS, per-program compliance flags, inspection counts, penalty totals, and TRI release totals. |
| `epa_get_facility` | Retrieve a full compliance profile for a single EPA-regulated facility: compliance status per program, inspection dates, formal enforcement actions, penalty amounts, and TRI annual release totals. Aggregates multiple ECHO DFR endpoints in parallel. |
| `epa_search_violations` | Search EPA civil and criminal enforcement cases by state, regulatory program, or date range. Returns case identifier, facility name and Registry ID, programs involved, penalty assessed, settlement date, and case type. |
| `epa_get_air_quality` | Get AQI observations or forecasts for a location. Returns per-pollutant AQI values (PM2.5, ozone, CO, SO2, NO2), AQI category (Good through Hazardous), reporting area name, and observation timestamp. |
| `epa_get_tri_releases` | Query Toxic Release Inventory annual chemical release data for a specific facility by medium (air, water, land, underground injection) and reporting year. |
| `epa_search_tri_releases` | Search Toxic Release Inventory data across facilities in a state or county for a given year. Returns facility name, TRI ID, chemical name, total releases by medium, and facility coordinates. |
| `epa_search_superfund` | Search Superfund (CERCLA/SEMS) sites by location or NPL listing status. Accepts state/city/ZIP or lat/lng + radius for proximity searches. Returns site name, EPA ID, NPL status, cleanup status, and coordinates. |
| `epa_search_water_systems` | Search drinking water systems (SDWIS) by state or ZIP code. Returns system name, PWSID, population served, primary water source, and active violation status. |
### `epa_search_facilities`
Search for EPA-regulated facilities with cross-program compliance data.
- Geographic filters: ZIP code, state, city (city requires state)
- Program filter: narrow to CAA, CWA, RCRA, TRI, or SDWA registrants
- Compliance filter: `has_violation` flag to surface only non-compliant facilities
- Returns `RegistryID` (key for `epa_get_facility`), `FacFIPSCode` (county FIPS for Census chaining), and coordinates
- Results cap enforced — unscoped searches are prohibited at the input validation layer
---
### `epa_get_facility`
Retrieve a comprehensive compliance profile by EPA Registry ID.
- Aggregates 3–5 ECHO DFR endpoints in parallel: program flags and TRI totals, compliance summary, inspection/enforcement history, CAA details (if registered), CWA/NPDES permit details (if registered)
- Uses `Promise.allSettled` — partial data returned even if one upstream endpoint fails
- Includes formal enforcement actions, penalty amounts, and inspection dates across all programs
---
### `epa_search_violations`
Search area-level EPA enforcement cases — distinct from per-facility history in `epa_get_facility`.
- Program filter: CAA, CWA, RCRA, SDWA, CERCLA, FIFRA, or TSCA
- Case type: civil, criminal, or all
- Date range filtering by filing date (ISO 8601)
- Returns case identifier, affected facility name and Registry ID for downstream `epa_get_facility` lookup
---
### `epa_get_air_quality`
Get current AQI observations or daily forecasts from AirNow.
- Accepts ZIP code or latitude/longitude coordinates
- `mode: current` returns the latest observed AQI per pollutant; `mode: forecast` returns daily AQI forecasts (requires `forecast_date`)
- AQI categories: Good (1) through Hazardous (6) with numeric and text category
- Data is preliminary — suitable for awareness, not regulatory or enforcement decisions
- AirNow responses cached at ~1 hour TTL to respect rate limits
---
### `epa_get_tri_releases`
Query per-chemical release breakdown for a single TRI facility.
- Accepts TRI facility ID from `epa_search_facilities` results
- Returns release quantities by medium: air, water, land, underground injection
- Optional year filter (defaults to most recent available); optional chemical name filter
- TRI data lags ~18 months — most recent available year is typically 2 years prior to current
---
### `epa_search_tri_releases`
Identify top polluters in a region via TRI data.
- State and optional county scope; required year parameter
- Optional chemical name filter to focus on a specific substance
- Returns facility coordinates for downstream map or proximity analysis
- Complement to `epa_get_tri_releases` — use this for area discovery, then drill into a specific facility
---
### `epa_search_superfund`
Search Superfund (CERCLA/SEMS) sites by location or proximity.
- Two input shapes: state/city/ZIP for administrative filters, or lat/lng + radius for proximity
- NPL status filter: listed, not-listed, proposed, or all
- Returns site cleanup status and coordinates for downstream spatial analysis
---
### `epa_search_water_systems`
Identify drinking water systems with active or recent violations.
- State and optional ZIP code scope
- `has_violation` flag surfaces only systems with current violations
- PWS type filter: community (`CWS`), non-transient non-community (`NTNCWS`), or transient non-community (`TNCWS`)
## Resources and prompts
| Type | Name | Description |
|:---|:---|:---|
| Resource | `epa://facility/{registry_id}` | Full compliance profile for a facility by EPA Registry ID (same data as `epa_get_facility`) |
| Resource | `epa://superfund/{site_id}` | Superfund site record by SEMS site ID |
All resource data is also reachable via tools. Use `epa_get_facility` and `epa_search_superfund` for programmatic access in tool-only MCP clients.
## Features
Built on [`@cyanheads/mcp-ts-core`](https://www.npmjs.com/package/@cyanheads/mcp-ts-core):
- Declarative tool and resource definitions — single file per primitive, framework handles registration and validation
- Unified error handling — handlers throw, framework catches, classifies, and formats
- Pluggable auth: `none`, `jwt`, `oauth`
- Swappable storage backends: `in-memory`, `filesystem`, `Supabase`, `Cloudflare KV/R2/D1`
- Structured logging with optional OpenTelemetry tracing
- STDIO and Streamable HTTP transports
EPA-specific:
- Three complementary EPA APIs unified behind a single `epa_` tool surface: ECHO (facility compliance), Envirofacts DMAP (TRI, Superfund, SDWIS), and AirNow (real-time air quality)
- Parallel ECHO DFR aggregation in `epa_get_facility` — 3–5 upstream calls resolved concurrently with `Promise.allSettled`
- AirNow response caching (~1 hour TTL) to stay within per-key rate limits
- DMAP coordinate normalization — `tri.tri_facility` DDMMSS integers converted to decimal degrees
Agent-friendly output:
- Cross-tool join keys surfaced on every response — `RegistryID` and `FacFIPSCode` from facility search feed directly into compliance, TRI, and Census API workflows
- Typed enforcement and compliance status fields — agents branch on data values, not string parsing
- Structured partial failure — `epa_get_facility` returns available program data even when one DFR endpoint is unavailable, with per-section status
## Getting started
Add the following to your MCP client configuration file. An AirNow API key is required for `epa_get_air_quality` — register free at [docs.airnowapi.org](https://docs.airnowapi.org/account/request/). ECHO and DMAP tools work without auLo que la gente pregunta sobre epa-mcp-server
¿Qué es cyanheads/epa-mcp-server?
+
cyanheads/epa-mcp-server es mcp servers para el ecosistema de Claude AI. Access EPA environmental data — facility compliance (ECHO), toxic releases (TRI), Superfund sites, drinking water systems, and real-time air quality (AirNow) via MCP. STDIO or Streamable HTTP. Tiene 1 estrellas en GitHub y se actualizó por última vez today.
¿Cómo se instala epa-mcp-server?
+
Puedes instalar epa-mcp-server clonando el repositorio (https://github.com/cyanheads/epa-mcp-server) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.
¿Es seguro usar cyanheads/epa-mcp-server?
+
Nuestro agente de seguridad ha analizado cyanheads/epa-mcp-server y le ha asignado un Trust Score de 62/100 (tier: OK). Revisa el desglose completo de comprobaciones superadas y flags en esta página.
¿Quién mantiene cyanheads/epa-mcp-server?
+
cyanheads/epa-mcp-server es mantenido por cyanheads. La última actividad registrada en GitHub es de today, con 4 issues abiertos.
¿Hay alternativas a epa-mcp-server?
+
Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.
Despliega epa-mcp-server en tu cloud
Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.
¿Mantienes este repo? Añade un badge a tu README
Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.
[](https://claudewave.com/repo/cyanheads-epa-mcp-server)<a href="https://claudewave.com/repo/cyanheads-epa-mcp-server"><img src="https://claudewave.com/api/badge/cyanheads-epa-mcp-server" alt="Featured on ClaudeWave: cyanheads/epa-mcp-server" width="320" height="64" /></a>Más MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
⭐AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts.🎯 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。