What Emission Factors does
The Emission Factors MCP server connects MCP clients to the public API at emission-factors.com. It returns US electricity data organized around ZIP codes, with coordinate-based resolution available through the Census geocoder. The underlying sources include EPA eGRID, EIA-861, EIA-930, EPA CAMD, OpenEI URDB, and the GHG Emission Factors Hub.
The Emission Factors MCP server supports both operational analysis and reporting inputs. You can retrieve a ZIP's grid emission factor and generation mix, estimate location-based or market-based Scope 2 emissions, review hourly carbon intensity, and calculate Scope 1 emissions for on-site fuel use. It also supports state-average electricity rates, utility-specific tariffs, plant emissions, candidate-site ranking, and daily clean-hour selection.
This belongs in the Environment & Nature category. It is relevant when an agent needs US location-specific electricity information rather than a general explanation of emissions accounting.
How it works
The server is a thin MCP proxy. Each tool validates its inputs, calls a corresponding API endpoint, and returns JSON; it does not maintain local state or handle API keys. The hosted endpoint uses Streamable HTTP at https://emission-factors.com/mcp. The local package runs as a Node.js process over stdio and proxies the same public API.
Inputs are generally ZIP codes, although some tools accept latitude and longitude, balancing-authority identifiers, facility or state identifiers, utility details, fuel quantities, or arrays of candidate locations. Batch lookup accepts up to 100 ZIP codes. Site comparison accepts between 2 and 25 candidate ZIP codes.
Data timing varies by source. Hourly intensity is based on EIA-930 data with an approximate 24-hour delay. Plant emissions come from EPA CAMD and are published quarterly, with a stated delay of at least 45 days after the quarter. The API also applies server-side caching to several external-data endpoints.
Setup and configuration
For remote use, configure an MCP client with https://emission-factors.com/mcp; authentication and an API key are not required. The README provides setup examples for Claude custom connectors, Claude Code, Cursor, Cline, Continue, and Zed. Claude Desktop's local configuration starts stdio servers, so its claude_desktop_config.json is not the remote HTTP setup described here.
For local execution, use Node.js 18 or newer. A client can run the package with npx -y github:rozetyp/emission-factors-mcp, or you can clone the repository, run npm install, and start dist/index.js. The optional EMISSION_FACTORS_API_BASE variable changes the API base URL and defaults to https://emission-factors.com.
Tools and capabilities
The Emission Factors MCP server exposes eleven tools:
lookup_emission_factor returns EPA eGRID CO2e data and the generation mix for a ZIP.
lookup_by_coordinates resolves latitude and longitude before returning equivalent data.
lookup_batch retrieves factors for up to 100 ZIP codes.
calculate_emissions calculates location-based and market-based Scope 2 results from ZIP and kWh inputs.
hourly_intensity returns EIA-930 hourly grid intensity for a ZIP or balancing area.
plant_emissions returns EPA CAMD facility summaries or unit-hour records.
utility_tariff retrieves a utility-specific OpenEI URDB tariff.
electricity_rate returns EIA-861 state-average retail rates by sector.
compare_sites ranks candidate sites by grid carbon, electricity cost, and clean daily window.
cleanest_hours identifies a daily local-time window for flexible load.
calculate_fuel_emissions calculates Scope 1 CO2e for specified on-site fuels.
Limitations and notes
Coverage and timing depend on the source datasets. Plant data covers fossil units above 25 MW, while hourly intensity is intended for timing decisions and uses fixed per-fuel factors on in-balancing-area generation; it is not presented as an inventory-reporting factor. State-average rates are not substitutes for utility-specific tariffs.
The service is anonymous but rate-limited to 2,000 requests per hour per IP. Requests exceeding that limit receive HTTP 429 responses with a retry hint. The project and API are unofficial wrappers around the cited government and NREL/OpenEI sources and are licensed under MIT.