EPA Emissions MCP — wraps EPA Envirofacts REST API (free, no auth)
EPA Emissions MCP has well-structured tool definitions with complete input schemas and reasonable descriptions. All 5 tools are explicitly registered with name, description, and inputSchema. However, descriptions lack LLM-optimization guidance (e.g., when to use each tool vs. alternatives), parameter descriptions are minimal, and output schemas are entirely undocumented. No error handling guidance, no examples of what fields are returned, and no documentation of pagination behavior despite limit parameters. Tool naming is clear and verb-based (search_, get_), but composition could be stronger, tri_trends requires either state OR chemical but this mutual-optionality is not clearly documented.
Get greenhouse gas emissions by industry sector for a state. Optionally filter by sector type (e.g., "Power Plants", "Chemicals").
Search greenhouse gas emissions by state and optionally by facility name. Returns facility details and total GHG emissions in metric tons CO2 equivalent.
Search toxic chemical releases across all facilities. Filter by chemical name and optionally by state. Returns quantities released by media (air, water, land).
Search Toxic Release Inventory (TRI) facilities by state. Returns facility details and released chemicals.
Get toxic release trends over time for a state or chemical across reporting years. Queries multiple years and summarizes totals.
Output schemas completely undocumented. Code shows cleanGhgFacility(), cleanTriFacility(), cleanTriRelease() transformations but tool descriptions never specify what fields are returned. LLMs cannot plan downstream calls or extract data without knowing response structure.
tri_trends has ambiguous required parameters. Description says 'Queries multiple years' but required array is empty, both state and chemical are optional. This violates the principle that tools should have clear, unambiguous contracts. LLMs will not know whether to pass state alone, chemical alone, or both.
Pagination behavior undocumented. All tools accept 'limit' parameter but descriptions do not explain: Is there a next_cursor or offset? What is the default? What happens if limit exceeds 100? Without pagination guidance, agents cannot reliably fetch large result sets.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
No error handling guidance. Code calls EPA Envirofacts API but tool descriptions do not explain: What happens if state is invalid? If facility not found? If API is down? LLMs receive raw errors with no recovery path.
Parameter descriptions are minimal and lack format/constraint guidance. E.g., 'state' is described as 'Full state name (e.g., "Texas")' but tri_facility_releases expects two-letter abbreviation, inconsistent naming across tools. No guidance on valid values, ranges, or formats for start_year/end_year in tri_trends.