REE MCP Server
The REE MCP Server enables natural language conversations with Claude to access and analyze Spain's electrical grid data from Red Eléctrica de España (REE), covering real-time operations, historical analysis, and market intelligence.
Core Data Access
Search and retrieve data from 1,967+ electricity indicators using keywords
Get time-series data with customizable granularity (5-minute raw, 15-minute, hourly, or daily)
Browse available indicators with pagination support
Real-Time Grid Monitoring
Query current electricity demand with forecasts and min/max values
View generation mix breakdown by source (nuclear, wind, solar, hydro, coal, gas, etc.)
Track international exchanges (imports/exports) with France, Portugal, Morocco, and Andorra
Monitor renewable energy generation (wind, solar, hydro) and their percentage of total mix
Assess grid stability by comparing synchronous vs variable renewable generation
Environmental Analysis
Calculate and track carbon intensity (gCO₂/kWh) to assess grid cleanliness
Identify periods with lowest emissions
Monitor renewable energy trends and contribution
Market & Pricing
Analyze SPOT market electricity prices with statistics and multi-country comparisons
Identify cheapest consumption hours for optimal timing
Study price correlations with generation mix and demand patterns
Energy Storage
Monitor pumped storage operations (pumping vs turbining)
Calculate storage efficiency and identify arbitrage opportunities
Forecasting & Accuracy
Compare forecasted vs actual demand with accuracy metrics (MAE, RMSE, error rates)
Evaluate prediction performance across time periods
Historical Analysis & Event Investigation
Investigate grid events, anomalies, and critical incidents like blackouts
Analyze peak demand patterns with load factors
Track generation mix evolution over time
Compare periods (year-over-year, weekday vs weekend)
Detect unusual activity in the electrical grid
Conversational Intelligence
Ask questions in natural language without knowing technical API details or indicator IDs
Receive contextual analysis with meaningful insights
Combine multiple metrics for comprehensive analysis
Source code hosted on GitHub with CI/CD workflows and issue tracking for community contributions
Built using Python 3.11+ with async/await support, type checking with mypy, and code formatting with ruff
Educational content and tutorials available on the JavadexAI YouTube channel for learning AI implementation
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@REE MCP Servershow me Spain's current electricity demand and generation mix"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
⚡ REE MCP Server
Habla con la red eléctrica española a través de Claude - sin conocimientos técnicos
Pregunta a Claude sobre demanda, generación, precios y emisiones de electricidad en España usando lenguaje natural. Él se encarga de todos los detalles técnicos.
Construido con Domain-Driven Design y Clean Architecture por Javi Santos - Especialista en IA y Robótica con investigación publicada en visión por computador e interpretabilidad de LLMs.
💡 ¿Quieres aprender a construir proyectos así? Únete a La Escuela de IA - la comunidad donde aprenderás IA práctica, sin humo, con ejemplos reales en español.
🎯 ¿Qué Hace Este Servidor?
Red Eléctrica de España (REE) gestiona la red eléctrica española 24/7, publicando datos cada 5 minutos. Este servidor MCP hace esos datos accesibles mediante conversación natural con Claude.
El Poder de Conversaciones con Datos Reales
Por Javi Santos
En lugar de escribir scripts de Python, imagina conversaciones como esta:
Tú: "Comprueba qué pasó el 28 de abril de 2025"
Claude: Analiza datos de la red...
🚨 EVENTO CRÍTICO DETECTADO - 28 de Abril de 2025 a las 12:35h
Colapso Masivo de la Red:
11.000 MW perdidos en 5 minutos (caída del 43% de capacidad)
El sistema cayó de 25.184 MW → 14.185 MW instantáneamente
Compatible con escenario de apagón en cascada
La recuperación tardó más de 10 horas
Análisis:
11:00-12:30: Sistema estable, sin avisos previos
12:30-12:35: Fallo catastrófico instantáneo
12:35-13:35: Degradación continua hasta mínimo de 9.635 MW
Causa probable: Disparo de planta nuclear → colapso de frecuencia → cascada
Este sería uno de los peores apagones de España en la historia moderna.
Ese es el poder de este servidor. Investiga eventos en la red, analiza tendencias renovables vs fósiles, correlaciona precios con demanda, o sigue la descarbonización de España - todo mediante conversación natural.
Sin documentación de API. Sin scripts. Solo pregunta.
Related MCP server: fronius-mcp
🚀 Instalación (3 minutos)
1️⃣ Clonar e Instalar
# Clonar el repositorio
git clone https://github.com/ESJavadex/ree-mcp.git
cd ree-mcp
# Instalar uv (gestor rápido de paquetes Python)
curl -LsSf https://astral.sh/uv/install.sh | sh
# O en macOS: brew install uv
# Crear entorno virtual e instalar
uv venv
source .venv/bin/activate # En Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"2️⃣ Configurar Token de API
# Copiar el archivo de ejemplo (incluye token demo)
cp .env.example .env
# Editar .env si necesitas tu propio token
# REE_API_TOKEN=tu_token_aquiObtener Token:
Pruebas/Demo: Ya incluido en
.env.exampleProducción: Email a consultasios@ree.es
3️⃣ Añadir a Claude Code
# Ejecutar el script de instalación
./INSTALL_COMMAND.sh
# Verificar
claude mcp listDeberías ver ree-mcp: ✓ Connected.
4️⃣ ¡Listo! Empieza a Preguntar
Abre Claude Code y prueba:
"Muéstrame la demanda eléctrica actual de España"
"¿Cuál es el mix de generación ahora?"
"Compara generación solar vs eólica hoy"
💬 ¿Qué Puedes Preguntar?
📊 Operaciones en Tiempo Real
"¿Cuál es la demanda eléctrica de España ahora mismo?"
"Muéstrame el mix de generación al mediodía"
"¿Cuánta energía exportó España ayer?"
"Compara la demanda de hoy con la semana pasada"
"¿Qué está generando cada central ahora? (nuclear, eólica, solar...)"
🔍 Investigación y Análisis de Eventos
"Investiga qué pasó el 28 de abril de 2025"
"¿Hubo actividad inusual en la red el mes pasado?"
"Encuentra el día de pico de demanda este año y explica por qué"
"Analiza la correlación entre generación eólica y precios"
"Detecta patrones anómalos en la última semana"
"¿Cuándo fue la última vez que hubo un apagón o evento crítico?"
🌱 Energías Renovables y Emisiones
"¿Cuánta energía solar está generando España?"
"Compara generación renovable vs fósil esta semana"
"¿Cuáles son las emisiones de CO₂ actuales? (gCO₂/kWh)"
"Muéstrame la tendencia de energía eólica en los últimos 30 días"
"¿Qué porcentaje de la demanda viene de renovables?"
"¿Cuándo fue el día más limpio (menos CO₂) este mes?"
💰 Análisis de Precios y Mercado
"¿Cuál es el precio SPOT de electricidad ahora?"
"Encuentra las horas más baratas para consumir electricidad hoy"
"Compara tarifas PVPC entre días laborables y fines de semana"
"¿Cuándo fue la electricidad más cara este mes? ¿Por qué?"
"Muéstrame la correlación entre precios y generación renovable"
⚙️ Estabilidad de Red y Almacenamiento
"¿Cómo está la estabilidad de la red ahora? (inercia síncrona vs renovable variable)"
"¿Se están usando las centrales de bombeo para almacenar energía?"
"Muéstrame los flujos de importación/exportación con Francia y Portugal"
"¿Cuándo bombea agua la red y cuándo la turbina?"
🔎 Descubrimiento de Datos
"Busca todos los indicadores relacionados con 'nuclear'"
"¿Qué datos hay disponibles sobre generación hidroeléctrica?"
"Muéstrame todos los indicadores de precios"
"Lista los indicadores disponibles de emisiones y sostenibilidad"
📈 Comparativas y Tendencias
"Compara la demanda de este mes vs el mismo mes del año pasado"
"¿Cómo ha evolucionado la generación solar en los últimos 6 meses?"
"Muéstrame el balance neto de exportación/importación del último mes"
"¿Cuándo alcanzamos el pico histórico de generación renovable?"
Claude usa automáticamente las herramientas correctas, obtiene los datos y los presenta en contexto con análisis detallado.
🎓 Aprende a Construir Proyectos como Este
Este proyecto fue creado por Javi Santos, Especialista en IA y Robótica con investigación publicada en:
🔬 Detección de gasas quirúrgicas usando Redes Neuronales Convolucionales
🧠 Interpretabilidad de Modelos de Lenguaje en escenarios de conocimiento diverso
📚 La Escuela de IA
¿Quieres aprender IA sin humo y construir proyectos como este?
Únete a La Escuela de IA - la comunidad española de aprendizaje de IA donde encontrarás:
🎯 Práctica real - Construye proyectos reales de IA, no ejemplos de juguete
🇪🇸 Contenido en español - Por fin, educación en IA en tu idioma
🛠️ Recursos prácticos - Código, tutoriales y ejemplos hands-on
👥 Comunidad activa - Aprende con otros entusiastas de la IA hispanohablantes
📺 Canal de YouTube
Suscríbete a JavadexAI para:
🎥 Tutoriales de IA y recorridos de proyectos
💡 Aplicaciones de LLMs y servidores MCP
🚀 Estrategias de implementación de IA en el mundo real
🤝 Conecta
LinkedIn: Javi Santos
YouTube: @JavadexAI
Escuela de IA: skool.com/la-escuela-de-ia-9955
🔥 Características Técnicas
✅ Listo para Producción
Reintentos automáticos con backoff exponencial
Manejo exhaustivo de errores y validación
Async/await para rendimiento óptimo
96 tests exhaustivos con 90% cobertura
🏗️ Arquitectura Robusta
Domain-Driven Design - Lógica de negocio pura
Clean Architecture - Separación clara de responsabilidades
Principios SOLID - Código mantenible y extensible
Type Safety - 100% tipado con mypy modo estricto
📊 Datos Completos
Acceso a 1.967+ indicadores de REE
Datos cada 5 minutos en tiempo real
Histórico completo disponible
14 herramientas MCP especializadas
🤝 Contribuir
¡Las contribuciones son bienvenidas! Ver CLAUDE.md para guía detallada de desarrolladores.
Este código sigue principios arquitectónicos estrictos:
Domain-Driven Design
Clean Architecture
Principios SOLID
Testing exhaustivo
💬 Soporte y Recursos
Problemas y Preguntas
Problemas del Servidor: Abrir un issue
Preguntas sobre API REE: consultasios@ree.es
Aprende Más
📚 La Escuela de IA - Aprende IA en español
Recursos
API eSios de REE: https://api.esios.ree.es/
FastMCP: https://github.com/jlowin/fastmcp
Model Context Protocol: https://modelcontextprotocol.io/
📄 Licencia
MIT License con Descargo de Responsabilidad - Ver archivo LICENSE para detalles completos.
⚠️ Proyecto Educativo: Este software se proporciona "tal cual" sin garantías. Úsalo bajo tu propio riesgo.
Construido con ❤️ usando Domain-Driven Design y mejores prácticas modernas de Python
⭐ ¡Dale una estrella al repo si te resulta útil!
Available Tools
18 toolsanalyze_demand_volatilityA
Analyze demand volatility patterns over a period.
Calculates daily demand swings, load factors, and volatility levels to identify high-variability days and overall stability patterns.
Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format
Returns: JSON string with volatility analysis and stability assessment.
Examples: Analyze volatility for a week: >>> await analyze_demand_volatility("2025-10-01", "2025-10-07")
Analyze volatility for a month:
>>> await analyze_demand_volatility("2025-10-01", "2025-10-31")| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It mentions returning a JSON with volatility analysis and stability assessment, but does not disclose computational cost, data freshness, or side effects (though likely read-only). Acceptable but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise: a clear purpose line, structured args/returns sections, and examples. No fluff, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so description needn't detail return structure. It provides high-level outcome and example usage. Given 2 required parameters and clear examples, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, but the description adds YYYY-MM-DD format and examples showing start/end dates. This compensates for the schema's lack of parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it analyzes demand volatility over a period, calculating daily demand swings, load factors, and volatility levels. This clearly distinguishes it from siblings that fetch data (e.g., get_daily_demand_statistics) or compare (compare_forecast_actual), providing a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like get_daily_demand_statistics or compare_forecast_actual. While examples show date range usage, they do not differentiate use cases or mention prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_forecast_actualA
Compare forecasted vs actual electricity demand.
Calculates forecast accuracy metrics (error, MAE, RMSE) for demand predictions.
Args: date: Date in YYYY-MM-DD format
Returns: JSON string with forecast comparison and accuracy metrics.
Examples: Compare forecast accuracy for Oct 8: >>> await compare_forecast_actual("2025-10-08")
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool calculates forecast accuracy metrics and returns a JSON string, but does not describe side effects, data sources, or whether it is destructive. The behavior is fairly transparent but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured with clear sections (Args, Returns, Examples), and front-loaded with the core purpose. Every sentence adds value without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (single parameter, output schema exists, no nested objects), the description fully covers the purpose, input format, and return type. No gaps remain for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one string parameter 'date' with no description (0% coverage). The description adds meaning by specifying the format ('YYYY-MM-DD') and providing an example, which compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Compare') and resource ('forecasted vs actual electricity demand'), and specifies it calculates accuracy metrics like error, MAE, RMSE. This distinguishes it from siblings that focus on other analyses like volatility or generation mix.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for comparing forecasts to actuals and provides a concrete example, but does not explicitly state when to use this tool over alternatives or any prerequisites. No exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_carbon_intensityA
Get carbon intensity over time (gCO2/kWh).
Calculates CO2 emissions per unit of electricity generated. Lower values indicate cleaner energy mix.
Args: start_date: Start datetime in ISO format (YYYY-MM-DDTHH:MM) end_date: End datetime in ISO format (YYYY-MM-DDTHH:MM) time_granularity: Time aggregation (raw, hour, day, fifteen_minutes)
Returns: JSON string with carbon intensity time series and statistics.
Examples: Get hourly carbon intensity for a day: >>> await get_carbon_intensity("2025-10-08T00:00", "2025-10-08T23:59", "hour")
Get daily carbon intensity for a week:
>>> await get_carbon_intensity("2025-10-01T00:00", "2025-10-07T23:59", "day")| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes | ||
| time_granularity | No | hour |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must convey behavioral traits. It specifies input format (ISO datetime), expected granularity options, and return type (JSON string with time series and statistics). It does not mention any destructive or side effects, which is appropriate for a read-only data tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line summary, a brief explanation, then organized Args, Returns, and Examples sections. Every sentence is informative with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, the description does not need to detail return structure. It covers purpose, parameters with examples, and return type. All necessary information for an agent to select and invoke the tool is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully explain parameters. It does: start_date and end_date with ISO format examples, and time_granularity with default value and possible values ('raw, hour, day, fifteen_minutes'). This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get carbon intensity over time (gCO2/kWh)'. It specifies the resource (carbon intensity) and the action (get). It distinguishes itself from sibling tools by focusing specifically on carbon intensity, while siblings cover demand, generation mix, prices, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context via examples showing different time granularities. It explains that lower values indicate cleaner energy. However, it does not explicitly state when not to use this tool or provide comparisons to alternative tools among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_demand_statisticsA
Get daily demand statistics for a period.
Provides comprehensive daily demand analysis including maximum, minimum, and sum of generation values for each day in the specified period.
Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format
Returns: JSON string with daily statistics and overall summary.
Examples: Get statistics for a week: >>> await get_daily_demand_statistics("2025-10-01", "2025-10-07")
Get statistics for a month:
>>> await get_daily_demand_statistics("2025-10-01", "2025-10-31")| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description discloses it returns a JSON string with daily stats and summary. It does not mention authentication, rate limits, or side effects, but as a read-only tool, this is acceptable. The presence of an output schema reduces the need to describe return structure in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for purpose, arguments, returns, and examples. It is concise (no superfluous sentences) and front-loaded with the main action. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, output schema present), the description covers all necessary context: what the tool does, parameter formats, return type, and usage examples. It is fully adequate for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by specifying both parameters (start_date, end_date) with their format (YYYY-MM-DD). It adds meaning beyond the schema's raw type definitions, ensuring correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves daily demand statistics (max, min, sum) for a period, distinguishing it from siblings like analyze_demand_volatility or get_demand_summary. The verb 'Get' and resource 'daily demand statistics' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description explains when to use a date range and includes examples, it does not explicitly compare itself to sibling tools or state when not to use it. The guidance is implicit from the tool name and functionality, but the dimension requires explicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_demand_summaryA
Get a summary of electricity demand for a specific date.
Convenience tool that fetches key demand indicators (real demand, forecast, max/min) for a given date.
Args: date: Date in YYYY-MM-DD format (default: 2025-10-08)
Returns: JSON string with demand summary.
Examples: Get today's demand summary: >>> await get_demand_summary("2025-10-11")
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | 2025-10-08 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the burden of behavioral disclosure. It does not mention whether the tool is read-only, any required permissions, rate limits, or side effects. While it states it returns a JSON string, deeper behavioral context is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a one-line purpose, a brief convenience note, structured Args/Returns/Examples sections. No redundant information, and every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, a summary), the description covers purpose, parameters, return format, and usage example. It could be more complete by explaining the output structure in detail, but since an output schema exists (not shown), the return mention is sufficient. Minor gap compared to siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by documenting the sole 'date' parameter: specifying format (YYYY-MM-DD), default value (2025-10-08), and providing an example. This adds meaning far beyond the bare input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a summary of electricity demand for a specific date, using a specific verb and resource. It distinguishes itself from siblings like analyze_demand_volatility or get_daily_demand_statistics by specifying it is a 'convenience tool' that provides key demand indicators in a single call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lacks guidance on when to use this tool versus similar alternatives like get_daily_demand_statistics. It does not specify prerequisites, when-not-to-use scenarios, or decision criteria for selecting this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generation_mixA
Get the electricity generation mix at a specific time.
Returns the power generation breakdown by source (nuclear, wind, solar, etc.) for a specific hour.
Args: date: Date in YYYY-MM-DD format hour: Hour in HH format (00-23, default: 12)
Returns: JSON string with generation mix by source.
Examples: Get generation mix at noon on Oct 8: >>> await get_generation_mix("2025-10-08", "12")
Get overnight generation mix:
>>> await get_generation_mix("2025-10-08", "02")| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| hour | No | 12 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No behavioral traits disclosed beyond basic retrieval; no annotations provided, but description is consistent and adds no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with docstring sections (Args, Returns, Examples), though slightly verbose; every part is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity and presence of output schema, description fully explains inputs, output format, and provides examples.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description includes detailed docstring with format (YYYY-MM-DD, HH) and default for 'hour', adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'get' with specific resource 'electricity generation mix'. Distinguishes from sibling 'get_generation_mix_timeline' by specifying 'at a specific time'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for a single hour via parameters 'date' and 'hour', but no explicit comparison with siblings or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generation_mix_timelineA
Get generation mix over time for a full day or period.
Returns generation breakdown by source across multiple time points, useful for visualizing energy transition patterns.
Args: date: Date in YYYY-MM-DD format time_granularity: Time aggregation (hour or day, default: hour)
Returns: JSON string with generation mix timeline.
Examples: Get hourly generation mix for a day: >>> await get_generation_mix_timeline("2025-10-08", "hour")
Get daily generation mix for a month:
>>> await get_generation_mix_timeline("2025-10-01", "day")| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| time_granularity | No | hour |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states the return format (JSON string) and provides example outputs, but lacks details on error handling, performance, or data provenance. This is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with no fluff. It front-loads the main purpose, then provides args, returns, and examples in a clear, easy-to-scan format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters) and the presence of an output schema, the description is largely complete. It covers the purpose, parameters, and usage examples. Minor omissions like date range limitations or error scenarios are acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by documenting both parameters with format and examples. It adds meaning beyond the bare schema, though it could explicitly list allowed values for time_granularity (e.g., 'hour' and 'day').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Get generation mix over time for a full day or period', which is a specific verb-resource combination and immediately clarifies the scope. It distinguishes from siblings like get_generation_mix (likely static) and other time-series tools by emphasizing temporal granularity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes examples with specific date and granularity options, showing when to use the tool. However, it does not explicitly state alternatives or when not to use it, which would be helpful given many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_grid_stabilityA
Get grid stability metrics at a specific time.
Analyzes synchronous generation (provides inertia) vs variable renewables (no inertia) to assess grid stability risk.
Args: date: Date in YYYY-MM-DD format hour: Hour in HH format (00-23, default: 12)
Returns: JSON string with grid stability analysis.
Examples: Get grid stability at noon: >>> await get_grid_stability("2025-10-08", "12")
Check overnight stability:
>>> await get_grid_stability("2025-10-08", "02")| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| hour | No | 12 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose any behavioral traits beyond input formats (date/hour) and return type (JSON string). Missing details like rate limits, permission requirements, or what exactly the JSON contains (e.g., keys like 'inertia_level', 'risk_score').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is front-loaded with a one-line purpose, followed by structured Args/Returns/Examples. Concise and well-organized, though the docstring format adds some verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the concept and provides examples, but lacks details about the output fields (e.g., what 'stability metrics' are included). With an output schema available, the burden is reduced, but the description could still summarize the return structure for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully: specifies date format YYYY-MM-DD, hour format HH with default '12' and range 00-23, and provides examples. This adds significant clarity beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves grid stability metrics at a specific time, analyzing synchronous generation vs variable renewables. It distinguishes itself from sibling tools like analyze_demand_volatility or get_carbon_intensity by focusing on grid inertia and stability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (specific time queries) via examples and context, but does not explicitly contrast with alternatives or specify conditions to avoid. It provides clear usage via Args and Examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indicator_dataA
Get time-series data for a specific electricity indicator.
Retrieves historical data for any REE indicator (demand, generation, prices, etc.) for a specified date range. Returns the data with statistical summary.
Args: indicator_id: The indicator ID (e.g., 1293 for real demand, 549 for nuclear) start_date: Start datetime in ISO format (YYYY-MM-DDTHH:MM) end_date: End datetime in ISO format (YYYY-MM-DDTHH:MM) time_granularity: Time aggregation level (raw, hour, day, fifteen_minutes)
Returns: JSON string with indicator metadata, time-series values, and statistics.
Examples: Get hourly real demand for Oct 8, 2025: >>> await get_indicator_data(1293, "2025-10-08T00:00", "2025-10-08T23:59", "hour")
Get 5-minute wind generation data:
>>> await get_indicator_data(2038, "2025-10-08T00:00", "2025-10-08T03:00", "raw")| Name | Required | Description | Default |
|---|---|---|---|
| indicator_id | Yes | ||
| start_date | Yes | ||
| end_date | Yes | ||
| time_granularity | No | raw |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool 'gets' data, implying a read operation, and describes the return format (JSON with metadata, series, statistics). However, it does not disclose any potential side effects, authentication needs, or rate limits, which are important for a tool that fetches historical data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for Args, Returns, and Examples. Each sentence is informative and earns its place. It is slightly lengthy but still concise enough for an AI agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (the agent can infer return structure), the description covers the essential aspects: purpose, required parameters, optional parameters, and example calls. It does not detail error handling or data limits, but it is sufficiently complete for a data retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description fully compensates by explaining each parameter with examples (e.g., indicator_id: '1293 for real demand, 549 for nuclear'; time_granularity: 'raw, hour, day, fifteen_minutes'). The examples provide concrete usage patterns, adding significant value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves time-series data for a specific electricity indicator from REE, listing examples like demand, generation, prices. It distinguishes itself from sibling tools that are more specialized (e.g., get_generation_mix, get_carbon_intensity) by being a generic fetcher for any indicator ID.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides Args and examples showing how to use the tool, but does not explicitly state when to use this tool versus the more specific sibling tools. It lacks direct 'when-to-use' or 'when-not-to-use' guidance, leaving the agent to infer based on the generic nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_international_exchangesA
Get international electricity exchanges at a specific time.
Returns import/export data by country (Andorra, Morocco, Portugal, France) with net balance calculations.
Args: date: Date in YYYY-MM-DD format hour: Hour in HH format (00-23, default: 12)
Returns: JSON string with imports, exports, and net balance by country.
Examples: Get exchanges at noon on Oct 8: >>> await get_international_exchanges("2025-10-08", "12")
Get overnight exchanges:
>>> await get_international_exchanges("2025-10-08", "02")| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| hour | No | 12 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the return format (JSON with imports/exports/net balance) and gives example usage, but does not disclose any side effects, rate limits, error conditions, or data availability constraints. For a read-only retrieval tool, this is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose statement, parameter list, return description, and examples. Each sentence adds essential information without redundancy. It uses backtick formatting for parameters and examples, enhancing readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 parameters, one optional) and presence of an output schema, the description provides enough context for an agent to invoke it correctly. It covers parameter formats, purpose, and example usage. However, it lacks notes on error handling or data availability, which would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description fully compensates by specifying date format (YYYY-MM-DD), hour format (HH, 00-23), the default value for hour ('12'), and provides concrete examples. This adds significant meaning beyond the schema's bare type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the exact resource ('international electricity exchanges') and action ('Get') with a clear scope ('at a specific time'). It names the countries (Andorra, Morocco, Portugal, France) and the data returned (imports/exports, net balance). This distinguishes it from sibling tools focused on demand, prices, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use the tool (to obtain exchange data at a given time). It provides parameter formats and examples, but does not explicitly mention when not to use it or compare with sibling tools. However, the context of siblings (demand, prices, etc.) implies the tool's unique purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_peak_analysisB
Get peak demand analysis over a period.
Analyzes daily maximum and minimum demand to identify patterns and calculate load factors.
Args: start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format
Returns: JSON string with peak demand analysis.
Examples: Get peak analysis for a week: >>> await get_peak_analysis("2025-10-01", "2025-10-07")
Get peak analysis for a month:
>>> await get_peak_analysis("2025-10-01", "2025-10-31")| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must carry the full burden. It states the tool 'analyzes' and 'calculates,' implying a read-only operation, but does not explicitly confirm non-destructive behavior, rate limits, or any side effects. The lack of explicit transparency about safety or performance is a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an overview, args, returns, and examples. It is front-loaded with the purpose. However, the examples could be shortened; overall it is concise enough for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two parameters, no annotations, output schema exists), the description covers the core purpose, required args, and return format with examples. The missing annotation information reduces completeness slightly, but the provided elements are adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds format constraints (YYYY-MM-DD) and provides examples for usage. This adds meaning beyond the bare schema, though no further details on allowed values or behavior are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves peak demand analysis over a period, analyzing daily maximum and minimum demand to identify patterns and calculate load factors. While it is specific, it does not explicitly distinguish it from siblings like get_daily_demand_statistics, which may overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention prerequisites, exclusions, or sibling tools, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_analysisA
Get electricity price analysis over time.
Analyzes SPOT market prices with statistics and multi-country comparison. Note: SPOT price indicator returns data for multiple European countries. Use geo_filter to focus on a specific market.
Args: start_date: Start datetime in ISO format (YYYY-MM-DDTHH:MM) end_date: End datetime in ISO format (YYYY-MM-DDTHH:MM) geo_filter: Optional geographic filter (e.g., "Península", "Portugal", "France") If not specified, returns all countries
Returns: JSON string with price data and analysis.
Examples: Get Spanish hourly prices for a day: >>> await get_price_analysis("2025-10-08T00:00", "2025-10-08T23:59", "Península")
Get all countries' prices for comparison:
>>> await get_price_analysis("2025-10-08T00:00", "2025-10-08T23:59")| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes | ||
| geo_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral disclosure burden. It mentions the tool analyzes SPOT prices and returns JSON, but does not reveal potential behavioral traits such as error handling, rate limits, or what 'statistics' entails. More detail is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with docs-style sections (Args, Returns, Examples). However, the note about SPOT is somewhat redundant with the first sentence, and the description could be tightened without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no annotations, and an output schema, the description covers the basics (parameter formats, example usage) but lacks completeness on edge cases, error conditions, or more precise definition of 'statistics'. It is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description adds meaning: start_date and end_date are ISO format, geo_filter is optional with examples like "Península" and "Portugal". This compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: 'Get electricity price analysis over time' for SPOT market prices with multi-country comparison. It distinguishes from siblings like 'get_spain_hourly_prices' by stating it handles multiple countries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context: use for SPOT prices, with optional geo_filter to focus on a specific market. Examples clarify typical use cases. However, it does not explicitly mention when to avoid this tool (e.g., for Spain-only data) or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pvpc_rateA
Get the PVPC regulated electricity rate at a specific time.
Returns the PVPC (Precio Voluntario para el Pequeño Consumidor) rate, which is the regulated retail electricity price for consumers in Spain.
Args: date: Date in YYYY-MM-DD format hour: Hour in HH format (00-23, default: 12)
Returns: JSON string with PVPC rate data.
Examples: Get PVPC rate at noon on Oct 8: >>> await get_pvpc_rate("2025-10-08", "12")
Get PVPC rate at midnight:
>>> await get_pvpc_rate("2025-10-08", "00")| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| hour | No | 12 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the return type (JSON string) and provides examples, but does not disclose if the operation is read-only, any side effects, or potential errors. Given the lack of annotations, the description is adequate but could be more explicit about behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args, Returns, and Examples sections. It is concise but covers necessary details. Could be slightly more streamlined, but overall efficient for a two-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (though not shown), the description does not need to detail return structure. It adequately covers input parameters, default, and format, with examples. The description is complete for a simple data retrieval tool, though additional context about the data range or rate source could enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds critical meaning. It specifies the exact format for 'date' (YYYY-MM-DD) and 'hour' (HH format, 00-23, default 12), which the schema lacks. This fully compensates for the absence of property descriptions in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states the tool retrieves the PVPC regulated electricity rate at a specific time, with clear context about it being the Spanish regulated retail price. It uses a specific verb ('Get') and resource ('PVPC rate'), distinguishing it from siblings like 'get_spain_hourly_prices'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides parameters, default values, and concrete examples, making usage clear. However, it does not explicitly guide when to use this tool vs alternatives or mention any prerequisites or exclusions, which could be improved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_renewable_summaryA
Get renewable energy generation summary at a specific time.
Aggregates wind, solar PV, solar thermal, and hydro generation with renewable percentage calculations.
Args: date: Date in YYYY-MM-DD format hour: Hour in HH format (00-23, default: 12)
Returns: JSON string with renewable generation breakdown and percentages.
Examples: Get renewable summary at noon: >>> await get_renewable_summary("2025-10-08", "12")
Get overnight renewable summary:
>>> await get_renewable_summary("2025-10-08", "02")| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ||
| hour | No | 12 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so the description must cover behavioral traits. It explains the aggregation and return format but lacks details on error scenarios, data availability, or any side effects. The tool is likely read-only, but this is not explicitly confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections (Args, Returns, Examples) and front-loads the core purpose. It is slightly verbose due to the examples, but each section adds value. One or two sentences could be trimmed, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only 2 parameters and an output schema (though not provided in input), the description explains the return as a JSON string with breakdown and percentages. It covers the essential information for using the tool, though it omits potential errors or data gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, so the description compensates well by specifying date format (YYYY-MM-DD), hour format (HH, 00-23), and default hour (12). This adds meaningful semantic information beyond the raw schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get renewable energy generation summary at a specific time.' It lists the specific renewable sources (wind, solar PV, solar thermal, hydro) and includes renewable percentage calculations, making it distinct from siblings like 'get_generation_mix' which likely covers total generation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining renewable summary at a precise time, with examples showing how to call it at different hours. It does not explicitly compare to siblings or state when not to use, but the context of renewable-specific aggregation provides clear situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spain_hourly_pricesA
Get Spanish hourly electricity prices (SPOT market) for a specific day.
Returns the 24 hourly prices for the Spanish Peninsular market (OMIE/MIBEL). This is the simplified version focused only on Spain, perfect for checking daily electricity costs.
Args: date: Date in YYYY-MM-DD format
Returns: JSON string with hourly prices, min/max/average, and the cheapest/most expensive hours.
Examples: Get today's hourly prices: >>> await get_spain_hourly_prices("2025-10-19")
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses behavior and output: it returns a JSON string with hourly prices, stats, and cheapest/most expensive hours. As a read-only query, the 'Get' verb indicates no side effects, and no annotations exist to contradict. The description carries the full burden well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with sections (Args, Returns, Example) and is concise yet informative. Every sentence adds value, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, clear purpose, and existing output schema), the description covers all necessary details: what the tool returns, the parameter format, and a usage example. It is complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'date' has its format ('YYYY-MM-DD') and an example provided in the description. With 0% schema coverage, the description fully compensates by explaining what the parameter expects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets Spanish hourly electricity prices for a specific day, naming the market (OMIE/MIBEL). It distinguishes itself as the simplified Spain-focused version, differentiating from siblings like get_price_analysis or get_generation_mix.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context ('perfect for checking daily electricity costs') and implies it's for Spain-specific spot prices. However, it does not explicitly state when not to use it or mention alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_storage_operationsA
Get pumped storage operations for a day.
Shows pumping consumption (storing energy) and turbining (releasing energy) to identify arbitrage opportunities and storage efficiency.
Args: date: Date in YYYY-MM-DD format
Returns: JSON string with storage operations and efficiency metrics.
Examples: Get storage operations for Oct 8: >>> await get_storage_operations("2025-10-08")
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates a return value (JSON string) but does not disclose side effects, permissions, or rate limits. As a read operation, it is implicitly safe, but explicit transparency is lacking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured with sections for intro, args, returns, and examples. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter. The description explains the return type and purpose. Given the existence of an output schema (not shown), the description adequately complements it. Minor lack of detail on efficiency metrics is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter (date) with 0% description coverage. The description compensates by specifying the required format (YYYY-MM-DD) and providing a concrete example. This adds meaningful semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves pumped storage operations for a day, distinguishing it from sibling tools that handle generation mix, prices, demand, etc. It explains the concepts of pumping and turbining, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions the tool's use for identifying arbitrage opportunities and storage efficiency. While it does not directly contrast with siblings, the examples and context provide sufficient guidance for when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_indicatorsA
List all available electricity indicators from REE.
Returns metadata for all 1,967+ available indicators including their IDs, names, units, frequencies, and geographic scopes.
Args: limit: Maximum number of indicators to return (default: all) offset: Number of indicators to skip for pagination (default: 0)
Returns: JSON string with list of indicator metadata.
Examples: Get first 50 indicators: >>> await list_indicators(limit=50, offset=0)
Get all indicators:
>>> await list_indicators()| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the nature (list), returned data, and parameters. Could add explicit idempotency/read-only hint, but sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with purpose, structured with Args/Returns/Examples sections. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has simple parameters and an output schema. Description covers behavior, parameters, and return format with examples, fully adequate for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% coverage (no descriptions), but the description explains both limit (max number, default all) and offset (skip for pagination) with clear semantics and defaults, fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all available electricity indicators from REE' and details the metadata returned (IDs, names, units, frequencies, geographic scopes). This distinguishes it from siblings like search_indicators and get_indicator_data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides examples for limiting and paginating results, implying use for listing all or a subset. However, it does not explicitly contrast with alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_indicatorsA
Search for indicators by keyword in their names.
Searches through all available indicators and returns those matching the keyword in their name or short name.
Args: keyword: Keyword to search for (e.g., "demanda", "precio", "solar") limit: Maximum number of results (default: 20)
Returns: JSON string with matching indicator metadata.
Examples: Find all demand-related indicators: >>> await search_indicators("demanda", limit=10)
Find price indicators:
>>> await search_indicators("precio")
Find solar generation indicators:
>>> await search_indicators("solar")| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions searching all available indicators and returning a JSON string, but does not disclose side effects, authentication, rate limits, or whether it is read-only (though implied). This is minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with a clear purpose statement, arg descriptions, return type, and examples. Every sentence serves a purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no annotations, output schema exists), the description is largely complete. It covers search behavior, parameters, and examples. The output is described as 'JSON string with matching indicator metadata', which suffices since the output schema presumably details the structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds significant value by explaining the keyword parameter is searched in name/short name, giving concrete examples, and stating the limit parameter's default. This goes beyond the bare schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches indicators by keyword in their names or short names, which is specific and distinct from the sibling tools (e.g., list_indicators lists all, get_indicator_data retrieves data for a specific indicator). The verb 'search' and resource 'indicators' are precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples and default limit but does not explicitly state when to use this tool versus alternatives like list_indicators or get_indicator_data. No exclusion or comparative guidance is given, leaving the agent to infer usage from examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v1.0.0- Added
analyze_demand_volatility - Added
get_daily_demand_statistics - Changed
get_price_analysis1 field changed- added
Input schema / properties / geo_filterAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Added
get_pvpc_rate - Added
get_spain_hourly_prices
14 tool updates
- First observed
compare_forecast_actual - First observed
get_carbon_intensity - First observed
get_demand_summary - First observed
get_generation_mix - First observed
get_generation_mix_timeline - First observed
get_grid_stability - First observed
get_indicator_data - First observed
get_international_exchanges - First observed
get_peak_analysis - First observed
get_price_analysis - First observed
get_renewable_summary - First observed
get_storage_operations - First observed
list_indicators - First observed
search_indicators
TDQS
Most tools have clearly distinct purposes (demand, generation, prices, etc.), but get_indicator_data is a generic tool that can retrieve many of the same data types as dedicated tools, potentially causing confusion about which to use.
All tool names follow a consistent verb_noun snake_case pattern (e.g., get_carbon_intensity, list_indicators), making the set predictable and easy to navigate.
With 18 tools covering various aspects of electricity grid data (demand, generation, prices, storage, etc.), the count is well-scoped and each tool serves a specific role.
The tool surface covers major domain operations: demand, generation mix, carbon intensity, prices, storage, international exchanges, and indicator discovery. The generic get_indicator_data fills any gaps.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Connects AI assistants to CloudQuell multi-cloud and AI cost, savings, anomaly, and budget data.
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Global stock research, ML forecasts, valuation signals, screeners & portfolio tracking in Claude
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI-powered analysis and prediction of household energy consumption through machine learning models, providing historical consumption breakdowns, price queries from Spanish electricity markets, and personalized energy optimization recommendations.-
- AlicenseAqualityDmaintenanceEnables real-time solar data from Fronius inverters via Claude, allowing natural language queries about solar production, battery, and grid exchange.51Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables real-time access to US electricity generation, fuel mix, and demand data through natural language queries.15MIT
- AlicenseNot gradedqualityBmaintenanceConnects Claude to live data-center, power & grid intelligence data, enabling query and citation of over 21,000 facilities, power markets, grid telemetry, and more.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ESJavadex/ree-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server