Epa Mcp Server

io.github.cyanheads由 GitHub 帳號 cyanheads 發布v0.8.0更新於 Nov 1, 2026

Search EPA compliance, TRI, Superfund, drinking-water, EJScreen, and AirNow data.

已驗證Streamable HTTP可網頁執行位置與生活安全與監控資料與分析

概覽

AI 產生的概覽

唯讀 MCP 伺服器,提供美國 EPA 環境資料:設施合規、有毒排放、超級基金場址、飲用水、EJScreen 與 AirNow 空氣品質。

可以做什麼
  • 搜尋並檢視受監管設施的合規狀態、檢查紀錄、執法行動與罰款
  • 檢索民事與刑事執法案件,並開啟案件查看涉及設施、被告與和解內容
  • 依設施或依州、郡查詢有毒物質排放清單(TRI)化學品排放資料
  • 依位置或 NPL 狀態搜尋超級基金場址,並讀取場址的污染物關聯紀錄
  • 搜尋公共飲用水系統並檢查目前違規情況
  • 取得某點及緩衝區的 EJScreen 環境正義指標,以及 AirNow 目前或預報空氣品質指標
適用情境
適合需要回答美國環境合規、污染排放、污染場址整治、供水系統或環境正義篩選相關問題的情境,也適合沿執法與排放紀錄追蹤某個設施。
執行需求
可作為公開託管的 Streamable HTTP 端點直接使用,無需安裝;也可透過 npx、bunx 或 Docker 在本機執行,需要 Bun 1.4.0 以上或 Node.js 24 以上。ECHO、DMAP 與 EJScreen 資料無需驗證。AIRNOW_API_KEY 為選用項目,僅用於啟用空氣品質工具,託管實例未設定此金鑰。需要連線至 EPA 與 EJAM 介面的網路存取。
安裝前請注意
所有工具皆為唯讀,但資料來自第三方:AirNow 讀值為初步資料,不適用於監管或執法決策;TRI 申報約落後 18 個月;EJScreen 資料來自 EPA 停止公開存取後由社群維護的重新託管服務。啟用 LOG_TOOL_FAILURE_PAYLOADS 會記錄失敗呼叫的參數與結果,自由文字中的密鑰可能仍會曝光。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Epa Mcp Server,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.cyanheads%2Fepa-mcp-server/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "epa": {
      "type": "http",
      "url": "https://epa.caseyjhand.com/mcp"
    }
  }
}

README

@cyanheads/epa-mcp-server

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.

11 Tools • 2 Resources

Public Hosted Server: https://epa.caseyjhand.com/mcp


Overview

EPA environmental data across five federal programs — facility compliance (ECHO), toxic releases (TRI), Superfund sites, drinking water systems (SDWIS), and environmental-justice screening (EJScreen) — plus real-time AirNow air quality. Pull a facility's inspection and enforcement history, track toxic releases across a region, or screen any point for environmental-justice risk.

Tools

ToolDescription
epa_echo_search_facilitiesSearch EPA-regulated facilities by location, county, name, NAICS code, environmental program, or compliance status across CAA, CWA, RCRA, TRI, and SDWA
epa_echo_get_facilityFull compliance profile for one facility by EPA Registry ID or program ID — compliance status, inspections, enforcement actions, penalties, drinking-water violations, and TRI IDs
epa_echo_search_violationsSearch EPA civil and criminal enforcement cases by state, ZIP code, program, case type, or date range
epa_echo_get_caseOne civil enforcement case with its facilities, defendants, and settlements
epa_airnow_get_conditionsCurrent AQI observations or the issued AQI forecast from AirNow
epa_tri_get_facility_releasesPer-chemical Toxic Release Inventory data for a single facility
epa_tri_search_releasesToxic Release Inventory records across facilities in a state or county
epa_superfund_search_sitesSearch Superfund (CERCLA/SEMS) sites by location or NPL listing status
epa_superfund_get_siteExact Superfund site record and all contaminant associations
epa_water_search_systemsSearch drinking water systems (SDWIS) by state, ZIP code, or county served
epa_ejscreen_get_scoresEJScreen environmental-justice indicators for a point and buffer

Resources

ResourceDescription
epa://facility/{registry_id}Full compliance profile for a facility by EPA Registry ID or program ID (the default pages of epa_echo_get_facility)
epa://superfund/{site_id}Superfund site record and contaminant associations by SEMS site ID

All resource data is also reachable via tools — use epa_echo_get_facility and epa_superfund_get_site for programmatic access in tool-only MCP clients.

Capability reference

epa_echo_search_facilities tool

  • Provide ZIP code, state, city (prefix match, preferably with state), county (prefix match on the recorded name; needs state), 5-digit county_fips, or latitude + longitude + radius_miles (max 100 miles). facility_name (whole words in any order, no commas; also matches other names ECHO records for the facility) and naics (2–6 digits, prefix match) narrow a geographic search
  • Up to 100 facilities per call (default 50); a larger limit, up to 5,000, returns 100 with a limitNotice. Page with offset and nextOffset; totalCount is the match before limit and offset
  • Returns registryId for epa_echo_get_facility, triFacilityIds for epa_tri_get_facility_releases, county and fipsCode, coordinates, per-program flags, and five-year inspection and penalty totals. effectiveQuery echoes the filters as sent
  • programs takes one of CAA, CWA, RCRA, TRI, or SDWA; has_violation keeps facilities in significant noncompliance; active_only keeps facilities with an active permit

epa_echo_get_facility tool

  • registry_id is a Registry ID from epa_echo_search_facilities or a program ID ECHO resolves to one: a PWSID from epa_water_search_systems, a TRI facility ID, an NPDES permit, or a RCRA handler ID. The profile carries the resolved registryId
  • Returns complianceStatus, the naics codes its programs record, a per-statute programCompliance summary, five years of enforcement actions with penalties (caseId feeds epa_echo_get_case), the latest TRI total with triReleasesTransfersYear, and triFacilityIds for epa_tri_get_facility_releases
  • Two paged lists: inspections from the last five years, newest first (inspections_limit default and cap 100, inspections_offset; inspectionsTotal counts them all and inspectionsNextOffset continues), and drinkingWaterViolations for a public water system, newest compliance period first, each with contaminant, measured level, MCL, status, and enforcement actions (drinking_water_violations_limit default 50, cap 200, drinking_water_violations_offset; drinkingWaterViolationsTotal and drinkingWaterViolationsNextOffset). A larger limit returns the cap with a limitNotice, and truncated is true while either list has more
  • If the status lookup fails, the profile returns without complianceStatus and a notice says so; an unknown ID fails as facility_not_found

epa_echo_search_violations tool

  • Requires state or zip_code; up to 100 cases per call (default 50), and a larger limit up to 5,000 returns 100 with a limitNotice. Page with offset and nextOffset; effectiveQuery echoes the filters as sent
  • program filters CAA, CWA, RCRA, SDWA, CERCLA, EPCRA, FIFRA, or TSCA, matching any law a case cites; case_type is civil, criminal, or all (default)
  • date_filed_start / date_filed_end (YYYY-MM-DD, inclusive) bound the filing date. Only civil cases carry filing dates, so with a date all returns civil cases with a notice, and criminal is rejected
  • Returns caseId, caseName, caseType, caseStatus, enforcementOutcome, leadAgency, the primary law (programsViolated) and primarySection, federal and state/local penalties, cost recovery, compliance action and SEP costs, and filed, settlement, and closed dates. Criminal cases omit status, outcome, state/local penalty, and cost fields
  • Case rows name no facility: pass a civil caseId to epa_echo_get_case

epa_echo_get_case tool

  • case_id is a civil case number: a caseId from epa_echo_search_violations (such as 03-2014-7010) or a formal action's caseId from epa_echo_get_facility. A criminal CR_ number fails as criminal_case before any request; an unknown number fails as case_not_found
  • Returns the case's category code, enforcement type, status, lead agency, relief sought, outcome, court and DOJ docket numbers, summary, and penalty, cost-recovery, compliance-action, and SEP totals, plus lawsAndSections, defendants, pollutants, and milestones
  • facilities lists the facilities the case names, one per Registry ID, with address, NAICS and SIC codes, and the program IDs the case links; pass a registryId to epa_echo_get_facility
  • enforcementConclusions lists each order, consent decree, or other settlement with its facilities, dates, penalties and costs, complying actions, pollutant reductions, and Supplemental Environmental Projects
  • The report is not paged: a case naming 115 facilities and 117 settlements returns about 120 KB across both response surfaces

epa_airnow_get_conditions tool

  • Provide zip_code (5 digits, or a ZIP+4 read as its first five) or both latitude and longitude; mode is current (default) or forecast
  • Current mode returns each pollutant's latest hourly NowCast AQI from the closest monitor within 50 miles; forecast mode returns each issued day with dateValid, actionDay, and discussion, and forecast_date (a real YYYY-MM-DD date) keeps one day
  • Readings carry categoryName and categoryNumber (1 Good–6 Hazardous); attribution marks the data preliminary and unsuitable for regulatory or enforcement decisions
  • Registered only when AIRNOW_API_KEY is set; responses cache for about one hour

epa_tri_get_facility_releases tool

  • facility_id is the TRI facilityId from epa_tri_search_releases or epa_echo_get_facility triFacilityIds; optional year (1987–2030) and partial chemical_name
  • Returns per-chemical on-site releases to air, water, land, and underground injection, their sum totalOnSiteReleasesInLbs, and the Form R Section 8.8 oneTimeReleaseInLbs, which the media quantities already include, newest reporting year first
  • limit defaults to and is capped at 500 filings; a larger value up to 5,000 returns 500 with a limitNotice. Page with offset and nextOffset; truncated, shown, cap, and guidance mark a page with more
  • Quantities are in pounds; dioxin records reported in grams are converted and carry reportedUnit: "grams"

epa_tri_search_releases tool

  • Requires 2-letter state (any case); optional county (case-insensitive partial match on the bare name; a trailing County, Parish, Borough, City and Borough, Census Area, or Municipality is dropped), partial chemical_name, and year; newest reporting year first when year is omitted
  • Up to 200 records per call (default 50); a larger limit up to 5,000 returns 200 with a limitNotice. Page with offset and nextOffset; effectiveQuery echoes the filters as sent. Records come in reporting-year order, not ranked by quantity
  • Returns facilityId for epa_tri_get_facility_releases, registryId for epa_echo_get_facility, parentCompany, and the Form R Section 8.8 oneTimeReleaseInLbs; include_release_breakdown: true adds on-site releases to air, water, land, and underground injection plus totalOnSiteReleasesInLbs, at the cost of one more upstream request (up to ~20 seconds when EPA has not cached it)
  • Dioxin records reported in grams are converted to pounds and carry reportedUnit: "grams"

epa_superfund_search_sites tool

  • Provide state/city/zip_code (a ZIP+4 searches its 5-digit ZIP), or latitude + longitude + radius_miles (0.1–500); up to 200 sites per call (default 50), and a larger limit up to 5,000 returns 200 with a limitNotice. Page with offset and nextOffset; effectiveQuery echoes the filters as sent
  • Returns site identifiers, location, raw NPL code and source label, plus sparse non-NPL assessment, archive, EPA ID, and federal facility metadata. npl_status filters listed (F/A), not-listed (N), proposed (P), deleted (D), removed (R), withdrawn (W), or all (default)
  • exclude_archived: true requires SEMS archived_ind=N before pagination or proximity selection; the default retains all archive statuses. Assessment labels do not describe cleanup progress
  • Administrative searches return sites in SEMS site ID order and carry no totalCount, since DMAP reports no match count; follow nextOffset
  • Proximity searches rescan every latitude/longitude candidate on each call, apply exact distance, and page the nearest-first order (site ID breaks ties). totalCount is the number of matching sites, and a notice gives the page's place in it ("Showing sites a–b of N") and says sites without coordinates cannot be located. All candidate pages share a 50-second deadline — narrow the radius or add filters if it times out

epa_superfund_get_site tool

  • Provide a site_id from epa_superfund_search_sites, preserving leading zeros
  • Returns { site, contaminants }: site metadata plus every recorded contaminant association, including medium, operable unit, action, and type code when available. Repeated chemicals and duplicate source rows are retained
  • An existing site with no associations returns contaminants: []; a missing site returns NotFound. Site and paged contaminant reads share one 50-second deadline; upstream failures remain errors
  • Associations describe EPA action/media records, not current exposure, concentrations, or current risk

epa_water_search_systems tool

  • Requires state (a 2-letter code, or an EPA region code 01–10 for tribal systems) or zip_code; up to 200 systems per call (default 50) in PWSID order, and a larger limit up to 5,000 returns 200 with a limitNotice. Page with offset and nextOffset; totalCount appears when the call saw the whole match; effectiveQuery echoes the filters as sent
  • zip_code matches each system's address of record by prefix, so stored ZIP+4s match, and not its service area. county (needs state) finds the systems serving a county: a trailing County, Parish, Borough, City and Borough, Census Area, or Municipality is dropped, and a system matches only when one county it serves is that county, so Harris does not match Harrison
  • has_violation keeps systems with a current SDWA violation in ECHO, which applies EPA's Enforcement Response Policy and so flags fewer systems than SDWIS's unresolved violation records; pws_type is community, non-transient, or transient, returned as CWS / NTNCWS / TNCWS in type; active_only keeps systems SDWIS lists as active
  • A ZIP or county has_violation check reads up to 1,000 systems per call; when that fills before the page does, a notice says so and nextOffset continues
  • Pass a returned pwsid as registry_id to epa_echo_get_facility for the system's drinking-water violations

epa_ejscreen_get_scores tool

  • Requires latitude and longitude; distance defaults to 1, unit to miles (kilometers accepted); buffer capped at 15 miles
  • Returns 13 environmental and 6 demographic indicators with national/state percentiles, plus the demographicIndex and supplementalDemographicIndex, each with its usAverage. Both indexes are unitless, shifted means of z-scores, not percentages; an indicator's ejIndex is the Demographic Index × its US percentile, population-weighted over the buffer
  • coverage.valid: false with a note when the point is outside EJAM's bounds (the 50 states, DC, Puerto Rico, and the U.S. Island Areas; no request is made), the buffer holds no Census block (a larger distance may help below 15 miles), or its blocks have no residents (state, population, and block-group count are kept)
  • Data is EJAM's ACS 2018–2022 release of EJScreen (EJScreen 2.3 method), served by the community-maintained EJAM API (Public Environmental Data Partners)

epa://facility/{registry_id} resource

  • registry_id is a Registry ID from epa_echo_search_facilities or a program ID ECHO resolves to one, such as a PWSID from epa_water_search_systems
  • Returns the epa_echo_get_facility compliance profile at its default pages of inspections and drinking-water violations (inspectionsNextOffset and drinkingWaterViolationsNextOffset mark more; page them with the tool); errors when no facility resolves

epa://superfund/{site_id} resource

  • site_id comes from epa_superfund_search_sites
  • Returns the same data as epa_superfund_get_site, with site fields at the top level and an additive contaminants array; errors when no SEMS record resolves

Features

Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.

EPA-specific:

  • One epa_ tool surface over ECHO (facility compliance), Envirofacts DMAP (TRI, Superfund, SDWIS), AirNow (air quality), and the community-maintained EJAM API (EJScreen, ACS 2018–2022)
  • AirNow responses cache for about one hour to stay within per-key rate limits
  • TRI reporting lags about 18 months; the latest reporting year is typically two years behind

Agent-friendly output:

  • Search results carry the IDs the next tool needs: registryId, fipsCode, facilityId, triFacilityIds, caseId, and pwsid
  • Every search pages with offset and nextOffset, and epa_echo_get_facility pages its inspections and drinking-water violations with inspections_offset and drinking_water_violations_offset; a limit above a tool's cap, up to 5,000, returns the cap with a limitNotice
  • Searches return effectiveQuery, the filters as the server sent them upstream, so a result states what it matched
  • epa_echo_get_facility returns a partial profile with a notice when the status lookup fails
  • Empty searches return a message that suggests how to broaden them

Getting started

Public Hosted Instance

A public instance is available at https://epa.caseyjhand.com/mcp — no installation required. It runs without an AirNow key, so epa_airnow_get_conditions is not available there; the other 10 tools are. Point any MCP client at it via Streamable HTTP:

json
{  "mcpServers": {    "epa-mcp-server": {      "type": "streamable-http",      "url": "https://epa.caseyjhand.com/mcp"    }  }}

Self-Hosted / Local

Add the following to your MCP client configuration file. An AirNow API key is optional — set AIRNOW_API_KEY to enable epa_airnow_get_conditions (register free at docs.airnowapi.org); without it the server starts with the other 10 tools. ECHO, DMAP, and EJScreen tools work without authentication.

json
{  "mcpServers": {    "epa-mcp-server": {      "type": "stdio",      "command": "bunx",      "args": ["@cyanheads/epa-mcp-server@latest"],      "env": {        "MCP_TRANSPORT_TYPE": "stdio",        "MCP_LOG_LEVEL": "info",        "AIRNOW_API_KEY": "your-airnow-key"      }    }  }}

Or with npx (no Bun required):

json
{  "mcpServers": {    "epa-mcp-server": {      "type": "stdio",      "command": "npx",      "args": ["-y", "@cyanheads/epa-mcp-server@latest"],      "env": {        "MCP_TRANSPORT_TYPE": "stdio",        "MCP_LOG_LEVEL": "info",        "AIRNOW_API_KEY": "your-airnow-key"      }    }  }}

Or with Docker:

json
{  "mcpServers": {    "epa-mcp-server": {      "type": "stdio",      "command": "docker",      "args": [        "run", "-i", "--rm",        "-e", "MCP_TRANSPORT_TYPE=stdio",        "-e", "AIRNOW_API_KEY=your-airnow-key",        "ghcr.io/cyanheads/epa-mcp-server:latest"      ]    }  }}

For Streamable HTTP, set the transport and start the server:

sh
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 AIRNOW_API_KEY=... bun run start:http# Server listens at http://localhost:3010/mcp

Prerequisites

  • Bun v1.4.0 or higher (or Node.js v24+); development and Docker use Bun v1.4.4.
  • (Optional) An AirNow API key to enable epa_airnow_get_conditions — register free at docs.airnowapi.org/account/request. Without it the server runs the other 10 tools. ECHO, DMAP, and EJScreen tools require no API key.

Installation

  1. Clone the repository:
sh
git clone https://github.com/cyanheads/epa-mcp-server.git
  1. Navigate into the directory:
sh
cd epa-mcp-server
  1. Install dependencies:
sh
bun install
  1. Configure environment:
sh
cp .env.example .env# optionally set AIRNOW_API_KEY to enable the air quality tool

Configuration

All configuration is validated at startup via Zod schemas in src/config/. Key environment variables:

VariableDescriptionDefault
AIRNOW_API_KEYOptional. Enables epa_airnow_get_conditions.—
EPA_ECHO_BASE_URLECHO API base URLhttps://echodata.epa.gov/echo
EPA_DMAP_BASE_URLEnvirofacts DMAP API base URLhttps://data.epa.gov/dmapservice
EPA_AIRNOW_BASE_URLAirNow API base URLhttps://www.airnowapi.org/aq
EJSCREEN_API_BASE_URLEJScreen (EJAM) API base URLhttps://api.ejanalysis.com
MCP_TRANSPORT_TYPETransport: stdio or httpstdio
MCP_HTTP_PORTHTTP server port3010
MCP_HTTP_ENDPOINT_PATHHTTP endpoint path/mcp
MCP_SESSION_MODEHTTP sessions: auto, stateful, or statelessstateless
MCP_AUTH_MODEAuth mode: none, jwt, or oauthnone
MCP_LOG_LEVELLog level (RFC 5424)info
LOG_TOOL_FAILURE_PAYLOADSLog failed calls' arguments and results with key-name redaction. Secrets inside free-form values remain visible.false
LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTESByte cap per logged payload16384
LOGS_DIRDirectory for log files (Node.js only)<project-root>/logs
STORAGE_PROVIDER_TYPEStorage backend: in-memory, filesystem, supabase, cloudflare-kv/r2/d1in-memory
OTEL_ENABLEDEnable OpenTelemetry tracing and metricsfalse
OTEL_EXPORTER_OTLP_ENDPOINTOTLP base URL—
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT / OTEL_EXPORTER_OTLP_METRICS_ENDPOINTPer-signal endpoint overrides—
OTEL_EXPORTER_OTLP_LOGS_ENDPOINTEnables OTLP log export—

See .env.example for the full list of optional overrides.

Running the server

Local development

  • Build and run:

    sh
    # One-time buildbun run rebuild
    # Run the built serverbun run start:stdio# orbun run start:http
  • Run checks and tests:

    sh
    bun run devcheck   # Lint, format, typecheck, securitybun run test       # Vitest test suitebun run lint:mcp   # Validate MCP definitions against spec

Docker

sh
docker build -t epa-mcp-server .docker run --rm -e AIRNOW_API_KEY=your-key -p 3010:3010 epa-mcp-server

The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/epa-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

Project structure

DirectoryPurpose
src/index.tscreateApp() entry point — registers tools/resources and inits services.
src/configServer-specific environment variable parsing and validation with Zod.
src/mcp-server/toolsTool definitions (*.tool.ts). Eleven tools across ECHO, DMAP, EJAM, and AirNow.
src/mcp-server/resourcesResource definitions (*.resource.ts). Facility and Superfund URI handlers.
src/services/echoECHO REST API service layer — facility search, facility detail, enforcement case search and report, current drinking-water violators.
src/services/dmapEnvirofacts DMAP service layer — TRI releases, Superfund sites, drinking water systems.
src/services/airnowAirNow service layer — current and forecast AQI observations.
src/services/ejscreenEJScreen (EJAM) service layer — environmental-justice indicators for a point + buffer.
tests/Unit and integration tests mirroring src/.

Development guide

See CLAUDE.md for development guidelines and architectural rules. The short version:

  • Handlers throw, framework catches — no try/catch in tool logic
  • Use ctx.log for request-scoped logging, ctx.state for tenant-scoped storage
  • Register new tools and resources via the barrels in src/mcp-server/*/definitions/index.ts
  • Wrap external API calls: validate raw → normalize to domain type → return output schema; never fabricate missing fields
  • ECHO searches must enforce at least one geographic parameter — unscoped queries time out against the live API

Contributing

Issues are welcome. Run checks and tests before submitting:

sh
bun run devcheckbun run test

License

Apache-2.0 — see LICENSE for details.

來源:README.md,提交 6888cc6

工具

11

epa_echo_search_facilities

Search EPA Facilities

ECHO: Search EPA-regulated facilities by location, county, facility name, NAICS industry code, 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, TRI facility IDs, five-year inspection and penalty totals, and TRI release totals. Registry IDs returned here feed epa_echo_get_facility; TRI facility IDs feed epa_tri_get_facility_releases. Supports proximity search via latitude + longitude + radius_miles. At least one geographic filter (zip_code, state, city, county_fips, or a complete latitude+longitude+radius_miles triple) is required — unscoped searches time out. Page past limit with offset and nextOffset.

輸入參數citylimitnaicsstatecountyoffsetlatitudeprogramszip_codelongitudeactive_onlycounty_fips另有 3 個

epa_echo_get_facility

Get EPA Facility Compliance Profile

ECHO: Retrieve a full compliance profile for a single EPA-regulated facility by EPA Registry ID or EPA program ID. Returns facility metadata, the NAICS industry codes its programs record, ECHO's facility-level compliance status, a per-statute (CAA, CWA, RCRA, SDWA, and others ECHO tracks) compliance summary, inspections and other compliance monitoring records from the last five years (newest first, paged), five years of formal enforcement actions with penalties, five years of drinking-water violations with contaminant, measure, MCL, status, and enforcement actions (paged), the latest TRI release total, and the facility's TRI facility IDs for epa_tri_get_facility_releases. Use epa_echo_search_facilities to discover Registry IDs; pass a public water system's PWSID from epa_water_search_systems to get its drinking-water violations. For area-level enforcement discovery use epa_echo_search_violations instead.

輸入參數registry_id必填inspections_limitinspections_offsetdrinking_water_violations_limitdrinking_water_violations_offset

epa_echo_search_violations

Search EPA Enforcement Cases

ECHO: Search EPA civil and criminal enforcement cases by state, ZIP code, regulatory program, case type, or filing-date range. Returns case identifier, case type and status, lead agency (EPA or state), primary law and section, enforcement outcome, federal and state penalties, cost recovery, compliance action and SEP costs, and filing, settlement, and closing dates. Case rows name no facility: pass a civil caseId to epa_echo_get_case for the facilities, defendants, and settlements behind it. Designed for area-level violation discovery — for a single known facility's enforcement history use epa_echo_get_facility instead. At least one of state or zip_code is required. Page past limit with offset and nextOffset.

輸入參數limitstateoffsetprogramzip_codecase_typedate_filed_enddate_filed_start

epa_echo_get_case

Get EPA Enforcement Case

ECHO: Retrieve one civil enforcement case by case number, with the facilities, defendants, and settlements behind it. Returns the case's category, enforcement type, status, lead agency, relief sought, outcome, court and DOJ docket numbers, summary, and penalty, cost-recovery, compliance-action, and SEP totals; the laws and sections cited; the facilities the case names, one per EPA Registry ID, with address, NAICS and SIC codes, and the program IDs the case links (pass a registryId to epa_echo_get_facility for its compliance profile); defendants; pollutants; milestones; and every enforcement conclusion (order, consent decree, or other settlement) with its facilities, dates, penalties and costs, complying actions, pollutant reductions, and Supplemental Environmental Projects. Take the case number from epa_echo_search_violations or from a formal action's caseId in epa_echo_get_facility. Civil cases only: a criminal CR_ case number fails before any request.

輸入參數case_id必填

epa_tri_get_facility_releases

Get TRI Chemical Releases for Facility

TRI: Query Toxic Release Inventory annual chemical release data for a specific facility. Returns per-chemical release records with chemical name, reporting year, on-site releases by medium (air, water, land, underground injection) and their total, and the Form R one-time release quantity, newest reporting year first; page past 500 filings with offset and nextOffset. 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_tri_search_releases, or from the triFacilityIds of epa_echo_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.

輸入參數yearlimitoffsetfacility_id必填chemical_name

epa_tri_search_releases

Search TRI Releases by Region

TRI: 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, EPA Registry ID (the registry_id epa_echo_get_facility takes), parent company, chemical name, and the Form R one-time release quantity; set include_release_breakdown to add on-site releases by medium (air, water, land, and underground-injection) and their total, 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. Records come in reporting-year order, not ranked by quantity; page through a large match with offset and nextOffset. Use to build an environmental exposure profile for an area. Use epa_tri_get_facility_releases for detailed release records for a single facility. TRI data lags ~18 months from the current calendar year.

輸入參數yearlimitstate必填countyoffsetchemical_nameinclude_release_breakdown

epa_superfund_search_sites

Search Superfund Sites

Superfund: Search Superfund (CERCLA/SEMS) sites by location or NPL listing status. Returns site identifiers, source NPL status labels, non-NPL assessment and archive metadata when available, coordinates, and county FIPS code. Accepts either state/city/ZIP, returned in SEMS site ID order, or latitude+longitude+radius for proximity searches, ordered nearest first; page through a large match with offset and nextOffset. Proximity searches match only sites with usable coordinates and share a 50-second deadline; narrow the radius or add filters if the search times out. Use epa_superfund_get_site with a returned siteId for contaminant associations.

輸入參數citylimitstateoffsetlatitudezip_codelongitudenpl_statusradius_milesexclude_archived

epa_superfund_get_site

Get Superfund Site

Superfund: Retrieve a site by exact SEMS site ID from epa_superfund_search_sites, with all recorded contaminant associations and their media, operable units, and EPA actions. Repeated chemicals in different contexts and duplicate source rows are retained. An existing site without contaminant records returns an empty array. Associations do not establish current exposure, concentrations, or current risk. Site and contaminant requests share a 50-second deadline.

輸入參數site_id必填

epa_water_search_systems

Search Drinking Water Systems

Drinking water (SDWIS): Search public water systems by state, ZIP code, or county served. Returns system name, PWSID, population served, primary water source, and activity status, in PWSID order; page through a large match with offset and nextOffset. zip_code matches a system's address of record, often an owner's or operator's office far from the area it serves; county (with state) finds the systems serving an area. With has_violation, returns only systems with a current SDWA violation in EPA's ECHO, which applies EPA's Enforcement Response Policy, so it flags fewer systems than SDWIS's unresolved violation records. At least one of state or zip_code is required. Pass a returned pwsid as registry_id to epa_echo_get_facility for the system's drinking-water violations: contaminant, measured level, MCL, status, and enforcement actions.

輸入參數limitstatecountyoffsetpws_typezip_codeactive_onlyhas_violation

epa_ejscreen_get_scores

Get EJScreen Environmental Justice Indicators

EJScreen: 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 and their national averages. Data is EJAM's ACS 2018–2022 release of EJScreen (EJScreen 2.3 method), 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). When EJScreen has no indicators — the point is outside its US bounds, the buffer holds no Census block, or its blocks have no residents — coverage.valid is false and coverage.note says which, and whether a larger distance may help.

輸入參數unitdistancelatitude必填longitude必填

epa_airnow_get_conditions

Get Air Quality Index

AirNow: 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.

輸入參數modelatitudezip_codelongitudeforecast_date

版本歷史

9
  1. v0.8.0最新Nov 1, 2026
  2. v0.7.0Nov 1, 2026
  3. v0.6.0Oct 24, 2026
  4. v0.5.0Oct 18, 2026
  5. v0.4.1Oct 16, 2026
  6. v0.4.0Oct 8, 2026
  7. v0.3.3Oct 7, 2026
  8. v0.3.2Sep 20, 2026
  9. v0.3.1Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分