EPA ECHO MCP — wraps EPA ECHO Web Services (free, no auth). Search EPA-regulated facilities, compliance history, violations, enforcement actions, and find facilities in significant non-compliance.
EPA ECHO MCP has well-structured tool definitions with complete input schemas and clear descriptions. All 5 tools follow verb_noun naming (echo_*) and include parameter descriptions. However, output schemas are not documented, error handling lacks recovery guidance, and parameter constraints are missing (e.g., state should be enum, program should be constrained). Descriptions are adequate (100-200 chars) but could be more prescriptive about when to use each tool vs. alternatives. No tool annotations (readOnlyHint, etc.) present. The implementation is clean and functional but lacks production-grade polish around output documentation and error messaging.
Get compliance and enforcement history for a specific EPA-regulated facility. Returns compliance status, quarters in violation, inspection dates, and enforcement actions.
Get enforcement case details for a facility, including formal/informal actions, penalties assessed, and penalty amounts.
Search EPA-regulated facilities by name, state, ZIP, city, or NAICS code. Returns registry IDs, addresses, compliance status, and program affiliations (CWA, CAA, RCRA).
Find facilities currently in significant non-compliance. Filter by state and/or environmental program.
Get detailed violation records for a facility, optionally filtered by environmental program (CWA, CAA, RCRA).
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields (e.g., registry_id from facility_search to pass to compliance_history). Responses are shaped internally but not declared in tool definitions.
Parameter constraints missing. 'state' should be enum (2-letter US state codes), 'program' should be enum (CWA|CAA|RCRA|ALL), 'limit' should have min/max bounds (1-100). Free-form strings invite hallucinated invalid values.
No error handling guidance. If registry_id is invalid or API fails, responses do not tell the LLM what to do next (retry, search again, ask user). Raw API errors are not translated to actionable recovery steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Tool annotations missing. No readOnlyHint, destructiveHint, or idempotentHint declared. All tools are read-only (safe to retry), but this is not signaled to the agent.
Pagination not fully documented. echo_facility_search and echo_search_by_violation accept 'limit' but do not document how to fetch next page (offset, cursor, or page number). Large result sets may be truncated without clear guidance on pagination.