energy-emissions-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@energy-emissions-mcpWho are the biggest greenhouse gas emitters in Harris County, TX?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
energy-emissions-mcp
An MCP server that exposes US energy and emissions data as tools an AI agent can call.
It currently has one tool, get_facility_emissions, which answers questions like
"who are the biggest emitters in Harris County, TX?" from the EPA Greenhouse Gas
Reporting Program (GHGRP), queried live through the
Envirofacts API. No API key needed.
Run it
Requires uv.
uv sync
uv run mcp dev server.py # opens MCP Inspector to call the tool by hand
uv run pytest # offline tests with recorded EPA rowsAdd it to Claude Code:
claude mcp add energy-emissions -- uv run --directory "$PWD" mcp run server.pyRelated MCP server: Jana MCP Server
The tool
get_facility_emissions(state, county=None, year=2023, limit=25) returns each facility's
name, city, county, industry and total CO2e (metric tons), largest first, plus the place's
total, the source tables and the exact query URL so answers can cite it.
Totals are direct emissions, matching GHGRP's own facility totals: biogenic CO2 and fuel suppliers' downstream emissions are left out. See docs/ghgrp-notes.md.
Built with the MCP Python SDK v2 and httpx.
Available Tools
1 toolget_facility_emissionsA
Get greenhouse gas emissions for large industrial facilities in a US state or county, from the EPA Greenhouse Gas Reporting Program (GHGRP).
Use this for questions like "what are the biggest emitters in Harris
County, TX?" or "total reported facility emissions in Ohio in 2022".
Results are sorted largest emitter first.
Do not use this for a place's total emissions footprint: GHGRP covers only
facilities emitting over 25,000 tonnes CO2e a year (power plants,
refineries, factories, landfills), not homes, vehicles or small businesses.
Args:
state: Two-letter state code, e.g. "TX".
county: Optional county name, e.g. "Harris" or "Orleans Parish". Leave
empty for the whole state.
year: Reporting year, 2010 to 2023. Defaults to 2023, the latest.
limit: Maximum facilities to list, 1 to 100. Totals always cover every
matching facility, even those beyond the limit.
Returns totals in metric tons of CO2-equivalent (direct emissions, excluding
biogenic CO2 and fuel suppliers, matching GHGRP's own facility totals),
plus the source and query URL to cite.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| limit | No | ||
| state | Yes | ||
| county | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | Yes | |
| place | Yes | |
| source | Yes | |
| query_url | Yes | |
| facilities | Yes | |
| facility_count | Yes | |
| total_co2e_tonnes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses important behavior: results are sorted largest emitter first, the 25,000-tonne inclusion threshold, that direct emissions exclude biogenic CO2 and fuel suppliers, and that limit does not affect totals. It does not mention rate limits or authentication, though the public EPA source makes that a minor omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then examples, then exclusions, then args, then return semantics — a sensible order. Every sentence earns its place; the Args section is compact but specifies formats, ranges and defaults rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, no annotations, and no sibling tools, the description covers scope, exclusions, sorting, units, filters and defaults. An output schema exists, yet the brief note on units and citation URL still adds useful value without redundancy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load and it does: it gives the two-letter format for state, explains county accepts names like 'Harris' or 'Orleans Parish' and that empty means whole state, bounds year to 2010-2023 with default 2023, and bounds limit to 1-100 with the key semantic that totals always cover every matching facility even beyond the limit. All four parameters gain meaning not present in the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get), a specific resource (greenhouse gas emissions for large industrial facilities), the geographic scope, and the authoritative data source (EPA GHGRP). An agent knows exactly what data comes back and from where without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete example questions the tool answers, then an explicit 'do not use this for' with the reason (GHGRP only covers facilities over 25,000 tonnes CO2e, not homes, vehicles or small businesses). This is a textbook when/when-not pair with no sibling ambiguity to resolve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.0- First observed
get_facility_emissions
TDQS
Scored across 1 tool
There is only one tool, so there is no possibility of misselection between tools. Its description also clearly delimits scope (GHGRP facility-level emitters, not a place's total emissions footprint), preventing misuse.
The single name `get_facility_emissions` follows a clean verb_noun snake_case convention that would scale predictably. With only one tool there is no cross-tool consistency to verify, so it falls short of a perfect score.
One tool is very thin for a whole emissions data server; there is no way to discover valid states/counties/years or drill into a specific facility. The single endpoint is well-scoped for its narrow query, but the surface is minimal for the apparent domain.
The core query (facility emissions by state/county/year) is well covered, including sorting, limits, totals, and citation metadata. However, notable gaps remain: no discovery of valid states/counties/years, no facility-level detail lookup, and no comparison or trend operations.
Maintenance
Related MCP Connectors
EPA Emissions MCP — wraps EPA Envirofacts REST API (free, no auth)
Source-reconciled U.S. environmental facility compliance evidence for AI agents.
EPA compliance, violations, inspections and penalties for any US ZIP code or company.
Toxics Release Inventory, Superfund sites, air quality data, and AQI
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides AI agents with structured access to U.S. EPA environmental data including nearby regulated facilities, chemical releases, water violations, and hazardous waste sites for any U.S. location. Enables comprehensive environmental impact analysis through the EPA Envirofacts API with geocoding support and distance-based filtering.5MIT
- AlicenseNot gradedqualityNot gradedmaintenanceProvides natural language access to environmental data including air quality measurements, greenhouse gas emissions, and facility records. It enables users to perform geographic searches, trend analysis, and proximity-based queries using data from sources like OpenAQ and Climate TRACE.MIT
- AlicenseNot gradedqualityBmaintenanceWraps EPA ECHO Web Services (free, no auth) to enable querying environmental data via natural language.231 npmMIT
- AlicenseNot gradedqualityBmaintenanceWraps the EPA Envirofacts REST API to provide access to emissions data without authentication.408 npmMIT