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 分