Skip to main content
Glama

Server Details

Query US tap-water quality from the EPA's own SDWIS records: the water systems serving a city, contaminants and violations on record (with dates and whether the EPA classifies them as health-based), compare cities, and explain contaminants. Public, no-auth, read-only. ~19,000 cities across all 50 states + DC, ~1.5M EPA records. Every response reports what the EPA recorded, never a safety verdict.

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.9/5 across 10 of 10 tools scored.

Server CoherenceA
Disambiguation3/5

Some tools have overlapping purposes: search and search_cities both find cities by name, and fetch and get_city_water both retrieve detailed records for a city. However, descriptions differentiate them (e.g., search returns an id, search_cities returns counts and URL), so an agent can often pick correctly, but confusion is possible.

Naming Consistency2/5

Tool names mix conventions: single-word verbs (fetch, search), verb_noun (compare_cities, find_cities), and noun_noun (coverage_stats). There is no consistent pattern, and similar tools have different naming styles (e.g., search vs search_cities).

Tool Count5/5

10 tools is well-suited for querying EPA tap water data. Each tool serves a distinct purpose within the domain, and the count is neither too few (limiting functionality) nor too many (overwhelming).

Completeness4/5

The tool surface covers key operations: searching cities, retrieving records, comparing, filtering, explaining contaminants, and coverage stats. Minor gaps exist (e.g., no way to search contaminants by partial name), but core workflows are supported.

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 declare readOnlyHint, idempotentHint, destructiveHint. Description adds context that it compares EPA records, but does not elaborate on behavior beyond that.

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 concise sentences, front-loaded with purpose, no redundant 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?

For a simple tool with good annotations and one parameter, description is nearly complete. However, it does not specify output format or what the comparison results look like.

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%, so baseline is 3. Description adds a format example ('City, ST') but does not substantially increase understanding beyond schema.

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?

Describes specific action: compare EPA records of several cities side by side. Clearly distinguishes from sibling tools like get_city_water or 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 Guidelines3/5

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

Provides format for input (City, ST) but no explicit guidance on when to use this tool versus alternatives like find_cities or search. No when-not scenarios mentioned.

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 indicate readOnly, idempotent, non-destructive. Description adds context that it returns summary statistics, which is consistent and provides added value 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?

Single sentence, front-loaded with the key point, no unnecessary words.

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 parameters and no output schema, the description adequately explains what the tool returns. It is sufficient for its simplicity.

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 exist, and schema coverage is 100% (empty). Description is not required to elaborate on parameters. Baseline score of 4 is appropriate.

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 tool provides coverage information about the dataset (states, cities, total EPA violation records, data quarter/date). It distinguishes itself from sibling tools that focus on specific queries or searches.

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 on when to use this tool versus alternatives like search or fetch. Does not specify prerequisites or exclusions.

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'.
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds the disclaimer 'Not medical advice' and outlines the return fields (EPA name, health classification, frequency), providing useful context 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?

The description is a single concise sentence with a clear disclaimer. No extraneous words; front-loaded with the action and scope.

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?

For a simple read-only tool with one parameter and no output schema, the description sufficiently explains the purpose and return values. Could optionally include example output format, but not necessary for completeness.

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 100% for the single parameter, which includes an example. The tool description adds no additional semantic detail beyond what the schema already provides, so 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 it provides a 'plain-English explanation of an EPA contaminant by name or code', specifying the output includes EPA name, health classification, and frequency. No sibling tools overlap, so it is well-differentiated.

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 implies use for understanding contaminants but does not explicitly state when not to use or mention alternatives. However, the tool is unique among siblings, so guidance is adequate.

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, idempotentHint, and destructiveHint. The description adds that it returns a 'full plain-English... record', giving insight into the output format. This is useful beyond annotations, though no mention of other behaviors like rate limits or prerequisites.

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 with a parenthetical example and a compatibility note. Every word is purposeful, no redundancy.

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 one simple parameter, complete annotations, and no output schema, the description hints at the return format ('full plain-English... record') adequately. Users may need assurance about pagination or size, but for a single-record fetch it is sufficient.

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 a clear description of the 'id' parameter. The description adds the crucial context that the id comes from 'search', which helps the agent understand the source of valid values.

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 action 'Fetch' and the resource 'full plain-English EPA tap-water record' for a specific city id. It explicitly references the sibling tool 'search' as the source of the id, distinguishing this tool as the follow-up retrieval step.

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 provides explicit context: use the id returned by 'search'. It also notes ChatGPT/Deep-Research compatibility. However, it does not explicitly state when not to use this tool or list alternatives, though the sibling list implies differentiation.

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, destructiveHint=false, and idempotentHint=true, so the safety profile is clear. The description adds minimal extra behavioral context (returns ranked matches) beyond what annotations provide.

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 concise: two sentences that state the action and provide an example. It is front-loaded and efficient, though could include slightly more structure or detail.

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?

The tool has 6 optional parameters and no output schema. The description covers the high-level purpose and gives an example, but lacks details on ranking criteria, default ordering, pagination, and return fields, which would help an agent apply the tool correctly.

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 50% (3/6 parameters have descriptions). The tool description adds context through examples that guide parameter usage (e.g., health-based violations, contaminant). However, it does not fully compensate for undocumented parameters like minPopulation or healthBasedOnly.

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 filters/ranks cities across the dataset with specific examples (e.g., cities in TX with open health-based violations). This distinguishes it from siblings like list_state_cities or search_cities which likely lack ranking/filtering capabilities.

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 context through examples but does not explicitly state when to use this tool versus alternatives. No exclusions or when-not-to-use guidance are provided.

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

get_city_waterA
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'.
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds that the data is 'Plain-English, sourced, never a safety verdict,' which clarifies behavioral traits beyond the 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?

The description is two sentences, tightly packed with essential information, and front-loaded with the core purpose. No wasted words.

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 complexity of retrieving water data and the presence of annotations, the description adequately covers the return content and behavioral nuance (no safety verdict). However, it lacks mention of potential limitations like data freshness or pagination, which would make it fully complete.

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% (state parameter described, city parameter not). The tool description does not add meaning for either parameter; it only mentions city and state generically without providing format or examples for the city parameter.

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 retrieves EPA water records for a given city, specifying the data types (systems, populations, sources, violations). It distinguishes itself from siblings like 'get_water_system' and 'find_cities' by focusing on city-level tap water data.

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 calls it 'the core tool' implying primary usage, but it does not explicitly state when to use this tool versus alternatives like 'compare_cities' or 'search'. No when-not or why-not guidance is provided.

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
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, idempotent read operation. The description adds context about the returned fields but does not disclose additional behavioral traits beyond what annotations provide.

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, well-structured sentence that front-loads the purpose and includes the example PWSID. Every word adds value, and there is no redundancy.

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 simple lookup tool with one parameter, no output schema, and strong annotation coverage, the description adequately specifies the returned fields (name, population, source, violations) and provides an example. It gives the agent enough context to use the tool correctly.

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?

With 0% schema description coverage, the description must compensate. It provides an example value ('VT0005053') and explains that the parameter is a PWSID, linking to EPA records. This adds meaning beyond the schema's type definition.

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 verb ('get'), the resource ('EPA record for a single water system'), and the identifier (PWSID with example). It also lists the fields returned (name, population, source, violations), distinguishing it from siblings 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 when a specific PWSID is known, but does not explicitly state when to use this tool versus alternatives (e.g., 'search_cities' or 'find_cities'). No exclusionary or conditional guidance is provided.

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

list_state_citiesA
Read-onlyIdempotent
Inspect

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

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

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=true, so the description adds value by noting that results include violation counts. However, it does not disclose potential error conditions (e.g., invalid state code) or pagination/limits, which would be helpful for a complete behavioral picture.

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, focused sentence with no extraneous words. It efficiently conveys the tool's purpose and a key output feature (violation counts).

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 the tool is simple (1 parameter, no output schema), the description covers the primary purpose and an output detail. However, it does not define 'covered cities' or describe the return format, which would be useful for an agent lacking output schema context. This represents a minimum viable completeness.

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 schema description coverage is 100% for the single parameter 'state', and the schema already provides the 2-letter code requirement. The description adds no additional meaning or format details beyond what is in the schema, so a baseline score 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 specifies 'List all covered cities in a state (with violation counts)', using a specific verb (list) and resource (cities), and distinguishes from sibling tools like 'search_cities' and 'get_city_water' by focusing on listing all cities in a state with violation data.

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 provides no guidance on when to use this tool versus alternatives such as 'search_cities' or 'coverage_stats'. It does not mention prerequisites, limitations, or exclusion criteria, leaving the agent without decision support among 9 sibling tools.

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'.
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. Description adds return details (counts, page URL) but no further behavioral traits. No contradiction with 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 sentence, front-loaded with action and scope. No wasted words; every part contributes to understanding the tool's purpose and output.

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 (3 parameters, 1 required) and no output schema, the description adequately covers core functionality. However, 'covered' is not defined, and connection to sibling context could be stronger.

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?

Description explains that 'state' is optional and gives an example format. With schema coverage at 33% (only state has description), the description adds meaning for 'state' but does not mention 'query' or 'limit' beyond their schema definitions.

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?

Description clearly states verb 'Find', resource 'covered US cities', and output 'counts + page URL'. It distinguishes from siblings by specifying scope ('covered US cities') and return format, though not explicitly differentiating from similar tools like 'find_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?

Indicates optional state filtering ('optionally within a state') but lacks explicit guidance on when to use this tool over siblings such as 'find_cities' or 'list_state_cities'. No examples or use cases provided.

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
    A
    maintenance
    GTM signal intelligence suite for AI agents. Six tools: hiring signals, tech stack detection, company-to-LinkedIn resolution, ICP scoring, job board scanning, and a combined signals aggregator. Built for outbound sales workflows.
    11
    111
    1
    MIT
  • F
    license
    -
    quality
    C
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources