comparador-luz-gas
Consulta el comparador oficial de tarifas de luz y gas de la CNMC, ordena las ofertas por precio y permite leer facturas por su QR.
Comparar ofertas (
comparar_ofertas): devuelve ofertas de luz y/o gas ordenadas de más barata a más cara con análisis a varios años (horizonteanios, por defecto 3).Acepta como entrada el QR ya decodificado de una factura (
qr) o código postal + consumo anual (cp,consumo).Parámetros de la consulta:
potencia,consumo_gas,suministro(luz/gas/ambas),franjas(punta/llano/valle),empresa(suministro no doméstico).Filtros de salida:
sin_permanencia(excluir ofertas con permanencia) ymax_ofertas(por defecto 20).Con
qr+mensual, calcula el coste del periodo de facturación concreto en vez del anual.Interpretar un QR (
leer_factura_qr): extrae código postal, potencia, consumo por tramos y anual, fechas e importe, sin consultar la CNMC.Leer un QR desde disco (
leer_factura): obtiene los datos a partir de un PDF o imagen local (requiere el extrafacturasy poppler-utils para PDFs).
comparador-luz-gas
El comparador oficial de tarifas de luz y gas de la CNMC, como librería, CLI y servidor MCP.
El comparador de la CNMC es la única comparativa oficial de ofertas de energía en España, pero solo se usa a través de un formulario web; su API pública pide 83 parámetros por consulta. Este proyecto la reduce a tres datos (código postal, consumo, potencia) o al QR de la factura, y devuelve las ofertas en JSON ordenadas por precio, con un análisis a varios años y el aviso de qué comercializadoras grandes no están en el comparador.
Inicio rápido
uvx comparador-luz-gas --cp 28013 --consumo 2600 --texto --top 5O instalado: pip install comparador-luz-gas. Para leer el QR de un PDF o una imagen,
pip install "comparador-luz-gas[facturas]" y sudo apt install libzbar0 poppler-utils.
Related MCP server: PVPC MCP Server
Ejemplo
Salida real (consulta del 2026-10-20; los precios cambian con el mercado):
$ comparador-luz-gas --cp 28013 --consumo 2600 --texto --top 5
1er año 2º año comercializadora oferta
----------------------------------------------------------------------------------------------------
653.02 0.00 Comercializadora de referencia PVPC Histórico 19/10/2025 - 19/10/2026
655.15 655.15 ENERGIA NUFRI SL ENERGIA NUFRI - CON HORARIOS
657.85 721.45 niba niba Zen
661.53 661.53 ENERGIA NUFRI SL ENERGIA NUFRI - UNIVERSAL CON HORARIOS
662.80 713.51 CIDE HCENERGÍA S.A.U Plan Estrella Dúo
70 ofertas de 28 comercializadoras.
No están en el comparador: ENDESA, IBERDROLA, TOTALENERGIES, HOLALUZ, EDP, GALP.
[...]
A 3 años, lo más barato es ENERGIA NUFRI SL «ENERGIA NUFRI - CON HORARIOS»: 1965.45 €
(655.15 €/año en régimen). ¿Prefieres pagar lo mismo a cualquier hora o puedes concentrar
el consumo en las horas baratas? Con tu reparto actual gana la discriminación horaria por
41.79 €: [...]
- La mejor a 3 años es solo para nuevos clientes: [...]
- El PVPC sale 2.13 € más barato al año que la mejor fija (653.02 € frente a 655.15 €),
pero es variable: [...]
- 13 de 70 ofertas tienen permanencia (penalización de 16.87 a 37.42 €).Sin --texto imprime JSON con las claves modo, importes, consulta, cobertura,
ofertas, alternativa_por_separado y analisis. Cada oferta:
{"comercializadora": "Comercializadora de referencia", "oferta": "PVPC Histórico 19/10/2025 - 19/10/2026",
"importe_primer_anio": 653.02, "importe_segundo_anio": 0.0, "permanencia": false,
"servicios_adicionales": false, "verde": false, "validez": "Válida para consumidores con derecho a PVPC",
"precio_unico": false, "id_oferta": 180, "penalizacion_estimada": 0, "solo_nuevos_clientes": false}Desde Python:
from comparador_luz_gas import Consulta, comparar, desde_fichero, interpretar
r = comparar(Consulta(codigo_postal="28013", consumo_anual_luz=2600, potencia=3.45))
r.ofertas[0] # la más barata el primer año
r.to_dict() # lo mismo que imprime el CLI
interpretar(r, anios=3)["resumen"] # valoración a 3 años
r = comparar(desde_fichero("factura.pdf").consulta()) # todo desde el QR de la facturaUso con agentes de IA
Servidor MCP
comparador-luz-gas mcp sirve el comparador por stdio, sin dependencias extra. Está en
el registro oficial de MCP como
io.github.nuncaeslupus/comparador-luz-gas.
{
"mcpServers": {
"comparador-luz-gas": { "command": "uvx", "args": ["comparador-luz-gas", "mcp"] }
}
}Para leer facturas del disco:
"args": ["--from", "comparador-luz-gas[facturas]", "comparador-luz-gas", "mcp"].
También hay Dockerfile (docker run -i --rm comparador-luz-gas).
herramienta | qué hace |
| ofertas + análisis a largo plazo, como el JSON del CLI. Basta |
| los datos del QR de una factura, sin consultar la CNMC |
| lee el QR de un PDF o imagen del disco (necesita el extra |
Los errores vuelven como {"ok": false, "error": "ArgumentoInvalido", "message": "..."}.
Desde el CLI
Un agente sin MCP puede llamar al CLI: por defecto escribe JSON en stdout. modo e
importes dicen si los importes son anuales o de un periodo de factura, para que no se
confunda un mes con un año. Un argumento inválido sale con código 2 y el mensaje en
stderr.
Cómo funciona
Una petición a la API oficial de la CNMC (3-8 s, límite 90 s). No hay precios propios ni caché: solo cuentas sobre lo que responde la CNMC.
Lee el QR de la factura. Desde la Resolución de la CNMC de 24/06/2021 (BOE-A-2022-16989) toda factura de luz lleva un QR con código postal, potencias, consumo anual por franja, periodo e importe. El formato lo fija la CNMC, así que vale para cualquier comercializadora.
desde_qr()no tiene dependencias: una app que ya escaneó el QR le pasa la cadena.Dos modos. Por defecto, coste estimado de 12 meses. Con
--mensual(f.consulta(mensual=True)), el coste del periodo concreto de la factura, comparable con el importe impreso.Análisis a largo plazo (
interpretar(), claveanalisis): coste a N años (primer_anio + (N-1) × siguientes), porque el primer puesto suele ganarlo un descuento de bienvenida que se cobra una vez. Separa precio único frente a discriminación horaria, señala las ofertas solo para nuevos clientes, la permanencia y su penalización, y el PVPC frente a la mejor fija.Cobertura. Cada respuesta lista las comercializadoras presentes y las grandes que faltan (
cobertura.grandes_ausentes).Anualizar.
anualizar(facturas)extrapola el consumo de varias facturas recientes en vez de usar los 12 meses rodantes del QR.
CLI
comparador-luz-gas --cp 28013 --consumo 2600 # JSON
comparador-luz-gas --cp 28013 --consumo 2600 --texto --top 5 # tabla
comparador-luz-gas --cp 28013 --consumo 2600 --sin-permanencia
comparador-luz-gas --cp 28013 --consumo 2600 --consumo-gas 6000 --suministro ambas
comparador-luz-gas --cp 28013 --consumo 2600 --franjas 600,700,1300 --anios 5
comparador-luz-gas --factura factura.pdf --texto # compara con los datos del QR
comparador-luz-gas --factura factura.pdf --mensual --texto # coste de ese periodo
comparador-luz-gas --qr 'https://comparador.cnmc.gob.es/comparador/QRE?cp=...'
comparador-luz-gas --factura factura.pdf --solo-datos # solo lee el QROtras opciones: --potencia (kW, 3,45 por defecto), --empresa (suministro que no es
vivienda). comparador-luz-gas --help las lista todas.
Campos de Consulta: codigo_postal (obligatorio), consumo_anual_luz,
consumo_anual_gas, potencia (3.45), suministro ("luz", "gas", "ambas"),
franjas ((punta, llano, valle); si falta, perfil 2.0TD), vivienda (True),
permanencia y servicios_adicionales (2; 1 = solo ofertas sin ellos).
Limitaciones
No es un censo del mercado. La CNMC solo publica ofertas que las comercializadoras le remiten y valida. Comprobado el 2026-09-23 sobre 20 códigos postales: Endesa, TotalEnergies, Plenitude, Holaluz y EDP no tienen ofertas; Iberdrola, una de gas. Endesa e Iberdrola solo aparecen como
Comercializadora de referencia(PVPC/TUR). El resultado es la mejor entre las verificadas por la CNMC.Sin desglose de impuestos. Confirma con la comercializadora si el importe lleva IVA.
La factura incluye cosas que el comparador no cuenta: servicios adicionales, alquiler de equipos, bono social. El QR los desglosa (
impSA,finBS); réstalos antes de comparar.Las ofertas por tramos se valoran con tu reparto punta/llano/valle actual, con los tramos 2.0TD de la Circular 3/2020 (vigentes desde el 1/06/2021; Ceuta y Melilla usan otros). Si piensas mover consumo, repite con
--franjas. Si vienes de una tarifa de discriminación horaria anterior, usa solo facturas posteriores a esa fecha.Sin histórico. El catálogo no lleva fechas de alta ni caducidad, y la CNMC no publica el histórico, así que no se puede decir en qué mes conviene cambiar.
QR escaneado: 400 dpi aguanta JPEG, giro y desenfoque; 300 dpi va bien salvo desenfoque; 200 dpi solo si está limpio; 150 dpi no se lee.
Documentación
docs/qr-escaneado.md: lectura del QR en facturas escaneadas, con las cifras por resolución.
Desarrollo
make sync && make lint && make test
make test-live # consulta la API real
make test-facturas # lee el QR de los PDFs de data/facturas/, si los haydata/har/ y data/facturas/ están en .gitignore (llevan CUPS, dirección y consumos
reales); los tests versionados usan un QR inventado.
Proyectos relacionados
claude-arsenal — flujo de Claude Code guiado por especificaciones y cola de tareas con puertas de aceptación.
drawspec — especificación declarativa de diagramas a SVG/PNG/texto limpio, escribible por LLMs; incluye servidor MCP.
doc-control — permite a agentes de IA editar documentos Word como cambios controlados.
literary-critic — análisis de manuscritos con LLM al modo de un editor profesional.
integral-job-search — búsqueda de empleo centrada en el candidato, dentro de Claude Code.
Licencia
Available Tools
3 toolscomparar_ofertasARead-onlyIdempotent
Consulta el comparador oficial de la CNMC y devuelve las ofertas de luz y/o gas, de la más barata a la más cara, con un análisis a varios años (rotar de oferta, permanencias, fijo vs. tramos). Luz: qr, o cp + consumo; gas: suministro gas, cp + consumo_gas; ambas: lo de luz más consumo_gas. cp, consumo o potencia explícitos prevalecen sobre el qr; sin qr, 3,45 kW y reparto 2.0TD. Con el texto del QR no hace falta leer_factura_qr. Una petición HTTPS sin caché (segundos; límite 90 s); las ofertas cambian con el mercado. Euros, sin desglose de impuestos. Si falla, devuelve un error con texto JSON {"ok": false, "error": "ArgumentoInvalido", "message": "..."} (ArgumentoInvalido si falta cp o consumo; otro si falla la red).
| Name | Required | Description | Default |
|---|---|---|---|
| cp | No | código postal, p. ej. 28013 | |
| qr | No | contenido del QR de la factura de luz, ya decodificado: la URL de comparador.cnmc.gob.es que lleva impresa, p. ej. `https://comparador.cnmc.gob.es/comparador/QRE?cp=28013&pP1=4.6&caP1=740...` | |
| anios | No | horizonte del análisis a largo plazo (por defecto 3) | |
| consumo | No | consumo anual de luz en kWh | |
| empresa | No | suministro que no es vivienda | |
| franjas | No | consumo anual punta, llano y valle en kWh; por defecto se reparte con el perfil 2.0TD | |
| mensual | No | con qr, coste de ese periodo de facturación en vez del anual | |
| potencia | No | potencia contratada en kW (por defecto 3.45) | |
| suministro | No | qué comparar (por defecto luz); ambas añade las ofertas conjuntas y la alternativa de contratar por separado | |
| consumo_gas | No | consumo anual de gas en kWh | |
| max_ofertas | No | ofertas a devolver, las más baratas (por defecto 20) | |
| sin_permanencia | No | excluir ofertas con permanencia |
Output Schema
| Name | Required | Description |
|---|---|---|
| ofertas | Yes | |
| analisis | Yes | |
| consulta | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds material context beyond them: an uncached HTTPS call taking seconds with a 90s limit, offers that shift with the market, euro amounts excluding tax breakdown, and a concrete failure contract (`{"ok": false, "error": "ArgumentoInvalido", ...}` with the distinction between missing-argument and network failures).
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?
Purpose is front-loaded in the first clause, followed by parameter routing and then behavioral/error notes. It is dense and semicolon-heavy rather than bloated, but the packed clauses make it slightly harder to scan than a cleanly separated structure would be.
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?
For a 12-parameter, zero-required tool with an output schema, the description covers the selection matrix, defaults, precedence, cost model (euros, no tax breakdown), latency, and the failure format. An agent can call it correctly and interpret failures without opening anything else.
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 100%, so the baseline is 3, but the description adds cross-parameter interaction logic the schema cannot express: explicit `cp`, `consumo` or `potencia` override the `qr`, and without a `qr` the defaults are 3.45 kW and a 2.0TD split. That precedence rule is genuinely additive, though per-parameter meaning largely lives 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?
States a specific verb (consulta/compara) and resource (ofertas de luz y gas del comparador oficial de la CNMC), plus the ordering (de la más barata a la más cara) and the multi-year analysis scope. It also explicitly distinguishes itself from the sibling `leer_factura_qr` by noting the QR text is unnecessary here.
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?
Gives explicit routing rules: luz needs `qr` or `cp`+`consumo`; gas needs `suministro`=gas plus `cp`+`consumo_gas`; ambas combines them. It names the alternative tool (`leer_factura_qr`) and the condition under which it is not needed, which is exactly the when/when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leer_factura_archivoARead-onlyIdempotent
Busca el QR del comparador en una factura de luz del disco del servidor y devuelve los mismos datos que leer_factura_qr. ruta: si termina en .pdf (sin distinguir mayúsculas) se rasteriza con pdftoppm y se recorren las páginas hasta dar con el QR, y se usa el primero; con cualquier otra extensión se abre como imagen (PNG, JPG...). Úsala cuando tengas el archivo y no el texto del QR. Necesita el extra facturas. Sin red; segundos por PDF, más con un escaneo malo. Si falla, devuelve un error con texto JSON {"ok": false, "error": "ArgumentoInvalido", "message": "..."}: FileNotFoundError, RuntimeError (falta el extra o pdftoppm) o SinQR.
| Name | Required | Description | Default |
|---|---|---|---|
| ruta | Yes | ruta al PDF o imagen de la factura en el disco del servidor; mejor absoluta (una relativa se resuelve desde el directorio de trabajo del proceso MCP), p. ej. `/home/ana/facturas/2025-03.pdf` |
Output Schema
| Name | Required | Description |
|---|---|---|
| importe | No | |
| potencia_p1 | No | |
| potencia_p2 | No | |
| codigo_postal | Yes | |
| consumo_anual | Yes | |
| consumo_factura | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive/closed-world, yet the description adds substantial context beyond them: pdftoppm rasterization with page traversal and first-QR-wins, no network use, per-PDF latency (worse with bad scans), a missing-extra dependency, and the exact JSON error shapes for FileNotFoundError, RuntimeError and SinQR.
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?
Purpose and the key file-type branching are front-loaded, and nearly every clause carries information. It is dense and slightly run-on in the middle, but no sentence is padding.
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?
With an output schema present, return values need no explanation, and the description still covers prerequisites, error taxonomy, performance expectations and parameter interpretation. Nothing needed to invoke the tool correctly is missing.
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 100%, so the baseline is 3, but the description genuinely adds meaning: the `.ruta` value is interpreted by extension (`.pdf` case-insensitive rasterized; anything else opened as an image). This extension-branching behavior is not present 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?
States a concrete verb and resource (extract the comparator QR from a utility-bill file on the server disk) and explicitly scopes the output as identical to `leer_factura_qr`. The extension-based handling makes it immediately distinguishable from its sibling.
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?
Gives an explicit selection condition: 'Úsala cuando tengas el archivo y no el texto del QR', which routes the agent away from `leer_factura_qr` (QR text) toward this tool (file). It also states the prerequisite extra `facturas`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leer_factura_qrARead-onlyIdempotent
Interpreta el texto ya decodificado del QR de una factura de luz y devuelve sus datos. qr es la URL de comparador.cnmc.gob.es impresa en la factura; de su query se leen cp (código postal, obligatorio), pP1/pP2 (potencias, kW), caP1-caP3 (consumo anual punta/llano/valle, kWh), cfP1-cfP3 (consumo del periodo facturado) e imp (importe, euros); un campo numérico ausente o ilegible vale 0. Úsala para ver los datos; para comparar, pasa el QR a comparar_ofertas; con el archivo, leer_factura_archivo. Local e instantánea: sin red ni disco. Si falla, devuelve un error con texto JSON {"ok": false, "error": "ArgumentoInvalido", "message": "..."}: SinQR si no es un QR del comparador o falta cp (p. ej. QR de gas o de pago).
| Name | Required | Description | Default |
|---|---|---|---|
| qr | Yes | contenido del QR de la factura de luz, ya decodificado: la URL de comparador.cnmc.gob.es que lleva impresa, p. ej. `https://comparador.cnmc.gob.es/comparador/QRE?cp=28013&pP1=4.6&caP1=740...` |
Output Schema
| Name | Required | Description |
|---|---|---|
| importe | No | |
| potencia_p1 | No | |
| potencia_p2 | No | |
| codigo_postal | Yes | |
| consumo_anual | Yes | |
| consumo_factura | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so safety is covered. The description adds genuine behavioral context beyond them: execution is local and instantaneous with no network or disk, and failures return an in-band JSON envelope with concrete codes (ArgumentoInvalido, SinQR) including the case of gas/payment QRs lacking cp. It does not describe the shape of the success payload, but an output schema exists.
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?
Front-loaded with purpose, then parameter semantics, alternatives, and error behavior in a tight sequence with zero filler. The single long paragraph with run-on clauses is dense in places, which slightly hurts scannability, but every sentence carries 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?
The output schema carries return values, so the description need not explain them. It covers the input contract, the required cp prerequisite, the sibling routing, and the exact error envelope and codes an agent must handle — complete for a single-parameter, offline parser.
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 100% and the schema example already shows the query string, so baseline is 3. The description adds real meaning beyond it: the field-by-field mapping of the CNMC query (cp obligatorio, pP1/pP2 in kW, caP1-caP3 annual kWh, cfP1-cfP3 billed-period consumption, imp in euros) and the rule that an absent or unreadable numeric field is treated as 0.
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?
States a specific verb (interpreta) and resource (texto ya decodificado del QR de una factura de luz) plus the returned outcome, and explicitly names both siblings (comparar_ofertas for comparison, leer_factura_archivo for files). An agent can route correctly without opening any schema.
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?
Gives explicit when-to-use ('Úsala para ver los datos') and names the alternative plus the selecting condition for each sibling: pass the QR to comparar_ofertas to compare, use leer_factura_archivo when you have the file. Nothing is left to inference.
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.
3 tool updates
v0.2.4- Changed
comparar_ofertas1 field changed- changed
Input schema / properties / qr / descriptionPrevious value: -"contenido del QR de la factura de luz, ya decodificado (la URL de comparador.cnmc.gob.es que lleva impresa)"New value: +"contenido del QR de la factura de luz, ya decodificado: la URL de comparador.cnmc.gob.es que lleva impresa, p. ej. `https://comparador.cnmc.gob.es/comparador/QRE?cp=28013&pP1=4.6&caP1=740...`"
- Changed
leer_factura_archivo1 field changed- changed
Input schema / properties / ruta / descriptionPrevious value: -"ruta al PDF o imagen de la factura"New value: +"ruta al PDF o imagen de la factura en el disco del servidor; mejor absoluta (una relativa se resuelve desde el directorio de trabajo del proceso MCP), p. ej. `/home/ana/facturas/2025-03.pdf`"
- Changed
leer_factura_qr1 field changed- changed
Input schema / properties / qr / descriptionPrevious value: -"contenido del QR de la factura de luz, ya decodificado (la URL de comparador.cnmc.gob.es que lleva impresa)"New value: +"contenido del QR de la factura de luz, ya decodificado: la URL de comparador.cnmc.gob.es que lleva impresa, p. ej. `https://comparador.cnmc.gob.es/comparador/QRE?cp=28013&pP1=4.6&caP1=740...`"
4 tool updates
v0.2.3- Changed
comparar_ofertas2 fields changed- added
Input schema / properties / suministro / descriptionAdded value: +"qué comparar (por defecto luz); ambas añade las ofertas conjuntas y la alternativa de contratar por separado" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "analisis": { + "type": "object" + }, + "consulta": { + "type": "object" + }, + "ofertas": { + "items": { + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "consulta", + "ofertas", + "analisis" + ], + "type": "object" +}
- Removed
leer_factura - Added
leer_factura_archivo - Changed
leer_factura_qr1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "codigo_postal": { + "type": "string" + }, + "consumo_anual": { + "items": { + "type": "number" + }, + "type": "array" + }, + "consumo_factura": { + "items": { + "type": "number" + }, + "type": "array" + }, + "importe": { + "type": "number" + }, + "potencia_p1": { + "type": "number" + }, + "potencia_p2": { + "type": "number" + } + }, + "required": [ + "codigo_postal", + "consumo_anual" + ], + "type": "object" +}
3 tool updates
v0.1.0- First observed
comparar_ofertas - First observed
leer_factura - First observed
leer_factura_qr
TDQS
Scored across 3 tools
comparar_ofertas is clearly the action tool, while the two leer_factura_* tools are split by input source (QR text vs. file path) and the descriptions explicitly state which to use in each case. The two read tools share the same output purpose, so there is slight conceptual overlap, but the input distinction is documented well enough to avoid misselection.
All three names follow a consistent Spanish verb_noun snake_case pattern (comparar_ofertas, leer_factura_qr, leer_factura_archivo). The two leer_factura_* variants differ only by a meaningful suffix, so the convention is predictable throughout.
Three tools is on the lean side but fits the narrow scope of comparing offers and reading bill QR data. Each tool earns its place; the set is not padded, though it leaves little room for adjacent needs like gas bill parsing.
The core lifecycle is covered: compare light/gas offers, extract QR data from text, and extract it from a file. Minor gaps remain (e.g., no gas-bill QR reading, only electricity), but these are edge cases an agent can work around since comparison also accepts explicit cp/consumo arguments.
Maintenance
Related MCP Connectors
Real-time electricity price signals for AI agents. Spot prices, cheapest hours, and contract recommendations. 31 countries across Europe and Oceania. No authentication required.
Dutch energy market, open data computed nightly: cheapest contracts, market levels, offer lifecycle
Neoenergia (Elektro): Download + OCR, official-source lookup. Platform-hosted, pay per query with pr
Enel RJ: Download + OCR, official-source lookup. Platform-hosted, pay per query with prepaid credit.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables natural language conversations with Spain's electrical grid data through Claude, providing real-time access to electricity demand, generation, prices, and emissions data from Red Eléctrica de España (REE).1811MIT
- AlicenseAqualityCmaintenanceFetches Spanish electricity prices (PVPC) from Red Eléctrica de España's API, providing hourly tariff data for different geographical areas and customizable date ranges.180 npmMIT
- 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.-
- AlicenseAqualityCmaintenanceAI agent for Italian energy tariff comparison. Analyzes electricity and gas bills, compares 44+ offers from 13 providers, estimates savings with full ARERA regulated cost breakdown7MIT