@pipeworx/pjm
Connect: https://gateway.pipeworx.io/pjm/mcp · Install: one-click buttons
No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.
Tools: 4
PJM Interconnection market data via Data Miner 2 — real-time LMPs, generation by fuel type and the seven-day load forecast for the largest US grid operator (13 states + DC, ~65 million people, Illinois to New Jersey).
Tools
pjm_feeds(feed?, row_count?, start_row?)— list the Data Miner 2 feed catalog, or fetch ANY feed by exact name (da_hrl_lmps,inst_load, …). The escape hatch for the hundreds of PJM feeds without a dedicated tool here.pjm_lmp_realtime(pnode_id?, pnode_name?, datetime_beginning_ept?, row_count?)— five-minute real-time LMP with congestion and loss components.pjm_load_forecast(forecast_area?, row_count?)— seven-day hourly load forecast by transmission zone and RTO total.pjm_generation_fuel_mix(fuel_type?, datetime_beginning_ept?, row_count?)— MW and percentage of total by fuel type.
Auth
BYO only today. Ocp-Apim-Subscription-Key header (Azure API Management).
Platform fallback env var — not provisioned: PLATFORM_PJM_KEY.
A key is free but requires registering an account at https://apiportal.pjm.com/ and subscribing that account to the Data Miner 2 product. Those are two steps: a registered key that is not subscribed to the feed is refused identically to no key at all, which is why the pack’s 401 message names the subscription explicitly rather than just saying “bad key”.
Until the key lands, every tool refuses with a message containing
requires an API key, and the pack is marked byoExpected: true in
workers/gateway/src/pack-manifest.json so the vendor-key ratchet does not fail
the deploy. Drop byoExpected the day PLATFORM_PJM_KEY is provisioned.
Data sources
- https://dataminer2.pjm.com/ — the browser UI over the same feeds.
- https://api.pjm.com/api/v1/ — the API. Documented envelope:
{ "totalRows": N, "items": [...], "links": [...] }.
Traps
- Response shapes here are UNVERIFIED. Holding no key, no PJM response body
in this pack has been observed live. The pack normalizes the documented
{totalRows, items, links}envelope and returnsitemsas published, without renaming or reshaping individual fields. That is deliberate: a field mapping invented from documentation we could not exercise is a silent-wrong- answer waiting to happen, and returning upstream rows untouched is honest about what we actually know. Tighten this once a key exists and the real payload can be read. - A 401 here tells you almost nothing. Verified 2026-09-17:
api.pjm.comanswers 401 with an empty body and noWWW-Authenticateheader, both with no key and with a syntactically valid but unregistered one. So 401 cannot distinguish “no key” from “wrong key” from “key not subscribed to this feed”. The pack says so in the error rather than guessing at a cause. format=jsonis not the default — Data Miner 2 defaults to another representation. This pack always sets it.- Times are Eastern Prevailing Time (EPT — shifts with DST), and the range
filter uses Data Miner’s own
"M/D/YYYY HH:MM to M/D/YYYY HH:MM"syntax, not ISO-8601. - A 200 with 0 rows is treated as an error, not an empty success: it almost always means the date filter fell outside the feed’s published range.
Tools
- pjm_feeds — List the feeds published by PJM Data Miner 2 — the catalog of every market-data dataset PJM exposes (LMPs, load, generation, ancillary services, capacity, transmission). Returns each feed’s name and m
- pjm_lmp_realtime — PJM real-time five-minute locational marginal prices (LMP $/MWh) by pricing node, with the total price and its congestion and marginal-loss components. PJM is the largest US grid operator (13 states +
- pjm_load_forecast — PJM seven-day load forecast — forecast electricity demand in MW by forecast area (each transmission zone plus the RTO total), hour by hour. Use for “what will PJM demand be tomorrow”, “PJM peak for
- pjm_generation_fuel_mix — PJM generation by fuel type — MW generated and percentage of total from coal, natural gas, nuclear, wind, solar, hydro, oil, storage and other, per published interval. Use for “what is PJM burning rig
Tools
pjm_feeds— List the feeds published by PJM Data Miner 2 — the catalog of every market-data dataset PJM exposes (LMPs, load, generation, ancillary services, capacity, transmission). Returns each feed's name and mpjm_generation_fuel_mix— PJM generation by fuel type — MW generated and percentage of total from coal, natural gas, nuclear, wind, solar, hydro, oil, storage and other, per published interval. Use for what is PJM burning righpjm_lmp_realtime— PJM real-time five-minute locational marginal prices (LMP $/MWh) by pricing node, with the total price and its congestion and marginal-loss components. PJM is the largest US grid operator (13 states +pjm_load_forecast— PJM seven-day load forecast — forecast electricity demand in MW by forecast area (each transmission zone plus the RTO total), hour by hour. Use for what will PJM demand be tomorrow , PJM peak forecast