Keyless US grid carbon + power cost by ZIP: eGRID Scope 2, Scope 1 fuels, site ranking, clean hours
One address for any MCP client. No sign-in needed on this server.
6 read5 other
Grouped by tool name.
Odel charges nothing per call. The publisher may charge for its own service.
Give Claude, Cursor, Cline, or any MCP client live access to US electricity data by ZIP code - grid-carbon emission factors, retail rates, hourly grid carbon intensity, power-plant emissions, and utility tariffs.
Backed by emission-factors.com, which wraps EPA eGRID, EIA-861, EIA-930, EPA CAMD, and OpenEI URDB into one ZIP-keyed API.
Free. No API key, no signup. The API is rate-limited per IP (2,000 requests/hour).
Once connected, your agent can answer things like:
There are two ways to run this. Most people want Option A.
Nothing to install, always up to date. The hosted endpoint is https://emission-factors.com/mcp (Streamable HTTP, no key).
Claude (web, desktop app, mobile) - Add to Claude. The link opens Claude's custom-connector dialog with the name and URL filled in; select Add, then Connect. By hand: Customize -> Connectors -> Add custom connector, URL https://emission-factors.com/mcp, OAuth fields empty.
Claude Code
claude mcp add --transport http emission-factors https://emission-factors.com/mcp
Cursor - add to ~/.cursor/mcp.json:
{
"mcpServers": {
"emission-factors": {
"url": "https://emission-factors.com/mcp"
}
}
}
Cline / Continue / Zed / other clients - add a remote (Streamable HTTP) MCP server with URL https://emission-factors.com/mcp. No key needed.
Claude Desktop's
claude_desktop_config.jsononly starts local (stdio) servers - a"url"entry there does nothing. Use the connector link above, or Option B.
Runs the server as a local process that proxies the same public API. Useful for clients that only support stdio transport, or if you want to self-host.
Run straight from GitHub (builds on install, requires Node 18+):
{
"mcpServers": {
"emission-factors": {
"command": "npx",
"args": ["-y", "github:rozetyp/emission-factors-mcp"]
}
}
}
Or clone and run from source:
git clone https://github.com/rozetyp/emission-factors-mcp.git
cd emission-factors-mcp
npm install # builds dist/ via the prepare script
{
"mcpServers": {
"emission-factors": {
"command": "node",
"args": ["/absolute/path/to/emission-factors-mcp/dist/index.js"]
}
}
}
Optional environment variable: EMISSION_FACTORS_API_BASE (defaults to https://emission-factors.com) if you run your own instance of the API.
Eleven tools, keyed by US ZIP code (or a direct code where noted). The remote server and this stdio build expose the same set.
| Tool | Purpose | Key inputs |
|---|---|---|
lookup_emission_factor | EPA eGRID CO2e + full generation mix for a ZIP | zip |
lookup_by_coordinates | Same, resolved from lat/lon via Census geocoder | lat, lon |
lookup_batch | Emission factors for up to 100 ZIPs at once | zips[] |
calculate_emissions | Scope 2 CO2e for a ZIP + kWh, location-based and market-based (Green-e residual mix) | zip, kwh, renewable_kwh |
hourly_intensity | Hourly grid carbon intensity (EIA-930, ~24h lag) | zip or ba, hours |
plant_emissions | Plant emissions (EPA CAMD): facility summaries or unit-hour records | facility_id or state, days |
utility_tariff | Utility-specific tariff, not state average (OpenEI URDB) | zip, utility, or eiaid |
electricity_rate | State-average retail rate by sector (EIA-861) | zip |
compare_sites | Rank 2-25 candidate sites on grid carbon, $/kWh and cleanest daily window | zips[], annual_kwh, sector |
cleanest_hours | Cleanest N-hour window of the day to run a flexible load, in local time | zip or ba, duration |
calculate_fuel_emissions | Scope 1 CO2e for fuels burned on site (EPA GHG Emission Factors Hub) | items[]: fuel, quantity, unit |
All tools return JSON. See full API docs for exact response shapes.
| Data | Source | Notes |
|---|---|---|
| Grid emission factors | EPA eGRID2023 Rev2 (+ eGRID2024 from Cornerstone via year=2024) | Annual, location-based, 27 subregions |
| Residual mix (market-based Scope 2) | Green-e Residual Mix 2025 (2023 data) | Per eGRID subregion |
| Fuel combustion factors (Scope 1) | GHG Emission Factors Hub 2026 (Cornerstone, successor to EPA's Hub); EPA 2025 via edition | 63 fuels, AR6 GWPs (AR5 for 2025) |
| Retail electricity rates | EIA Form 861 | State-level monthly average by sector |
| Hourly grid carbon intensity | EIA-930 | Derived from hourly fuel mix, ~24h lag |
| Plant-level emissions | EPA CAMD | fossil units >25 MW, published quarterly (45+ days after quarter end) |
| Utility-specific tariffs | OpenEI URDB (NREL) | ZIP matched to its utility by EIA ID |
| ZIP / lat-lon resolution | US Census (ZCTA + Geocoder) | ZIP -> eGRID subregion mapping |
retryAfter hint.curl "https://emission-factors.com/api/lookup?zip=94105". See the API docs and OpenAPI spec.npm install # install deps and build (prepare -> tsc)
npm run build # compile TypeScript to dist/
npm run dev # watch mode
npm start # run the built server over stdio
Quick smoke test with the MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.js
The server is a thin proxy: each tool maps to one /api/* endpoint on emission-factors.com, validates inputs, and returns the JSON response. There is no local state and no key handling.
MIT - see LICENSE. Data belongs to its respective US government sources (EPA, EIA, Census) and NREL/OpenEI; this project and the API are an unofficial wrapper, not affiliated with those agencies.