Power Capacity API v1
Generated from
core.contract.describe_power_capacity_v1()and checked fixture-backed examples. Do not hand-edit the example JSON files.
Capability
- Capability:
power.capacity - Primitive:
query_power_capacity_v1 - Status:
available - Current source:
energy.eia.eia860m - Source publisher: U.S. Energy Information Administration
- Snapshot behavior:
as_of = latestresolves to an exact snapshot date in every response.
What It Can Answer
- Operating generator capacity by state/jurisdiction, county FIPS, fuel, technology, status, and source-reported balancing authority code.
- Planned generator capacity by state/jurisdiction, county FIPS, fuel, technology, status, source-reported balancing authority code, and planned online year.
- Retired generator capacity by state/jurisdiction, fuel, technology, source-reported balancing authority code, and retirement year.
- Generator-level detail records when
include_recordsis true. - Raw workbook row evidence for any returned row-level citation.
Represented Facts
EIA-860M reports operating generator capacity by location, fuel, technology, status, and source-reported balancing authority codeEIA-860M reports planned generator capacity by location, fuel, technology, status, source-reported balancing authority code, and planned online yearEIA-860M reports retired generator capacity by location, fuel, technology, status, source-reported balancing authority code, and retirement year
Data Point Contract
- Data point:
power.capacity - Product spec:
blocks/power_capacity/card.md - Grain:
generator_snapshot - Source basis:
energy.eia.eia860m - Represented fact: EIA-860M reports generator capacity by lifecycle, location, fuel, technology, status, and snapshot date.
Does not answer:
electricity suppliedgeneration MWhreal-time dispatchcapacity factor as a standalone number (use query_capacity_factor_v1)battery storage throughput or durationdeliverable capacityaccredited capacity{"interconnection-queue / requested capacity — projects pending in an ISO queue, not yet built (use the relevant ISO's queue tool": 'query_power_interconnection_queue_v1 for MISO, query_power_interconnection_queue_pjm_v1 / query_power_interconnection_queue_pjm_cycle_v1 for PJM, query_power_interconnection_queue_caiso_v1 for CAISO)'}probability that planned generators will be builtdata-center load or industrial demand
REST Surface
GET /v1/healthGET /v1/capabilitiesGET /v1/power/capacity/schemaPOST /v1/power/capacity/queryPOST /v1/evidence/source-row
MCP Surface
list_capabilities_v1describe_power_capacity_v1query_power_capacity_v1get_source_evidence_v1
Local MCP Setup
Some MCP clients launch servers from the user's home directory or ignore a configured cwd. Use uv run --directory so the server always starts from the repository project.
{
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/OSINT",
"python",
"-m",
"core.mcp_server"
]
}
Leave EXASCALE_PARQUET_BASE / EXASCALE_RAW_BASE unset: the one server hosts every data point's tools, and with no override it resolves each block's promoted snapshots and raw archive from the repository layout. Setting either env var points ALL tools at one directory — a per-block path breaks every other block's tools. They exist only for single-source sandboxes and tests.
Request Schema
Filters:
lifecycleas_ofstatecounty_fipsbalancing_authority_codeenergy_source_codefuel_groupprime_mover_codetechnologystatus_codeeia_plant_idgenerator_idoperating_yearplanned_operation_yearplanned_retirement_yearretirement_year
Input field semantics:
| Field | Answer Label | Source Field | Semantics | Definition | Counting Definition |
|---|---|---|---|---|---|
state |
state/jurisdiction | Plant State |
source_reported_eia860m_plant_state_or_jurisdiction_code | The EIA-860M Plant State value for the generator's plant. Values are two-letter U.S. state, District of Columbia, or territory/jurisdiction codes when present. |
A count of grouped state values is a count of state-level jurisdiction codes, not a count of U.S. states; 51 values can mean 50 states plus DC. |
Group by:
lifecyclestatecounty_fipsbalancing_authority_codeenergy_source_codefuel_groupprime_mover_codetechnologystatus_codeoperating_yearplanned_operation_yearplanned_retirement_yearretirement_year
Date range parameters:
operating_date_fromoperating_date_toplanned_operation_date_fromplanned_operation_date_toplanned_retirement_date_fromplanned_retirement_date_toretirement_date_fromretirement_date_to
Controls:
include_recordsinclude_evidencelimitincluded_in_default_us_metricsorder_bytop_norderrollup_other
Ranking (how order_by / top_n / order join — order_by ranks groups by a metric, never a group_by dimension; top_n needs both a group_by and an order_by):
{
"no_ranking": "Omit order_by and top_n to return all groups in group-key order.",
"order": {
"default": "desc",
"valid_values": [
"desc",
"asc"
]
},
"order_by": {
"accepts": "one of output.metrics",
"note": "Ranks the groups by a metric (a measure). Not a group_by dimension \u2014 rows already come back grouped by each group_by field.",
"requires": [
"group_by"
],
"valid_values": [
"nameplate_mw",
"net_summer_mw",
"net_winter_mw",
"generator_count",
"distinct_plant_count",
"source_record_count"
]
},
"top_n": {
"note": "Keeps the top N groups by order_by; the rest fold into one (other) remainder (additive metrics sum into it, non-additive ones are nulled) so the result still reconciles to summary.totals.",
"requires": [
"group_by",
"order_by"
],
"type": "positive integer"
}
}
Canonical filters:
{
"battery_storage": {
"description": "Planned, operating, retired, or canceled battery storage capacity represented by this primitive.",
"energy_capacity_policy": "`nameplate_energy_mwh` is only represented when the source row provides it. Do not derive MWh from MW unless the answer clearly labels the duration assumption outside exascale represented facts.",
"params": {
"technology": "Batteries"
},
"scope_note": "Use `technology = Batteries` as the user-facing canonical battery storage filter. `prime_mover_code = BA` and `energy_source_code = MWH` remain valid source-coded filters and may return different scopes.",
"source_semantics": {
"energy_source_code": "MWH",
"prime_mover_code": "BA",
"technology": "Batteries"
}
}
}
Output Schema
Aggregate metrics:
nameplate_mwnet_summer_mwnet_winter_mwgenerator_countdistinct_plant_countsource_record_count
Metric groups:
{
"capacity_mw": [
"nameplate_mw",
"net_summer_mw",
"net_winter_mw"
],
"entities": [
"distinct_plant_count"
],
"records": [
"generator_count",
"source_record_count"
]
}
Response summary fields:
group_counttotals
Accepted fact policy:
- Query responses contain accepted, gate-passed facts only.
- Gate, monitor, and audit quality signals are internal controls, not agent-facing answer caveats.
- If a source snapshot is not fit to serve, the source must fail closed before it reaches this API.
Metric metadata:
| Metric | Category | Unit | Aggregation | Additive Across Groups | Authoritative Total | Definition |
|---|---|---|---|---|---|---|
nameplate_mw |
capacity_mw | MW | sum | true | summary.totals.nameplate_mw |
Sum of EIA-reported generator nameplate capacity within the current result scope. |
net_summer_mw |
capacity_mw | MW | sum | true | summary.totals.net_summer_mw |
Sum of EIA-reported generator net summer capacity within the current result scope. |
net_winter_mw |
capacity_mw | MW | sum | true | summary.totals.net_winter_mw |
Sum of EIA-reported generator net winter capacity within the current result scope. |
generator_count |
records | count | count source records | true | summary.totals.generator_count |
Count of normalized generator records within the current result scope. |
distinct_plant_count |
entities | count | count_distinct | false | summary.totals.distinct_plant_count |
Count of distinct EIA plant IDs within the current result scope. |
source_record_count |
records | count | count source records | true | summary.totals.source_record_count |
Count of normalized source rows contributing to the current result scope. |
Rollup rules:
summary.totals.<metric>is the authoritative total for the full matched query.- Grouped row metrics may be summed only when
additive_across_groupsistrue. - Do not sum grouped values for these non-additive metrics:
distinct_plant_count.
Detail record fields returned when include_records is true:
source_idreport_monthas_oflifecyclesheet_nameregion_scopeincluded_in_default_us_metricssource_record_keysource_row_numbereia_entity_identity_nameeia_plant_idplant_namegenerator_idunit_codestatecountycounty_fipsbalancing_authority_codelatlonsectortechnologyenergy_source_codeprime_mover_codenameplate_mwnet_summer_mwnet_winter_mwnameplate_energy_mwhdc_net_capacity_mwstatus_rawstatus_codeoperating_yearoperating_monthoperating_dateplanned_operation_yearplanned_operation_monthplanned_operation_dateplanned_retirement_yearplanned_retirement_monthplanned_retirement_dateretirement_yearretirement_monthretirement_dateraw_file_sha256citation
Row-level citation fields:
source_idsource_urlsource_filesheetsource_rowraw_file_sha256as_of
Aggregate citation fields:
source_idpublishersource_urlsource_fileraw_file_sha256as_ofsource_viewsource_rows_countsource_rows_sampleverifylineage_filter
Codebooks
| Field | Coverage | Codes | Examples | Note |
|---|---|---|---|---|
energy_source_code |
complete_for_validated_eia860m_energy_source_codes | 39 | AB = Agricultural By-Products, ANT = Anthracite Coal, BFG = Blast Furnace Gas, BIT = Bituminous Coal, BLQ = Black Liquor |
|
prime_mover_code |
complete_for_validated_eia860m_prime_mover_codes | 23 | BA = Energy Storage, Battery, BT = Turbines Used in a Binary Cycle (including those used for geothermal applications), CA = Combined Cycle Steam Part, CC = Combined Cycle Total Unit (use only for plants/generators that are in planning stage, for which specific generator details cannot be provided), CE = Energy Storage, Compressed Air |
|
status_code |
lifecycle_specific | 11 | operating.OA = Out of service but expected to return to service in next calendar year, operating.OP = Operating, planned.L = Regulatory approvals pending. Not under construction, planned.OT = Other |
|
balancing_authority_code |
partial_for_eia860m | 81 | AEC = PowerSouth Energy Cooperative, AECI = Associated Electric Cooperative, Inc., AESO = Alberta Electric System Operator, AVA = Avista Corporation, AVRN = Avangrid Renewables, LLC |
EIA-860M reports this BA code on the generator row. exascale.build preserves it as source-reported data; it is not an independently validated physical BA-footprint assignment or corrected grid-operator attribution. EIA-860M can emit BA codes outside the EIA-930 reference table; missing labels are preserved as source-reported codes. A balancing authority is not a state. ERCO (ERCOT) lies wholly within Texas and covers ~90% of its load, but state=TX is the larger jurisdiction — it also includes non-ERCOT El Paso (WECC), the Panhandle (SPP), and East Texas (MISO), a material (~20%+) difference. Use balancing_authority_code for a grid and state for a jurisdiction; they are not interchangeable. When a phrase like 'the Texas grid' is ambiguous between the two, report both readings rather than guessing one (PD-009). |
The complete machine-readable codebooks are included in capability-schema.json.
Checked Examples
| Agent question | Request params | Checked output |
|---|---|---|
| What operating capacity exists by county in Alabama? | {"group_by": ["county_fips"], "lifecycle": "operating", "state": "AL"} |
operating-capacity-by-county.json |
| What planned capacity exists by state/jurisdiction and fuel for Texas and Arizona? | {"group_by": ["state", "energy_source_code"], "lifecycle": "planned", "state": ["TX", "AZ"]} |
planned-capacity-by-state-and-fuel.json |
| What planned Texas capacity is reported by source-reported balancing authority code? | {"group_by": ["balancing_authority_code"], "lifecycle": "planned", "state": "TX"} |
planned-capacity-by-balancing-authority.json |
| What retired capacity is reported by retirement year? | {"group_by": ["retirement_year"], "lifecycle": "retired"} |
retired-capacity-by-year.json |
| Return one planned Texas generator with a row-level citation. | {"include_records": true, "lifecycle": "planned", "limit": 1, "state": "TX"} |
generator-detail-with-citation.json |
| Verify the raw workbook row behind a returned citation | citations[ref].verify (aggregate) or records[0].citation (detail) |
source-row-evidence.json |
| Dogfood the tool sequence as an agent | list -> describe -> query -> evidence |
agent-dogfood-transcript.json |
The checked schema output is capability-schema.json.
Agent Workflow
- Call
list_capabilities_v1and selectpower.capacity. - Call
describe_power_capacity_v1to inspect valid filters, groupings, metrics, and citation fields. - Call
query_power_capacity_v1with bounded JSON params. - If the answer needs proof, pass a returned row-level
citationobject toget_source_evidence_v1. - Answer with the resolved
as_ofand relevant citations. Present returned metrics as authoritative for their declared source, snapshot, grain, and aggregation.