Skip to main content
Glama

Server Details

Keyless US grid carbon + power cost by ZIP: eGRID Scope 2, Scope 1 fuels, site ranking, clean hours

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
Repository
rozetyp/emission-factors-mcp
GitHub Stars
1
Server Listing
emission-factors MCP server

TDQS

A4.2/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target distinct data sources/actions (Scope 1 vs Scope 2, plant vs grid, hourly vs annual). The main overlap is among lookup_emission_factor/lookup_batch/lookup_by_coordinates (same eGRID data via different input modes) and electricity_rate vs utility_tariff (both electricity rates), but descriptions explicitly distinguish these cases.

Naming Consistency4/5

Clear verb_noun families exist (lookup_*, calculate_*) but roughly half the tools are noun phrases (electricity_rate, hourly_intensity, plant_emissions, utility_tariff, cleanest_hours). The mixed verb/noun convention is still readable and internally patterned within each family.

Tool Count5/5

11 tools is well-scoped for a multi-source emissions domain spanning eGRID, EIA-930, CAMD, Green-e and URDB. Each tool maps to a distinct data source or operation and earns its place.

Completeness4/5

Strong coverage of Scope 1 and Scope 2 accounting, ZIP/batch/coordinate lookups, rates, tariffs, hourly intensity, plant emissions and site comparison. Minor gaps: no Scope 3, no non-US support, and no batch coordinate lookup, but core workflows are covered.

Available Tools

11 tools
calculate_emissionsA
Read-only
Inspect

Calculate Scope 2 CO2e for a facility from its ZIP and kWh, using both GHG Protocol methods: location-based (eGRID subregion rate) and market-based (Green-e residual mix applied to kWh not covered by RECs, PPAs or green tariffs). Returns kg CO2e for each method with the factors used.

NameRequiredDescriptionDefault
kwhYesElectricity consumption in kWh
zipYes5-digit US ZIP code (ZIP+4 accepted)
yearNoeGRID edition (default 2023). Market-based needs 2023.
renewable_kwhNoOptional: kWh covered by contractual instruments (RECs, PPAs, green tariff). Counted at zero in the market-based result. Default 0.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=true), so the bar is lower, and the description adds real substance: it discloses that both GHG Protocol methods are computed, the factor sources (eGRID subregion, Green-e residual mix), and how renewable_kwh is treated as zero in the market-based result. It also states the return payload (kg CO2e per method with factors used), which matters since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action and inputs before method detail. Every clause carries information (methods, factor sources, REC/PPA treatment, return format) with no filler or restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only calculator with no output schema, the description adequately explains inputs, methodology, and the shape of the result. Gaps are minor: no mention of the year parameter's effect on market-based results, and no note on whether results are annualized or single-period, but the essential calling information is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the schema already documents kwh, zip pattern, year enum, and renewable_kwh. The description echoes the contractual-instrument semantics of renewable_kwh but adds no syntax or interaction detail beyond what the schema states, and never mentions the year parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Calculate), a specific resource and scope (Scope 2 CO2e for a facility), and the exact inputs (ZIP, kWh) plus both accounting methods. It clearly distinguishes itself from the sibling calculate_fuel_emissions by being the electricity/Scope 2 tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent can infer this is the tool for electricity-based Scope 2, but nothing states when to pick it over calculate_fuel_emissions, compare_sites, or lookup_emission_factor. No exclusions or prerequisites (e.g., US-only ZIP, year constraint) are framed as usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_fuel_emissionsA
Read-only
Inspect

Calculate Scope 1 stationary-combustion emissions (CO2, CH4, N2O and CO2e) for fuels burned on site, using the GHG Emission Factors Hub 2026 (Cornerstone, successor to EPA's Hub; IPCC AR6 GWPs) by default, or EPA's 2025 edition (AR5) with edition=2025. Pass one or more items with fuel, quantity and unit, e.g. natural gas in therms/ccf/mcf/scf, propane/diesel/heating oil in gallons, coal in short tons. Biomass CO2 is reported separately (biogenic). Stationary sources only: for vehicle fuel the CO2 per gallon is the same, but CH4/N2O factors differ and are not included. Returns per-item and total CO2e. Pair with calculate_emissions for a facility's electricity (Scope 2).

NameRequiredDescriptionDefault
itemsYes
editionNoHub edition: 2026 (default; Cornerstone, AR6 GWPs) or 2025 (EPA, AR5 GWPs). Fuel factors are the same; CO2e differs slightly.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered; the description goes further by disclosing the default factor set (Cornerstone/AR6) versus edition=2025 (AR5) and that CO2e shifts slightly, plus that biomass CO2 is reported separately as biogenic. It does not discuss error handling or the 50-item cap, but the substantive behavioral caveats are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but dense and front-loaded: purpose first, then defaults, then input format with examples, then scope exclusions, then return values and sibling pairing. Every sentence carries information, though the description sits at the upper end of acceptable length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only a readOnlyHint annotation and no output schema, the description carries the burden well: it states the returned shape ('per-item and total CO2e'), the default and alternate editions, the biogenic reporting convention, and the boundary against vehicle-fuel and Scope 2 use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (quantity is undocumented), so the description must add meaning, and it does: it maps fuel classes to plausible units ('natural gas in therms/ccf/mcf/scf, propane/diesel/heating oil in gallons, coal in short tons') and explains the edition switch's effect on CO2e. This exceeds the baseline for a half-documented schema, though it does not fully document the quantity parameter's bounds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with precise scope: 'Calculate Scope 1 stationary-combustion emissions (CO2, CH4, N2O and CO2e) for fuels burned on site.' It names the factor source and explicitly confines itself to stationary sources, which distinguishes it from calculate_emissions (Scope 2 electricity) named in the same description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('fuels burned on site', 'stationary sources only'), when-not ('for vehicle fuel the CO2 per gallon is the same, but CH4/N2O factors differ and are not included'), and the alternative to pair with ('Pair with calculate_emissions for a facility's electricity (Scope 2)'). Routing is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cleanest_hoursA
Read-only
Inspect

Find the cleanest (lowest grid carbon) contiguous window of N hours in the day to run a flexible load (batch jobs, EV charging, pumping, HVAC pre-cooling) at a US ZIP code or balancing authority. Based on the hour-of-day pattern of the last 7 days (168 hours) of EIA-930 data, in local time. Returns the cleanest and dirtiest windows, % saved vs the daily average, and all hours ranked; between limits the windows to given local hours (e.g. overnight). A scheduling guide from recent history, not a forecast.

NameRequiredDescriptionDefault
baNoBalancing authority code (e.g. CISO, ERCO, PJM, MISO, NYIS). Use this OR zip.
zipNo5-digit US ZIP code (or use ba)
betweenNoOptional local hours the window must fall in, start-end, wrapping past midnight: e.g. "20-06" for an EV fleet parked overnight, "9-17" for working hours.
durationNoWindow length in hours (default 4)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry readOnlyHint, so the description does real work: it discloses the data source (last 7 days / 168 hours of EIA-930), the local-time basis, and that results are historical rather than predictive. It does not mention auth requirements, rate limits, or fallback behavior when a ZIP cannot be mapped to a BA.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and scope are front-loaded in the first sentence, with data basis and return values following. The third sentence is a dense semicolon-joined run-on that packs return contents and the `between` behavior together, which is efficient but slightly harder to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the returns (cleanest and dirtiest windows, % saved vs daily average, all hours ranked) and by stating the data vintage, timezone, and forecast caveat. The only minor gap is geo-resolution failure behavior, which is not essential to correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema, making 3 the baseline. The description adds only a paraphrase of the `between` semantics (window limited to given local hours, e.g. overnight) and the default duration, which the schema already states; no extra syntax or interaction rules (e.g. zip vs ba precedence) are contributed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — find the cleanest contiguous N-hour window for a flexible load — and immediately scopes it to a ZIP code or balancing authority. The parenthetical '(lowest grid carbon)' removes ambiguity about what 'cleanest' means, and the wording separates it from sibling tools like hourly_intensity or calculate_emissions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete use cases (batch jobs, EV charging, pumping, HVAC pre-cooling) and explicitly says it is 'a scheduling guide from recent history, not a forecast,' which is the key decision boundary against forecast-style siblings. It stops short of naming an alternative tool by name and offers no explicit when-not-to-use case beyond the forecast caveat.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_sitesA
Read-only
Inspect

Compare and rank 2-25 candidate US sites (ZIP codes) for a facility, data center or EV/flexible load on grid carbon and electricity cost in one call. Per site: eGRID CO2e kg/kWh (location-based), Green-e residual mix (market-based), carbon-free %, $/kWh for the sector (the state's latest full-year average, EIA-861 annual; the ZIP's own 2023 utility average is shown as a reference), and the cleanest daily window from the 7-day hourly profile of its balancing authority, in the ZIP's local time. lowest_cost and best_combined are null unless every site has a rate. With annual_kwh, also annual tCO2e and cost. Returns competition ranks by carbon, cost and combined, gap percentages, and best_* = null with *_tied lists when sites tie.

NameRequiredDescriptionDefault
zipsYesCandidate US ZIP codes (5 digits or ZIP+4)
sectorNoRetail rate sector. Default COM (commercial); use IND for industrial/data-center loads.
durationNoLength of the cleanest daily window in hours (default 4)
annual_kwhNoOptional annual consumption in kWh (e.g. 87,600,000 for a 10 MW constant load) to get annual tCO2e and cost per site

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only readOnlyHint available, the description carries real behavioral weight: it discloses nullability rules (lowest_cost and best_combined are null unless every site has a rate; best_* = null with *_tied lists on ties), data sources and vintages (eGRID, Green-e residual mix, EIA-861 annual, ZIP's own 2023 utility average), and the time-zone basis for the daily window.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and scope before the dense per-site output inventory. The single paragraph is information-dense with little filler, though the long chain of returned fields pushes it toward the verbose side.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must describe returns, and it does so thoroughly: per-site metrics, rankings, gap percentages, tie handling, and the annual figures gated by annual_kwh. An agent has everything needed to invoke and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the 3 baseline applies, but the description adds genuine meaning beyond the schema: it explains that $/kWh is the state-level latest full-year EIA-861 average with the ZIP's own 2023 utility average as reference, that duration maps to the cleanest daily window from a 7-day hourly profile, and that annual_kwh yields annual tCO2e and cost.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Compare and rank) plus resource (candidate US sites / ZIP codes) with explicit scope (2-25, grid carbon and electricity cost). This clearly distinguishes it from siblings like lookup_batch and lookup_by_coordinates, which operate on single locations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'in one call' and the target use cases (facility, data center, EV/flexible load) imply this is the batch siting tool, and the duration/annual_kwh params hint at when extra detail is wanted. However, no alternative sibling is named and no when-not-to-use condition is stated, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

electricity_rateA
Read-only
Inspect

Get the latest monthly average retail electricity rate ($/kWh and cents/kWh) for any US ZIP code, broken out by sector (residential, commercial, industrial, etc.). Data is state-level from EIA Form 861 - a ballpark, not utility- or ZIP-specific tariffs (use utility_tariff for those).

NameRequiredDescriptionDefault
zipYes5-digit US ZIP code

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true; the description adds the material behavioral fact that the underlying data is state-level from EIA Form 861, so ZIP-level precision should not be assumed. That granularity caveat is exactly the kind of context an agent needs, though it says nothing about freshness lag or coverage gaps for non-US ZIPs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the resource and units, then the caveat and sibling routing. No filler and nothing repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so: it specifies units ($/kWh and cents/kWh), the sector dimension, the monthly averaging period, and the geographic granularity. Nothing needed to call or interpret the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, and schema description coverage is 100% (the ZIP pattern and format are fully documented in the schema). The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (get the latest monthly average retail electricity rate) plus units, geography, and the sector breakout. It also names the sibling it is not (utility_tariff), so an agent can distinguish it without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the when-not case ('a ballpark, not utility- or ZIP-specific tariffs') and routes to the correct alternative by name ('use utility_tariff for those'). The condition selecting each tool is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hourly_intensityA
Read-only
Inspect

Get hourly grid carbon intensity (kg CO2e per kWh) for any US ZIP code, derived from EIA-930 hourly fuel-mix data. Data lags up to about a day (not real-time). Returns time series with per-hour fuel mix, total generation, and carbon intensity. For timing and analysis (demand response, load shifting, grid patterns), not inventory reporting: it uses fixed per-fuel combustion factors on in-BA generation (no imports), so its values don't match eGRID's annual factors. For live or forecast intensity, WattTime or Electricity Maps are better options.

NameRequiredDescriptionDefault
baNoBalancing authority code directly (e.g. CISO, ERCO, PJM, MISO, NYIS). Use this OR zip.
zipNo5-digit US ZIP code (or use ba parameter)
hoursNoNumber of most recent hours to return (default 24, max 168 = 1 week).
aggregateNoOptional: return the 24-hour average profile over the last 7 days (168 hours) instead of the hourly series. Buckets are UTC hours; for a local-time scheduling window use cleanest_hours.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, so the description carries the behavioral load and does it well: it discloses staleness (data lags up to a day, not real-time), what the response contains (per-hour fuel mix, total generation, carbon intensity), and the methodology caveat (fixed per-fuel combustion factors on in-BA generation, no imports, so values won't match eGRID annual factors). These are exactly the traits an agent needs to avoid misusing the output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero filler, and front-loaded: the core capability and scope come first, followed by latency, output shape, and the fit/exclusion guidance. Every sentence carries distinct decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description states the return shape (time series with per-hour fuel mix, total generation, carbon intensity). Combined with latency, methodology, and alternative routing, an agent has everything needed to select and call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 and the schema already documents ba/zip/hours/aggregate. The description adds genuine meaning on top: it clarifies aggregate's semantics (24-hour average profile over the trailing 168 hours), warns that buckets are UTC, and redirects local-time windows to cleanest_hours. It adds little on hours/ba/zip, keeping it just above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope: hourly grid carbon intensity (kg CO2e/kWh) for any US ZIP code, derived from EIA-930 fuel-mix data. It also names the specific alternative tools (cleanest_hours, WattTime, Electricity Maps) and the data source, so an agent can distinguish it from siblings like calculate_emissions or lookup_emission_factor without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (demand response, load shifting, grid pattern timing/analysis) and when-not (inventory reporting, because methodology differs from eGRID). It routes the agent to alternatives for live/forecast data (WattTime, Electricity Maps) and to cleanest_hours for local-time scheduling windows. This is as complete as usage guidance gets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_batchA
Read-only
Inspect

Look up emission factors for up to 100 ZIP codes in one call (split longer lists). Returns one compact row per ZIP - subregion, CO2e kg/kWh (location-based), residual mix (market-based), carbon-free %, utility - unless full is true, which returns every field (about 2 KB per ZIP).

NameRequiredDescriptionDefault
fullNoReturn complete candidate records (all pollutants, generation mix) instead of compact rows. Default false.
zipsYesArray of US ZIP codes (5 digits or ZIP+4)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only readOnlyHint=true in annotations, the description carries most of the behavioral burden and does it well: it lists the exact returned fields per row, explains the full=true switch and its ~2 KB per-ZIP payload size, and flags the 100-item cap. It omits error behavior (e.g., unmatched or invalid ZIPs), which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and batch limit are front-loaded in the first clause, and the second clause packs the return shape, the full flag, and a payload estimate with no filler. Two sentences, zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by enumerating the compact row fields and the fields returned when full=true, so the agent knows what it gets. Combined with the read-only annotation and 100% parameter coverage, nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema by quantifying full=true output (~2 KB per ZIP, every field) and by restating the 100-ZIP batch limit for zips. The size/field detail is genuinely incremental over the schema's terse parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (look up) plus resource (emission factors) with an explicit batch scope (up to 100 ZIP codes in one call). An agent can distinguish this from single-value siblings like lookup_emission_factor or lookup_by_coordinates purely from the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a concrete usage rule — batch up to 100 ZIPs per call and split longer lists — which tells the agent when this tool applies. It does not, however, explicitly name the alternative for single-ZIP lookups or state exclusions, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_by_coordinatesA
Read-only
Inspect

Look up emission factors by latitude/longitude. Uses US Census Geocoder to resolve to ZIP first, then returns the same data as lookup_emission_factor. Useful when you have a facility address or lat/lon but no ZIP.

NameRequiredDescriptionDefault
latYesLatitude (decimal degrees)
lonYesLongitude (decimal degrees)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already covers the safety profile, and the description adds real behavioral context: an external US Census Geocoder round-trip before the lookup, and equivalence of output to lookup_emission_factor. It omits failure behavior (non-US coordinates, geocode misses), which keeps it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what it does, then the mechanism, then the use case. No filler and every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully states the return equals lookup_emission_factor's data, and explains the geocoding step. The main unaddressed gap is that the US Census Geocoder is US-only, so non-US coordinates fail silently as far as the description tells the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (lat, lon) are documented in the schema. The description restates 'latitude/longitude' without adding units, range, or formatting guidance, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('look up emission factors') plus the input dimension ('by latitude/longitude'), and explicitly distinguishes itself from the sibling lookup_emission_factor by noting it returns the same data after geocoding. An agent can tell the two apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear selecting condition: 'Useful when you have a facility address or lat/lon but no ZIP,' which implicitly routes ZIP-holders to lookup_emission_factor. It never states that alternative as an explicit instruction, so the guidance is clear but not fully closed-loop.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_emission_factorA
Read-only
Inspect

Look up EPA eGRID electricity emission factors for a US ZIP code. Returns CO2e (kg/kWh and lb/MWh), CO2, CH4, N2O, NOx, SO2, non-baseload rate, carbon-free %, generation mix (coal/gas/nuclear/hydro/wind/solar etc.), eGRID subregion code, the data year, and the Green-e residual mix rate (the market-based Scope 2 factor). For Scope 2 emissions from a kWh total, use calculate_emissions, which does the arithmetic for both methods.

NameRequiredDescriptionDefault
zipYes5-digit US ZIP code (e.g. "94105"); ZIP+4 accepted
yearNoeGRID edition: 2023 (default, official EPA) or 2024 (EPA's public eGRID code run on 2024 data by Cornerstone; EPA has not published eGRID2024)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true, so the safety profile is covered, but the description adds real value beyond that: it discloses the distinction between location-based and market-based Scope 2 factors, the presence of the Green-e residual mix rate, the data year, and the important provenance caveat about the 2024 eGRID edition not being EPA-published. That provenance detail is behaviorally meaningful and not derivable from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with purpose, then output contents, then alternative routing — a sensible order with no filler sentences. The long enumeration of return values is somewhat dense, but since no output schema exists, the listing is largely justified rather than wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description appropriately carries the burden of describing return values, and it does so comprehensively. Both parameters are covered by a 100%-coverage schema, and the alternative tool is named, so an agent has what it needs to call this correctly; only the coordinate/batch variants are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema itself already explains the ZIP pattern and the 2023/2024 edition enum in detail, so the baseline is 3. The description adds essentially no parameter-level detail beyond what the schema provides, leaving the schema to do all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Look up EPA eGRID electricity emission factors for a US ZIP code') and immediately enumerates the returned quantities, so the agent knows exactly what domain this covers. It is clearly distinguishable from siblings like utility_tariff or electricity_rate, which are about rates rather than emission factors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent: 'For Scope 2 emissions from a kWh total, use calculate_emissions, which does the arithmetic for both methods' — naming the alternative and the condition that selects it. However, it is silent on the other closely related siblings (lookup_by_coordinates, lookup_batch) that an agent might otherwise confuse with this ZIP-based lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plant_emissionsA
Read-only
Inspect

Get emissions from EPA Clean Air Markets Division (CAMD) for a specific US power plant or a state: fossil units over 25 MW reporting to the Acid Rain Program and CSAPR. Per facility returns total CO2 (short tons), gross generation (MWh), heat input (mmBtu), NOx and SO2 (lb), primary fuel type, operating hours, and derived emissions rate (kg CO2/MWh). CAMD publishes by quarter, so the default window is the last 7 days of the latest published quarter (latest_published_date in the response); later dates are not available yet. Default output is a per-facility summary from daily data; format=hourly returns unit-hour records for small windows. Use for plant-specific carbon accounting, state-level fossil emissions and "dirtiest plants in [state]" queries.

NameRequiredDescriptionDefault
endNoCustom end date YYYY-MM-DD (optional, overrides days).
daysNoNumber of most recent days to include (1-90, default 7).
beginNoCustom begin date YYYY-MM-DD (optional, overrides days).
limitNoSummary only: return the top N facilities by CO2 (default 25); facilities_total gives the full count.
stateNoUS state (2-letter code or full name, e.g. TX or Texas) for a state-wide aggregate.
formatNo"summary" (default) aggregates by facility; "hourly" returns raw CAMD unit-hour records, about 0.8 KB each (a 9-unit plant-day was 172 KB), so use it with facility_id and 1-2 days.
facility_idNoEPA CAMD/ORIS facility code (e.g. 3 for Barry, AL). Find codes in the summary_by_facility of a state query, or at https://campd.epa.gov/.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint=true, the description discloses substantive behavior an agent cannot get from annotations: data availability is capped by the latest published quarter, later dates are unavailable, the default is the last 7 days of that quarter, and format=hourly returns large unit-hour records (with a concrete size example) that demand narrow windows. These are real operational constraints that shape how the tool should be called.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the tool does, followed by output contents, availability constraints, then formats and use cases. Every sentence carries information, though the single dense paragraph is longer than strictly necessary and the return-field list partially duplicates schema documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the return fields (CO2 in short tons, gross generation, heat input, NOx, SO2, primary fuel type, operating hours, derived kg CO2/MWh). Combined with the zero-required-parameter defaults and the publication-window caveat, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds cross-parameter context the schema does not: the quarterly publication logic behind the days default, and how format=hourly should be paired with facility_id and 1-2 days. It also enumerates the returned measure set, which supports interpreting the facility-level parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get emissions from EPA Clean Air Markets Division (CAMD)') and narrows the universe precisely: fossil units over 25 MW reporting to the Acid Rain Program and CSAPR. This distinguishes it cleanly from calculation siblings like calculate_emissions or calculate_fuel_emissions, which derive values rather than retrieve reported CAMD data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names concrete use cases ('plant-specific carbon accounting, state-level fossil emissions and "dirtiest plants in [state]" queries') and explains the default lookback window via the quarterly publication cadence. It does not explicitly say when to prefer a sibling (e.g., calculate_emissions) or when this tool is the wrong choice, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

utility_tariffA
Read-only
Inspect

Get the actual utility-specific electricity rate (not state average) for a US ZIP code or named utility. Returns the current default tariff with effective rate ($/kWh), fixed monthly charge, tier count, TOU indicator, and effective date. Data source: OpenEI URDB (NREL-hosted). With a ZIP, matches the ZIP's utility by EIA ID. Returns currently-effective tariffs; when URDB has none flagged as default (common for Commercial/Industrial) it returns the most recent ones and says so in warnings, including when the newest available tariff has expired. Does not cover Texas retail electric providers (deregulated market) - use electricity_rate there.

NameRequiredDescriptionDefault
zipNo5-digit US ZIP code
eiaidNoEIA utility ID (joins with EIA Form 861)
limitNoMax tariffs to return (1-20, default 5)
sectorNoDefault "Residential" (case-insensitive; RES/COM/IND codes accepted)
utilityNoUtility name (e.g. "Pacific Gas & Electric Co", "Consolidated Edison Co-NY Inc")

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnlyHint annotation: discloses the data source (OpenEI URDB/NREL), the fallback behavior when no default tariff exists (returns most recent and flags it in warnings), and the expired-tariff warning case. This is exactly the behavioral context a safe-read annotation does not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what it returns and the data source, then layers fallback and exclusion notes. Dense and information-rich, though a few clauses (e.g., the expired-tariff parenthetical) could be tightened. Every sentence still carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the returned fields (effective rate, fixed monthly charge, tier count, TOU indicator, effective date). Combined with the fallback/warning behavior and data source, an agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds meaning by explaining that a ZIP is resolved to the ZIP's utility via EIA ID, tying the zip and eiaid parameters together. It does not clarify utility-name matching, but the schema already documents all five parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (get the utility-specific electricity rate) and sharply distinguishes itself from the state-average rate and from the sibling electricity_rate tool. An agent can tell exactly what this returns and how it differs from alternatives 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the when-not case and the alternative: 'Does not cover Texas retail electric providers (deregulated market) - use electricity_rate there.' This routes the agent away from the wrong tool. Input-method selection (ZIP vs eiaid) is also touched on via the ZIP-to-EIA-ID matching note.

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. 2 tool updates
    • Changedcleanest_hours1 field changed
      • addedInput schema / properties / between
        Added value: +{
        +  "description": "Optional local hours the window must fall in, start-end, wrapping past midnight: e.g. \"20-06\" for an EV fleet parked overnight, \"9-17\" for working hours.",
        +  "pattern": "^\\d{1,2}(:00)?-\\d{1,2}(:00)?$",
        +  "type": "string"
        +}
    • Changedplant_emissions1 field changed
      • changedInput schema / properties / state / description
        Previous value: -"2-letter US state code for state-wide aggregate (e.g. TX, CA, PA)."New value: +"US state (2-letter code or full name, e.g. TX or Texas) for a state-wide aggregate."
  2. 8 tool updates
    • Changedcalculate_emissions2 fields changed
      • changedInput schema / properties / zip / description
        Previous value: -"5-digit US ZIP code"New value: +"5-digit US ZIP code (ZIP+4 accepted)"
      • addedInput schema / properties / zip / pattern
        Added value: +"^\\d{5}(-?\\d{4})?$"
    • Changedcleanest_hours1 field changed
      • changedInput schema / properties / zip / pattern
        Previous value: -"^\\d{5}$"New value: +"^\\d{5}(-?\\d{4})?$"
    • Changedcompare_sites3 fields changed
      • changedInput schema / properties / sector / enum
        Previous value: -[
        -  "COM",
        -  "IND",
        -  "RES",
        -  "ALL"
        -]New value: +[
        +  "COM",
        +  "IND",
        +  "RES",
        +  "ALL",
        +  "Commercial",
        +  "Industrial",
        +  "Residential"
        +]
      • changedInput schema / properties / zips / description
        Previous value: -"Candidate 5-digit US ZIP codes"New value: +"Candidate US ZIP codes (5 digits or ZIP+4)"
      • changedInput schema / properties / zips / items / pattern
        Previous value: -"^\\d{5}$"New value: +"^\\d{5}(-?\\d{4})?$"
    • Changedelectricity_rate1 field changed
      • changedInput schema / properties / zip / pattern
        Previous value: -"^\\d{5}$"New value: +"^\\d{5}(-?\\d{4})?$"
    • Changedhourly_intensity2 fields changed
      • changedInput schema / properties / aggregate / description
        Previous value: -"Optional: return the 24-hour average profile over the last 7 days (168 hours) instead of the hourly series"New value: +"Optional: return the 24-hour average profile over the last 7 days (168 hours) instead of the hourly series. Buckets are UTC hours; for a local-time scheduling window use cleanest_hours."
      • changedInput schema / properties / zip / pattern
        Previous value: -"^\\d{5}$"New value: +"^\\d{5}(-?\\d{4})?$"
    • Changedlookup_batch2 fields changed
      • changedInput schema / properties / zips / description
        Previous value: -"Array of 5-digit US ZIP codes"New value: +"Array of US ZIP codes (5 digits or ZIP+4)"
      • changedInput schema / properties / zips / items / pattern
        Previous value: -"^\\d{5}$"New value: +"^\\d{5}(-?\\d{4})?$"
    • Changedplant_emissions1 field changed
      • changedInput schema / properties / format / description
        Previous value: -"\"summary\" (default) aggregates by facility; \"hourly\" returns raw records."New value: +"\"summary\" (default) aggregates by facility; \"hourly\" returns raw CAMD unit-hour records, about 0.8 KB each (a 9-unit plant-day was 172 KB), so use it with facility_id and 1-2 days."
    • Changedutility_tariff3 fields changed
      • changedInput schema / properties / sector / description
        Previous value: -"Default \"Residential\" (case-insensitive)"New value: +"Default \"Residential\" (case-insensitive; RES/COM/IND codes accepted)"
      • changedInput schema / properties / sector / enum
        Previous value: -[
        -  "Residential",
        -  "Commercial",
        -  "Industrial",
        -  "Lighting"
        -]New value: +[
        +  "Residential",
        +  "Commercial",
        +  "Industrial",
        +  "Lighting",
        +  "RES",
        +  "COM",
        +  "IND"
        +]
      • changedInput schema / properties / zip / pattern
        Previous value: -"^\\d{5}$"New value: +"^\\d{5}(-?\\d{4})?$"
  3. 1 tool update
    • Changedlookup_emission_factor1 field changed
      • changedInput schema / properties / year / description
        Previous value: -"eGRID edition: 2023 (default, official EPA) or 2024 (preliminary, Cornerstone Data, not an official EPA release)"New value: +"eGRID edition: 2023 (default, official EPA) or 2024 (EPA's public eGRID code run on 2024 data by Cornerstone; EPA has not published eGRID2024)"
  4. 4 tool updates
    • Changedcalculate_fuel_emissions2 fields changed
      • addedInput schema / properties / edition
        Added value: +{
        +  "description": "Hub edition: 2026 (default; Cornerstone, AR6 GWPs) or 2025 (EPA, AR5 GWPs). Fuel factors are the same; CO2e differs slightly.",
        +  "enum": [
        +    "2026",
        +    "2025"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / items / items / properties / fuel / description
        Previous value: -"Fuel id or alias: natural_gas, propane, diesel, heating_oil, gasoline, lpg, kerosene, jet_fuel, residual_fuel_oil_no_6, bituminous, wood, biodiesel... (63 EPA Hub fuels)"New value: +"Fuel id or alias: natural_gas, propane, diesel, heating_oil, gasoline, lpg, kerosene, jet_fuel, residual_fuel_oil_no_6, bituminous, wood, biodiesel... (63 Hub fuels)"
    • Changedhourly_intensity1 field changed
      • changedInput schema / properties / aggregate / description
        Previous value: -"Optional: return the 24-hour average profile over the last ~7 days instead of the hourly series"New value: +"Optional: return the 24-hour average profile over the last 7 days (168 hours) instead of the hourly series"
    • Changedlookup_batch1 field changed
      • addedInput schema / properties / full
        Added value: +{
        +  "description": "Return complete candidate records (all pollutants, generation mix) instead of compact rows. Default false.",
        +  "type": "boolean"
        +}
    • Changedplant_emissions1 field changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Summary only: return the top N facilities by CO2 (default 25); facilities_total gives the full count.",
        +  "maximum": 500,
        +  "minimum": 1,
        +  "type": "integer"
        +}
  5. 11 tool updates
    • First observedcalculate_emissions
    • First observedcalculate_fuel_emissions
    • First observedcleanest_hours
    • First observedcompare_sites
    • First observedelectricity_rate
    • First observedhourly_intensity
    • First observedlookup_batch
    • First observedlookup_by_coordinates
    • First observedlookup_emission_factor
    • First observedplant_emissions
    • First observedutility_tariff

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides real-time grid carbon intensity, power generation breakdown, and carbon-intensity forecasts for any zone or lat/lon location.
    0
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables users to look up US residential electricity utilities and plans by ZIP code and usage, then estimate annual bills and rank plans by cost from published tariff data.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides real-time US power grid intelligence and carbon intensity data to enable carbon-aware AI compute scheduling across major grid regions. It allows users to monitor energy generation and optimize workloads based on renewable energy availability and grid load forecasts.
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Live and historical electricity prices, demand, generation mix and carbon intensity for 25 grid zones (US, Europe, GB, Australia). Hosted endpoint plus local stdio bridge; free sample mode, free API key, or x402 pay-per-call.
    6
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.