Skip to main content
Glama

Search EPA Facilities

epa_echo_search_facilities
Read-onlyIdempotent

ECHO: Search EPA-regulated facilities by location, environmental program, or compliance status across CAA, CWA, RCRA, TRI, and SDWA. Returns facility name, EPA Registry ID, coordinates, county FIPS code, per-program registration flags, five-year inspection and penalty totals, and TRI release totals. Registry IDs returned here feed epa_echo_get_facility. Supports proximity search via latitude + longitude + radius_miles. At least one geographic filter (zip_code, state, city, or a complete latitude+longitude+radius_miles triple) is required — unscoped searches time out.

Input Schema

NameRequiredDescriptionDefault
cityNoCity name, case-insensitive; matches cities that begin with it ("TACOMA", or "SEAT" for SEATTLE and SEATAC). Pair with state.
limitNoMaximum number of facilities to return (1–100)
stateNo2-letter US state abbreviation (e.g. "WA", "CA")
latitudeNoLatitude in decimal degrees. Pair with longitude and radius_miles for proximity search.
programsNoRestrict results to facilities registered in one environmental program — ECHO filters on a single program per search, so pass one value. CAA=air, CWA=water, RCRA=hazardous waste, TRI=toxic releases, SDWA=drinking water.
zip_codeNo5-digit ZIP code to search within
longitudeNoLongitude in decimal degrees. Pair with latitude and radius_miles for proximity search.
active_onlyNoWhen true, return only facilities with an active permit
radius_milesNoSearch radius in miles around the given latitude/longitude (max 100). Requires latitude and longitude.
has_violationNoWhen true, return only facilities with at least one program in significant noncompliance (complianceStatus "Significant Violation")

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
messageNoRecovery hint when no results are found — echoes applied filters and suggests how to broaden the search. Absent when results are returned.
facilitiesNoMatching EPA facilities
totalCountNoTotal facilities matched before the limit was applied

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent, so the safety profile is covered; the description adds real value beyond that by disclosing the timeout behavior for unscoped searches and the concrete return payload (registry ID, coordinates, county FIPS, per-program flags, five-year inspection and penalty totals, TRI release totals). Pagination and the default limit are left to the schema, which is why this is not a 5.

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?

Four sentences, each carrying distinct information, with the purpose and the payload front-loaded before the operating constraint. No restatement of the tool name or filler.

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 10-parameter read-only search with 100% schema coverage, full annotations, and an output schema, the description covers everything remaining: scope, the return fields, the hard filter requirement, the single-program limitation, and the handoff to epa_echo_get_facility. Nothing an agent needs to call this correctly is absent.

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%, so the baseline is 3, but the description adds semantics the schema can't: that a program filter accepts only one value per search, and that latitude/longitude/radius_miles must be supplied as a complete triple. It also frames the geographic filters as a required disjunction, which is a cross-parameter constraint the schema doesn't express.

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?

Names a specific verb (search) plus resource (EPA-regulated facilities) and enumerates the filter axes (location, program, compliance status) and covered programs (CAA, CWA, RCRA, TRI, SDWA). It also distinguishes itself from the sibling epa_echo_get_facility by explaining that the returned Registry IDs feed that tool, so an agent can route between them without opening either schema.

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?

Explicitly states the hard precondition that at least one geographic filter (zip_code, state, city, or a complete lat+lon+radius triple) is required and that unscoped searches time out, which is exactly the kind of routing rule an agent needs. It also explains the proximity-search path. What's missing is guidance on when to use this versus epa_echo_search_violations, given that has_violation overlaps with that sibling's purpose.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.