Skip to main content
Glama

entsoe-mcp

get_derivation

Compute 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 list_derivations() — today: "capture_price", "negative_price_hours", "residual_load", "res_share", "emissions", "tb_spread".

tb_spread returns monthly (default) or annual (aggregation='annual') Top-Bottom spreads TB1/TB2/TB4/TB6 in EUR/MW per period — the sum of daily (top-x minus bottom-x hourly prices) over SDAC market days. The only slug accepting aggregation, and the only one accepting multi-zone zone ('all', a list, or CSV). Example — annual TB2 across every European market in ONE call: get_derivation("tb_spread", "2025-01-01", "2026-01-01", zone="all", aggregation="annual") For a single day's top/bottom hour TIMESTAMPS use get_tb_spread.

capture_price returns monthly rows per (zone, psr_type) with columns: capture_price_eur_per_mwh, baseload_price_eur_per_mwh, quality_factor (the capture rate = capture/baseload), total_gen_mwh, n_hours. Months are bucketed by local time using the zone's IANA timezone.

emissions returns monthly rows per (zone, psr_type) with columns: generation_mwh, n_hours, emission_factor_kg_per_mwh, emissions_t_co2. Production-based; IPCC AR5 lifecycle factors. Zero-emission rows (nuclear, wind, solar, hydro, geothermal, marine) appear with emissions_t_co2 = 0 — useful for stacked charts.

Filter via psr_types=["solar","wind_onshore","wind_offshore"] (or raw B-codes like "B16") to get only the technologies you care about. Defaults to all psr_types that have generation data.

Example — Spain solar capture price, last 12 months: get_derivation("capture_price", "2025-05-01", "2026-05-01", zone="ES", psr_types=["B16"], tz="Europe/Madrid") Example — Germany 2024 emissions by fuel: get_derivation("emissions", "2024-01-01", "2025-01-01", zone="DE_LU", tz="Europe/Berlin") Returns 12 monthly rows in one call; no pagination.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tzNolocal
endYes
slugYes
zoneNo
startYes
to_zoneNo
from_zoneNo
psr_typesNo
aggregationNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses server-side aggregation/no pagination, monthly vs annual aggregation, local-time bucketing via IANA timezone, production-based emission factors, and zero-emission row behavior. However, it does not disclose the behavior or return structure for negative_price_hours, residual_load, or res_share, leaving part of the tool opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured: purpose and use case first, then slug list, per-slug output details, filtering guidance, and two concrete examples. It is slightly repetitive ('no pagination' appears twice) and could be trimmed, but the verbosity is largely justified by the tool's 9 parameters and 6 slugs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter, 6-slug tool with no annotations and 0% schema coverage, this is a detailed definition. It covers required slugs, output columns for major slugs, date-range examples, filtering, timezone behavior, and an alternative tool. It remains incomplete for to_zone/from_zone and for three slugs' return semantics, though an output schema exists to fill return-shape gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It documents slug as an enum-like list, aggregation semantics, zone='all'/list/CSV behavior, psr_types friendly names or B-codes, and tz usage with rich examples. The main gap is that to_zone and from_zone appear in the schema but are never explained in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with specific verbs and resources: 'Compute capture price, capture rate, TBx battery-arbitrage spreads, and other generation-weighted market metrics server-side from landed Parquet.' It enumerates the exact slugs and explicitly contrasts itself with client-side price/generation weighting and with get_tb_spread, so an agent can distinguish it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit 'Use this instead of...' instruction for server-side aggregation with no row cap or pagination. It also names get_tb_spread as the correct alternative for single-day top/bottom hour timestamps and directs the agent to list_derivations() for valid slug keys. This makes when-to-use and when-not-to-use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.9/5.0
Disambiguation3/5

Several dedicated getters (get_day_ahead_prices, get_generation, get_load, get_crossborder_flow) overlap with the generic get_series, which explicitly covers the same endpoint families, creating some choice ambiguity. However, the tool names and cross-references like get_derivation vs get_tb_spread and compare_zones vs get_series help an agent distinguish the specific purpose of each tool. Overall there is real overlap, but the descriptions mostly steer an agent correctly.

Naming Consistency5/5

Tool names are lowercase snake_case and consistently follow verb-first patterns: get_ for data retrieval, list_ for reference/discovery, and compare_/data_ for cross-cutting utilities. No mixed casing or erratic verb styles appear. data_coverage is a minor pattern deviation but still reads naturally alongside the other names.

Tool Count5/5

Fourteen tools is well within the appropriate range for an ENTSO-E data platform: several list_ discovery tools, specialized getters, a generic get_series to prevent endpoint-specific tool explosion, plus data_coverage and compare_zones. The count feels comprehensive without being bloated, and the generic query tool keeps the surface scalable.

Completeness5/5

The tool surface covers the core read-only ENTSO-E workflows: endpoint discovery, zone/psr_type reference data, raw time-series via get_series, outages, cross-border flows, load, generation, prices, and server-side derivations. It also adds operational safeguards like data_coverage and analytical shortcuts like compare_zones and get_derivation. There are no obvious dead ends or missing lifecycle stages for the stated domain.

Resources