ADR: bib_list_endpoints lee de bib_nodes en lugar de bib_endpoints
Fecha: 2026-04-25
Estado: Aceptada
Sesión: 27 (plan post-audit I5-4)
Autor: @Esquembri / agent-ingest
Contexto
La MCP tool bib_list_endpoints del handler biblioteca.ts (CF Workers) consultaba la tabla bib_endpoints en D1 para devolver los endpoints del sistema. Tras un cambio del indexer, esta tabla quedó vacía y nunca fue repoblada. Como resultado, la tool siempre devolvía [] con independencia de los filtros aplicados.
El grafo de conocimiento sí contenía los endpoints: 496 nodos con node_type = 'endpoint' en bib_nodes, cada uno con su método, path y metadatos en el campo JSON metadata.
Decisión
Abandonar bib_endpoints como fuente primaria de la tool bib_list_endpoints.
Leer directamente de bib_nodes WHERE node_type = 'endpoint', extrayendo method, path y operationId del campo metadata JSON.
Implementación
-- Antes (tabla vacía)
SELECT ep.*, n.qualified_name, n.app
FROM bib_endpoints ep
JOIN bib_nodes n ON ep.node_id = n.id
WHERE 1=1
[+ filtros por n.app, ep.method, ep.path]
ORDER BY ep.path LIMIT ?
-- Ahora
SELECT id, qualified_name, display_name, app, metadata
FROM bib_nodes
WHERE node_type = 'endpoint'
[+ filtros por app, qualified_name LIKE]
ORDER BY qualified_name LIMIT ?
El mapeo de filtros:
args.method→qualified_name LIKE '<METHOD>:%'(elqualified_namesigue el patrónMETHOD:path).args.path_contains→qualified_name LIKE '%<path>%'.
El response object se construye parseando metadata JSON:
{
id, qualified_name,
method: meta.method ?? qualified_name.split(':')[0],
path: meta.path ?? qualified_name.split(':').slice(1).join(':'),
operation_id: meta.operationId ?? display_name,
tags: meta.tags ?? [],
app,
}
Consecuencias
Positivas
- Problema operativo resuelto: 496 endpoints accesibles inmediatamente.
- Sin datos duplicados: una única fuente de verdad para endpoints (el grafo).
- Sin migración: no se requiere repoblar
bib_endpoints.
Negativas / Deuda
- La tabla
bib_endpointsqueda oficialmente obsoleta para este propósito pero sigue existiendo en el schema D1. Candidata a deprecar/eliminar en Fase 8. - Los filtros sobre
methodypathson aproximados (viaLIKEsobrequalified_name) en lugar de columnas dedicadas — suficiente para el uso actual.
Sub-bloque diferido
- I5-5 (Edges
documentspara 496 endpoints): generación automática de edgesdocumentspara los 496 endpoints requiere parser de menciones path en pages con validación de false positives. Diferido a Fase 8 Enrichment Agent.
Alternativas consideradas
| Opción | Motivo de descarte |
|---|---|
Repoblar bib_endpoints con script | Requiere conocer el schema esperado por el indexer + riesgo de inconsistencia futura si el indexer vuelve a cambiar |
| Crear un endpoint REST de paso | Overhead de infraestructura innecesario; el grafo ya tiene los datos |
Mantener bib_endpoints como cache sincronizada | Complejidad de sincronización desproporcionada al beneficio |
Véase también
- [[feature—supercontext—i5-plataforma-wiki-mcp-fix]]
- [[concept—supercontext—grafo-conocimiento]]
- [[entity—supercontext—handler—biblioteca-mcp]]
- [[concept—supercontext—biblioteca-mcp-tools]]
- [[entity—supercontext—d1—bib-nodes]]