Power Interconnection Queue (PJM cluster/cycle) API v1
Generated from
core.contract.describe_power_interconnection_queue_pjm_cycle_v1()and checked fixture-backed examples. Do not hand-edit the example JSON files.
Capability
- Capability:
power.interconnection_queue_pjm_cycle - Primitive:
query_power_interconnection_queue_pjm_cycle_v1 - Status:
available - Current source:
energy.pjm.cycle - Source publisher: PJM Interconnection, L.L.C.
- Snapshot behavior:
as_of = latestresolves to an exact snapshot date in every response.
What It Can Answer
- Which projects are in PJM's cluster cycles (TC1/TC2 transition + the reopened steady-state C01+), by cycle, stage, state, fuel, and status.
- The requested MFO / net summer / net winter megawatts of each cluster-cycle project, cited to its source row.
- The cluster stage / decision point and developer of each project, as PJM reports them.
- The realized in-service (built) megawatts and long-term-firm transmission MW, separate from requested MW.
- Row-level detail records when
include_recordsis true. - Raw workbook row evidence for any returned row-level citation.
Represented Facts
PJM's cluster/cycle grid reports each project's cluster cycle (TC1/TC2 transition, C01+ reopened steady-state) and stage, with its REQUESTED interconnection capacity (MFO / net summer / net winter MW) — a request, not built capacityPJM's cycle grid reports each project's developer, location (state, county), fuel, phased System-Impact-Study report URLs + statuses, and lifecycle datesPJM also reports in_service_mw (realized built MW) and ltf_mw (long-term firm transmission MW), carried under their own names; this is a separate publication from PJM's New Services queue and is never merged with it
Data Point Contract
- Data point:
power.interconnection_queue_pjm_cycle - Product spec:
blocks/power_interconnection_queue_pjm_cycle/card.md - Grain:
project_snapshot - Source basis:
energy.pjm.cycle - Represented fact: PJM's cluster/cycle service-request grid (the ProjectTransition export) — the cluster view of PJM's interconnection process: the TC1/TC2 transition cycles that re-process the pre-Order-2023 backlog, plus the reopened steady-state cycles (C01+). Served as-reported, project by project, with PJM's full 44-column structure: the cluster
cycleandstage(phase / decision point), the developer, the requested megawatts (requested_max_output_mw = MFO, requested_summer_mw = MW Capacity / summer, requested_winter_mw = MW Energy / winter), the phased System-Impact-Study report URLs and statuses, and lifecycle dates. This is a REQUEST, not built capacity — historically most queued MW withdraws — so every requested_* MW is named as a request and never summed as operating capacity. PJM ALSO reports in_service_mw (realized built MW) and ltf_mw (long-term firm transmission MW), carried under their own names. This is a DIFFERENT publication from PJM's full New Services queue (power.interconnection_queue_pjm, the legacy serial + transition waiting line) — the two share rows but are never merged or summed. PJM carries no county_fips/lat-lon (derived by name, null otherwise) and no load/data-center type (never inferred).
Does not answer:
built/operating/nameplate capacity as a cycle total (requested_* MW is REQUESTED; for operating capacity use power.capacity / EIA-860M; in_service_mw is the only built figure here, per-project)a sum of requested MW treated as planned or operating capacity (most queued MW withdraws — requested totals are labeled, never read as built)a combined total across PJM's two queue publications (this cluster grid and the New Services queue power.interconnection_queue_pjm share rows; never summed or deduped across them)a cross-ISO or national queue total (methodologies differ per ISO — for the MISO queue use query_power_interconnection_queue_v1, for the CAISO queue use query_power_interconnection_queue_caiso_v1)which projects are data-center- or load-driven (PJM reports no load/data-center type; that inference is the analyst's)generation MWh, demand, prices, retail sales, or transmission flowslat/lon or plant-level attribution (only state, as-reported county, and derived county_fips)queues for other ISOs/RTOs — each is a separate block under the same gate
REST Surface
GET /v1/healthGET /v1/capabilitiesGET /v1/power/interconnection-queue-pjm-cycle/schemaPOST /v1/power/interconnection-queue-pjm-cycle/queryPOST /v1/evidence/source-row
MCP Surface
list_capabilities_v1describe_power_interconnection_queue_pjm_cycle_v1query_power_interconnection_queue_pjm_cycle_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:
as_ofcyclestagestatusstatecounty_fipsproject_typecapacity_or_energyfueldevelopertransmission_ownersubmitted_date
Group by:
cyclestagestatusstatecounty_fipsproject_typecapacity_or_energyfueldevelopertransmission_owneris_hybrid
Date range parameters:
submitted_date_fromsubmitted_date_to
Controls:
include_recordsinclude_evidencelimitorder_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": [
"requested_max_output_mw",
"requested_summer_mw",
"requested_winter_mw",
"in_service_mw",
"ltf_mw",
"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"
}
}
Output Schema
Aggregate metrics:
requested_max_output_mwrequested_summer_mwrequested_winter_mwin_service_mwltf_mwsource_record_count
Metric groups:
{
"built_mw": [
"in_service_mw"
],
"records": [
"source_record_count"
],
"requested_mw": [
"requested_max_output_mw",
"requested_summer_mw",
"requested_winter_mw"
],
"transmission_mw": [
"ltf_mw"
]
}
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 |
|---|---|---|---|---|---|---|
requested_max_output_mw |
requested_mw | MW | sum | true | summary.totals.requested_max_output_mw |
The project's Maximum Facility Output (MFO) — the headline requested size. |
requested_summer_mw |
requested_mw | MW | sum | true | summary.totals.requested_summer_mw |
The project's requested Capacity interconnection (summer net) MW. |
requested_winter_mw |
requested_mw | MW | sum | true | summary.totals.requested_winter_mw |
The project's requested net winter MW (a winter MW figure, not MWh). |
in_service_mw |
built_mw | MW | sum | true | summary.totals.in_service_mw |
The realized BUILT MW once the project is in service (not a request). |
ltf_mw |
transmission_mw | MW | sum | true | summary.totals.ltf_mw |
The long-term firm transmission MW for transmission requests in the cycle grid. |
source_record_count |
records | count | count source records | true | summary.totals.source_record_count |
Count of cluster-cycle projects in the current result scope (one atom = one PJM project). |
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.
Detail record fields returned when include_records is true:
source_idsheet_nameisoproject_idproject_id_rawcyclestagestatestate_rawcountycounty_fipscounty_fips_sourcecounty_fips_unresolvedfuelis_hybridnamecommercial_namedeveloperstatusproject_typetransmission_ownercapacity_or_energyrights_mwwithdrawn_remarksphase1_sis_reportphase1_sis_report_statusphase2_sis_reportphase2_sis_report_statusphase3_sis_reportphase3_sis_report_statusfinal_sis_reportfinal_sis_report_statusepa_gia_wmpa_reportepa_gia_wmpa_report_statuscsa_usca_reportcsa_usca_report_statustransmission_typetsr_idrequested_max_output_mwrequested_summer_mwrequested_winter_mwin_service_mwltf_mwsubmitted_daterequested_in_service_dateactual_in_service_datecommercial_operation_milestonebackfeed_datetest_energy_datelast_updatedwithdrawn_datetsr_start_datetsr_end_datereport_periodsource_record_keysource_row_numberas_ofraw_file_sha256citation
Row-level citation fields:
source_idsource_urlsource_filesheetsource_rowraw_file_sha256as_of
Aggregate citation fields:
source_idpublishersource_urlsource_fileraw_file_sha256as_ofsource_rows_countsource_rows_sampleverifylineage_filter
Codebooks
| Field | Coverage | Codes | Examples | Note |
|---|---|---|---|---|
cycle |
the distinct cycle values observed in the served snapshot | 3 | TC1 = Transition Cycle 1 (legacy backlog over the network-upgrade threshold), TC2 = Transition Cycle 2 (remaining legacy backlog), C01 = Cycle 1 — the first reopened steady-state cluster cycle |
TC1/TC2 are the transition cycles re-processing the pre-Order-2023 serial backlog; C01+ are the reopened STEADY-STATE cycles (the new intake). Filter cycle=C01 for the newest reopened-queue projects. Each cycle is studied as a cluster, not first-come serial. |
status |
the distinct status values observed in the served snapshot | 5 | Active = Active — a live request still in the cluster, Withdrawn = Withdrawn — left the queue (the grid is withdrawn-dominated), EP = Engineering & Procurement, UC = Under Construction, UC-ISP = Under Construction — In-Service Pending |
ALWAYS scope by status — the grid is withdrawn-dominated. Active is the live pipeline; EP = engineering & procurement; UC/UC-ISP = under construction; Withdrawn left the queue. Requested MW is never built — for built MW use the in_service_mw field or query_power_capacity_v1. |
fuel |
the distinct fuel values observed in the served snapshot | 6 | Solar = Solar, Storage = Storage, Natural Gas = Natural gas, Wind = Wind, Offshore Wind = Offshore wind |
Filter fuel by PJM's EXACT value (e.g. Natural Gas, Solar, Storage). Multi-tech projects are COMMA-joined with PJM's own Hybrid tag, e.g. Solar,Storage,Hybrid (flagged is_hybrid) — note this differs from the New Services queue feed's ';'-join. |
The complete machine-readable codebooks are included in capability-schema.json.
Checked Examples
| Agent question | Request params | Checked output |
|---|---|---|
| How many projects are in each PJM cluster cycle (TC1/TC2 transition vs the reopened C01)? | {"group_by": ["cycle"]} |
pjm-cycle-by-cycle.json |
| Which states have the most requested interconnection capacity in PJM's cluster cycles? | {"group_by": ["state"], "order_by": "requested_max_output_mw", "top_n": 10} |
requested-mw-by-state.json |
| What fuels are the active PJM cluster-cycle requests, and how much capacity? | {"group_by": ["fuel"], "status": "Active"} |
active-requests-by-fuel.json |
| Return one PJM reopened-cycle (C01) project with a row-level citation. | {"cycle": "C01", "include_records": true, "limit": 1} |
cycle-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.interconnection_queue_pjm_cycle. - Call
describe_power_interconnection_queue_pjm_cycle_v1to inspect valid filters, groupings, metrics, and citation fields. - Call
query_power_interconnection_queue_pjm_cycle_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.