Query US tap-water quality from the EPA's SDWIS records — by city, system, or contaminant.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Compare the EPA records of several cities side by side. Pass cities as 'City, ST' strings.
e.g. ['Burlington, VT', 'Houston, TX']
Compare the EPA records of several cities side by side. Pass cities as 'City, ST' strings.
| Argument | Type | Description |
|---|---|---|
| cities* | array | e.g. ['Burlington, VT', 'Houston, TX'] |
{
"type": "object",
"required": [
"cities"
],
"properties": {
"cities": {
"type": "array",
"items": {
"type": "string"
},
"description": "e.g. ['Burlington, VT', 'Houston, TX']"
}
},
"additionalProperties": false
}What TapWaterMap covers: states, cities, total EPA violation records, and the data quarter/date.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| contaminant* | string | Contaminant name or EPA code, e.g. 'TTHM' or '2950'. |
{
"type": "object",
"required": [
"contaminant"
],
"properties": {
"contaminant": {
"type": "string",
"description": "Contaminant name or EPA code, e.g. 'TTHM' or '2950'."
}
},
"additionalProperties": false
}Fetch the full plain-English EPA tap-water record for a city id (e.g. 'vt/burlington') returned by `search`. (ChatGPT/Deep-Research compatible.)
| Argument | Type | Description |
|---|---|---|
| id* | string | City id like 'vt/burlington' (state/slug). |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "City id like 'vt/burlington' (state/slug)."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| state | string | Optional 2-letter state code. |
| contaminant | string | Optional EPA contaminant code or name (use explain_contaminant to find a code). |
| minPopulation | integer | |
| healthBasedOnly | boolean | |
| openViolationsOnly | boolean | Only cities with violations not returned to compliance. |
{
"type": "object",
"properties": {
"limit": {
"type": "integer"
},
"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)."
},
"minPopulation": {
"type": "integer"
},
"healthBasedOnly": {
"type": "boolean"
},
"openViolationsOnly": {
"type": "boolean",
"description": "Only cities with violations not returned to compliance."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| city* | string | |
| state* | string | 2-letter state code, e.g. 'VT'. |
{
"type": "object",
"required": [
"city",
"state"
],
"properties": {
"city": {
"type": "string"
},
"state": {
"type": "string",
"description": "2-letter state code, e.g. 'VT'."
}
},
"additionalProperties": false
}EPA record for a single water system by its PWSID (e.g. 'VT0005053'): name, population served, source, and violations.
| Argument | Type | Description |
|---|---|---|
| pwsid* | string |
{
"type": "object",
"required": [
"pwsid"
],
"properties": {
"pwsid": {
"type": "string"
}
},
"additionalProperties": false
}List all covered cities in a state (with violation counts).
| Argument | Type | Description |
|---|---|---|
| state* | string | 2-letter state code. |
{
"type": "object",
"required": [
"state"
],
"properties": {
"state": {
"type": "string",
"description": "2-letter state code."
}
},
"additionalProperties": false
}Search TapWaterMap for US cities by name. Returns matching cities with an id you can pass to `fetch`. (ChatGPT/Deep-Research compatible.)
| Argument | Type | Description |
|---|---|---|
| query* | string | City name or partial name, e.g. 'Burlington'. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "City name or partial name, e.g. 'Burlington'."
}
},
"additionalProperties": false
}Find covered US cities by name, optionally within a state. Returns counts + the page URL for each.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string | |
| state | string | Optional 2-letter state code, e.g. 'TX'. |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer"
},
"query": {
"type": "string"
},
"state": {
"type": "string",
"description": "Optional 2-letter state code, e.g. 'TX'."
}
},
"additionalProperties": false
}