entsoe-mcp
European power-market data: day-ahead & balancing prices, load, generation, flows, outages. 47 zones
Connect it
Settings → Connectors → Add custom connector
URL: https://entsoemcp.com/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://entsoemcp.com/mcp{
"mcpServers": {
"entsoe-mcp": {
"url": "https://entsoemcp.com/mcp"
}
}
}claude mcp add --transport http entsoe-mcp https://entsoemcp.com/mcp{
"servers": {
"entsoe-mcp": {
"type": "http",
"url": "https://entsoemcp.com/mcp"
}
}
}14 tools, verified live
list_zonesread-onlyList registered ENTSO-E bidding zones.
list_endpointsread-onlyList supported ENTSO-E endpoint families.
list_psr_typesread-onlyList production-type (psr_type) codes. Pass zone= to scope the answer. Most codes are ENTSO-E's B01..B25 and mean the same thing in every ENTSO-E zone. A few are source-native (source != "entsoe") and exist only where that source publishes â they express concepts the B-codes cannot, so they are NOT interchangeable with a similar-looking B-code. Check `source` and read `description` before compa
get_seriesread-onlyGeneric 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"`
get_day_ahead_pricesread-onlyDay-ahead clearing price for a bidding zone, in the zone's trading currency (EUR for euro zones; the per-row `currency` column and the response `unit` say which â GB=GBP, PL/RO/BG carry local-currency eras). `start`/`end` default to UTC; `start` inclusive, `end` EXCLUSIVE. For 'all of April 2026' use start=2026-04-01, end=2026-05-01 (end=2026-04-30 silently drops the final UTC day â and 1â2
get_tb_spreadread-onlyTop-Bottom (TBx) spread â daily battery-arbitrage benchmark. TBx = sum(top X priced hours) â sum(bottom X priced hours) over the day-ahead clearing prices for `zone` on `date`. The day is the SDAC market day (23/25 hours on DST-transition days). `date` must be a bare YYYY-MM-DD â time-bearing strings are rejected. Returns both `spread` (<currency>/MW/day) and `mean_spread` (<currency>/MWh =
get_loadread-onlyActual or forecast load (MW). kind = actual | forecast | both. `start`/`end` default to UTC; `start` inclusive, `end` EXCLUSIVE. For a full calendar month set `end` to the first day of the next month. Pass `tz="local"` or an IANA name to interpret start/end as wall-clock in that timezone.
get_generationread-onlyAggregated generation (MW) per production type. `start`/`end` default to UTC; `start` inclusive, `end` EXCLUSIVE. For a full calendar month set `end` to the first day of the next month. Pass `tz="local"` or an IANA name to interpret start/end as wall-clock in that timezone. If you're computing a **generation-weighted** price metric â capture price, capture rate, value factor, merchant-PPA achi
get_crossborder_flowread-onlyCross-border physical flow (MW) between two adjacent zones. `start`/`end` default to UTC; `start` inclusive, `end` EXCLUSIVE. `tz="local"` uses the FROM-zone's timezone; or pass an IANA name.
get_outagesread-onlyGeneration-unit unavailability events (UMM). `start`/`end` default to UTC; `start` inclusive, `end` EXCLUSIVE. An outage is returned if it overlaps the window. Pass `tz="local"` or an IANA name to interpret start/end as wall-clock in that timezone.
compare_zonesread-onlyCompare one endpoint across multiple zones. `start`/`end` default to UTC; `start` inclusive, `end` EXCLUSIVE. `tz="local"` is rejected (zones may differ); pass an explicit IANA tz like "Europe/Berlin" if you need wall-clock alignment. `filters={column: [values]}` keeps only rows whose categorical column holds one of the values, in every zone (see get_series); zones whose periods hold several rows
data_coverageread-onlyShow ingest coverage and lag for (endpoint à zone) â call before queries if you're not sure whether the data is landed yet.
list_derivationsread-onlyList computed-metric derivations available via get_derivation(). Each derivation is a metric computed on-the-fly from one or more landed endpoints (Tier-2 Parquet). Today: capture_price (monthly VWAP capture price + baseload + capture rate per technology; "capture rate" is the industry-standard name for what the JSON response calls `quality_factor`), negative_price_hours, residual_load, res_share
get_derivationread-onlyCompute **capture price**, **capture rate** (a.k.a. value factor / quality factor / Marktwertfaktor), **TBx battery-arbitrage spreads**, and other generation-weighted market metrics server-side from landed Parquet. Use this instead of fetching hourly prices + hourly generation yourself and weighting them client-side â server-side aggregation has no row cap and no pagination. `slug`: a key from
Alternatives in Other
Compare →JIJitsuA
Manage Jitsu data pipelines: destinations, streams, connections, functions, live events.
NRNew Relic MCP ServerOfficialA
Access New Relic observability data through MCP - query metrics, logs, traces, entities, and more
OSOpenCaseLaw — Swiss Caselaw, Statutes & DoctrineA
1M+ Swiss court decisions, statutes & doctrine with citation graph (DE/FR/IT). CC0, free, 42 tools.
BCBusiness Contact FinderA
Check how to contact a business website, and whether that contact path actually works.
DLDomain LivenessA
Is this business's website still there? Checks apex and www, and DNS separately from HTTP.
CAContact AffordanceA
Check how to contact a business website, and whether that contact path actually works.