Environmental Hazard MCP Server is an MCP (Model Context Protocol) server on ApifyForge. MCP server for environmental hazard intelligence. Wraps 6 specialized actors: EPA ECHO (facility compliance/violations), NOAA (weather alerts), USGS (earthquakes), FEMA (disaster declarations), GDACS (global disaster... It costs $0.05 per epa-compliance. It exposes 7 tools: epa-compliance, weather-alerts, earthquake-search, fema-disasters, global-disasters, air-quality, location-risk. Best for AI developers and agent builders who need structured real-world data inside Claude, Cursor, or other MCP-compatible clients. Not ideal for non-AI workflows or use cases that don't involve an MCP-compatible client. Maintenance pulse: 90/100. Last verified March 27, 2026. Built by Ryan Clinton (ryanclinton on Apify).

AIDEVELOPER TOOLS

Environmental Hazard MCP Server

Environmental Hazard MCP Server is an MCP (Model Context Protocol) server available on ApifyForge at $0.05 per epa-compliance. MCP server for environmental hazard intelligence. Wraps 6 specialized actors: EPA ECHO (facility compliance/violations), NOAA (weather alerts), USGS (earthquakes), FEMA (disaster declarations), GDACS (global disaster alerts), and OpenAQ (air quality). Includes composite location risk assessment.

Best for AI developers and agent builders who need structured real-world data inside Claude, Cursor, or other MCP-compatible clients.

Not ideal for non-AI workflows or use cases that don't involve an MCP-compatible client.

Coming soon on Apify Store
$0.05per event

Tools exposed

Each pricing event corresponds to a tool your AI agent can call through MCP.

epa-complianceSearch EPA environmental compliance facility records. · $0.05/call
weather-alertsGet active NOAA weather alerts. · $0.05/call
earthquake-searchSearch USGS earthquake event records. · $0.05/call
fema-disastersSearch FEMA disaster declaration records. · $0.05/call
global-disastersSearch GDACS global disaster alert records. · $0.05/call
air-qualitySearch OpenAQ air quality measurement data. · $0.05/call
location-riskComposite environmental risk assessment combining weather, seismic, and air quality data. · $0.15/call

Example prompts

Natural language queries you can ask your AI assistant that would trigger this MCP server.

"Run a epa compliance on Acme Corp and summarize the findings"
"Can you weather alerts and highlight any red flags?"
"What tools does the Environmental Hazard MCP Server have available?"
Last verified: March 27, 2026
90
Actively maintained
Maintenance Pulse
$0.05
Per event

What to know

  • Requires an MCP-compatible client (Claude Desktop, Cursor, Windsurf, or similar).
  • Tool call results depend on the availability of upstream public APIs.
  • Requires an Apify account and API token for authentication.

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

epa-compliances
Estimated cost:$5.00

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
epa-complianceSearch EPA environmental compliance facility records.$0.05
weather-alertsGet active NOAA weather alerts.$0.05
earthquake-searchSearch USGS earthquake event records.$0.05
fema-disastersSearch FEMA disaster declaration records.$0.05
global-disastersSearch GDACS global disaster alert records.$0.05
air-qualitySearch OpenAQ air quality measurement data.$0.05
location-riskComposite environmental risk assessment combining weather, seismic, and air quality data.$0.15

Example: 100 events = $5.00 · 1,000 events = $50.00

Documentation

Environmental Hazard MCP, agent-native multi-source environmental risk stack

Environmental Hazard MCP is a pay-per-call, agent-native environmental risk stack for AI agents, due-diligence workflows, and emergency-response automation.

It wires six public-records environmental and disaster sources into one MCP endpoint: EPA ECHO facility compliance, NOAA active weather alerts, USGS earthquakes, FEMA disaster declarations, GDACS global multi-hazard alerts, and OpenAQ air quality. A composite env_location_risk tool fans four U.S. sources out in parallel for site-level screening. Built for environmental due-diligence consultants, real-estate and insurance analysts, ESG teams, emergency managers, and AI agents that need live hazard context without a CAT-model license.

The category

Environmental Hazard MCP is an agent-native environmental hazard stack, not a catastrophe model and not a GIS layer. Unlike ESRI Living Atlas (a paid mapping platform requiring an ArcGIS license), RMS or AIR Worldwide (six-figure CAT-model seats sold to underwriters), or manual EPA-ECHO plus NOAA plus USGS tab juggling, it produces deterministic, machine-readable JSON straight into Claude Desktop, Cursor, LangChain, or any MCP-aware client. Pay per call, no seat license, no subscription, no model output. The MCP returns the raw public-records signals; your agent or analyst makes the decision.

In one sentence

Screen a U.S. site for EPA-regulated facility violations, active NOAA severe-weather alerts, recent earthquakes inside a 200 km radius, and current-fiscal-year FEMA disaster declarations in a single MCP tool call, or query any of the six environmental data sources individually.

What you get from one call

env_location_risk fans out to four U.S. sources in parallel (EPA ECHO, NOAA, USGS, FEMA) and returns:

  • riskSignals[], a plain-language summary of every triggered signal (SNC facility count, penalty total, severe weather alert count, M4.5+ quakes within 200 km in the past year, FEMA declarations in the current fiscal year)
  • signalCount, headline integer your agent can branch on
  • epaCompliance, facility count plus significant-noncompliance count, total penalties, and top-5 violators with programs and status
  • weatherAlerts, active alert count, severe/extreme count, and top-5 alerts with event, severity, headline, and expiry
  • seismicActivity, earthquake count within the radius, M4.5+ event count, max magnitude, and top-5 recent events
  • disasterDeclarations, FEMA declaration count this fiscal year and top-5 declarations with title, type, date, and designation
  • sources, the four upstream datasets that contributed

Feature callouts: deterministic public-records signals, parallel multi-source fan-out, composite U.S. site screen, agent-ready JSON

What makes this different

  • Deterministic public-records signals, no LLM in the result path. Every value is a count, a magnitude, a severity enum, or a dollar penalty pulled straight from EPA, NOAA, USGS, FEMA, GDACS, and OpenAQ. The MCP does not summarise, judge, or paraphrase.
  • Live NOAA alerts, not stale RSS. env_weather_alerts queries the National Weather Service directly: active_only=true returns currently-in-effect warnings, watches, and advisories.
  • USGS radius search around a real lat-lon. env_earthquakes takes latitude, longitude, and max_radius_km (up to 20,001 km) so you can screen a specific site, not just a country.
  • EPA SNC and penalties surfaced as headline aggregates. The MCP rolls up significantNoncompliance count and totalPenalties across the result set so an agent can branch on one number instead of walking a facility list.
  • Multi-hazard global view via GDACS. Earthquakes, floods, tropical cyclones, volcanoes, droughts, and wildfires in one Red/Orange/Green alert stream for non-U.S. coverage.

Before vs after

Without this MCPWith this MCP
Open EPA ECHO, NWS api.weather.gov, USGS earthquake feed, FEMA OpenFEMA portal, GDACS, and OpenAQ in six tabsOne MCP endpoint, six tools, one composite call
Manually filter EPA results to "significant noncompliance" facilitiescompliance_status="3" flag plus rolled-up significantNoncompliance count
Eyeball severe NOAA alerts by statebySeverity breakdown returned per call
Run a USGS GeoJSON query, parse coordinates, compute distancePass latitude, longitude, max_radius_km; USGS returns the radius set
Re-query four sources separately for a single property due-diligence fileenv_location_risk runs EPA + NOAA + USGS + FEMA in parallel for one $0.15 charge
Pay for a CAT-model seat or ArcGIS license$0.05 per single-source call, $0.15 per composite, no subscription

Architecture

6 environmental + disaster sources       8 MCP tools
   (U.S. cluster)                          ↓
   EPA ECHO ─────────────┐         env_epa_compliance       $0.05
   NOAA / NWS ───────────┤         env_weather_alerts       $0.05
   USGS Earthquakes ─────┼──→      env_earthquakes          $0.05
   FEMA OpenFEMA ────────┤         env_fema_disasters       $0.05
                         └──→      env_location_risk        $0.15
                                    (parallel fan-out, U.S.-only)
   (Global cluster)
   GDACS ────────────────────→     env_global_disasters     $0.05
   OpenAQ ───────────────────→     env_air_quality          $0.05  (OpenAQ key)

                                    env_list_sources        free
                                    (no upstream fetch)

The U.S. cluster (EPA + NOAA + USGS + FEMA) feeds the composite. The global cluster (GDACS + OpenAQ) covers non-U.S. hazard and pollution monitoring. Each tool is a thin orchestration layer over a published sibling actor; the MCP never scrapes upstream sources directly.

Built for

Environmental due-diligence consultants running Phase I ESAs, commercial real-estate and property analysts screening sites before close, insurance underwriters writing property and parametric policies, ESG and sustainability analysts auditing facility portfolios, emergency-management teams tracking active incidents, climate-risk and resilience teams building geospatial dashboards, environmental-justice researchers mapping pollution and noncompliance, and AI agents that need live hazard context wired into a chat or workflow.

This server runs in Standby mode on the Apify platform. It orchestrates six sibling actors (epa-echo-search, noaa-weather-alerts, usgs-earthquake-search, fema-disaster-search, gdacs-disaster-alerts, openaq-air-quality) and returns structured JSON your AI agent reasons over directly.

Questions this MCP answers

  • "What are the active severe weather alerts in Florida right now?"
  • "Has there been a M4+ earthquake within 200 km of these coordinates in the past year?"
  • "Which EPA-regulated facilities in Houston are in significant noncompliance?"
  • "How many FEMA disasters did Louisiana have this fiscal year?"
  • "What is the current PM2.5 reading near Delhi?"
  • "Are there any Red-level GDACS tropical cyclone alerts in the Pacific right now?"
  • "Give me a one-call environmental risk summary for a property at 34.0522, -118.2437 in California."
  • "Which fire-management declarations did FEMA issue in California in FY2025?"

For AI agents

  • Call env_list_sources first. It is free, has no upstream fetch, and returns the tool catalogue plus which source each tool wraps. Use it to plan the rest of the workflow.
  • The composite is U.S.-only. env_location_risk runs EPA, NOAA, and FEMA, which are U.S.-only datasets. For non-U.S. sites, call env_global_disasters (GDACS) and env_air_quality (OpenAQ) directly.
  • OpenAQ needs a free key. If no api_key (per-tool argument or OPENAQ_API_KEY env var) is set, env_air_quality returns a structured warning payload, not silent sample data. Handle the warning and prompt for a key.
  • Branch on riskSignals[], not the raw counts. The signals array is the curated, human-readable summary your agent should reason over. Counts and breakdowns are available below for citation and follow-up.
  • USGS radius search needs all three parameters. latitude, longitude, and max_radius_km are all required for a radius query. Omit any and you get a global time-window query instead.
  • EPA SNC screens use compliance_status="3" or "4". Status 3 is significant noncompliance, status 4 is multiple significant noncompliance. Status 2 is any noncompliance and returns a noisier set.

Use this MCP when an AI agent needs to:

  • assess environmental risk for a U.S. property or facility
  • monitor active severe-weather alerts in a state or territory
  • check recent seismic activity near a specific lat-lon
  • pull current-fiscal-year FEMA declarations for a state
  • track global multi-hazard alerts via GDACS
  • read current or historical air-quality measurements worldwide

What data can you access?

SourceRecordsExample
🏭 EPA ECHOFacility compliance status, significant-noncompliance flag, penalties, programs (Air/Water/RCRA/SDWA/TRI/GHG/RMP), NAICS, major-facility flag3 facilities in significant noncompliance, $487,200 in penalties
🌪️ NOAA / NWSActive and historical weather alerts: event, severity (Extreme/Severe/Moderate/Minor), urgency, headline, expiry2 Tornado Warnings, severity Extreme, urgency Immediate
🌍 USGS EarthquakesMagnitude, depth, place, time, PAGER alert level (green/yellow/orange/red), tsunami flag, radius searchM5.2 at 18 km depth, 47 km NE of San Bernardino, no tsunami
🚨 FEMA OpenFEMADisaster declarations: DR/EM/FM, incident type, declaration date, fiscal year, designation stringFEMA-4734-DR-CA, Severe Storm(s), declared 2025-02-14
🌐 GDACSGlobal multi-hazard alerts: EQ/FL/TC/VO/DR/WF, Red/Orange/Green severity, date rangeRed TC alert, Tropical Cyclone Mawar, Pacific basin
💨 OpenAQAir quality measurements: PM2.5, PM10, O3, NO2, SO2, CO by country / city / lat-lon radius (max 25 km)PM2.5 avg 187 µg/m³, n=12 stations, Delhi metro

Why use Environmental Hazard MCP?

Site-level environmental risk work today is:

  • manual and slow (an analyst opens EPA ECHO, NWS, USGS, and FEMA portals in separate tabs for every property file)
  • inconsistent across reviewers and not reproducible run to run
  • gated behind expensive licenses for any tool that tries to consolidate the same public sources
  • impossible to wire directly into an AI agent without a custom integration per source

This MCP collapses that into one endpoint. A single env_location_risk call queries EPA, NOAA, USGS, and FEMA in parallel and returns a deterministic JSON envelope your agent can branch on. Individual-source tools cover the long tail of single-question lookups (live storm tracking, global pollution, GDACS alerts). All six sources are free public APIs; only OpenAQ requires a free user key.

  • Scheduling, run periodic environmental sweeps on Apify Scheduler and trigger alerts on new signals
  • API access, call from Python, JavaScript, or any HTTP client using standard MCP protocol
  • Parallel data fetching, env_location_risk fans out to four actors simultaneously, not sequentially
  • Monitoring, push HIGH-severity NOAA alerts or Red GDACS events to Slack or email via Apify webhooks
  • Integrations, pipe results into Notion, Airtable, or any webhook-compatible system

Features

Compliance and enforcement signals

  • EPA ECHO facility search by state, city, ZIP, NAICS, program (Air / Water / RCRA / SDWA / TRI / GHG / RMP), and major-facility flag.
  • Significant-noncompliance (complianceStatus="3") and multiple-SNC ("4") screens with rolled-up SNC count.
  • Total-penalties aggregate across the result set surfaced as a headline number.
  • Optional include_detailed flag pulls permits, violations, inspections, and actions detail.

Weather and seismic signals

  • NOAA active-alerts mode (active_only=true) returns currently-in-effect warnings, watches, and advisories.
  • Historical NOAA mode via start_date and end_date for date-range queries.
  • Severity breakdown (bySeverity) returned per call.
  • USGS magnitude, depth, and PAGER-alert filtering with date-range support.
  • USGS radius search around a real lat-lon (max 20,001 km).
  • Tsunami-warning count surfaced as a headline aggregate.

Disaster declarations and global alerts

  • FEMA disaster declarations by state, incident type, declaration type (DR / EM / FM), fiscal year, and date range.
  • Incident-type breakdown (byIncidentType) returned per call.
  • GDACS global multi-hazard alerts (EQ / FL / TC / VO / DR / WF) with Red / Orange / Green severity.
  • Alert-level and event-type breakdowns returned per call.

Air quality

  • OpenAQ measurements by ISO country code, city partial match, or lat-lon radius (max 25,000 m).
  • Six pollutants: PM2.5, PM10, O3, NO2, SO2, CO.
  • Historical mode via date_from and date_to.
  • Average value and unit rolled up across the result set.
  • Structured warning payload when no API key is set (no silent fallback to sample data).

Composite + orchestration

  • env_location_risk fans EPA + NOAA + USGS + FEMA out in parallel via Promise.all.
  • riskSignals[] is the curated, plain-language summary your agent branches on.
  • Per-source breakdowns (epaCompliance, weatherAlerts, seismicActivity, disasterDeclarations) for citation and drill-down.
  • Free env_list_sources tool returns the tool catalogue with no charge and no upstream fetch.

Quickstart workflows

Site-risk pre-purchase screen

property address resolved to state + lat-lon
 → env_location_risk(state, city, zip_code, latitude, longitude)
 → branch on signalCount and riskSignals[]
   → if SNC > 0 OR severe alerts > 0 OR FEMA declarations > 0 → flag for human review

Live storm tracker

state of interest
 → env_weather_alerts(active_only=true, area=state, severity="Severe")
 → poll on a schedule
 → push new events to Slack via Apify webhook

Facility compliance screen by ZIP

ZIP code list
 → env_epa_compliance(zip_code, program="A", compliance_status="3", major_facility="Y")
 → return significantNoncompliance count + totalPenalties per ZIP

Global pollution snapshot

city or country
 → env_air_quality(country, city, parameter="pm25", api_key=OPENAQ_API_KEY)
 → env_global_disasters(event_type="ALL", alert_level="Red")
 → combine for a non-U.S. hazard view

Use cases

Commercial property risk pre-close

A commercial real-estate analyst running an environmental file before close pulls one env_location_risk call for the target site (state, city, lat-lon). The MCP returns EPA SNC facilities within the search, current NOAA alerts, M3.0+ earthquakes within 200 km in the past year, and FEMA declarations for the state this fiscal year. The analyst attaches the structured JSON to the deal file and routes any SNC or M4.5+ result to a Phase I consultant for follow-up. Replaces a half-day of multi-portal lookups with a 90-second call.

Parametric insurance underwriting

A parametric-insurance underwriter writing a hurricane or earthquake trigger policy uses the MCP to ground portfolio-level exposure in current data. env_earthquakes with latitude, longitude, and max_radius_km returns recent seismic activity around insured assets; env_weather_alerts with event_type="Hurricane Warning" flags active tropical storms in coastal states; env_fema_disasters with incident_type="Hurricane" returns the federal-declaration history per state. None of this replaces a licensed CAT model, but it gives the underwriter live signal between model refreshes.

ESG facility audit

An ESG analyst auditing a manufacturing portfolio runs env_epa_compliance per facility ZIP with program="A" (Air), program="W" (Water), or program="ALL", then compliance_status="3" to filter to SNC-only results. The rolled-up significantNoncompliance count and totalPenalties aggregate go directly into the audit memo. Pairs with env_fema_disasters to flag facilities in flood-prone or hurricane-prone states.

Emergency-response coordination

An emergency-management coordinator polls env_weather_alerts(active_only=true, area=state, severity="Extreme") on a 5-minute schedule and pushes new Extreme alerts to a Slack channel via Apify webhook. env_global_disasters with alert_level="Red" covers cross-border incidents. The MCP gives a live, single-pane view across NOAA and GDACS without standing up a custom alert pipeline.

Environmental-justice research

A researcher mapping pollution near a community runs env_epa_compliance by city and ZIP with program="A" (Air), then env_air_quality(latitude, longitude, radius=25000, parameter="pm25") for monitoring-station PM2.5 levels within 25 km. The combined output supports geospatial overlays of regulated emitters and measured air quality.

Climate-resilience dashboards

A climate-risk team building a resilience dashboard for a multi-state operations footprint runs env_location_risk per site on a weekly schedule, persists the signalCount series, and surfaces sites where the signal count is rising. env_global_disasters and env_air_quality extend the same dashboard to international locations where the U.S.-composite does not apply.

How to connect this environmental hazard MCP

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "environmental-hazard": {
      "url": "https://environmental-hazard-mcp.apify.actor/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}

Cursor, Windsurf, or Cline

Use the same URL and token in your MCP server settings panel. The server communicates via standard MCP protocol over HTTP POST to /mcp.

Python (via requests)

import requests

response = requests.post(
    "https://environmental-hazard-mcp.apify.actor/mcp",
    headers={
        "Content-Type": "application/json",
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
    },
    json={
        "jsonrpc": "2.0",
        "method": "tools/call",
        "params": {
            "name": "env_location_risk",
            "arguments": {
                "state": "CA",
                "city": "Los Angeles",
                "latitude": 34.0522,
                "longitude": -118.2437
            }
        },
        "id": 1
    }
)
result = response.json()
report = result["result"]["content"][0]["text"]
print(report)

JavaScript

const response = await fetch(
  "https://environmental-hazard-mcp.apify.actor/mcp",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Authorization": "Bearer YOUR_APIFY_TOKEN"
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      method: "tools/call",
      params: {
        name: "env_weather_alerts",
        arguments: { active_only: true, area: "FL", severity: "Severe" }
      },
      id: 1
    })
  }
);
const data = await response.json();
const report = JSON.parse(data.result.content[0].text);
console.log(`Active severe alerts in FL: ${report.total}`);

cURL

curl -X POST "https://environmental-hazard-mcp.apify.actor/mcp" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "env_earthquakes",
      "arguments": {
        "min_magnitude": 4.5,
        "latitude": 34.0522,
        "longitude": -118.2437,
        "max_radius_km": 200,
        "start_time": "2025-01-01"
      }
    },
    "id": 1
  }'

Environment variables

VariableRequiredPurpose
OPENAQ_API_KEYRecommendedFree key from explore.openaq.org. Required for live air-quality data. When absent, env_air_quality returns a structured warning payload instead of measurements. The per-tool api_key argument overrides this env var when both are set.
STANDBY_IDLE_TIMEOUT_SECSOptionalStandby idle-shutdown window in seconds (default 300, minimum 60). The instance exits after this idle period to release platform compute; the next request cold-starts a fresh one.

EPA ECHO, NOAA, USGS, FEMA, and GDACS are keyless. Only OpenAQ needs credentials.

MCP tools

Available tools: full MCP tool catalogue with per-call pricing

ToolSourcePriceWhat it returns
env_epa_complianceEPA ECHO$0.05Facility list, significantNoncompliance count, totalPenalties aggregate, per-facility status / programs / penalties
env_weather_alertsNOAA / NWS$0.05Active or historical alerts, bySeverity breakdown, per-alert event / severity / urgency / headline / expiry
env_earthquakesUSGS$0.05Earthquake list, maxMagnitude, tsunamiWarnings count, per-event magnitude / place / depth / time / PAGER alert
env_fema_disastersFEMA OpenFEMA$0.05Declaration list, byIncidentType breakdown, per-declaration title / type / date / designation
env_global_disastersGDACS$0.05Global alerts, byAlertLevel and byEventType breakdowns, per-alert event / severity / location
env_air_qualityOpenAQ$0.05Measurements, averageValue, unit, per-station value / pollutant / station / coordinates. Returns structured warning if no API key.
env_location_riskEPA + NOAA + USGS + FEMA$0.15Composite U.S. site screen, riskSignals[] plain-language summary, per-source breakdowns (epaCompliance / weatherAlerts / seismicActivity / disasterDeclarations)
env_list_sources(no fetch)FreeTool catalogue: 8 tools, 6 upstream sources, credentials-required flag per tool

The $0.05 single-source tools cover the long tail of one-question lookups. The $0.15 composite covers the most common U.S. site-screening workflow in one call. env_list_sources is free for agent planning.

Tool input reference

ToolParameterTypeRequiredDescription
env_epa_compliancefacility_namestringNoFacility name, partial match (e.g. "EXXON")
env_epa_compliancestatestringNo2-letter state code(s), comma-separated (e.g. "TX", "CA,NY")
env_epa_compliancecitystringNoCity name
env_epa_compliancezip_codestringNo5-digit ZIP code(s), comma-separated
env_epa_complianceprogramenumNoA=Air, W=Water, R=RCRA, S=SDWA, T=TRI, G=GHG, M=RMP, ALL=All programs
env_epa_compliancecompliance_statusenumNo2=Any noncompliance, 3=Significant NC, 4=Multiple significant NC
env_epa_compliancenaics_codestringNoNAICS industry code (2-6 digit prefix)
env_epa_compliancemajor_facilityenumNoY / N major-facility flag
env_epa_complianceinclude_detailedbooleanNoInclude permits, violations, inspections, actions detail (slower)
env_epa_compliancemax_resultsnumberNo1-500, default 50
env_weather_alertsactive_onlybooleanNoDefault true. False enables historical mode and unlocks date range
env_weather_alertsareastringNo2-letter U.S. state / territory code
env_weather_alertsseverityenumNoExtreme / Severe / Moderate / Minor / Unknown
env_weather_alertsurgencyenumNoImmediate / Expected / Future / Past / Unknown
env_weather_alertsevent_typestringNoe.g. "Tornado Warning", "Flood Warning", "Winter Storm Watch"
env_weather_alertsstart_date / end_datestringNoYYYY-MM-DD, only when active_only=false
env_earthquakesmin_magnitudenumberNoDefault 4.0
env_earthquakesmax_magnitudenumberNoOptional cap
env_earthquakeslatitude + longitude + max_radius_kmnumberNoAll three required together for radius search; max 20,001 km
env_earthquakesalert_levelenumNoPAGER green / yellow / orange / red
env_earthquakesstart_time / end_timestringNoYYYY-MM-DD
env_fema_disastersstatestringNo2-letter state code
env_fema_disastersincident_typeenumNoFire / Hurricane / Flood / Tornado / Severe Storm(s) / Earthquake / Snow / Drought / Biological / Coastal Storm / Other
env_fema_disastersdeclaration_typeenumNoDR=Major Disaster, EM=Emergency, FM=Fire Management
env_fema_disastersfiscal_yearnumberNoFederal FY (starts Oct 1)
env_fema_disastersdate_start / date_endstringNoDeclaration date range YYYY-MM-DD
env_global_disastersevent_typeenumNoALL / EQ / FL / TC / VO / DR / WF
env_global_disastersalert_levelenumNoALL / Red / Orange / Green
env_global_disastersdate_from / date_tostringNoYYYY-MM-DD
env_air_qualitycountrystringNoISO 2-letter, default "US"
env_air_qualitycitystringNoPartial match
env_air_qualityparameterenumNopm25 / pm10 / o3 / no2 / so2 / co, default pm25
env_air_qualitylatitude + longitude + radiusnumberNoAll three required for radius search; radius in meters, max 25,000
env_air_qualityapi_keystringNoFree OpenAQ key; overrides OPENAQ_API_KEY env var
env_air_qualitydate_from / date_tostringNoYYYY-MM-DD, triggers historical mode
env_location_riskstatestringYes2-letter U.S. state code
env_location_riskcitystringNoFor EPA facility search
env_location_riskzip_codestringNoFor EPA facility search
env_location_risklatitude + longitudenumberNoBoth required for the USGS earthquake radius search inside the composite

Output example

env_location_risk for state="CA", city="Los Angeles", latitude=34.0522, longitude=-118.2437:

{
  "location": {
    "state": "CA",
    "city": "Los Angeles",
    "zipCode": null,
    "latitude": 34.0522,
    "longitude": -118.2437
  },
  "sources": ["EPA ECHO", "NOAA Weather", "USGS Earthquakes", "FEMA Disasters"],
  "riskSignals": [
    "3 facility/ies in significant environmental noncompliance",
    "$487,200 in environmental penalties at nearby facilities",
    "2 active severe/extreme weather alert(s)",
    "4 earthquake(s) M4.5+ within 200km in the past year",
    "6 FEMA disaster declaration(s) in CA this fiscal year"
  ],
  "signalCount": 5,
  "epaCompliance": {
    "facilitiesFound": 18,
    "significantNoncompliance": 3,
    "totalPenalties": 487200,
    "topViolators": [
      {
        "name": "PACIFIC METAL FINISHING INC",
        "status": "Significant Violator",
        "penalties": 215000,
        "programs": ["A", "W"]
      },
      {
        "name": "HARBOR CHEMICAL HOLDINGS LLC",
        "status": "Significant Violator",
        "penalties": 178400,
        "programs": ["R"]
      },
      {
        "name": "CENTRAL VALLEY POWER FACILITY",
        "status": "Significant Violator",
        "penalties": 93800,
        "programs": ["A", "G"]
      }
    ]
  },
  "weatherAlerts": {
    "activeAlerts": 7,
    "severe": 2,
    "alerts": [
      {
        "event": "Red Flag Warning",
        "severity": "Severe",
        "headline": "Red Flag Warning issued for Los Angeles County mountains until 8 PM PDT",
        "expires": "2026-05-24T20:00:00-07:00"
      },
      {
        "event": "High Wind Warning",
        "severity": "Severe",
        "headline": "High Wind Warning in effect from 6 AM to 10 PM PDT Thursday",
        "expires": "2026-05-24T22:00:00-07:00"
      }
    ]
  },
  "seismicActivity": {
    "earthquakes": 11,
    "significantEvents": 4,
    "maxMagnitude": 5.2,
    "recentEvents": [
      {
        "magnitude": 5.2,
        "place": "47km NE of San Bernardino, CA",
        "time": "2026-02-14T03:18:42.000Z",
        "depth": 18.4
      },
      {
        "magnitude": 4.8,
        "place": "12km SW of Ridgecrest, CA",
        "time": "2025-11-02T19:42:11.000Z",
        "depth": 8.1
      }
    ]
  },
  "disasterDeclarations": {
    "total": 6,
    "declarations": [
      {
        "title": "California Severe Winter Storms, Flooding, and Mudslides",
        "type": "Severe Storm(s)",
        "date": "2026-02-14T00:00:00.000Z",
        "designation": "FEMA-4734-DR-CA"
      },
      {
        "title": "California Wildfires (Park Fire Complex)",
        "type": "Fire",
        "date": "2025-11-22T00:00:00.000Z",
        "designation": "FEMA-FM-5512-CA"
      }
    ]
  }
}

Output fields

Composite (env_location_risk)

FieldTypeDescription
locationobjectEchoed input (state, city, zipCode, latitude, longitude)
sourcesstring[]The four contributing datasets
riskSignalsstring[]Curated plain-language summary, branch on this
signalCountnumberInteger count of triggered signals
epaComplianceobjectfacilitiesFound, significantNoncompliance, totalPenalties, topViolators[]
weatherAlertsobjectactiveAlerts, severe, alerts[] top 5
seismicActivityobjectearthquakes, significantEvents, maxMagnitude, recentEvents[] top 5
disasterDeclarationsobjecttotal, declarations[] top 5

Single-source tools

FieldTypeDescription
totalnumberRecords returned for the query
dataobject[]Per-record source payload (facility / alert / event / declaration / measurement)
significantNoncompliance / totalPenaltiesnumberEPA-only rolled-up aggregates
bySeverityobjectNOAA-only severity histogram
maxMagnitude / tsunamiWarningsnumberUSGS-only rolled-up aggregates
byIncidentTypeobjectFEMA-only incident-type histogram
byAlertLevel / byEventTypeobjectGDACS-only histograms
averageValue / unitnumber / stringOpenAQ-only rolled-up aggregate
warningstringOpenAQ-only, present when no API key is supplied

How much does it cost to screen environmental hazards?

Environmental Hazard MCP uses pay-per-event pricing. Single-source tools charge $0.05 per call; the composite env_location_risk charges $0.15 per call because it runs four sub-actors in parallel. env_list_sources is free. Platform compute is included.

ScenarioTool callsCost
Quick test, single state weather check1 × $0.05$0.05
Full composite site risk screen, one property1 × $0.15$0.15
EPA SNC sweep across 10 facility ZIPs10 × $0.05$0.50
50-property due-diligence batch (composite per site)50 × $0.15$7.50
Monthly 200-facility ESG audit (EPA only)200 × $0.05$10.00
Daily NOAA poll for one state (30 days)30 × $0.05$1.50
Weekly global-pollution snapshot (GDACS + OpenAQ, 4 calls per week, monthly)~16 × $0.05$0.80

You can set a maximum spending limit per run to control costs. The actor stops when the budget is reached, returning a structured error your pipeline handles gracefully.

Apify's free tier includes $5 of monthly platform credits: enough for 100 single-source calls or 33 composite calls before any payment is required.

How it works

  1. Tool dispatch. Each MCP tool calls one sibling actor (ryanclinton/epa-echo-search, noaa-weather-alerts, usgs-earthquake-search, fema-disaster-search, gdacs-disaster-alerts, openaq-air-quality) via apify-client.actor(...).call() with a 120-second timeout and 256 MB memory.
  2. Result filtering. The MCP filters out source-emitted error envelopes ({ message: ... }) so a partial upstream failure never silently inflates a count.
  3. Aggregation. Each tool computes its own rolled-up headline aggregates (SNC count, severity breakdown, max magnitude, incident-type histogram, average pollutant value).
  4. Composite parallel fan-out. env_location_risk calls EPA, NOAA, USGS (only if latitude and longitude are both set), and FEMA via Promise.all. The USGS call uses starttime set to the prior calendar year and minmagnitude=3.0 inside a 200 km radius. The FEMA call uses fyDeclared set to the current calendar year.
  5. Signal generation. The composite walks the four sub-results and pushes a plain-language string into riskSignals[] for each triggered condition (SNC > 0, penalties > 0, severe alerts > 0, M4.5+ events > 0, FEMA declarations > 0).
  6. Standby lifecycle. Idle-shutdown fires after STANDBY_IDLE_TIMEOUT_SECS (default 300) of no inbound requests; the instance exits to release platform compute and the next request cold-starts a fresh one.

Tips for best results

  1. Use compliance_status="3" for SNC-only EPA screens. Status 2 is "any noncompliance" and returns a noisy set. Status 3 is significant noncompliance, the result most due-diligence workflows care about.

  2. Keep active_only=true on NOAA when you do not need history. Historical NOAA queries are slower and return larger result sets. Active-only is what you want for live storm tracking and emergency monitoring.

  3. Pair USGS radius search with a real lat-lon. The radius search needs all three of latitude, longitude, and max_radius_km. Omit any one and the query degrades to a global time-window search.

  4. Remember FEMA fiscal year starts Oct 1. A query for fiscal_year=2025 covers Oct 1 2024 through Sep 30 2025. In Q4 of the calendar year, set fiscal_year to the upcoming federal FY to capture recent declarations.

  5. Filter GDACS to Red and Orange for a low-noise feed. GDACS Green alerts include routine events that rarely warrant action. Use alert_level="Red" or alert_level="Orange" for a signal-only stream.

  6. For non-U.S. sites, skip the composite. env_location_risk runs EPA, NOAA, and FEMA, which are U.S.-only. For international sites, call env_global_disasters and env_air_quality directly.

  7. Set spending limits for batch workflows. When running 50+ composite calls, set maxTotalChargeUsd on the Apify run to cap exposure. The server returns a structured error when the limit is reached.

  8. Cache env_list_sources once per session. It is free, has no upstream fetch, and the catalogue rarely changes. Call it once on agent startup, then reuse the result for planning.

Combine with other Apify actors

ActorHow to combine
EPA ECHO SearchPull raw EPA facility records directly for deep facility-level review outside the MCP
NOAA Weather AlertsRun scheduled NOAA polls and persist the dataset for historical storm tracking
USGS Earthquake SearchBulk seismic queries with the full USGS GeoJSON record for geospatial dashboards
FEMA Disaster SearchPull full FEMA declaration metadata for federal-assistance research
GDACS Disaster AlertsPersist GDACS alert streams for international hazard monitoring
OpenAQ Air QualityBulk air-quality queries with full station metadata for monitoring-network analysis
Company Deep ResearchPair environmental site signals with company-level intelligence for facility-owner due diligence
WHOIS Domain LookupResolve a facility-owner domain to registration data when building an ESG audit file

Limitations

  • The composite is U.S.-only. env_location_risk runs EPA, NOAA, and FEMA, which are U.S.-only datasets. International sites need env_global_disasters (GDACS) and env_air_quality (OpenAQ) called directly.
  • EPA ECHO data lags 60-90 days. Facility compliance status, penalties, and inspection records reflect EPA's quarterly reporting cycle. Treat the data as recent history, not a real-time enforcement feed.
  • FEMA declarations are federal only. State-only emergencies, county-level declarations, and tribal declarations that did not escalate to a federal request are not in OpenFEMA. Cross-check with state emergency-management portals for full local coverage.
  • OpenAQ coverage is uneven outside major cities. PM2.5 and PM10 monitoring is dense in North America, Europe, and East Asia, sparser in Africa, Central Asia, and Latin America. A city query that returns no stations is a coverage limit, not a clean reading.
  • GDACS alerts are coordination signals, not authoritative impact assessments. Red/Orange severity reflects model-estimated potential impact at the time of the alert. Use official national disaster agencies for authoritative figures.
  • USGS radius search is capped at 20,001 km. Practically a global cap, but worth noting if you pass an unbounded radius value.
  • Air quality without an OpenAQ key returns a warning, not data. This is intentional: the MCP refuses to silently fall back to sample data. Get a free key at explore.openaq.org.
  • Child-actor timeout is 120 seconds. If an upstream source is slow, that source returns an empty array and the rest of the composite still resolves. Re-run the same query; subsequent runs typically succeed.
  • All scoring is signal aggregation, not impact modelling. Counts, severities, and magnitudes are pulled from public records and rolled up. The MCP does not predict damage, casualty, or financial impact.

Integrations

  • Apify API, trigger environmental screenings programmatically from due-diligence, ESG, or insurance workflow software
  • Webhooks, push Extreme NOAA alerts or Red GDACS events to Slack, email, or case-management tools the moment a screening completes
  • Zapier, connect to Airtable or Google Sheets property registers; auto-log site-risk signals when new addresses are added
  • Make, build emergency-response automations that route severe alerts to on-call rotations
  • Google Sheets, export batch screening results to shared spreadsheets for analyst review
  • LangChain / LlamaIndex, embed environmental hazard screening as a tool in LLM agent pipelines for automated site due diligence

Troubleshooting

env_air_quality returned a warning field instead of measurements. No OpenAQ API key was supplied. Get a free key at explore.openaq.org and pass it either as the per-tool api_key argument or as the OPENAQ_API_KEY env var on the actor.

env_earthquakes returned no events despite coordinates being passed. USGS radius search requires latitude, longitude, AND max_radius_km together. If any one is missing the query degrades to a global time-window search and may return nothing for a narrow magnitude band. Re-call with all three set.

env_fema_disasters returned no declarations for the current calendar year. FEMA uses federal fiscal years (Oct 1 to Sep 30). In Q4 of the calendar year, set fiscal_year to the next federal FY (calendar year + 1) to capture recent declarations.

env_epa_compliance returned zero facilities in noncompliance. Try lowering the threshold (compliance_status="2" for any noncompliance) or removing the filter entirely to confirm facilities exist in the search area. SNC is genuinely rare in some ZIPs.

env_location_risk returned an empty seismicActivity block. The composite only runs the USGS sub-call when both latitude and longitude are supplied. Pass both to enable the seismic component, or call env_earthquakes directly with a state-level query.

Composite returned faster than expected with thin breakdowns. One of the four sub-actors likely timed out (120 s upstream timeout). The composite still resolves with empty arrays for the failing source. Re-run the same query; subsequent runs typically succeed.

Responsible use

  • All data accessed by this server comes from publicly available environmental, weather, seismic, and disaster databases (EPA ECHO, NOAA / NWS, USGS, FEMA OpenFEMA, GDACS, OpenAQ).
  • Outputs are hazard signal aggregations, not impact predictions or forensic determinations. Insurance underwriting, life-safety decisions, and emergency response require licensed CAT models, official national hazard agencies, and human review.
  • Air-quality readings represent monitoring-station measurements at a given time and location, not personal exposure measurements.
  • Comply with applicable data-protection regulations when storing or sharing facility-level results that name specific operators.
  • For guidance on web scraping and data-use legality, see Apify's guide.

FAQ

How is this different from RMS, AIR Worldwide, or other catastrophe models? RMS and AIR are licensed catastrophe models priced in the tens to hundreds of thousands per seat per year, used by reinsurers and large insurers to model expected losses across a portfolio of risks. This MCP is not a CAT model. It returns the underlying public-records hazard signals (EPA violations, active NOAA alerts, recent USGS events, FEMA declarations, GDACS alerts, OpenAQ readings) as deterministic JSON, priced per call. The two are complementary: use a licensed CAT model for portfolio loss modelling, use this MCP for live signal between model refreshes and for AI-agent workflows.

How is this different from ESRI Living Atlas or other GIS layers? ESRI Living Atlas is a curated map-layer catalogue inside ArcGIS, optimised for analyst visual workflows and requiring an ArcGIS license. This MCP is text-out and agent-native: it returns structured JSON your agent or pipeline reasons over without a mapping client. There is no license seat; you pay per call.

What is EPA ECHO? EPA's Enforcement and Compliance History Online is the U.S. Environmental Protection Agency's public-records system for tracking regulated facilities' compliance with the Clean Air Act, Clean Water Act, RCRA, SDWA, TRI, GHG, and RMP programs. It surfaces facility violations, inspections, formal enforcement actions, and penalties. env_epa_compliance is a thin wrapper over EPA ECHO's search API.

What does PAGER alert level mean on earthquake results? PAGER (Prompt Assessment of Global Earthquakes for Response) is USGS's automated impact-estimation system. Green means no expected impact, Yellow means localised impact possible, Orange means significant impact likely, Red means catastrophic impact likely. Filter env_earthquakes with alert_level="orange" or "red" for high-impact events only.

Why is env_location_risk U.S.-only? The composite calls EPA ECHO (U.S. regulated facilities), NOAA / NWS (U.S. states and territories), and FEMA (U.S. federal disaster declarations). Three of the four sub-sources do not cover non-U.S. territory. For international site screening, call env_global_disasters (GDACS) and env_air_quality (OpenAQ) directly and skip the composite.

How often does NOAA / USGS / FEMA data update? NOAA active alerts refresh in near real-time via the NWS api.weather.gov feed. USGS earthquake data publishes within minutes of detection. FEMA OpenFEMA refreshes daily for new declarations. EPA ECHO lags 60-90 days because of EPA's quarterly reporting cycle. GDACS alerts refresh hourly. OpenAQ measurements refresh as monitoring stations publish, typically hourly.

What counts as "significant noncompliance" in EPA ECHO? EPA defines Significant Noncompliance differently per program, but in general it covers facilities with severe, persistent, or systemic violations of permit conditions or regulatory requirements. The MCP exposes this directly: compliance_status="3" returns facilities flagged SNC in any covered program; "4" returns facilities flagged SNC in multiple programs at once.

Does GDACS replace national disaster agencies? No. GDACS is a global multi-hazard coordination system run by the EU and UN that aggregates and triages alerts for international emergency response. Authoritative figures come from national disaster agencies (FEMA in the U.S., national civil-protection bodies elsewhere). Use GDACS for early signal and breadth, use national systems for authoritative response data.

Can I schedule this MCP to run periodic environmental sweeps? Yes. Use the Apify Scheduler to trigger the actor on a daily, weekly, or monthly cadence. Configure a webhook to push severe alerts or new SNC facilities to Slack, email, or a case-management system. A common pattern is a daily env_weather_alerts(active_only=true, severity="Extreme") poll per state of interest with new-event webhook delivery.

Is it legal to use this tool for site screening? All underlying data sources are publicly available U.S. federal records (EPA, NOAA, USGS, FEMA), the EU/UN GDACS feed, and the OpenAQ open-data platform. Querying public records for environmental due diligence is a standard practice in real estate, insurance, ESG, and emergency management. See Apify's guide on web scraping legality for broader context. Decisions made on the output (purchase, underwriting, hiring) should follow your jurisdiction's professional standards.

Help us improve

If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:

  1. Go to Account Settings > Privacy
  2. Enable Share runs with public Actor creators

This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.

Support

Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom solutions or enterprise integrations, reach out through the Apify platform.

Last verified: March 27, 2026

Ready to try Environmental Hazard MCP Server?

This actor is coming soon to the Apify Store.

Coming soon