tapwatermap

Query US tap-water quality from the EPA's SDWIS records — by city, system, or contaminant.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
87%
Naming quality
94%
Poisoning risk
100%
Permission match
90%
Protocol compliance
100%

Findings (1)

  • LOWTool 'fetch' suggests web access but openWorldHint=falsein fetch

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,188Tokens (tool definitions)
~571 BTypical response size
Moderate attention impact (0.93% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "tapwatermap": {
      "url": "https://mcp.tapwatermap.com/mcp"
    }
  }
}

Remote endpoints

https://mcp.tapwatermap.com/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search(query)

Search TapWaterMap for US cities by name. Returns matching cities with an id you can pass to `fetch`. (ChatGPT/Deep-Research compatible.)

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "City name or partial name, e.g. 'Burlington'."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢fetch(id)

Fetch the full plain-English EPA tap-water record for a city id (e.g. 'vt/burlington') returned by `search`. (ChatGPT/Deep-Research compatible.)

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "City id like 'vt/burlington' (state/slug)."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢search_cities(query, state, limit)

Find covered US cities by name, optionally within a state. Returns counts + the page URL for each.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "state": {
      "type": "string",
      "description": "Optional 2-letter state code, e.g. 'TX'."
    },
    "limit": {
      "type": "integer"
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢get_city_water(city, state)

The core tool: what the EPA has on record for a city's tap water — the active community water systems serving it, populations, sources, and violations (contaminant, health-based or not, dates, status, level vs limit when recorded). Plain-English, sourced, never a safety verdict.

Input Schema

{
  "type": "object",
  "properties": {
    "city": {
      "type": "string"
    },
    "state": {
      "type": "string",
      "description": "2-letter state code, e.g. 'VT'."
    }
  },
  "required": [
    "city",
    "state"
  ],
  "additionalProperties": false
}
🟢get_water_system(pwsid)

EPA record for a single water system by its PWSID (e.g. 'VT0005053'): name, population served, source, and violations.

Input Schema

{
  "type": "object",
  "properties": {
    "pwsid": {
      "type": "string"
    }
  },
  "required": [
    "pwsid"
  ],
  "additionalProperties": false
}
🟢list_state_cities(state)

List all covered cities in a state (with violation counts).

Input Schema

{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "2-letter state code."
    }
  },
  "required": [
    "state"
  ],
  "additionalProperties": false
}
🟢find_cities(state, contaminant, healthBasedOnly, minPopulation, openViolationsOnly, ...)

Filter/rank cities across the dataset — e.g. cities in TX with open health-based violations, or cities with a specific contaminant. Returns ranked matches.

Input Schema

{
  "type": "object",
  "properties": {
    "state": {
      "type": "string",
      "description": "Optional 2-letter state code."
    },
    "contaminant": {
      "type": "string",
      "description": "Optional EPA contaminant code or name (use explain_contaminant to find a code)."
    },
    "healthBasedOnly": {
      "type": "boolean"
    },
    "minPopulation": {
      "type": "integer"
    },
    "openViolationsOnly": {
      "type": "boolean",
      "description": "Only cities with violations not returned to compliance."
    },
    "limit": {
      "type": "integer"
    }
  },
  "additionalProperties": false
}
🟢compare_cities(cities)

Compare the EPA records of several cities side by side. Pass cities as 'City, ST' strings.

Input Schema

{
  "type": "object",
  "properties": {
    "cities": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "e.g. ['Burlington, VT', 'Houston, TX']"
    }
  },
  "required": [
    "cities"
  ],
  "additionalProperties": false
}
🟢explain_contaminant(contaminant)

Plain-English explanation of an EPA contaminant by name or code: the EPA name, whether the EPA classifies it as health-based, and how often it appears in our records. Not medical advice.

Input Schema

{
  "type": "object",
  "properties": {
    "contaminant": {
      "type": "string",
      "description": "Contaminant name or EPA code, e.g. 'TTHM' or '2950'."
    }
  },
  "required": [
    "contaminant"
  ],
  "additionalProperties": false
}
🟢coverage_stats

What TapWaterMap covers: states, cities, total EPA violation records, and the data quarter/date.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools
verifiedversion not recorded10 tools