AIDEVELOPER TOOLS

Water Utility Risk Intelligence MCP Server

Water utility risk intelligence for analysts, bond credit teams, and ESG investors who need structured, multi-dimensional assessments of municipal water systems. This MCP server orchestrates **9 government data sources** in parallel — OpenAQ, USGS, FEMA, NOAA, Data.gov, Federal Register, CFPB, World Bank, and BLS — and applies **4 scoring models** to produce a **Composite Water Risk Score (0–100)** across contamination exposure, infrastructure stress, drought and climate, and affordability dimen

Try on Apify Store
$0.35per event
1
Users (30d)
9
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.35
Per event

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?

water_system_risk_assessments
Estimated cost:$35.00

Pricing

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

EventDescriptionPrice
water_system_risk_assessmentFull 9-source assessment: contamination + infrastructure + drought + affordability.$0.35
contaminant_exposure_checkPFAS, lead, arsenic — regulatory actions and air quality proxy.$0.08
infrastructure_age_analysisSeismic, disaster, climate stress on water infrastructure.$0.06
drought_climate_forecastActive drought, heat, precipitation trends, water scarcity.$0.05
affordability_stress_indexBilling complaints, economic indicators, poverty rates.$0.06
regulatory_compliance_gapEPA/state rules, MCL changes, enforcement actions.$0.06
compare_water_systemsMulti-axis water system comparison data.$0.08
watershed_risk_reportFull 9-source watershed risk assessment.$0.35

Example: 100 events = $35.00 · 1,000 events = $350.00

Connect to your AI agent

Add this MCP server to Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.

MCP Endpoint
https://ryanclinton--water-utility-risk-intelligence-mcp.apify.actor/mcp
Claude Desktop Config
{
  "mcpServers": {
    "water-utility-risk-intelligence-mcp": {
      "url": "https://ryanclinton--water-utility-risk-intelligence-mcp.apify.actor/mcp"
    }
  }
}

Documentation

Water utility risk intelligence for analysts, bond credit teams, and ESG investors who need structured, multi-dimensional assessments of municipal water systems. This MCP server orchestrates 9 government data sources in parallel — OpenAQ, USGS, FEMA, NOAA, Data.gov, Federal Register, CFPB, World Bank, and BLS — and applies 4 scoring models to produce a Composite Water Risk Score (0–100) across contamination exposure, infrastructure stress, drought and climate, and affordability dimensions.

Connect it to Claude, Cursor, Windsurf, or any MCP-compatible AI client and query water systems by name. Results include per-dimension scores, actionable signals, and specific remediation recommendations — no coding required after initial setup.

What data can you access?

Data PointSourceExample
📡 Air quality readings as industrial contamination proxyOpenAQPM2.5 = 78 µg/m³ near Sacramento River intake
🌊 Seismic events and earthquake magnitude dataUSGS Earthquake SearchM5.2 earthquake within 12 km of distribution main
🚨 FEMA disaster declarations affecting water infrastructureFEMA Disaster SearchDR-4699-CA — major flood, 2 water plants affected
🌩️ Drought, flood, and extreme weather alertsNOAA Weather AlertsExtreme drought warning — Sacramento Valley
📂 Federal water violation databases, SDWA enforcement recordsData.gov14 drinking water violation datasets found
📋 EPA MCL changes, PFAS rulemaking, SDWA amendmentsFederal RegisterFinal rule: PFAS MCL 4 ppt — effective 2026
💬 Water utility billing and service complaintsCFPB Consumer Complaints23 billing/shutoff complaints — Fresno area
🌍 Global freshwater availability and water scarcity indicesWorld Bank IndicatorsRenewable freshwater per capita: 1,847 m³/yr
💼 Regional unemployment, income, and poverty indicatorsBLS Economic DataUnemployment 8.4% — Kern County
🎯 Composite Water Risk Score (0–100)Scoring modelScore: 67 — HIGH_RISK
⚠️ Contaminant alerts count (PFAS, lead, arsenic, etc.)Federal Register + Data.gov5 contaminant regulatory actions detected
🏗️ Infrastructure risk level classificationUSGS + FEMA + NOAADETERIORATING (score: 58)
💧 Water stress level classificationNOAA + World BankSCARCE (drought score: 62)
💰 Affordability stress levelCFPB + BLSUNAFFORDABLE (score: 61)
📌 Actionable risk signalsAll sources combined"3 emergency MCL rules — treatment upgrade required"
📝 Specific remediation recommendationsScoring engine"Multiple contaminant regulations — upgrade treatment"

Why use Water Utility Risk Intelligence MCP?

Researching water system risk manually means checking the EPA SDWIS database, pulling FEMA disaster declarations, finding NOAA drought monitors, digging through Federal Register rulemaking notices, and cross-referencing local economic data — all separately, all by hand. For a single utility assessment that might take 4–6 hours. For a portfolio of 20 systems, that is weeks of analyst time.

This MCP automates the entire process. Ask your AI client to assess a water system by name, and within 2 minutes you receive a structured report with a Composite Water Risk Score, four dimensional scores, specific risk signals extracted from each data source, and prioritized recommendations. The scoring models are transparent — every signal that drove the score is returned in the output.

  • Scheduling — run recurring utility assessments on Apify Scheduler to track risk score changes over time
  • API access — trigger assessments from Python, JavaScript, or any HTTP client via the Apify API
  • Standby mode — the server stays warm between requests for low-latency MCP tool calls
  • Monitoring — receive Slack or email alerts when risk scores exceed thresholds via Apify webhooks
  • Integrations — connect to Zapier, Make, or push results directly to your CRM or data warehouse

Features

  • 4 independent scoring models — Water Vulnerability (max 100), Infrastructure Risk (max 100), Drought/Climate (max 100), and Affordability Stress (max 100), each with transparent sub-components
  • Composite Water Risk Score — weighted average: water vulnerability 30%, infrastructure 25%, drought/climate 25%, affordability 20%
  • 18 tracked contaminant types — PFAS, PFOA, PFOS, lead, arsenic, nitrate, bacteria, E. coli, coliform, trihalomethanes, chlorine, fluoride, mercury, chromium, radium, uranium, perchlorate, microplastics
  • Air quality as contamination proxy — industrial PM2.5 > 50 µg/m³ near water sources flags potential contamination co-exposure risk, scored up to 25 points
  • MCL emergency rule detection — scans Federal Register for "maximum contaminant level" and "emergency" keywords, adds up to 10 points per emergency rule
  • Seismic infrastructure scoring — M4.0+ earthquakes score 10 points each, M6.0+ trigger explicit pipe rupture signals, capped at 30
  • FEMA flood and storm event weighting — flood/hurricane/storm events score 8 points each; other disasters 3 points, capped at 30
  • NOAA drought + heat compounding — concurrent drought and heat events add 15 extra points for compounding water stress
  • CFPB billing keyword detection — scans complaint text for 8 billing keywords (bill, shutoff, disconnection, overcharge, etc.) to isolate water utility payment distress
  • BLS unemployment threshold scoring — unemployment above 6% adds 10 affordability points; CPI inflation above 4% adds 8 points
  • World Bank poverty flag — poverty rate above 15% adds 10 points; Gini coefficient above 40 adds 5 points
  • 5-tier risk classification per dimension — each model returns a named level: e.g. CRITICAL / FAILING / EMERGENCY / CRISIS for worst-case, LOW / MODERN / ABUNDANT / AFFORDABLE for best-case
  • 8 MCP tools — targeted tools for focused queries plus a full watershed report tool querying all 9 sources simultaneously
  • Parallel data fetching — all upstream actors run concurrently via Promise.all, keeping latency under 2 minutes for 9-source reports
  • Spending limit guard — every tool checks eventChargeLimitReached before executing to prevent runaway charges

Use cases for water utility risk intelligence

Municipal bond credit analysis

Bond analysts and credit rating teams assessing water revenue bonds need to evaluate infrastructure condition, regulatory compliance exposure, and affordability risk in the service area. This MCP replaces a multi-day manual research process with a single tool call. Ask your AI to run water_system_risk_assessment for a utility and receive a structured risk profile alongside the FEMA disaster history, seismic exposure, and CFPB complaint volume that conventional credit analysis often misses.

ESG portfolio water risk screening

Asset managers with ESG mandates screening for water-related risk across municipal and corporate holdings can use this MCP to quantify exposure. The drought/climate score and contaminant exposure check align with TCFD physical risk frameworks. Run compare_water_systems across a portfolio of service territories and rank holdings by composite score to prioritize engagement.

PFAS and contaminant monitoring

Environmental compliance teams and legal departments monitoring PFAS, lead service line replacement, and emerging contaminant regulations can use contaminant_exposure_check to track Federal Register rulemaking activity against specific water systems. The tool returns the raw regulatory filings alongside the scored contaminant alert count, so analysts can read the underlying documents.

Water utility peer benchmarking

Utility operations managers and consultants benchmarking performance against peer systems can use compare_water_systems to generate standardized per-dimension scores for each utility. The four dimension scores — vulnerability, infrastructure, drought, affordability — provide a consistent comparison framework across systems of different size and geography.

Climate adaptation and infrastructure planning

Engineering firms and utility planners developing 20-year capital improvement plans can use infrastructure_age_analysis and drought_climate_forecast together to quantify compound risk from seismic exposure, FEMA disaster history, and active drought conditions. The signals returned identify which specific events are driving the score, providing evidence for capital prioritization decisions.

Affordability and equity analysis

Policy researchers and utility regulators examining water affordability can use affordability_stress_index to combine CFPB billing complaint data with BLS unemployment and World Bank poverty indicators for a service territory. High complaint volume in economically stressed regions produces specific signals — "Unemployment 9.1% — reduced ability to pay utility bills" — that quantify equity risk.

How to use water utility risk intelligence

  1. Connect the MCP server — Add the server URL to your MCP client config (see the connection section below). You need an Apify account and API token from console.apify.com.
  2. Choose your tool — For a full assessment, use water_system_risk_assessment. For a focused query (contaminant check, drought forecast, affordability index), use the targeted tools. For a region rather than a named utility, use watershed_risk_report.
  3. Run the query — Ask your AI: "Assess the water utility risk for Flint, Michigan." The MCP calls the appropriate tool, queries up to 9 data sources in parallel, and returns results in 60–120 seconds.
  4. Interpret the output — You receive a Composite Water Risk Score (0–100), a named verdict (LOW_RISK to CRITICAL), per-dimension scores, human-readable risk signals, and specific recommendations. Export or summarize as needed.

MCP tools

ToolPriceData SourcesParameters
water_system_risk_assessment$0.045All 9 sourcessystem, state (optional)
contaminant_exposure_check$0.045OpenAQ, Federal Register, Data.govlocation, contaminant (optional)
infrastructure_age_analysis$0.045USGS, FEMA, NOAAlocation
drought_climate_forecast$0.045NOAA, World Bankregion
affordability_stress_index$0.045CFPB, BLS, World Banksystem
regulatory_compliance_gap$0.045Federal Register, Data.govsystem, regulation (optional)
compare_water_systems$0.045OpenAQ, USGS, NOAA, Federal Register, CFPBsystem
watershed_risk_report$0.045All 9 sourcesregion, state (optional)

Tool parameter reference

ParameterTypeRequiredDescription
systemstringvariesWater utility name, municipality, or service area (e.g. "Phoenix Water Services")
statestringnoState name for regulatory context (e.g. "Arizona")
locationstringvariesCity, county, or water system for contaminant/infrastructure tools
contaminantstringnoSpecific contaminant to focus on: "PFAS", "lead", "arsenic"
regionstringvariesWatershed, county, or region for climate/watershed tools
regulationstringnoSpecific regulation to query: "PFAS", "LCRI", "SDWA"

Output example

A water_system_risk_assessment call for "Denver" returns:

{
  "system": "Denver",
  "compositeScore": 44,
  "verdict": "ELEVATED",
  "waterVulnerability": {
    "score": 38,
    "contaminantAlerts": 4,
    "airQualityImpact": 12,
    "environmentalRisk": 10,
    "riskLevel": "MODERATE",
    "signals": [
      "4 contaminant-related regulatory actions",
      "2 extreme air quality events — industrial contamination risk to water sources"
    ]
  },
  "infrastructure": {
    "score": 51,
    "seismicRisk": 10,
    "disasterExposure": 24,
    "climateStress": 17,
    "riskLevel": "AGING",
    "signals": [
      "M4.3 earthquake — critical infrastructure damage risk",
      "4 flood/storm disasters — water treatment plant vulnerability",
      "2 drought alerts — water supply stress"
    ]
  },
  "droughtClimate": {
    "score": 46,
    "droughtAlerts": 2,
    "heatEvents": 4,
    "waterStressLevel": "STRESSED",
    "signals": [
      "2 active drought conditions — water supply crisis risk",
      "4 heat events — increased water demand + evaporation",
      "Concurrent drought + heat — compounding water stress"
    ]
  },
  "affordability": {
    "score": 39,
    "complaints": 11,
    "economicStress": 18,
    "affordabilityLevel": "STRESSED",
    "signals": [
      "8 billing complaints — rate affordability concern",
      "Unemployment 6.8% — reduced ability to pay utility bills"
    ]
  },
  "allSignals": [
    "4 contaminant-related regulatory actions",
    "2 extreme air quality events — industrial contamination risk to water sources",
    "M4.3 earthquake — critical infrastructure damage risk",
    "4 flood/storm disasters — water treatment plant vulnerability",
    "2 drought alerts — water supply stress",
    "2 active drought conditions — water supply crisis risk",
    "4 heat events — increased water demand + evaporation",
    "Concurrent drought + heat — compounding water stress",
    "8 billing complaints — rate affordability concern",
    "Unemployment 6.8% — reduced ability to pay utility bills"
  ],
  "recommendations": [
    "Multiple contaminant regulations — upgrade treatment capabilities",
    "Seismic zone — ensure pipe materials and joints are earthquake-rated"
  ]
}

Output fields

FieldTypeDescription
systemstringWater system name as provided
compositeScorenumberWeighted composite risk score 0–100
verdictstringLOW_RISK / MANAGEABLE / ELEVATED / HIGH_RISK / CRITICAL
waterVulnerability.scorenumberContamination vulnerability score 0–100
waterVulnerability.contaminantAlertsnumberCount of contaminant regulatory actions detected
waterVulnerability.airQualityImpactnumberAir quality contamination proxy sub-score (0–25)
waterVulnerability.environmentalRisknumberComposite environmental risk sub-score (0–20)
waterVulnerability.riskLevelstringLOW / MODERATE / ELEVATED / HIGH / CRITICAL
waterVulnerability.signalsstring[]Human-readable signals that drove the score
infrastructure.scorenumberInfrastructure stress score 0–100
infrastructure.seismicRisknumberSeismic sub-score from USGS data (0–30)
infrastructure.disasterExposurenumberFEMA disaster exposure sub-score (0–30)
infrastructure.climateStressnumberNOAA climate stress sub-score (0–25)
infrastructure.riskLevelstringMODERN / ADEQUATE / AGING / DETERIORATING / FAILING
infrastructure.signalsstring[]Signals from seismic, disaster, and weather data
droughtClimate.scorenumberDrought and climate water stress score 0–100
droughtClimate.droughtAlertsnumberCount of active NOAA drought alerts
droughtClimate.heatEventsnumberCount of NOAA heat events
droughtClimate.waterStressLevelstringABUNDANT / ADEQUATE / STRESSED / SCARCE / EMERGENCY
droughtClimate.signalsstring[]Drought, heat, and precipitation signals
affordability.scorenumberAffordability stress score 0–100
affordability.complaintsnumberTotal billing + debt complaints from CFPB
affordability.economicStressnumberBLS economic stress sub-score (0–30)
affordability.affordabilityLevelstringAFFORDABLE / MANAGEABLE / STRESSED / UNAFFORDABLE / CRISIS
affordability.signalsstring[]Complaint, unemployment, and poverty signals
allSignalsstring[]Merged signals from all four dimensions
recommendationsstring[]Specific remediation actions triggered by score thresholds

How much does it cost to assess water utility risk?

This MCP uses pay-per-event pricing — you pay $0.045 per tool call. Apify platform compute costs are included.

ScenarioTool callsCost per callTotal cost
Quick test — single utility1$0.045$0.045
Focused checks (contaminant + drought + affordability)3$0.045$0.135
Full utility assessment + comparison5$0.045$0.225
Weekly monitoring — 10 utilities10$0.045$0.45
Monthly portfolio screen — 50 utilities50$0.045$2.25

You can set a maximum spending limit per run to control costs. The server stops charging when your budget is reached.

The Apify free plan includes $5 of monthly platform credits — enough for over 100 water system risk assessments per month.

Compare this to commercial water risk data platforms that charge $500–2,000/month for pre-built risk scores. With this MCP, most users spend $2–10/month with no subscription commitment and full transparency into how each score was derived.

How to connect this MCP server

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "water-utility-risk-intelligence": {
      "url": "https://water-utility-risk-intelligence-mcp.apify.actor/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}

Cursor / Windsurf / Cline

Add the following MCP server URL in your IDE's MCP configuration:

https://water-utility-risk-intelligence-mcp.apify.actor/mcp

Include your Apify token as a Bearer token in the Authorization header. The exact configuration location varies by client — check your IDE's MCP documentation.

Programmatic HTTP (cURL)

# Run a full water system risk assessment
curl -X POST "https://water-utility-risk-intelligence-mcp.apify.actor/mcp" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "water_system_risk_assessment",
      "arguments": {
        "system": "Flint",
        "state": "Michigan"
      }
    },
    "id": 1
  }'

Python

import httpx
import json

APIFY_TOKEN = "YOUR_APIFY_TOKEN"
MCP_URL = "https://water-utility-risk-intelligence-mcp.apify.actor/mcp"

def assess_water_risk(system: str, state: str = None):
    payload = {
        "jsonrpc": "2.0",
        "method": "tools/call",
        "params": {
            "name": "water_system_risk_assessment",
            "arguments": {"system": system, **({"state": state} if state else {})}
        },
        "id": 1
    }
    response = httpx.post(
        MCP_URL,
        json=payload,
        headers={"Authorization": f"Bearer {APIFY_TOKEN}"}
    )
    result = response.json()
    text = result["result"]["content"][0]["text"]
    data = json.loads(text)
    print(f"System: {data['system']}")
    print(f"Composite Score: {data['compositeScore']}/100 — {data['verdict']}")
    print(f"Contaminant Alerts: {data['waterVulnerability']['contaminantAlerts']}")
    print(f"Infrastructure Level: {data['infrastructure']['riskLevel']}")
    print(f"Water Stress: {data['droughtClimate']['waterStressLevel']}")
    print(f"Affordability: {data['affordability']['affordabilityLevel']}")
    for rec in data.get("recommendations", []):
        print(f"  - {rec}")
    return data

result = assess_water_risk("Phoenix", "Arizona")

JavaScript

const APIFY_TOKEN = "YOUR_APIFY_TOKEN";
const MCP_URL = "https://water-utility-risk-intelligence-mcp.apify.actor/mcp";

async function assessWaterRisk(system, state) {
  const response = await fetch(MCP_URL, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Authorization": `Bearer ${APIFY_TOKEN}`,
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      method: "tools/call",
      params: {
        name: "water_system_risk_assessment",
        arguments: { system, ...(state ? { state } : {}) },
      },
      id: 1,
    }),
  });

  const result = await response.json();
  const data = JSON.parse(result.result.content[0].text);
  console.log(`${data.system}: Score ${data.compositeScore}/100 — ${data.verdict}`);
  console.log(`Contamination: ${data.waterVulnerability.riskLevel}`);
  console.log(`Infrastructure: ${data.infrastructure.riskLevel}`);
  console.log(`Water Stress: ${data.droughtClimate.waterStressLevel}`);
  console.log(`Affordability: ${data.affordability.affordabilityLevel}`);
  data.recommendations?.forEach(r => console.log(`  Recommendation: ${r}`));
  return data;
}

assessWaterRisk("Phoenix", "Arizona");

How Water Utility Risk Intelligence works

Phase 1 — Parallel data collection across 9 government sources

When a tool is called, the server dispatches up to 9 Apify actors concurrently using Promise.all — OpenAQ for air quality readings proxying industrial contamination near water sources, USGS for seismic events within the region, FEMA for declared disasters affecting water infrastructure, NOAA for active drought and extreme weather alerts, Data.gov for federal water quality and violation datasets, the Federal Register for EPA rulemaking actions, CFPB for consumer complaints about water utility billing, the World Bank for freshwater availability indicators, and BLS for regional economic data. Each upstream actor runs with a 120-second timeout and 512 MB memory allocation. Focused tools (e.g. infrastructure_age_analysis) call only the 3 relevant sources rather than all 9, reducing latency and cost.

Phase 2 — Four independent scoring models

Each scoring model processes its relevant subset of the combined data independently:

Water Vulnerability scoring scans Federal Register entries against 18 PFAS/heavy-metal/biological contaminant keywords, counting regulatory actions and emergency MCL rules. Air quality readings above AQI 100 contribute to the industrial contamination proxy (PM2.5 > 50 µg/m³ doubles the weight). Sub-scores are capped: air quality proxy (25), regulatory activity (30), Data.gov violation data (25), composite environmental risk (20).

Infrastructure Risk scoring parses USGS earthquake records for magnitude thresholds — M4.0+ earthquakes each contribute 10 points to the seismic sub-score (cap 30). FEMA disaster records are classified by incident type: flood/hurricane/storm events score 8 points each, other disasters 3 points. NOAA alerts are parsed for "drought", "excessive heat", "flood", and "flash flood" keywords with severity classification.

Drought/Climate scoring applies a compounding signal: concurrent drought alerts (≥1) with heat events (≥2) add 15 bonus points for compound water stress. World Bank precipitation data triggers a 10-point low-rainfall flag when annual precipitation falls below 500mm.

Affordability scoring scans CFPB complaint text against 8 billing-related keywords and 2 debt/collection keywords separately. BLS series IDs containing "unemployment" with values above 6% add 10 points; CPI/inflation series above 4% add 8 points.

Phase 3 — Composite scoring and verdict generation

The composite score uses a fixed-weight formula: (vulnerability × 0.30) + (infrastructure × 0.25) + (drought × 0.25) + (affordability × 0.20). All four dimension scores are rounded to integer before combining. The verdict thresholds are: CRITICAL (≥80), HIGH_RISK (≥60), ELEVATED (≥40), MANAGEABLE (≥20), LOW_RISK (<20). Recommendations are generated conditionally: each fires only when its triggering threshold is crossed — e.g. the seismic recommendation fires when infrastructure.seismicRisk >= 20, not as a generic output.

Phase 4 — Standby mode delivery

The server runs in Apify Standby mode (usesStandbyMode: true), meaning it stays alive between requests rather than cold-starting. The MCP endpoint is at /mcp and accepts POST requests following the JSON-RPC 2.0 protocol. Each request creates a fresh McpServer instance with a StreamableHTTPServerTransport, ensuring stateless handling without session memory leakage between queries.

Tips for best results

  1. Include the state for US utilities. The state parameter on water_system_risk_assessment and watershed_risk_report appends the state to all upstream queries, improving geographic specificity in Federal Register and NOAA results for utilities with common names.

  2. Use contaminant_exposure_check with a specific contaminant for targeted PFAS work. Passing contaminant: "PFAS" focuses the Federal Register query on PFAS-specific rulemaking rather than general water quality actions, reducing noise in the regulatory signals.

  3. Run infrastructure_age_analysis first for bond analysis. Infrastructure risk is the most capital-intensive dimension. If the infrastructure score is LOW or ADEQUATE, you can skip the full 9-source report and save cost.

  4. Use compare_water_systems to build benchmark tables. The tool returns four dimension scores in a flat comparison object, making it easy to tabulate results for 5–10 systems in a spreadsheet or AI summary without parsing nested sub-objects.

  5. Combine drought_climate_forecast with watershed_risk_report for regional planning. The drought tool gives a faster, cheaper climate snapshot; the watershed report confirms findings with full multi-source context when the drought score exceeds STRESSED.

  6. Set a spending limit before screening large portfolios. In your Apify account, configure a per-run budget before running repeated tool calls. At $0.045 per call, screening 50 utilities costs $2.25 — well within the free tier, but the spending limit guards against unexpected loops in AI agent workflows.

  7. Review the allSignals array before the composite score. The signals are the audit trail. A score of 65 driven entirely by CFPB complaints has different implications than the same score driven by FEMA disaster declarations and seismic events.

Combine with other Apify actors

ActorHow to combine
NOAA Weather AlertsPull raw NOAA alert data for a region before running the full water risk assessment to pre-screen for drought conditions
Federal Register SearchQuery EPA SDWA rulemaking directly to read the full text of MCL changes flagged in the compliance gap tool
FEMA Disaster SearchRetrieve full disaster declaration records for utilities showing high infrastructure risk scores
CFPB Consumer ComplaintsDrill into raw complaint narratives for utilities flagged with high affordability stress
USGS Earthquake SearchPull historical seismic data for engineering-level pipe rupture risk assessments beyond the MCP's scoring
World Bank IndicatorsRetrieve long-term freshwater availability trends for climate adaptation planning beyond the MCP's 30-point water stress sub-score
Company Deep ResearchCombine water utility risk scores with company intelligence reports for municipal bond issuer due diligence

Limitations

  • No direct SDWIS access. The EPA Safe Drinking Water Information System (SDWIS) contains system-level violation records with PWS IDs. This MCP accesses Data.gov water datasets and Federal Register EPA actions, not SDWIS violation-level data directly. For specific PWS violation history, use EPA's ECHO database.
  • No water quality sample data. The MCP assesses regulatory and environmental risk signals, not laboratory water test results. Actual contaminant concentration data (mg/L, µg/L) requires sample databases not currently wired as data sources.
  • Air quality as proxy, not direct measurement. The contamination proxy uses OpenAQ air quality readings near a region as an indicator of industrial activity that may affect water sources. It does not establish a causal link between specific air pollution events and water contamination.
  • Geographic precision depends on upstream query matching. Results quality depends on how well the system or region name matches records in each upstream data source. A utility with an unusual or ambiguous name may return sparse results from some sources.
  • No real-time pipe-level monitoring. The infrastructure risk score is based on seismic, disaster, and weather events — it does not integrate real-time SCADA, pressure monitoring, or pipe break records from utility operations systems.
  • World Bank indicators are country-level. The World Bank freshwater and poverty data are national or regional aggregates, not local to a specific water system's service area. Sub-national precision for these indicators is limited.
  • CFPB complaints are consumer financial product complaints. The CFPB primarily tracks complaints about financial products. Water utility billing complaints in the CFPB dataset represent a useful signal but not a complete picture of rate affordability or service quality.
  • Scores reflect current data availability, not historical trends. Each run queries current data from the upstream sources. The MCP does not store historical run results — use Apify Scheduler with dataset persistence to build your own trend tracking.

Integrations

  • Apify API — trigger water risk assessments programmatically and store results in Apify datasets for downstream analysis
  • Zapier — connect water risk score outputs to spreadsheets, Slack alerts, or CRM updates when scores exceed defined thresholds
  • Make — build automated workflows that run monthly utility assessments and route HIGH_RISK results to analyst review queues
  • Webhooks — receive HTTP callbacks when an assessment completes, enabling real-time integration with internal risk management platforms
  • Google Sheets — pipe comparison results from compare_water_systems into a live Google Sheet for portfolio-level risk dashboards
  • LangChain / LlamaIndex — use water risk assessment results as structured context for AI-generated utility risk memos and investment committee reports

Troubleshooting

  • Low signal count despite known water issues. If the system name is ambiguous (e.g. "Springfield") try adding the state parameter ("state": "Illinois") or use a more specific name like "Springfield Illinois Water Department". Geographic disambiguation improves Federal Register and FEMA query matching.

  • Infrastructure score is low despite the region having active seismic activity. The USGS query uses the system or region name as a text search. For seismically active but sparsely populated areas, USGS records may not match the utility name. Try running with a regional watershed or county name instead: "San Andreas Fault Zone" rather than a specific small utility.

  • Affordability score is unexpectedly high or low. The CFPB complaint search queries for "water utility" in combination with the system name. For very large cities, this can surface many unrelated financial complaints. For very small systems, complaints may be too sparse to score. The BLS economic sub-score is the more stable signal for small utilities.

  • Run completes but returns empty signals. Empty signals indicate that no upstream actor returned data matching the scoring model thresholds. This is valid — it means the data sources do not contain qualifying risk events for that system. A score of 0–15 with empty signals reflects genuine low risk rather than a data collection failure.

  • Spending limit reached before all tools complete. Each tool call charges $0.045 independently. If running multiple tools within an AI agent loop, set your Apify account run budget to cover the expected number of calls. 10 calls = $0.45.

Responsible use

  • This MCP accesses publicly available US government and international organization data sources only.
  • Data is used for informational risk assessment purposes, not for regulatory enforcement or legal proceedings.
  • Water risk scores are indicators derived from public data signals, not certified engineering assessments or regulatory determinations.
  • Comply with applicable laws when using assessment outputs for investment decisions, bond analysis, or public communications.
  • For guidance on data use legality, see Apify's guide.

FAQ

How accurate is the Composite Water Risk Score? The score is a relative risk indicator, not an absolute safety rating. It reflects the density and severity of risk signals detected in current public data — more regulatory actions, seismic events, and drought alerts produce higher scores. It is calibrated to flag systems warranting further investigation, not to certify compliance or infrastructure condition.

How many data sources does water utility risk intelligence query? Up to 9: OpenAQ, USGS Earthquake Search, FEMA Disaster Search, NOAA Weather Alerts, Data.gov, Federal Register, CFPB Consumer Complaints, World Bank Indicators, and BLS Economic Data. Focused tools like infrastructure_age_analysis query 3 sources; the full water_system_risk_assessment and watershed_risk_report query all 9.

Does this tool detect PFAS contamination in water systems? The contaminant_exposure_check tool identifies PFAS-related Federal Register EPA rulemaking actions (MCL changes, enforcement), Data.gov violation datasets, and environmental monitoring data near the location. It detects regulatory activity around PFAS, not direct water sample concentrations. For sample-level PFAS data, EPA's PFAS Unregulated Contaminant Monitoring Program (UCMR) database is the authoritative source.

How long does a water system assessment take? Full assessments querying all 9 sources typically complete in 60–120 seconds. Focused tools querying 2–3 sources complete in 20–45 seconds. The server runs in Apify Standby mode, so there is no cold-start delay between consecutive queries.

Can I assess water systems outside the United States? Most data sources are US-focused (USGS, FEMA, NOAA, CFPB, BLS, Federal Register). The World Bank indicators are global. For international water systems, the drought/climate and World Bank sub-scores will return data, but US-specific regulatory and infrastructure scores will be sparse. The drought_climate_forecast tool works best for international regions.

How is this different from EPA's ECHO or SDWIS databases? EPA ECHO and SDWIS provide direct violation-level data tied to specific Public Water System IDs. This MCP provides a broader multi-dimensional risk assessment across contamination, infrastructure, climate, and affordability — synthesizing 9 sources into scored dimensions. It complements rather than replaces direct SDWIS lookups.

Can I schedule recurring water risk monitoring? Yes. Use Apify Scheduler to run periodic assessments for your tracked utilities. Results are stored in Apify datasets between runs. Combine with webhooks to receive alerts when composite scores exceed a threshold like 60.

Is it legal to use this data for investment analysis? All data sources are publicly available US government and international organization databases. The data is freely available for any purpose. Consult your legal and compliance team regarding disclosure requirements when using third-party risk indicators in investment products. See Apify's guide.

What triggers the "Critical contamination risk" recommendation? The recommendation fires when waterVulnerability.riskLevel === 'CRITICAL', which requires a vulnerability score of 80 or above. This typically requires a combination of multiple emergency MCL rules (10 points each, up to 30 total), extreme air quality events near water sources, and concurrent violation datasets from Data.gov.

Can I compare multiple water systems side by side? Yes. Use compare_water_systems for each utility to generate a flat comparison object with four dimension scores. Run it for each system you want to compare, then ask your AI to summarize the results as a ranked table. Alternatively, run water_system_risk_assessment for each system and compare composite scores.

How do I interpret a verdict of ELEVATED versus HIGH_RISK? ELEVATED (score 40–59) indicates significant risk signals present in at least one dimension, warranting monitoring and planning. HIGH_RISK (score 60–79) indicates multiple compounding risk factors across dimensions — remediation planning is recommended. CRITICAL (≥80) indicates multiple simultaneous severe risk factors requiring urgent attention.

Does the affordability score account for water rates directly? No. The affordability model uses CFPB complaint volume (billing, shutoff, overcharge keywords), BLS unemployment and CPI data, and World Bank poverty indicators. It does not access actual water rate schedules. High scores indicate communities where residents are more likely to struggle with water bills given economic conditions and complaint patterns.

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 integrations or enterprise water risk workflows, reach out through the Apify platform.

How it works

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

Get results

Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.

Use cases

Sales Teams

Build targeted lead lists with verified contact data.

Marketing

Research competitors and identify outreach opportunities.

Data Teams

Automate data collection pipelines with scheduled runs.

Developers

Integrate via REST API or use as an MCP tool in AI workflows.

Ready to try Water Utility Risk Intelligence MCP Server?

Start for free on Apify. No credit card required.

Open on Apify Store