Skip to main content
Glama

Server Details

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

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 3.8/5 across 10 of 10 tools scored. Lowest: 3.2/5.

Server CoherenceB
Disambiguation2/5

Multiple tools have overlapping purposes: `search` and `search_cities` both find cities by name, and `fetch` and `get_city_water` both retrieve EPA records for a city. This creates ambiguity for an agent deciding which tool to use.

Naming Consistency3/5

Most tools follow a verb_noun pattern (e.g., compare_cities, get_city_water), but `fetch` and `search` are single-word imperatives without an object, breaking the consistency slightly.

Tool Count4/5

With 10 tools, the server is well-scoped for a data retrieval domain. Each tool has a distinct role, though some overlap could be consolidated, the count is reasonable.

Completeness3/5

Core operations (search cities, fetch records, compare, list states) are covered, but the redundancy between `fetch`/`get_city_water` suggests unclear boundaries, and there is no tool to search by water system name or list all contaminants.

Available Tools

10 tools
compare_citiesA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
citiesYese.g. ['Burlington, VT', 'Houston, TX']
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, idempotent, non-destructive. The description adds that it compares side-by-side and requires a specific format, but does not disclose return details or behavior beyond that. This is adequate but not extra valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no extraneous information. The first sentence conveys purpose, the second provides usage format. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, so the description should hint at what the comparison returns (a table? scores?). It only states 'compare... records' without specifying the output format or content, leaving the agent unsure of what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with an example for the cities parameter. The description reinforces the format ('City, ST'), adding clarity beyond the schema's example. This is slightly above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool compares EPA records of multiple cities side by side, with a specific verb and resource. It distinguishes from siblings like get_city_water (single city) and coverage_stats (different data). The format guidance 'City, ST' removes ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool versus alternatives. It does not mention when-not or recommend other tools for single-city queries, which is important given the many sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coverage_statsA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds context about what data is returned (coverage items), which is not in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single concise sentence front-loaded with the purpose ('What TapWaterMap covers'). No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and no output schema, the description adequately explains what it returns, making it complete for agent usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so schema coverage is 100%. The description explains the output contents, adding value beyond the empty schema. Baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides coverage information (states, cities, total EPA violation records, data quarter/date). It distinguishes from sibling tools like get_city_water or search_cities which focus on specific queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool vs alternatives, but the content implies it is for getting an overview of available data, while siblings handle specific lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_contaminantA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
contaminantYesContaminant name or EPA code, e.g. 'TTHM' or '2950'.
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, indicating a safe, read-only operation. The description adds that the output includes classification and frequency, and includes a disclaimer. No additional behavioral traits (e.g., data source, update frequency) are disclosed beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states purpose and output, the second adds a disclaimer. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a simple tool with one fully described parameter and no output schema, the description sufficiently explains what the tool returns (EPA name, health classification, frequency). It could mention data scope or limits, but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter description already explains the input (name or code with examples). The tool description's mention of 'by name or code' adds no new semantics beyond the schema. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides a plain-English explanation of an EPA contaminant, listing the specific output fields (EPA name, health classification, frequency). It distinguishes from sibling tools which focus on cities, water systems, or general search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing contaminant info but provides no guidance on when to use this tool versus alternatives like 'search' or 'get_city_water'. The disclaimer 'Not medical advice' is a boundary but not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCity id like 'vt/burlington' (state/slug).
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds useful behavioral context: the output is 'full plain-English' and compatible with ChatGPT/Deep-Research. No contradictions are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with two sentences: the first explains the core function with an example, and the second adds a compatibility note. Every word is purposeful, and the information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 parameter, no output schema, read-only), the description covers the essential aspects: input format, output type, and integration with search. It could specify that the output is a single record, but overall it is complete enough for agent use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter 'id', and its description in the schema ('City id like 'vt/burlington' (state/slug).') already provides clear semantics. The tool description adds an example and context of being from search, but this is marginal beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a 'full plain-English EPA tap-water record' for a city id, with an explicit example ('vt/burlington') and linkage to the search tool. This distinguishes it from siblings like 'get_city_water' and 'compare_cities' by specifying the output format and input origin.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says the id is 'returned by `search`', providing clear usage context. It implies the tool is used after search to retrieve a full record, but does not explicitly state when not to use it or compare to alternatives like 'get_city_water'. However, the context is sufficient for an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_citiesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
stateNoOptional 2-letter state code.
contaminantNoOptional EPA contaminant code or name (use explain_contaminant to find a code).
minPopulationNo
healthBasedOnlyNo
openViolationsOnlyNoOnly cities with violations not returned to compliance.
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds 'Returns ranked matches' but does not explain ranking criteria or output structure, providing moderate added context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words, front-loaded with the core function. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 6 parameters, no output schema, and partial parameter descriptions, the description is incomplete. It does not explain return values, ranking behavior, or parameter constraints beyond the example.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (3 of 6 parameters described). The description does not elaborate on any parameters beyond the implicit example, failing to compensate for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'Filter/rank', the resource 'cities', and provides concrete examples that differentiate it from sibling tools like compare_cities and search_cities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit example usage ('cities in TX with open health-based violations') implying when to use, but does not explicitly state when not to use or name alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_city_waterB
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYes
stateYes2-letter state code, e.g. 'VT'.
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds value by noting the output is 'plain-English, sourced, never a safety verdict', but does not disclose any additional behavioral traits like rate limits or authentication needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the core purpose and key details. It avoids redundancy but could be slightly more structured with line breaks for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description sufficiently outlines what data is returned (systems, populations, sources, violations). It addresses the tool's scope well, though missing details on pagination or data format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 50% schema coverage (state parameter documented, city not), the description could compensate but does not provide additional meaning beyond the schema. It does not elaborate on city format or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this tool retrieves EPA records for a city's tap water, listing specific data points (systems, populations, sources, violations). It distinguishes itself from siblings like 'get_water_system' by focusing on a city aggregate and explicitly stating it's not a safety verdict.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like 'compare_cities' or 'get_water_system'. The description claims it's 'the core tool' but does not specify exclusions or conditions for alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_water_systemA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pwsidYes
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. The description adds the specific data fields returned (name, population, source, violations), which is useful beyond the annotations. However, it does not mention additional behavioral traits like real-time data or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that conveys the core purpose and output. It is front-loaded with the verb 'EPA record' and is free of extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a single required parameter, good annotations, and no output schema, the description adequately covers the tool's functionality. It mentions the returned fields, which is sufficient for a simple retrieval tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description provides an example PWSID ('VT0005053') and indicates it's a string identifier. This adds some meaning beyond the bare schema, but does not fully specify format or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves an EPA record for a single water system by PWSID, listing specific fields like name, population, source, and violations. This distinguishes it from sibling tools like search_cities or get_city_water.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for a specific water system by ID, but does not explicitly state when to use it vs alternatives like search or list_state_cities. No exclusions or conditions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_state_citiesB
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYes2-letter state code.
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint. The description adds that violation counts are returned, but does not disclose other behavioral traits like rate limits, response format, or pagination. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence of 11 words conveys the essential purpose and additional detail (violation counts) with no redundancy. It is optimally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one parameter and no output schema, the description is functional but lacks details on response format, whether the list is paginated, and what 'covered' means. Given the tool's simplicity, it is adequate but not exemplary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with a clear description of the 'state' parameter as a 2-letter code. The description does not add additional meaning beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and the resource 'covered cities in a state', and specifies that violation counts are included. It is specific enough to distinguish from siblings like compare_cities or coverage_stats, though it doesn't explicitly differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like search_cities or fetch. The description does not mention prerequisites, limitations, or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_citiesA
Read-onlyIdempotent
Inspect

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
stateNoOptional 2-letter state code, e.g. 'TX'.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it as read-only and idempotent. The description adds useful behavioral detail: it returns counts and page URLs, and implies no side effects. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with action and output. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Provides core purpose and output, but lacks explanation of 'covered', default/max limit, query syntax, or pagination. Adequate for a simple search tool but incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is low (33%), only state has a description. The tool description clarifies that query is a city name, but does not explain limit or provide details on query patterns (e.g., partial match).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool finds covered US cities by name, with optional state filter, and describes output (counts + page URL). This differentiates it from siblings like find_cities or list_state_cities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for name-based city search with optional state, but provides no explicit guidance on when to use this tool versus alternatives like find_cities or list_state_cities.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables querying USGS water data including real-time and historical streamflow, gage height, and water temperature from USGS gauges across the United States.
    3
    MIT
  • A
    license
    -
    quality
    A
    maintenance
    Access EPA environmental data — facility compliance (ECHO), toxic releases (TRI), Superfund sites, drinking water systems, environmental justice screening (EJScreen), and real-time air quality (AirNow) via MCP.
    115
    1
    Apache 2.0

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources