Skip to main content
Glama

entsoe-mcp

Get a time series

get_series
Read-onlyIdempotent

Generic 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.

Outage-family endpoints (different schema) stay on get_outages().

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tzNo
endYes
zoneNo
startYes
to_zoneNo
endpointYes
from_zoneNo
psr_typesNo
aggregationNoraw

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint/idempotentHint annotations: it explains inclusive/exclusive time ranges, UTC default, tz interpretation, aggregation semantics (AVG over quarters, SUM over-counting 4× for day-ahead prices), and per-endpoint native resolution. These are exactly the behavioral nuances an agent needs to avoid incorrect calls.

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

Conciseness5/5

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

Despite its length, the description is densely informative and well-structured: purpose first, then endpoint shapes as bullets, then time semantics, then aggregation rules. Bullets and short examples make the long content skimmable, and nearly every sentence adds necessary value given the schema provides nothing.

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

Completeness5/5

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

For a complex, polymorphic 9-parameter tool with zero schema-level documentation, the description is remarkably complete. It covers all parameter families, gives concrete endpoint examples, explains timezone edge cases, and warns about aggregation pitfalls. The output schema exists, so return-value documentation is unnecessary, and the pointer to list_endpoints() covers endpoint discovery.

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

Parameters5/5

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

With schema description coverage at 0%, the description carries the full burden—and it delivers. Every parameter is explained with meaning and examples: endpoint shapes for zone/from_zone/to_zone, optional psr_types filtering, start/end inclusivity, tz semantics, and aggregation options plus caveats. This is exemplary compensation for an empty schema.

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?

The description leads with a specific, unambiguous statement: 'Generic time-series query for ANY registered series endpoint.' It further clarifies scope by excluding outages and pointing to list_endpoints() for the current registry. This clearly distinguishes the tool's breadth from more specialized siblings.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use guidance: any non-outage series endpoint, with get_outages() called out as the alternative for outage data. It also explains endpoint-shape selection (zone vs. from_zone/to_zone, psr_types). However, it does not address the dedicated sibling tools like get_load or get_day_ahead_prices, so an agent could be uncertain whether to prefer this generic tool or its specialized siblings.

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.

Resources