MCPサーバー

GridHub Electricity Market Data

io.github.jalcodev/gridhub
データ・分析 科学・工学 公開・接続可能 MCP 2026-07-28

このMCPでできること

Provides current and historical electricity prices, demand, generation, carbon intensity, grid-zone comparisons, and data freshness information.

get_history
Historical time series
Time series for one metric in one zone over a start/end window (Unix seconds). Rows are returned oldest-first and the 'limit' truncates from the OLDEST end, so a small limit over a wide window returns old data, not recent data — for 'the latest N points' set start close to now, or use get_latest / get_zone_brief for current values. Default window is the last 24h (last ~400 days for capacity, which is annual). Max window 31 days per call (400 for capacity); paginate with start/end for more. Metrics: price (wholesale, local currency per MWh), demand (MW), generation (per fuel, 'fuel' field set; % or MW depending on zone; GB and US-CAISO only), carbon-intensity (gCO2/kWh; GB only), interchange (net imports, MW), capacity (installed MW per fuel; European zones only). Authentication: send 'Authorization: Bearer <ghk_key>' on the MCP connection (free key, 500 requests/day, instant email signup at https://grid-hub.app/developers), or pay per call with x402 (USDC on Base) via the X-PAYMENT header. With no credentials, data tools run in free sample mode: real, current data but truncated (history capped at 50 rows; brief returns one context block). Sample results are clearly marked.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['zone', 'metric'], 'properties': {'end': {'type': 'integer', 'description': 'Window end, Unix seconds. Default: now.'}, 'zone': {'enum': ['US-CAISO', 'US-ERCOT', 'US-PJM', 'US-MISO', 'US-NYISO', 'US-ISONE', 'US-SPP', 'DE-LU', 'FR', 'ES', 'IT-NO', 'NL', 'BE', 'PL', 'SE-3', 'NO-2', 'DK-1', 'AT', 'CH', 'GB', 'AU-NSW', 'AU-QLD', 'AU-VIC', 'AU-SA', 'AU-TAS'], 'type': 'string', 'description': 'Zone id. US ISOs: US-CAISO, US-ERCOT, US-PJM, US-MISO, US-NYISO, US-ISONE, US-SPP. Europe: DE-LU, FR, ES, IT-NO, NL, BE, PL, SE-3, NO-2, DK-1, AT, CH. Great Britain: GB. Australia (NEM): AU-NSW, AU-QLD, AU-VIC, AU-SA, AU-TAS. Call list_zones for names, sources, currencies and licences.'}, 'limit': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': 'Max rows (default 200, max 1000 via MCP; sample mode caps at 50).'}, 'start': {'type': 'integer', 'description': 'Window start, Unix seconds. Default: end minus 24h.'}, 'metric': {'enum': ['price', 'demand', 'generation', 'carbon-intensity', 'interchange', 'capacity'], 'type': 'string', 'description': 'Which series to fetch.'}, 'api_key': {'type': 'string', 'description': "Optional GridHub API key (ghk_...). Prefer sending it as an 'Authorization: Bearer <key>' HTTP header on the MCP connection; use this argument only if your client cannot set headers. Without a key the tool runs in free sample mode (truncated output)."}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'properties': {'end': {'type': ['number', 'null']}, 'data': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'ts': {'type': ['number', 'null']}, 'fuel': {'type': ['string', 'null']}, 'unit': {'type': ['string', 'null']}, 'value': {'type': ['number', 'null']}, 'metric': {'type': ['string', 'null']}, 'source': {'type': ['string', 'null']}, 'resolution': {'type': ['string', 'null']}}}}, 'zone': {'type': ['string', 'null']}, 'count': {'type': ['number', 'null']}, 'start': {'type': ['number', 'null']}, 'metric': {'type': ['string', 'null']}, 'license': {'type': ['string', 'null']}, 'attribution': {'type': ['string', 'null']}}}
get_latest
Latest values for a zone
The most recent value of every metric one zone publishes (price and demand for every zone; generation by fuel for GB and US-CAISO; carbon intensity for GB; interchange where available), each with unit and timestamp. This is the right tool for 'what is the price/demand/carbon intensity in X right now'. Note: some European sources publish day-ahead prices, so the price timestamp can be up to ~36h in the future; use get_zone_brief for a strictly at-or-before-now value with historical context. Authentication: send 'Authorization: Bearer <ghk_key>' on the MCP connection (free key, 500 requests/day, instant email signup at https://grid-hub.app/developers), or pay per call with x402 (USDC on Base) via the X-PAYMENT header. With no credentials, data tools run in free sample mode: real, current data but truncated (history capped at 50 rows; brief returns one context block). Sample results are clearly marked.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['zone'], 'properties': {'zone': {'enum': ['US-CAISO', 'US-ERCOT', 'US-PJM', 'US-MISO', 'US-NYISO', 'US-ISONE', 'US-SPP', 'DE-LU', 'FR', 'ES', 'IT-NO', 'NL', 'BE', 'PL', 'SE-3', 'NO-2', 'DK-1', 'AT', 'CH', 'GB', 'AU-NSW', 'AU-QLD', 'AU-VIC', 'AU-SA', 'AU-TAS'], 'type': 'string', 'description': 'Zone id. US ISOs: US-CAISO, US-ERCOT, US-PJM, US-MISO, US-NYISO, US-ISONE, US-SPP. Europe: DE-LU, FR, ES, IT-NO, NL, BE, PL, SE-3, NO-2, DK-1, AT, CH. Great Britain: GB. Australia (NEM): AU-NSW, AU-QLD, AU-VIC, AU-SA, AU-TAS. Call list_zones for names, sources, currencies and licences.'}, 'api_key': {'type': 'string', 'description': "Optional GridHub API key (ghk_...). Prefer sending it as an 'Authorization: Bearer <key>' HTTP header on the MCP connection; use this argument only if your client cannot set headers. Without a key the tool runs in free sample mode (truncated output)."}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'properties': {'zone': {'type': ['string', 'null']}, 'license': {'type': ['string', 'null']}, 'metrics': {'type': ['object', 'null'], 'additionalProperties': {'type': ['object', 'null'], 'properties': {'ts': {'type': ['number', 'null']}, 'unit': {'type': ['string', 'null']}, 'value': {'type': ['number', 'null']}, 'resolution': {'type': ['string', 'null']}}}}, 'updated': {'type': ['number', 'null']}, 'attribution': {'type': ['string', 'null']}}}
get_map_snapshot
All zones right now
Current headline values for all 25 zones in one call — the cheapest way to compare zones (e.g. 'which European zone has the lowest price right now', 'rank US ISOs by demand'). Rebuilt every 5 minutes. Authentication: send 'Authorization: Bearer <ghk_key>' on the MCP connection (free key, 500 requests/day, instant email signup at https://grid-hub.app/developers), or pay per call with x402 (USDC on Base) via the X-PAYMENT header. With no credentials, data tools run in free sample mode: real, current data but truncated (history capped at 50 rows; brief returns one context block). Sample results are clearly marked.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {'api_key': {'type': 'string', 'description': "Optional GridHub API key (ghk_...). Prefer sending it as an 'Authorization: Bearer <key>' HTTP header on the MCP connection; use this argument only if your client cannot set headers. Without a key the tool runs in free sample mode (truncated output)."}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'properties': {'zones': {'type': ['object', 'null'], 'additionalProperties': {'type': ['object', 'null'], 'properties': {'zone': {'type': ['string', 'null']}, 'license': {'type': ['string', 'null']}, 'metrics': {'type': ['object', 'null'], 'additionalProperties': {'type': ['object', 'null'], 'properties': {'ts': {'type': ['number', 'null']}, 'unit': {'type': ['string', 'null']}, 'value': {'type': ['number', 'null']}, 'resolution': {'type': ['string', 'null']}}}}, 'updated': {'type': ['number', 'null']}, 'attribution': {'type': ['string', 'null']}}}}, 'generated': {'type': ['number', 'null']}}}
get_status
Data freshness
Ingestion health per source and zone: last successful fetch timestamp and last error, if any. Free. Use it to explain stale or missing values before drawing conclusions from them.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'properties': {'now': {'type': ['number', 'null']}, 'sources': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'zone': {'type': ['string', 'null']}, 'source': {'type': ['string', 'null']}, 'last_ok': {'type': ['number', 'null']}, 'last_error': {'type': ['string', 'null']}}}}}}
get_zone_brief
Zone brief (current state in context)
Composite, interpretation-ready snapshot of one zone: current price / demand / carbon intensity where published (strictly at-or-before now), each ranked against that zone's own last ~30 days (percentile, vs-median %, min/max, sample count and the actual data window), a 24h trend per metric, the generation mix where published (GB, US-CAISO), and a one-sentence plain-English summary. Best tool for questions like 'is electricity cheap/clean in X right now' or 'is this a good time to run a flexible workload'. A raw price means little without this context. Authentication: send 'Authorization: Bearer <ghk_key>' on the MCP connection (free key, 500 requests/day, instant email signup at https://grid-hub.app/developers), or pay per call with x402 (USDC on Base) via the X-PAYMENT header. With no credentials, data tools run in free sample mode: real, current data but truncated (history capped at 50 rows; brief returns one context block). Sample results are clearly marked.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['zone'], 'properties': {'zone': {'enum': ['US-CAISO', 'US-ERCOT', 'US-PJM', 'US-MISO', 'US-NYISO', 'US-ISONE', 'US-SPP', 'DE-LU', 'FR', 'ES', 'IT-NO', 'NL', 'BE', 'PL', 'SE-3', 'NO-2', 'DK-1', 'AT', 'CH', 'GB', 'AU-NSW', 'AU-QLD', 'AU-VIC', 'AU-SA', 'AU-TAS'], 'type': 'string', 'description': 'Zone id. US ISOs: US-CAISO, US-ERCOT, US-PJM, US-MISO, US-NYISO, US-ISONE, US-SPP. Europe: DE-LU, FR, ES, IT-NO, NL, BE, PL, SE-3, NO-2, DK-1, AT, CH. Great Britain: GB. Australia (NEM): AU-NSW, AU-QLD, AU-VIC, AU-SA, AU-TAS. Call list_zones for names, sources, currencies and licences.'}, 'api_key': {'type': 'string', 'description': "Optional GridHub API key (ghk_...). Prefer sending it as an 'Authorization: Bearer <key>' HTTP header on the MCP connection; use this argument only if your client cannot set headers. Without a key the tool runs in free sample mode (truncated output)."}}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'properties': {'zone': {'type': ['string', 'null']}, 'as_of': {'type': ['number', 'null']}, 'context': {'type': ['object', 'null'], 'additionalProperties': {'type': ['object', 'null'], 'properties': {'max': {'type': ['number', 'null']}, 'min': {'type': ['number', 'null']}, 'unit': {'type': ['string', 'null']}, 'median': {'type': ['number', 'null']}, 'percentile': {'type': ['number', 'null']}, 'sample_count': {'type': ['number', 'null']}, 'vs_median_pct': {'type': ['number', 'null']}, 'window_days_actual': {'type': ['number', 'null']}}}}, 'current': {'type': ['object', 'null'], 'additionalProperties': {'type': ['object', 'null'], 'properties': {'ts': {'type': ['number', 'null']}, 'unit': {'type': ['string', 'null']}, 'value': {'type': ['number', 'null']}}}}, 'license': {'type': ['string', 'null']}, 'summary': {'type': ['string', 'null']}, 'zone_name': {'type': ['string', 'null']}, 'attribution': {'type': ['string', 'null']}, 'coverage_note': {'type': ['string', 'null']}, 'context_window_requested_days': {'type': ['number', 'null']}}}
list_zones
List zones
List the 25 electricity grid zones GridHub covers, with id, name, data source (EIA, ENTSO-E, NESO, AEMO), timezone, currency, licence and required attribution. Free, no credentials needed. Call this first if you are unsure which zone id to use.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}, 'additionalProperties': False}
出力スキーマ
{'type': 'object', 'properties': {'zones': {'type': ['array', 'null'], 'items': {'type': ['object', 'null'], 'properties': {'id': {'type': ['string', 'null']}, 'tz': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'source': {'type': ['string', 'null']}, 'license': {'type': ['string', 'null']}, 'currency': {'type': ['string', 'null']}, 'attribution': {'type': ['string', 'null']}}}}}}
変更
get_map_snapshot
2026年9月29日2:52
変更
get_history
2026年9月29日2:52
変更
get_zone_brief
2026年9月29日2:52
変更
get_latest
2026年9月29日2:52
変更
get_status
2026年9月29日2:52
変更
list_zones
2026年9月29日2:52
追加
get_map_snapshot
2026年9月17日12:42
追加
get_history
2026年9月17日12:42
追加
get_zone_brief
2026年9月17日12:42
追加
get_latest
2026年9月17日12:42
追加
get_status
2026年9月17日12:42
追加
list_zones
2026年9月17日12:42