catalogo-fuentes-publicas
Click on "Deploy 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., "@catalogo-fuentes-publicasbusca la fuente de licitaciones y dime sus endpoints"
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.
Administración fuentes públicas
Spanish public data, ready to build products on: where each dataset lives, how to call it, what it returns and the traps that change the numbers, verified with real calls; plus code that fetches it already solved. Start at llms-min.txt or the MCP server.
Datos públicos de España listos para construir productos. Para cada fuente: dónde está, cómo pedirla, qué devuelve y qué falla, comprobado con llamadas reales, y código que ya trae el dato resuelto. Pensado para startups, desarrolladores y agentes de IA.
Empieza aquí
Con un agente (MCP):
uvx --from git+https://github.com/BquantFinance/Administracion-fuentes-publicas mcp-catalogo,, o en Claude Code
/plugin marketplace add BquantFinance/Administracion-fuentes-publicasy/plugin install fuentes-publicas@fuentes-publicas.buscarencuentra la fuente,fichada endpoints y trampas, yperfil_municipio,coyuntura,empresa_nify el resto traen el dato (herramientas).Con código:
pip install "fuentes-publicas-mcp @ git+https://github.com/BquantFinance/Administracion-fuentes-publicas". Clientes que ya resuelven certificados, codificaciones y paginación (scripts/clientes), un almacén local en Parquet para lo que las APIs no dejan consultar (guía) y ejemplos que funcionan.Leyendo:
llms-min.txtpara orientarse y la ficha de cada fuente ensources/.
Related MCP server: Datos.gob.es-MCP
Qué puedes construir hoy
Cada producto con piezas que ya funcionan; frescura, volumen medido, licencia y la trampa que más cuesta en indices/productos.yaml. Antes de vender: licencias, cita y datos personales.
producto | para quién | fichas | piezas |
radar-licitaciones · Avisos de licitaciones nuevas por CPV, provincia u órgano de contratación | pymes y consultoras que licitan con la Administración | placsp-datos-abiertos, dir3-directorio | fuentes-radar con ejemplos/radar/ (aviso diario en GitHub Actions: issue, RSS y JSON; CPV, NUTS, importe y palabras); almacen.py sync --fuentes placsp para histórico y búsquedas |
inteligencia-competidores · Quién gana los contratos de un sector u órgano, a qué importe y contra cuántas ofertas | empresas que licitan, analistas de contratación pública, periodistas | placsp-datos-abiertos | almacen.py (tabla placsp_adjudicaciones y vista adjudicaciones_ultimo); ejemplos/adjudicaciones.py; herramienta almacen_sql |
radar-ayudas · Convocatorias de subvenciones nuevas que encajan con el perfil de una empresa (sector, región, tipo de beneficiario) | pymes, gestorías y consultoras de financiación pública | bdns-api, boe-api-sumario | fuentes-radar con ejemplos/radar/ (convocatorias nuevas por palabras y nivel, aviso diario); scripts/clientes/bdns.py (convocatorias y concesiones paginadas, altas por fecha de alta) |
kyb-proveedores · Ficha de riesgo de un proveedor o cliente por NIF (ayudas, contratos, actos mercantiles, prohibiciones de contratar) | departamentos de compras, fintech de crédito, compliance | bdns-api, placsp-datos-abiertos, borme-api-sumario, hacienda-registro-licitadores | herramienta empresa_nif (por NIF o por nombre, que resuelve el NIF con el directorio de la BDNS) y ejemplos/empresa_nif.py; con almacén local añade contratos adjudicados y actos del BORME |
leads-sociedades-nuevas · Sociedades recién constituidas por provincia y objeto social, con capital y domicilio | proveedores B2B (asesorías, bancos, software de gestión, seguros) | borme-api-sumario | fuentes-radar con ejemplos/radar/ (constituciones por provincia, objeto social y capital, aviso diario); almacen.py sync --fuentes borme para el histórico; empresa_nif con la denominación para el NIF |
informe-ubicacion · Informe de una localización (población, renta, paro, vivienda, criminalidad y colegios, salud y recarga a 1 km) para inmobiliarias, retail y franquicias | inmobiliarias, cadenas de retail y franquicias, proptech | ine-api-tempus, sepe-estadisticas, interior-criminalidad, mivau-precios-vivienda-alquiler, catastro-ovc, centros-docentes-ccaa, centros-sanitarios-ccaa, dgt-datex-trafico | herramienta perfil_municipio con el municipio, una dirección o «lat,lon» (CP, referencia catastral del portal y, con dirección, el bloque cerca) y ejemplos/mi_municipio.py; datos/municipios.csv para pasar entre códigos |
comparador-carburantes · Gasolineras más baratas cerca y evolución de precios por estación para conductores y flotas | apps de movilidad, gestores de flotas, comparadores | minetur-precios-carburantes | ejemplos/carburante_cerca.py; almacen.py sync --fuentes carburantes para la serie diaria por estación |
monitor-regulatorio · Avisos de normas nuevas o modificadas por materia y del texto vigente de un artículo | despachos, compliance, legaltech | boe-api-sumario, boe-api-legislacion-consolidada, boe-eli | fuentes-radar con ejemplos/radar/ (BOE por sección, departamento y palabras, aviso diario); scripts/clientes/boe.py (normas actualizadas ayer y versión vigente de un bloque) |
panel-macro · Panel de coyuntura (IPC, paro, PIB, Euríbor, prima de riesgo) para fintech, medios y asesores | fintech, medios, asesores financieros | ine-api-tempus, bde-estadisticas | herramienta coyuntura (consulta.coyuntura); los 90 ZIP del Banco de España con descarga condicional para series completas |
precio-electricidad · Precio de la electricidad por cuarto de hora para apps de ahorro, domótica y recarga de vehículos | apps de consumo, domótica, puntos de recarga | omie-mercado | ficha omie-mercado (ficheros marginalpdbc por día y ZIP anual) |
buscador-medicamentos · Buscador de medicamentos con presentaciones, prospecto y problemas de suministro | farmacias, healthtech, apps de pacientes | aemps-cima-api | ficha aemps-cima-api (API REST JSON sin clave) |
agritech-parcelas · Información de una parcela agrícola por coordenadas (uso, superficie, Red Natura, zonas vulnerables a nitratos) | agritech, cooperativas, aseguradoras agrarias | mapa-sigpac, catastro-ovc | perfil_municipio con «lat,lon» (recinto, uso, superficie y referencia catastral de la parcela, municipio INE); scripts/clientes/ogc.py (recintos por bbox siguiendo next) |
viviendas-turisticas · Mapa y censo de viviendas turísticas por municipio, barrio o calle, con licencia frente a anuncios en plataformas | proptech, ayuntamientos, asociaciones vecinales, gestores de alquiler, hoteleros | viviendas-uso-turistico, ine-api-tempus, cnig-centro-descargas | perfil_municipio (bloque viviendas_turisticas: INE en toda España y registro en Cataluña, Madrid y Comunitat Valenciana); los listados con dirección y referencia catastral de Socrata y CKAN; ubicar para cruzar por referencia catastral |
eficiencia-energetica-edificios · Etiqueta energética de un edificio y reparto de letras por municipio para rehabilitación, hipotecas verdes y proptech | empresas de rehabilitación y ESE, bancos (financiación verde), proptech, administradores de fincas | certificados-eficiencia-energetica, cnig-centro-descargas, catastro-ovc | perfil_municipio con una dirección (bloque certificados_energeticos: el último certificado por inmueble de la parcela en Cataluña y la Comunitat Valenciana); Socrata con $group para el reparto por municipio en Cataluña; CSV y 7z en Madrid y Andalucía |
Lo que no dice la documentación oficial
Algunos ejemplos, comprobados con llamadas reales:
La exportación de la BDNS devuelve 50 filas aunque haya miles si no pasas
pageSize, y no avisa. Y para sincronizarla no sirve la fecha de concesión: las del 15/01/2025 se siguieron dando de alta hasta agosto de 2026 (el filtro bueno,fechaRegInicio, no está documentado).Para filtrar un municipio, el INE no quiere su código (
02001) sino un Id interno (6124). En SIGPAC y Catastro, Madrid es28:900, no28079, y otros 4.448 municipios cambian de número (tabla de equivalencias).El IPC del último mes es un avance que se revisa, y el PIB que se publica es el corregido: 0,68 % trimestral en 2026T2 frente al 4,79 % de la serie sin corregir.
En el CSV del paro registrado del SEPE, Oza-Cesuras sale con 0 parados y Cerdedo-Cotobade no aparece: sus datos van con los códigos de antes de la fusión.
Muchos servidores
.gob.esenvían el certificado FNMT sin la intermedia: el navegador entra,curlyrequestsfallan (arreglo).Los CSV de los portales PC-Axis llegan en UTF-8 aunque la cabecera diga ISO-8859-15, y el del SEPE en Windows-1252 aunque diga UTF-8.
En GBIF la encina ibérica es sobre todo Quercus rotundifolia (1,3 millones de registros en España); preguntar por Quercus ilex, que es lo que devuelve el buscador de nombres, da 21.322 sin ningún aviso. Y 41,6 de sus 95,8 millones de registros en España son CC BY-NC.
Fuentes catalogadas: 102. Alcance actual: Administración General del Estado y, desde octubre de 2026, las cuatro comunidades más pobladas (Madrid, Cataluña, Andalucía y Comunitat Valenciana) y los ayuntamientos de Madrid y Barcelona. Después: resto de comunidades y entidades locales, Cortes y Poder Judicial, Unión Europea.
Principios
Una ficha por fuente, en YAML, con campos fijos validados contra un esquema. Sin prosa de relleno: cada línea ahorra una búsqueda.
Fuente única de verdad. Solo se editan
sources/**/*.yaml. Índices,catalog.jsonyllms*.txtse generan.Lo que no dice la documentación oficial. El campo
gotchasrecoge los detalles que hacen perder horas: cabeceras obligatorias, codificaciones raras, límites no documentados, URLs que cambian. Las trampas silenciosas, las que dan una cifra incompleta o distinta sin ningún error, van aparte enalerts, y el servidor MCP las devuelve lo primero.Verificación explícita.
verifiedlleva la fecha de la última prueba real del endpoint, onull. Un job semanal comprueba que las URLs siguen respondiendo.Top-down. Se cubren primero las fuentes de mayor uso e impacto, sector a sector, hasta cubrirlo todo.
Sectores
sector | descripción | fuentes |
Legislación y boletines oficiales | 6 | |
Economía, finanzas y mercados | 5 | |
Hacienda, tributos y presupuestos | 6 | |
Estadística oficial | 7 | |
Contratación pública y subvenciones | 3 | |
Empleo y Seguridad Social | 3 | |
Gobierno abierto, transparencia y organización administrativa | 12 | |
Territorio, catastro y cartografía | 5 | |
Meteorología y clima | 2 | |
Medio ambiente, agua y biodiversidad | 5 | |
Energía | 5 | |
Sanidad y medicamentos | 6 | |
Ciencia e investigación (biología, química, geología, oceanografía) | 7 | |
Agricultura, pesca y alimentación | 4 | |
Transporte y movilidad | 7 | |
Comercio exterior, industria y propiedad industrial | 4 | |
Educación y universidades | 3 | |
Justicia, interior y seguridad | 1 | |
Cultura y patrimonio | 2 | |
Demografía, migraciones y sociedad | 4 | |
Vivienda y urbanismo | 3 | |
Telecomunicaciones y sociedad digital | 1 | |
| Acción exterior y cooperación | 0 |
Consumo y seguridad alimentaria | 1 | |
| Defensa | 0 |
Estructura
sources/<sector>/<id>.yaml fichas (fuente de verdad)
sources/<sector>/README.md índice del sector (generado)
schema/source.schema.json esquema de ficha
schema/vocab.yaml vocabulario controlado: sectores, acceso, auth, formatos
catalog.json todo el catálogo (generado)
llms-min.txt, llms.txt, llms-full.txt entrada para agentes, de menos a más (generado)
indices/*.yaml productos, recetas por intención, necesidades, identificadores, códigos que son parámetros, rutas muertas (fuente de verdad)
indices/README.md los seis índices en texto (generado)
ejemplos/ proyectos pequeños que funcionan (carburante, BOE, licitaciones, municipio, subvenciones)
plugins/, .claude-plugin/ plugin de Claude Code con la skill y el servidor MCP
datos/municipios.csv los 8.132 municipios con su código INE, Id del INE Tempus, SIGPAC y Catastro, DIR3, NIF, NUTS3 y coordenadas (scripts/municipios.py)
scripts/ validate.py, build.py, check_links.py, check_recetas.py, check_ejemplos.py, fnmt_bundle.py, mcp_catalogo.py (servidor MCP local)
scripts/clientes/ sesión HTTP, clientes CKAN, Socrata, PC-Axis, ArcGIS y OGC, cargadores (BOE y BORME, BDNS, AEMET, INE, PLACSP, DataComex, Saiku) y almacén local en Parquet
scripts/clientes/muestras/ respuestas reales recortadas para probar los parsers sin red (python scripts/test_clientes.py)
evals/ 24 tareas con respuesta esperada para medir lo que aporta el repo a un agente
templates/source.yaml plantilla de ficha
guides/ guías transversales (cliente HTTP, identificadores, servidor MCP, reutilización y datos personales, almacén)Uso rápido
# Todo el catálogo
curl -s https://raw.githubusercontent.com/BquantFinance/Administracion-fuentes-publicas/main/catalog.json
# Fuentes de un sector con API REST y sin autenticación
curl -s .../catalog.json | jq '.sources[] | select(.sector=="economia-finanzas" and (.access|index("api-rest")) and .auth=="none") | .id'# pip install "fuentes-publicas-mcp @ git+https://github.com/BquantFinance/Administracion-fuentes-publicas"
from fuentes_publicas.clientes import ckan, socrata, pcaxis, arcgis, ogc
from fuentes_publicas.clientes.sesion import sesion # requests.Session con FNMT, User-Agent, reintentos y bloqueos
pcaxis.tabla(24077)[:3] # IPC del INE en CSV: UTF-8 real, coma decimal y periodo sin dato como None
list(socrata.filas("gn9e-3qhr")) # 87.930 filas de la Generalitat, no las 1.000 que da Socrata sin $limit
list(ckan.filas("cnmc", rid)) # todas las filas del datastore aunque el portal recorte limit a 32.000
ckan.comparar("comunidad-madrid", rec) # el datastore del padrón tiene 5.000 filas; el CSV, 18.718Índices para agentes
Además de las fichas, indices/ responde a las preguntas que se hacen antes de elegir una fuente:
Productos: qué se puede construir hoy, para quién y con qué piezas.
Recetas por intención: procedimientos verificados que encadenan fichas (de un NIF a sus subvenciones y contratos, de unas coordenadas a la referencia catastral, del sumario del BOE al texto consolidado). Cada receta lleva comprobaciones que
python scripts/check_recetas.pyejecuta contra los servidores reales.Dónde está cada cosa: necesidades habituales con la ficha que las resuelve y la nota que evita el desvío típico.
Identificadores: los códigos que cruzan datasets, con regex, ejemplo, emisor y vías verificadas de conversión.
Códigos que son parámetros: valores que las APIs exigen y no se adivinan (Id del INE para
tv, países de DataComex, estación de AEMET por capital, productos de carburantes, rangos del BOE), obtenidos con llamadas reales.Rutas muertas: URLs de documentación antigua que ya no sirven y su sustituta.
Medido (evals/): en diez tareas resueltas por el mismo agente con y sin catálogo (dos modelos), el acierto fue el mismo; con catálogo, en las tareas difíciles las llamadas HTTP y los pasos del agente bajan a la mitad y las fallidas casi a cero. En tareas con trampas silenciosas y un modelo pequeño (Haiku, tres repeticiones, tokens medidos turno a turno), el acierto pasa de 3 de 21 sin catálogo a 13 de 21 con el servidor MCP, con un 43 % menos de tokens; con las alertas, las trampas que aún fallaban pasan de 5 a 18 de 18.
Todo en indices/README.md y, para consumo programático, bajo la clave indices de catalog.json. Cada endpoint principal de una ficha lleva example (llamada copiable) y returns (forma de la respuesta vista en esa llamada). python scripts/mcp_catalogo.py expone el catálogo por MCP en local para cargar solo lo necesario (guía).
Contribuir
Lee CONTRIBUTING.md. Resumen: copia templates/source.yaml, rellena, ejecuta python scripts/validate.py && python scripts/build.py, abre un PR.
Licencia
Catálogo y documentación: CC0 1.0. Los datos a los que apuntan las fichas tienen cada uno su propia licencia, indicada en el campo license.
Available Tools
13 toolsalmacen_sqlB
SQL de solo lectura (DuckDB) sobre el almacén local en Parquet si existe: tablas boe, borme, bdns, placsp, placsp_adjudicaciones y carburantes (PLACSP con una fila por versión y columna feed: 643 perfiles alojados, 1044 plataformas agregadas, 1143 menores), y vistas placsp_ultimo (una por id, con anulada) y adjudicaciones_ultimo; borme.actos es lista (list_contains(actos, 'Constitución')). Devuelve columnas, filas y cobertura; sin almacén, cómo crearlo.
| Name | Required | Description | Default |
|---|---|---|---|
| limite | No | ||
| consulta | 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 is read-only, returns columns, rows, and coverage, and provides instructions to create the store if missing. It also warns that borme.actos is a list requiring list_contains, which is valuable behavioral context.
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 a single dense sentence with the main purpose front-loaded, but it includes extraneous details (e.g., exact counts of perfiles, plataformas, menores) that may not help an agent invoke the tool correctly. It could be more concise and better structured.
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 complexity of a SQL query tool with two undocumented parameters, no annotations, and no output schema, the description covers the available tables, views, return format, and store fallback. However, it leaves a significant gap by not explaining the 'limite' parameter or the expected format of 'consulta', which are essential for correct 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 description coverage is 0%, so the description must explain parameters. It implies 'consulta' is a SQL query but never defines it explicitly, and it completely omits the 'limite' parameter (default 100) — leaving the agent without guidance on how to limit results or what the parameter does.
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 (SQL de solo lectura) and resource (almacén local en Parquet) and enumerates the available tables and views. This is clear enough for an agent to understand it runs read-only SQL queries over a local data store, though it doesn't explicitly compare to sibling tools like ckan_buscar or ckan_filas.
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?
Mentions a precondition ('si existe') and a fallback ('sin almacén, cómo crearlo'), which implies when the tool is usable. However, it never states when to choose this tool over alternatives (e.g., for ad-hoc SQL vs. structured lookups), leaving selection guidance implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
boe_sumarioA
Disposiciones de un día del BOE (diario=boe) o del BORME (diario=borme); fecha AAAA-MM-DD. Filtra por código de sección (1, 2A, 2B, 3, 4, 5A) y por texto en el título. Domingos y festivos no hay boletín.
| Name | Required | Description | Default |
|---|---|---|---|
| fecha | Yes | ||
| texto | No | ||
| diario | No | boe | |
| seccion | No | ||
| max_items | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses the date format, the two bulletin sources, the section-code filter, the title-text filter, and the Sunday/holiday emptiness caveat — useful behavioral context. It is silent on result shape and on the effect of max_items (default 200), which matters for a listing tool with no output schema.
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?
Two dense clauses front-load the operación (which bulletin, which day) before the filter and caveat details. Every sentence carries information; the only omission is the untied max_items, not wasted words.
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 5-parameter listing tool with no annotations and no output schema, it covers sources, filters, and the empty-day case well. It leaves an agent guessing about the max_items default behavior and the structure of the returned 'disposiciones', which is a meaningful gap when no output schema exists.
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 compensate, and it does for 4 of 5 parameters: it explains fecha's 'AAAA-MM-DD' format, diario's boe/borme values, the valid sección codes (1, 2A, 2B, 3, 4, 5A), and texto's title-matching semantics. Only max_items is left unexplained.
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 names a specific resource ('Disposiciones de un día') and its two possible sources (BOE via diario=boe, BORME via diario=borme), so an agent knows exactly what it retrieves. Siblings are unrelated datasets, so explicit differentiation is unnecessary, but the verb (list/retrieve) is only implied rather than stated.
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?
It provides one genuine usage constraint — 'Domingos y festivos no hay boletín' — which tells the agent when a call will return nothing, plus the allowed diario and sección values. However, it never states when to prefer this over alternatives (e.g. a search tool) or what to do for holiday dates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buscarB
Busca a la vez fichas (resumen, alerts y code si hay código que ya la trae), recetas que cruzan fuentes, necesidades con la ficha que las resuelve, productos que se pueden construir e identificadores. Devuelve un índice ligero; el detalle, con ficha(id).
| Name | Required | Description | Default |
|---|---|---|---|
| limite | No | ||
| sector | No | ||
| consulta | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool performs a cross-source search and returns a light index, but says nothing about result ordering, what the light index contains, how 'limite' behaves, or whether 'sector' scopes results. Those are meaningful gaps for a search 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 two sentences and front-loads the search scope before the return/handoff behavior. It is dense but each clause serves a purpose; the parenthetical about 'resumen, alerts y code' could be trimmed slightly.
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 a multi-entity search with three undocumented parameters, no annotations, and no output schema. The description covers purpose and the handoff to ficha(id), but omits parameter semantics and key behavior such as pagination via 'limite' and sector filtering, leaving significant gaps for correct 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 description coverage is 0% for all three parameters (consulta, limite, sector), and the description never mentions any of them or explains their meaning, defaults, or interaction. The description provides no compensation for the undocumented 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 names a specific verb (Busca) and enumerates exactly what is searched across: fichas, recetas, necesidades, productos e identificadores. It also distinguishes itself from the sibling ficha by stating it returns a light index while detail comes from ficha(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?
It clearly routes the agent: use this tool for discovery across multiple entity types and then call ficha(id) for detail. It does not explicitly compare against ckan_buscar or codigos, so there is room for more explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ckan_buscarB
Conjuntos de un portal CKAN con sus recursos (id, formato, si tiene datastore, url de descarga). portal: comunidad-madrid, madrid, barcelona, gva, andalucia, cnmc, renfe o la URL de su /api/3/action.
| Name | Required | Description | Default |
|---|---|---|---|
| texto | Yes | ||
| limite | No | ||
| portal | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden; it does disclose the shape of returned items (id, format, datastore presence, download URL), which signals a read-only listing. It says nothing about pagination via limite, error behavior for unknown portals, or whether network access to arbitrary portal URLs is permitted.
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?
Two compact sentences, with the return payload listed up front and portal values second. Slightly telegraphic phrasing ('portal: ...') but no wasted sentences.
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?
There is no output schema, and the description usefully enumerates the returned fields, which covers the return-value gap. But for a 3-parameter search tool with zero schema coverage, the missing explanation of the required 'texto' and the 'limite' default is a real omission.
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 compensate. It does well on 'portal' by enumerating valid values (substituting for a missing enum) and the /api/3/action URL form, but 'texto' and 'limite' are never explained – texto is required yet its search semantics are undefined.
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?
Names the resource (CKAN portal datasets plus their resources) and enumerates the fields returned, so an agent knows this is a discovery/search call. It does not explicitly contrast with the sibling ckan_filas, which presumably fetches dataset rows, leaving the boundary fuzzy.
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 statement of when to use this versus ckan_filas, descargar, or socrata_filas. The discovery-then-rows workflow is only inferable from the sibling names, not from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ckan_filasA
Filas del datastore de un recurso CKAN con filtros por igualdad ({"Territorio": "Madrid"}), paginando sin el tope silencioso del portal. Devuelve total_datastore: compáralo con el fichero antes de dar un total.
| Name | Required | Description | Default |
|---|---|---|---|
| limite | No | ||
| portal | Yes | ||
| filtros | No | ||
| recurso | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose two non-obvious traits: the portal silently truncates results, and the response carries a total_datastore field that should be reconciled against the file. It does not cover auth needs, rate limits, or how pagination state is carried between calls.
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?
Two dense sentences with no filler, and the capability plus its key caveat are front-loaded. The final clause is slightly compressed ('compáralo con el fichero') and could be a touch clearer, but nothing is wasted.
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?
No output schema and no annotations mean the description is the only context, and it covers the return field and the truncation gotcha. However, it claims pagination while the schema exposes only 'limite' with no offset or cursor parameter, leaving the actual paging mechanism unexplained.
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% across four parameters, so the description must compensate. It does well for 'filtros' by giving a concrete equality example ({"Territorio": "Madrid"}) and implies 'limite' via pagination, but leaves 'portal' and 'recurso' (URL vs. id/slug) undefined.
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 and resource: read datastore rows of a CKAN resource, with equality filters and pagination. An agent can distinguish this from ckan_buscar (dataset search) and socrata_filas (different portal family) by the 'datastore de un recurso CKAN' phrasing, though no sibling is named explicitly.
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?
Usage is implied rather than stated: use it when you need filtered rows without the portal's silent cap. The closing instruction ('compáralo con el fichero antes de dar un total') is a useful workflow rule for totals, but there are no explicit exclusions or named alternatives for when a different tool is preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
codigosA
Códigos que una API exige y no se adivinan (Id del INE para tv, países de DataComex, estaciones de AEMET, productos de carburantes, rangos del BOE). Sin grupo, la lista de grupos; con grupo, sus entradas.
| Name | Required | Description | Default |
|---|---|---|---|
| grupo | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It usefully explains the dual-mode behavior (no group returns the group list; with group returns that group's entries), which is real behavioral context. It does not state that this is a static read-only lookup, whether results are cached or exhaustive, or anything about permissions, leaving gaps for an annotation-free 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?
Two dense sentences with the purpose front-loaded and the parameter behavior following. Every clause carries information; the parenthetical example list is long but earns its place by supplying the missing enum values.
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 single-optional-parameter lookup with no output schema and no annotations, the description covers both invocation modes and the shape of the return (group list vs. entries). Minor gap: it does not describe what an individual entry contains (code plus label?), which matters since there is no output schema.
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%, so the description must compensate, and it does: it explains exactly what omitting 'grupo' yields versus supplying it. The parenthetical list (tv, DataComex, AEMET, carburantes, BOE) effectively supplies example group values that the schema lacks. It does not enumerate exact accepted group identifiers, so not a 5.
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 identifies a specific resource (API lookup codes) and grounds it with concrete examples (INE tv id, DataComex countries, AEMET stations, fuel products, BOE ranges), so an agent understands it is a reference/enumeration tool. The verb is nominal/implicit rather than a stated action, and no sibling tool is named as a contrast, so it stops short of a 5.
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?
Usage is implied by the framing ('codes an API requires and you can't guess'), which tells the agent to reach for this before calling code-dependent tools. However, there is no explicit when-to-use/when-not, no mention of alternatives among the many siblings (ckan_buscar, boe_sumario, tabla_pcaxis), and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coyunturaA
Último dato de coyuntura de España con periodo, serie y fuente: IPC (marcando si es avance), paro EPA, PIB corregido, paro registrado, Euríbor, dólar, deuda PDE, bono a 10 años y prima de riesgo.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 does disclose return content (period, series, source, and whether the IPC figure is an advance/flash estimate), which is genuinely useful. It does not state data freshness, units, caching, or what happens if a series is unavailable — notable gaps for a no-annotation tool, but the read-only nature is implicit and the payload description is above average.
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?
A single sentence, front-loaded with the core purpose ("Último dato de coyuntura de España") before the indicator enumeration. The list of indicators is long but each item earns its place by telling the agent exactly what data will come back; no filler.
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 no annotations, no output schema, and no parameters, the description is the only source of truth. It covers which indicators and which metadata fields come back, but omits units, reference-period conventions, data source authority, and failure behavior — details an agent would want before relying on the numbers.
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 tool takes zero parameters, so there are no semantics to document and the baseline of 4 applies. The description instead spends its words on the returned content, which is the right allocation for a zero-arg tool.
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 resource ("Último dato de coyuntura de España") and enumerates exactly which indicators are covered: IPC with advance flag, EPA unemployment, corrected GDP, registered unemployment, Euribor, dollar, PDE debt, 10-year bond, risk premium. The macro-economic domain is clearly distinct from the sibling tools (empresa_nif, perfil_municipio, ckan_buscar, boe_sumario), though no sibling is named explicitly.
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?
"Último dato" implicitly scopes usage to the latest snapshot rather than historical series, which is a useful usage signal. However, there is no explicit when-to-use, no prerequisites, and no routing to alternatives (e.g., almacen_sql for custom queries). Usage must be inferred from the domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
descargarA
Descarga una URL pública resolviendo certificados FNMT, User-Agent, reintentos, gzip y codificación, y la resume (CSV, JSON, xlsx o ZIP). Avisa de bloqueos de WAF, añade las alerts de la ficha del host y la sustituta si la URL está muerta. Hasta 25 MB. Para cuando tu fetch falle con un .gob.es o para ver qué devuelve una URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| desde | No | ||
| max_caracteres | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses the 25 MB cap, retry/gzip/encoding handling, WAF-block reporting, that alerts from the host's ficha are appended, and that a substitute is offered for dead URLs — all behavior an agent could not infer. Gaps remain on authentication requirements and whether repeated calls are cached or counted against any quota.
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 core action is front-loaded in the opening clause and the second sentence adds the use case without restating anything. The first sentence is very densely packed with clauses, which slightly slows parsing but each clause contributes distinct 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?
Behavior is rich enough to call the tool safely, but with no output schema and 0% schema description coverage, the description should explain what the returned summary looks like and what desde/max_caracteres control. As written, an agent can invoke it but not tune it.
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 explain all three parameters. It only implicitly suggests truncation via "la resume", and the parameters desde and max_caracteres (offset and truncation length) are never mentioned or explained, leaving their semantics and units entirely undocumented.
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 and resource ("Descarga una URL pública") and immediately qualifies it with the machinery it handles: FNMT certificates, User-Agent, retries, gzip, encoding, and a summary in CSV/JSON/xlsx/ZIP. This is clearly distinct from siblings like buscar, ficha, ckan_buscar, which search or look up metadata rather than fetch a raw URL.
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?
"Para cuando tu fetch falle con un .gob.es o para ver qué devuelve una URL" gives a concrete triggering condition, which is exactly the kind of routing signal an agent needs. It stops short of naming siblings to prefer instead or stating when-not to use it (e.g., for JSON APIs already covered by ckan_filas or socrata_filas).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
empresa_nifA
Lo público de una empresa o entidad por NIF: si es sector público (con DIR3), subvenciones, ayudas de Estado y minimis con totales (BDNS), ayudas de la AEI y prohibiciones de contratar; con almacén local, contratos adjudicados y actos del BORME. Con un nombre en vez de NIF, candidatos con su NIF (directorio de la BDNS y del almacén, sin personas físicas), o el perfil si uno coincide exacto. Con una lista de hasta 10, todos en una llamada.
| Name | Required | Description | Default |
|---|---|---|---|
| nif | Yes | ||
| max_filas | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: name-mode returns ranked candidates and explicitly excludes natural persons ('sin personas físicas'), exact matches return the profile directly, and batch is capped at 10. It is implicitly read-only but never states response shape, empty-result behavior, or the meaning/default of max_filas.
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?
Every clause carries substantive information, but the whole definition is a single run-on paragraph chained with semicolons, making it hard to parse quickly. Front-loading is good, yet the three usage modes would scan far better as separated sentences or bullets.
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 no output schema, the description does the heavy lifting by enumerating the returned data categories, and it explains input modes. The main gap is the max_filas parameter and any note on result volume/pagination, but overall it is sufficient for an agent to call the tool 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 coverage is 0%, so the description must compensate. It thoroughly explains the nif parameter's three accepted forms (single NIF, name, list up to 10), but says nothing about max_filas, which has a default of 5 and is undocumented in both schema and description.
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 precisely enumerates the resource (empresa/entidad) and the exact data domains it returns: sector público/DIR3, subvenciones, ayudas de Estado, minimis (BDNS), ayudas AEI, prohibiciones de contratar, contratos adjudicados and actos del BORME. It also states lookup modes (NIF, name, list). It does not explicitly differentiate itself from siblings like buscar or ficha, relying on the domain specificity of 'por NIF' instead.
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?
Explicit mode-selection guidance is given: pass a NIF for full entity data, a name when you only have a name (candidates with their NIFs), and a list of up to 10 for batch. What's missing is when NOT to use it or which sibling to pick for adjacent lookups, but the conditional usage within the tool is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fichaC
Detalle de cualquier id de buscar: fuente (alerts y code primero, endpoints con ejemplo y respuesta, sync, gotchas), receta (pasos), producto (piezas, frescura, licencia, trampa) o identificador (regex, cruces). Si no existe, ids parecidos.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it does disclose the returned content per id type (endpoints with example and response, sync, gotchas, steps, freshness, license, regex, cross-references) and the near-miss fallback on missing ids. That is meaningful output-content disclosure, but it never states read-only behaviour, whether any lookup is rate-limited or cached, or what the near-match response looks like structurally.
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?
It is a single dense run-on sentence with deeply nested parenthetical lists, so the core fact (returns detail for an id from buscar) is buried and the fallback behaviour is tacked on the end. Compact, but under-structured rather than 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?
For a simple one-parameter read lookup with no output schema, the description does cover the broad shape of returned data and the missing-id case, which is close to sufficient. It falls short on id formatting and on distinguishing this from the many topic-specific siblings, which an agent would need before choosing it.
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% for the single required 'id' parameter, so the description must compensate. It does add real semantics by enumerating the four kinds of ids accepted (source, recipe, product, identifier), implying the id is polymorphic and resolved by prefix/type; however it gives no format, syntax, or example values, leaving the agent to guess.
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 states it returns detail for any 'id' produced by the sibling tool 'buscar', which does differentiate it from a plain search. However, the phrasing ('Detalle de cualquier id de buscar') is dense jargon and the enumerated categories (fuente, receta, producto, identificador) are opaque without domain knowledge, so an agent must infer what 'detail' actually means.
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?
Usage is only implied: the id is described as coming from 'buscar', suggesting this is a follow-up lookup tool. The fallback behaviour ('Si no existe, ids parecidos') is a useful hint, but there is no explicit when-to-use versus siblings like 'codigos' or 'empresa_nif', nor any stated exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perfil_municipioA
Un municipio (nombre, código INE, SIGPAC, DIR3 o NIF) o el de una dirección («calle Alcalá 50, Madrid») o «lat,lon» en una llamada: sus códigos en cada sistema (SIGPAC y Catastro numeran distinto que el INE), padrón, renta media, paro y contratos del año por mes, criminalidad, viviendas turísticas (INE y registro autonómico) y compraventas y valor tasado de vivienda; con dirección o coordenadas, además ubicacion (CP, coordenadas y referencia catastral del portal; exacta=false si la calle hallada no es la pedida; en el campo, recinto SIGPAC, uso y referencia de la parcela), certificados energéticos del edificio (Cataluña y C. Valenciana) y, a menos de 1 km, puntos de recarga, colegios y centros de salud y hospitales con los tres más cercanos. solo_codigos=True da solo los códigos y la ubicación. Con una lista de hasta 20, en una llamada.
| Name | Required | Description | Default |
|---|---|---|---|
| municipio | Yes | ||
| solo_codigos | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses coverage caveats (energy certificates only for Cataluña and C. Valenciana), accuracy flags (exacta=false when the matched street differs), proximity radii (under 1 km, three nearest facilities), and the 20-item batch limit. It omits failure behavior, missing-data handling and any auth/rate context.
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?
There is little filler, but the whole description is one semicolon-chained run-on with the key structural fact (solo_codigos) and the batch limit buried at the end. It is dense rather than front-loaded, which makes it slow to parse for an agent.
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 no output schema and only two parameters, the description does the heavy lifting on return contents and conditional fields (location, parcel info, nearby facilities). What it lacks is any statement about behavior when data is unavailable for a municipality or when a lookup fails.
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%, so the description must compensate entirely, and it does: 'municipio' is documented as accepting a bare name, INE/SIGPAC/DIR3/NIF codes, an address string, or 'lat,lon', plus an array of up to 20, and solo_codigos is explained as returning only codes and location. Both parameters gain meaning well beyond their 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 names the resource (a municipality, by name/code/address/coords) and enumerates exactly what comes back: cross-system codes, padrón, income, unemployment, crime, tourist housing, home sales and appraised value. That makes the purpose concrete without opening the schema. It never distinguishes itself from the sibling 'codigos', which likely overlaps on the code-lookup portion.
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?
Accepted input forms (name, INE, SIGPAC, DIR3, NIF, address, 'lat,lon', or up to 20 in one call) and the solo_codigos shortcut imply when the tool is a fit, and the note about addresses/coordinates unlocking location and nearby POIs hints at scope. But there is no explicit when-to-use / when-not guidance and no mention of the alternative 'codigos' tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
socrata_filasC
Filas de un conjunto de la Generalitat de Catalunya (analisi.transparenciacatalunya.cat, id como gn9e-3qhr) con SoQL; números ya convertidos. Los nombres de campo van sin caracteres no ASCII (estaci por Estació).
| Name | Required | Description | Default |
|---|---|---|---|
| order | No | ||
| where | No | ||
| limite | No | ||
| select | No | ||
| conjunto | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It adds two useful facts (values come back already type-converted, field names must be ASCII-stripped), but says nothing about read-only semantics, the default 100-row cap, pagination behavior, rate limits, or what the response looks like for a tool that clearly has a truncated default result set.
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?
Two compact clauses, front-loaded with the resource and portal, with no filler. The parenthetical id and the ASCII note are dense but each carries information; the phrasing is somewhat telegraphic and the SoQL hint is buried at the end rather than attached to the parameters it governs.
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?
A five-parameter query tool with no annotations, no output schema, and no parameter descriptions needs the description to explain both the query model (SoQL clauses, result limits) and the return shape. It covers the dataset id format and one data-formatting quirk but leaves the default limit, pagination, and response structure entirely unaddressed.
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%, so all five parameters rely on the description. It documents the required 'conjunto' via the id example and gives a field-naming convention relevant to select/where/order, and mentions SoQL, which implies the clause style. However, it never explains that where/select/order are raw SoQL strings, nor what 'limite' means or that it defaults to 100, leaving most parameters underspecified.
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 and resource: retrieve the rows of a Socrata dataset from analisi.transparenciacatalunya.cat, with a concrete id example (gn9e-3qhr). It is clear what the tool does, but it never names or contrasts with the sibling ckan_filas, which fetches rows from a different portal, so an agent must infer which one to pick.
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?
There is no statement of when to use this tool versus ckan_filas or almacen_sql, and no prerequisites, pagination advice, or coverage caveats (e.g., that only the Socrata-hosted Generalitat datasets work here). The portal name hints at the applicable domain but leaves the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tabla_pcaxisB
Tabla PC-Axis en filas con números ya convertidos (None es dato no disponible o secreto, no cero): id de tabla del INE (24077), URL Tabla.htm del INE, Interior, Educación o Cultura, o URL del fichero. filtro deja las filas con ese texto en algún campo (código INE como 08019, nombre, periodo).
| Name | Required | Description | Default |
|---|---|---|---|
| tabla | Yes | ||
| filtro | No | ||
| max_filas | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does useful work by disclosing that values are pre-converted and that None means unavailable/secret data rather than zero — a real correctness trap avoided. It says nothing about truncation at max_filas, rate limits, or failure behavior when the table id/URL is invalid, which matters for a network fetch 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?
Compact with no filler, but the second clause is a run-on enumeration ('id de tabla del INE (24077), URL Tabla.htm del INE, Interior, Educación o Cultura, o URL del fichero') where the 'Interior, Educación o Cultura' fragment is ambiguous rather than clearly listing accepted input forms.
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 read-only fetch tool with no output schema and three undocumented schema params, the description covers input forms, filter behavior and the None convention but leaves output shape (columns returned) and truncation behavior unaddressed, so it is adequate but incomplete.
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 compensate. It does explain tabla (INE id, Tabla.htm URL, or file URL) and filtro (substring match across any field, with code/name/period examples), but max_filas — whose default of 200 implies silent truncation — is never mentioned.
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 resource and outcome: a PC-Axis table returned as rows with numbers already converted, plus the None semantics. It does not distinguish itself from siblings like ckan_filas, socrata_filas or descargar, so an agent cannot tell from the description alone which row-fetching tool to pick.
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?
Implicitly scoped to INE PC-Axis tables via the accepted inputs (INE table id, Tabla.htm URL, file URL), which implies 'use this for INE statistical tables'. There is no explicit when-to-use versus ckan_filas/socrata_filas/descargar, and no when-not guidance.
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.
13 tool updates
v0.10.0- First observed
almacen_sql - First observed
boe_sumario - First observed
buscar - First observed
ckan_buscar - First observed
ckan_filas - First observed
codigos - First observed
coyuntura - First observed
descargar - First observed
empresa_nif - First observed
ficha - First observed
perfil_municipio - First observed
socrata_filas - First observed
tabla_pcaxis
TDQS
Scored across 13 tools
Most tools are clearly distinct: entity lookups (empresa_nif, perfil_municipio, coyuntura), a catalog index/detail pair (buscar/ficha), and platform-bound fetchers. There is some overlap among the row-fetching tools (ckan_filas, socrata_filas, tabla_pcaxis, almacen_sql) since all return tabular data, but each names its specific source system and the detailed descriptions make the boundaries workable.
All names are lowercase snake_case, but the conventions are mixed: resource-first compounds (ckan_buscar, socrata_filas, almacen_sql, tabla_pcaxis, boe_sumario), bare verbs (buscar, descargar), and bare nouns (coyuntura, ficha, codigos). Verb/noun ordering is inconsistent, though each name remains readable.
13 tools is a reasonable size for a broad multi-source public-data catalog, and each tool appears to cover a distinct source or operation. Slightly heavy given the heterogeneous scope, but nothing feels obviously redundant.
Coverage spans BOE/BORME, BDNS, PLACSP, CKAN, Socrata, INE PC-Axis, economic indicators, municipalities and companies, plus a discovery layer (buscar/ficha) and generic fetch (descargar). Some source types and entity profiles are absent, but the surface lets agents work around gaps via the catalog.
Maintenance
Related MCP Connectors
Search Spain's BOE/BORME gazettes, open EU funding calls and EU TED tenders. Keyless sources.
Data for your AI agent: company, people, SEO, social and EU registry data. Pay per call.
Verified Polish open data for AI agents: debt, budget, 460 MPs, votings, judiciary search, RAG.
Local government intelligence for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for querying Spanish government open data APIs including grants, legislation, company registry, statistics, and open data catalog. Enables LLMs to access Spanish public information on-the-fly.265MIT
- AlicenseAqualityCmaintenanceEnables querying and analyzing over 90,000 public datasets from the Spanish Government Open Data Portal (datos.gob.es) using natural language, with tools for search, filtering, metadata access, and SPARQL queries.105MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform due diligence, KYB, and supplier or client verification by querying Spanish company registry data cross-referenced with public grants and procurement awards, each fact linking to its official publication.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to search and retrieve datasets, publishers, and themes from Spain's national open-data catalogue through keyless MCP tools or HTTP endpoints.280 npmMIT