El ecosistema completo, y cuándo usar cada pieza.

El ecosistema completo, y cuándo usar cada pieza.

Empezamos esta serie con una queja: que sabíamos medir cualquier cosa de una aplicación excepto la parte que se había vuelto más cara. Seis capítulos después toca juntar las piezas y decir, sin rodeos, qué usar para qué.

Las tres piezas.

PiezaPapel
OxideGateMide en el cable. Única fuente de verdad. Publica /stats, /requests, /sessions y /mcp
oxidegate-monitorPanel de terminal en vivo. Vive en el mismo repositorio y se instala con el proxy
oxidegate-lensLente de solo lectura: bytes por servidor MCP y ahorro por petición
mcp-savingsEnfoque anterior: medía desde el host, no desde el cable. Superado, con matices

Y una regla que es, en realidad, toda la arquitectura:

OxideGate  ──HTTP de solo lectura──▶  oxidegate-monitor
  MIDE     ──HTTP de solo lectura──▶  oxidegate-lens
en el cable ─HTTP de solo lectura──▶  tu propia lente

El dato solo fluye del proxy hacia las lentes, nunca al revés. Las lentes interpretan, agrupan y presentan. Ninguna mide nada por su cuenta.

Si un número no salió de OxideGate, no existe.

Ya lo hemos repetido en tres capítulos, y lo repito una vez más porque es lo que hace que dos vistas que no coinciden sean siempre un bug de presentación y nunca dos mediciones compitiendo. Es exactamente la trampa en la que cayó mcp-savings midiendo desde el host, y la razón de que el punto de medida se moviera.

Guía de decisión.

Ordenado por lo que necesitas responder, que es como se elige una herramienta de verdad.

“No sé por qué ha subido la factura.” → OxideGate + el monitor. Enciende, trabaja un día normal, mira el desglose por sesión y por modelo.

“¿Qué servidor MCP me está costando más?” → oxidegate-lens. La tabla te lo da ordenado, con el ahorro por petición de cada uno.

“¿Estoy pagando por algo que no uso?” → GET /mcp del proxy. Cruza el coste de cada servidor con sus invocaciones reales y emite un veredicto: used, unused, insufficient_data o not_applicable. Es la palanca más grande del catálogo.

“¿Este cambio ha servido de algo?” → El monitor, con baseline. Tecla b antes, cambio, y panel de delta después.

“¿Cuánto cuesta arrancar una sesión, antes de escribir nada?” → GET /sessions, que agrega los tres bloques del peaje fijo: instrucciones, hooks y skills.

“Quiero un vistazo rápido sin montar un proxy.” → mcp-savings en modo Claude Code. Lee lo que ya hay en disco, sin instalar nada y sin redirigir tráfico.

“¿Me sale a cuenta el modelo pequeño en local?” → OxideGate contra el dialecto nativo de Ollama, y la columna de vatios. Recordando que el rendimiento no predice el consumo.

“Ninguna de estas vistas me sirve.” → Escribe la tuya. Es la siguiente sección.

El contrato es público, y eso es a propósito.

GET /stats, GET /requests, GET /sessions, GET /mcp y GET /history son JSON sin autenticación sobre 127.0.0.1.

Cualquiera puede escribir su propia lente. No hace falta permiso, ni un plugin, ni tocar el repositorio del proxy. Basta con leer esas rutas.

Y GET /version existe para que un consumidor pueda distinguir dos situaciones que se parecen mucho y no son lo mismo: “este proxy no soporta ese campo” y “ese campo existe pero aquí no había dato”. Publica versión, versión del contrato, endpoints y los campos que marcan una capacidad, para que nadie tenga que sondear por ausencia.

Sondear por ausencia es exactamente cómo se acaba mostrando un cero donde debería haber un hueco.

Las reglas de qué cambio es aditivo y cuál es ruptura están escritas, y hay tres tests de snapshot que congelan las claves de las tres rutas principales. Cambiar la forma de una respuesta rompe la suite antes de romper la lente de otra persona.

Y hay un detalle de diseño que ilustra bien esa disciplina: GET /history es una ruta aparte y no un campo dentro de /stats. ¿Por qué? Porque /stats devuelve un array, y añadirle la ventana temporal lo convertiría en un objeto. Eso es una ruptura para todo el que ya lo consumiera. Una ruta nueva no rompe a nadie.

El principio que se repite en las tres herramientas.

Si tuviera que quedarme con una sola idea de todo el proyecto, sería esta:

Un dato ausente se declara ausente. Nunca se muestra como un cero.

Aparece en los tres repositorios, y siempre por el mismo motivo: un hueco es honesto, un cero se cree.

Y de ahí sale un segundo principio, que es su consecuencia directa: no inferir cuando no se puede saber.

La lente no elige entre “tu harness lo retiene” y “todavía no conectó”. No decide si un servidor está dentro del cubo de sobrantes. No usa la cabecera del cliente para nada, después de que siete rondas de revisión encontrasen, cada una, un caso donde esa inferencia fallaba.

La corrección nunca fue una regla mejor. Fue dejar de inferir.

Lo que sigue sin medirse.

Esta tabla tiene el mismo rango que la de resultados, y va en el capítulo de cierre a propósito.

HuecoEstado
Comparar herramientas sobre una tarea real, con más de una muestra❌ Sin medir: gasta cuota y no es determinista
Separar comandos de skills en el listado⛔ Imposible desde el cable: mismo bloque, mismo formato, sin marca
Repartir energía entre peticiones solapadas⛔ Imposible con estos datos: dos ventanas que se pisan reclaman los mismos vatios
Energía de CPU, y macOS❌ Sin medir: hoy es Linux con NVIDIA
El efecto de effort low en tareas abiertas❌ Sin medir: solo hay datos de respuesta cerrada
Por qué Gemini declara la activación de skills en interactivo y no en headless❌ Sin aislar, aunque el hecho está medido

Fíjate en que hay dos símbolos distintos, y la diferencia importa: ❌ es “todavía no” y ⛔ es “no se puede”.

Confundirlos sería tan deshonesto como confundir un cero con un hueco. Un pendiente invita a que alguien lo intente. Un imposible declarado, con su medición detrás, ahorra a la siguiente persona el trabajo de descubrirlo por su cuenta.

Cada hueco tiene su issue. Declarar la deuda y seguirla son la misma cosa.

Lo que el medidor cuesta.

Una pregunta legítima que conviene responder con un número y no con una promesa: ¿cuánto ralentiza el proxy tus peticiones?

Medido en streaming real: 259 microsegundos de preparación contra 3.534 de escaneo de la respuesta. Los dos juntos son el 0,15% del reloj.

Y hay una anécdota metodológica ahí: durante un tiempo solo se medía la preparación. Es decir, se estaba midiendo la mitad barata y presentando ese número como el coste del medidor. El escaneo, que es trece veces más caro, no se contaba.

Se añadió el campo que faltaba. La premisa del proyecto se sostiene, pero ahora como hecho auditable y no como creencia.

Un medidor que no se mide a sí mismo está pidiendo que confíes en él.

Lo que me llevo de todo esto.

Cierro con las cuatro conclusiones que de verdad cambiaron cómo trabajo, y ninguna es un número.

La primera: tu prompt es lo más barato de la petición. El 0,03% de los bytes, el 31% de lo pagado. La intuición te dice que escribas más corto. La medición dice que el ahorro está en todo lo demás: en qué servidores tienes conectados, en qué instrucciones viajan siempre, en cuánto historial arrastras.

La segunda: el coste crece con los turnos, no con el tamaño del prompt. Y crece al cuadrado, porque cada turno relee el prefijo entero. La caché cambia el precio, no la cantidad. Cerrar una sesión y empezar limpia es una palanca más grande que cualquier reescritura de prompt.

La tercera: toda optimización cuesta algo. Quitar herramientas quita capacidad. Recortar instrucciones quita contexto útil. Bajar el esfuerzo puede bajar calidad en tareas que todavía no hemos medido. Una tabla de ahorros sin una columna de precios es publicidad.

Y la cuarta, que es la que engloba a las otras tres: medir cambia lo que decides, no solo lo que sabes. Cada uno de los números de esta serie desmontó algo que dábamos por hecho. Que disallowedTools ahorraba. Que diferir esquemas quitaba bytes del cable. Que el modelo más rápido consume menos. Que cargar un modelo era el grueso de la energía.

Ninguna de esas creencias era estúpida. Todas eran razonables. Y todas eran falsas, y no había forma de saberlo sin medir.

Todo el código es MIT y está abierto. Los números de esta serie se pueden reproducir, incluido el banco de captura que mide el peaje de un harness contra un modelo local, sin cuenta, sin red y sin gastar un céntimo.

Que es, al final, lo único que separa “confía en mis números” de “compruébalos tú”.

¿Listo para hacer crecer tu negocio?

Analicemos tu proyecto y definamos la estrategia perfecta para alcanzar tus objetivos

Solicitar consultoría gratuita