Skip to content

Releases: cyanheads/epa-mcp-server

v0.3.0: EJScreen environmental-justice indicators via the EJAM API (#12)

Choose a tag to compare

@cyanheads cyanheads released this 10 Jul 21:57
v0.3.0
9888cbc

EJScreen environmental-justice indicators via the EJAM API (#12)

New epa_get_ejscreen tool + ejscreen service, backed by the community-maintained EJAM API rehosting EJScreen v2.2 (2022).

Added:

  • epa_get_ejscreen — 13 environmental + 6 demographic EJScreen indicators for a point + buffer, each with national/state percentiles and EJ Index values, plus the Demographic and Supplemental Demographic indices; out-of-coverage points return a note (#12)
  • src/services/ejscreen/ service wrapping the EJAM API (api.ejanalysis.com, Public Environmental Data Partners) — keyless; EJScreen v2.2 (2022), not a live EPA endpoint
  • EJSCREEN_API_BASE_URL optional env var (default https://api.ejanalysis.com)

120 tests pass; bun run devcheck clean.

CHANGELOG v0.3.0

v0.2.1: Per-medium TRI release breakdown, ECHO proximity fix, mcp-ts-core 0.10.14

Choose a tag to compare

@cyanheads cyanheads released this 10 Jul 18:35
v0.2.1
381a76f

Per-medium TRI release breakdown, ECHO proximity fix, mcp-ts-core 0.10.14

epa_get_tri_releases gains air/water/land/underground-injection fields; epa_search_facilities proximity search works again; framework bump clears 9 dependency advisories.

Added:

  • epa_get_tri_releases — releasesToAirInLbs / releasesToWaterInLbs / releasesToLandInLbs / releasesToUndergroundInjectionInLbs per-medium breakdown, joined from tri.tri_release_qty (#15)

Changed:

  • Supply-chain hardening — bunfig minimumReleaseAge guard + Socket install scanner, LICENSE, SECURITY.md, pinned Dockerfile base image

Fixed:

  • epa_search_facilities proximity search — ECHO now receives p_radius, not p_radius_mi (#16)

Dependency bumps:

  • @cyanheads/mcp-ts-core ^0.10.6 → ^0.10.14 — clears 9 advisories (hono, vite, js-yaml, esbuild)
  • @biomejs/biome ^2.5.0 → ^2.5.2
    • @socketsecurity/bun-security-scanner ^1.1.2 (dev)

108 tests pass; bun run devcheck clean.

CHANGELOG v0.2.1

v0.2.0: optional AIRNOW_API_KEY, facility proximity search

Choose a tag to compare

@cyanheads cyanheads released this 21 Jun 23:57
v0.2.0
a39df26

optional AIRNOW_API_KEY, facility proximity search

Air quality becomes opt-in and facility search gains coordinate-based lookup.

Added:

  • epa_search_facilities proximity search — latitude / longitude / radius_miles (max 100 mi), mapped to ECHO p_lat / p_long / p_radius_mi; a partial triple raises an incomplete_proximity error, and coordinates of 0 are valid (#14)

Changed:

  • AIRNOW_API_KEY is now optional — when unset (or empty/whitespace) the server starts without epa_get_air_quality, registering the 7 keyless tools; server.json and manifest.json mark it optional (#13)

Dependency bumps (dev):

  • @biomejs/biome ^2.4.16 → ^2.5.0
  • vitest ^4.1.8 → ^4.1.9

97 tests pass; bun run devcheck clean.

v0.1.5: mcp-ts-core ^0.10.6 adoption

Choose a tag to compare

@cyanheads cyanheads released this 12 Jun 07:45
v0.1.5
00730ef

mcp-ts-core ^0.10.6 adoption

Framework upgrade to 0.10.x with the corresponding API changes, plus Docker healthcheck and Claude Code / Codex plugin manifests.

Added:

  • epa_search_tri_releases enrichment block (truncated, shown, cap) signaling capped results via ctx.enrich
  • Docker HEALTHCHECK (bun-native /healthz fetch) plus OCI version/source labels
  • .claude-plugin and .codex-plugin manifests for one-step install

Changed:

  • Validation-precondition error codes across the six search/air-quality tools: InvalidParamsValidationError (renamed in 0.10.x)
  • createApp() sets name/title explicitly to epa-mcp-server

Dependency bumps:

  • @cyanheads/mcp-ts-core ^0.9.9 → ^0.10.6
  • @types/node ^25.9.2 → ^25.9.3

90 tests pass; bun run devcheck clean.

v0.1.4

Choose a tag to compare

@cyanheads cyanheads released this 10 Jun 19:47
v0.1.4
1845830

AirNow cache keys, ECHO facility DFR endpoint, violations two-step case query

Three bug fixes that caused every call to fail at runtime.

Fixed:

  • AirNow cache keys used colons from kind values like current:zip, rejected by the storage-key validator; keys now use / and . separators with sanitized param values (#9)
  • ECHO facility lookup called the wrong endpoint (get_facility_info rejects numeric Registry IDs); now uses get_dfr which accepts them directly (#10)
  • ECHO violations search read Cases from the discovery endpoint, which never returns them; now uses the two-step get_case_info → get_qid flow with correct field mapping (#11)

Dependency bumps (dev):

  • @biomejs/biome ^2.4.15 → ^2.4.16
  • @types/node ^25.9.1 → ^25.9.2
  • vitest ^4.1.7 → ^4.1.8

90 tests pass; bun run devcheck clean.

v0.1.3: ecosystem metadata alignment

Choose a tag to compare

@cyanheads cyanheads released this 26 May 07:38
v0.1.3
2f5a101

ecosystem metadata alignment

Added author/funding fields, FUNDING.yml, and one-click install badges (Claude Desktop, Cursor, VS Code). Migrated all package.json scripts to bun run. Also backfills the missing 0.1.2 changelog entry.

Added:

  • .github/FUNDING.yml (GitHub Sponsors + Buy Me a Coffee)
  • README install badges (Claude Desktop .mcpb, Cursor deeplink, VS Code deeplink)
  • README Docker and npm badges

Changed:

  • package.json scripts: tsx → bun run; bundle/test/start scripts updated
  • package.json metadata: author, funding, packageManager, bugs, homepage added
  • manifest.json: version, description, author populated
  • README: version badge 0.1.3, Bun badge corrected to v1.3.0

Removed:

  • tsx dev dependency (no longer needed after script migration)

86 tests pass; bun run devcheck clean.

v0.1.2: mcpName for MCP Registry, Dockerfile node build stage

Choose a tag to compare

@cyanheads cyanheads released this 26 May 03:43
v0.1.2
411184f

mcpName for MCP Registry, Dockerfile node build stage

v0.1.1: Initial public release — EPA environmental data server

Choose a tag to compare

@cyanheads cyanheads released this 26 May 03:17
v0.1.1
7d848eb

Initial public release — EPA environmental data server

Fixes all field-test bugs found during pre-release validation.

Fixed:

  • TRI field mapping — chemical names and release quantities (air, water, land, UIC) were always empty due to wrong DMAP column names
  • Superfund site names were always empty — wrong field in normalizeSemsSite()
  • Superfund site resource never matched sites by ID — fixed heuristic
  • SDWIS has_violation filter crashed — violation_flag column doesn't exist; switched to correct column; city field now populated
  • AirNow cache key generation produced invalid characters (lat/lng slashes); replaced with safe key-value join
  • ECHO bot-blocking returned empty results silently; added User-Agent header
  • AIRNOW_API_KEY missing from server.json environmentVariables and manifest.json user_config
  • epa_get_facility description no longer leaks internal DFR implementation detail

86 tests pass; bun run devcheck clean.