Get a time series
get_seriesGeneric time-series query for ANY registered series endpoint.
One tool covers every (non-outage) endpoint in the registry, so adding
a new dataset (call list_endpoints() to see the current 14) gets an
MCP surface automatically — no new tool to learn.
Argument shape adapts to the endpoint:
• single-zone (day_ahead_price, actual_load, generation_per_type, …)
→ pass zone="DE_LU"
• cross-zone (crossborder_flow, scheduled_exchanges,
net_transfer_capacity_dayahead)
→ pass from_zone="DE_LU" AND to_zone="FR"
• psr-dependent (generation_per_type, wind_solar_forecast,
installed_generation_capacity)
→ optionally filter via psr_types=["solar","wind_onshore"]
start/end: UTC by default; start inclusive, end EXCLUSIVE
(for "all of April 2026" use end=2026-05-01). Pass tz="local" or an
IANA name to interpret as wall-clock in that timezone.
aggregation: 'raw' (default — native PT15M/PT60M per endpoint),
'hourly' (AVG over quarters → one row per hour, useful for the
growing list of PT15M-stored endpoints like DE_LU day_ahead_price),
'daily', or 'monthly'. For day-ahead prices specifically the auction
still clears hourly even where stored at PT15M, so AVG=any-quarter;
SUM would 4× over-count.
Currency: price columns keep _eur_ in their names for stability. An
endpoint whose rows carry a currency column (day-ahead and intraday
prices, the A81/A15 capacity prices, activated_balancing_price,
imbalance_prices) labels each row (PLN, HUF, RON, CZK, GBP, …) and the
response unit follows it; unit is null when the window mixes
currencies (mixed_currency) or, for activated_balancing_price and
imbalance_prices, holds rows of unknown currency
(currency_unknown_rows). Never average a price across rows with
different currency.
Split periods: when a response carries split_periods, some periods hold
more than one row — different published series told apart by the listed
columns (activated_balancing_price: product, e.g. CZ/SK mFRR standard
A01 vs specific A02; or currency). Never average across them. Keep one
with filters={"product": ["A01"]} — filters takes any categorical
column of the endpoint ({column: [values]}).
Process types: activated balancing prices are one endpoint per ENTSO-E
processType (activated_balancing_price = A16 realised; _mfrr_scheduled =
A60, _mfrr_direct = A61, _afrr_local = A68) — different prices for the
same period, never to be merged. related_series names the siblings
holding data for the zone.
Ended series: a window reaching past the day a series stopped upstream
(a zone that left ENTSO-E, a frozen archive, a series that ended) carries
series_ended — the last day, why, and successors: the endpoints that
carry it on, each with a ready call and a note on how it differs. GB
day-ahead after 2020-12-31 → day_ahead_price_imrp (GBP/MWh); GB
generation after 2021-06-15 → generation_mix (NESO).
Outage-family endpoints (different schema) stay on get_outages().
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tz | No | ||
| end | Yes | ||
| zone | No | ||
| start | Yes | ||
| filters | No | ||
| to_zone | No | ||
| endpoint | Yes | ||
| from_zone | No | ||
| psr_types | No | ||
| aggregation | No | raw |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||