openrouter-dashboard-mcp

Un MCP gratuito y de solo lectura que brinda a los agentes IDs de modelos en vivo y precios verificados de más de 16 fuentes, estructurado para enrutadores de modelos System-1.

Documentación

Open Dashboard MCP

Más de 5,000 IDs de modelos, con precios que fallan de forma segura

Abrir el dashboard en vivo · Ver open-dashboard-mcp en npm

Nota 2.0.0: esta versión alinea el paquete con openDashboard 2.0 y no introduce cambios disruptivos en ninguna herramienta ni forma de respuesta respecto a 1.6.3. No añade nada más. La edición de ranking de OpenRouter se ejecuta localmente (consulta la página /openrouter del dashboard); este paquete ya lee OpenRouter desde tu propia máquina.

Según lo medido en 1.6.3, open-dashboard-mcp indexa 5,326 entradas de modelos a través de 17 adaptadores npm y expone 19 herramientas MCP de solo lectura. Lee precios de 17 fuentes de proveedores. Quince están activas hoy; fal está parcial y Sail está desactualizado. Su catálogo TTS de solo lectura también incluye evidencia publicada de ElevenLabs y Cartesia sin llamadas de síntesis. La evidencia se mide diariamente desde tres hosts: Local/Bulgaria, KVM2/Europa y Oracle/US.

Proveedores: OpenRouter, Groq, Cerebras, Sail, Nous Research, QwenCloud, DeepInfra, Novita, SambaNova, Chutes, WaveSpeedAI, fal, KIE, Higgsfield, Crazyrouter, AkashML, io.net, ElevenLabs y Cartesia.

Un precio faltante permanece UNKNOWN; nunca se convierte en cero. La selección de costos, por lo tanto, falla de forma segura en lugar de tratar silenciosamente la evidencia ausente como gratuita. Cada cifra conserva su fuente y hora de verificación, de modo que una tarifa publicada no se confunda con el costo medido de la solicitud.

Esta es una capa de hechos estructurada para enrutadores de modelos, basada en el patrón Jev de OpenRouter. El proyecto separado Model Router toma decisiones de enrutamiento; el dashboard solo lee y sirve evidencia. Nunca envía llamadas de inferencia. Las herramientas del dashboard son gratuitas y no requieren cuenta ni claves API.

Model Router: selección de asiento compatible con Jev

El Model Router es compatible con Jev: utiliza Jev, la capa de decisión System One de TypeSafe AI para seleccionar el asiento suficiente más barato bajo las reglas estrictas. La capa de decisión de Jev ayuda a determinar qué es suficiente; el enrutador sigue siendo responsable de hacer cumplir las restricciones del consumidor, exclusiones, requisitos de capacidad y contexto, y el límite de precio. Una recomendación debe satisfacer esas reglas antes de que se pueda seleccionar un asiento.

En open-dashboard-mcp 2.0.0, dashboard_resolve_seat delega esta selección de solo lectura al endpoint POST /v1/seats/resolve del enrutador. Configura MODEL_ROUTER_URL para el enrutador real y, cuando sea necesario, MODEL_ROUTER_TOKEN en el entorno MCP. El resultado incluye el asiento seleccionado, la base de costos, las razones, el ID de decisión y los metadatos de Jev; un enrutador inalcanzable o que rechaza devuelve un error explícito, nunca un asiento fabricado ni una suposición de catálogo de respaldo.

El MCP no invoca el asiento seleccionado ni gasta en inferencia. Tu agente usa las instrucciones de invocación devueltas con sus propias credenciales. dashboard_resolve_model resuelve por separado las identidades de modelos de proveedores y las restricciones del catálogo; no es la herramienta de selección de asientos del enrutador.

Tendencias de GitHub

dashboard_github_trending lee la evidencia diaria de impulso de repositorios del dashboard. Informa la ventana de observación y la frescura para que los agentes puedan distinguir una tendencia actual de una instantánea más antigua. Usa dashboard_github_movers para cambios entre observaciones; ninguna herramienta invoca un modelo ni gasta en inferencia.

El camino fácil: evidencia primero, enrutamiento separado

Usa este paquete como la capa de hechos estructurada y Jev como el patrón de decisión tipado. El Model Router separado pregunta a dashboard_resolve_model por evidencia que satisfaga restricciones tipadas; tu aplicación decide entonces si llamar al proveedor seleccionado. El MCP nunca actúa como proxy de inferencia, vende acceso alojado ni suministra una credencial compartida o predeterminada.

  1. Instala el MCP: claude mcp add open-dashboard -- npx -y open-dashboard-mcp.
  2. Dale al enrutador tu tarea y restricciones tipadas (capacidades, contexto, límite de precio y proveedores permitidos) y deja que seleccione de dashboard_resolve_model.
  3. Si decides ejecutar inferencia, llama al proveedor seleccionado desde tu propia aplicación. Esa llamada está fuera del dashboard y usa las credenciales del proveedor de tu aplicación.

Proveedores: OpenRouter, Groq, Cerebras, Sail, Nous Research, QwenCloud, DeepInfra, Novita, SambaNova, Chutes, WaveSpeedAI, fal, KIE, Higgsfield, Crazyrouter, AkashML, io.net, ElevenLabs y Cartesia.

19 herramientas de solo lectura. dashboard_catalogue lee los catálogos propios de 17 proveedores en vivo en cada llamada: 13 no necesitan clave; AkashML, Groq, Sail y QwenCloud necesitan la suya. Cada precio lleva su fuente y hora de lectura, y un precio faltante se informa como desconocido, nunca cero.

max_tokens es un parámetro de corrección, no un límite de seguridad. En AkashML, io.net y Sail, la mayoría de los modelos razonan antes de responder. Con un presupuesto demasiado pequeño, la llamada devuelve HTTP 200, factura cada token, y message.content está vacío (o null), con el texto atrapado en message.reasoning_content. Un llamador que solo lee content ve silencio y culpa a la clave. Cada fila del catálogo lleva un responseShape.minViableBudget medido: establece max_tokens por encima de él, con margen, por modelo.

Fuentes de precios, leídas en vivo por ejecución (1.4.0)

dashboard_catalogue lee la fuente propia de cada proveedor en cada llamada. No pasa por un feed compartido para estas. Cada fila lleva su URL de fuente y hora de lectura, y un precio faltante es unknown, nunca cero y nunca tomado prestado de un modelo hermano. Los códigos de estado son lo que las fuentes devolvieron el 2026-09-26.

ProveedorFuenteAutenticaciónEstadoModelos / con precioTarifa de entrada en cachéContexto
AkashMLapi.akashml.com/v1/modelsAKASHML_API_KEY2006 / 65 modelosexacto
io.netapi.intelligence.io.solutions/api/v1/modelsninguna (User-Agent siempre enviado)20037 / 3737 modelosexacto
Groqapi.groq.com/openai/v1/modelsGROQ_API_KEY20011 / 88 modelosexacto
OpenRouteropenrouter.ai/api/v1/modelsninguna200458 / 452291 modelosexacto
Sail/v1/models con clave + docs.sailresearch.com/pricing.md verificado por digestSAIL_API_KEY200 / 20012 / 1212 modelos (por ventana)etiqueta publicada, p. ej. 262K
Cerebrastabla www.cerebras.ai/pricing renderizada, emparejada con IDs de APIninguna2003 / 2no publicadono publicado
Nousinference-api.nousresearch.com/v1/modelsninguna200417 / 417280 modelosexacto

Notas que cambian una decisión de enrutamiento:

  • Los precios son decimales exactos. Las cadenas de cada fuente (y los números JSON de io.net, a través de su texto decimal) se convierten sin punto flotante binario, por lo que el sexto y séptimo decimal sobreviven.
  • Cerebras nombra en su página de precios de forma que no coincide con los IDs de API. Un ID sin fila coincidente se informa como offered_unpriced, no se adivina; hoy eso es gemma-4-31b.
  • Sail mantiene los tamaños de contexto como la etiqueta publicada (contextLengthLabel), porque no se indica si "K" significa 1,000 o 1,024.
  • Nous revende el catálogo de OpenRouter (372 de 417 IDs; sin modelos Hermes) y lleva correlatedWith: "openrouter". No cuentes los dos como rutas de conmutación por error independientes. Sus precios de API son lo que Nous cobra, promociones incluidas, los mismos números que muestra su portal. Sus descuentos anunciados se miden contra su propio pricing.original, que a menudo está por encima del precio de OpenRouter. Por lo tanto, cada fila de Nous también informa resale.versusOpenRouter (identical / cheaper / dearer / mixed / not_listed / unknown) contra el precio en vivo de OpenRouter para el mismo ID. mistral-nemo, anunciado con 80% de descuento, es cheaper solo porque la entrada es $0.018 frente a $0.019 por millón, con salida igual; mercury-2.5 y gemini-3.7-flash son identical; deepseek-v4.1-flash es genuinamente cheaper; la salida de qwen3-coder es más cara.
  • La base chatapi.akash.network/api/v1 de AkashML previamente circulada responde 301 a una página HTML; el paquete solo ha usado api.akashml.com/v1.

Nuevo en 1.3.0: Sail como proveedor de precios nativos

El conjunto inicial son cuatro proveedores, cada uno leído desde su propio catálogo:

ProveedorClavePrecio desdeCarrilLatencia de llamada cortaFormas de respuesta
AkashMLAKASHML_API_KEYsu /models con clave, por modelointeractivo0.57–0.90 s6 de 6 medidos
io.netningunasu /models público, por modelointeractivo0.64–0.91 s3 de 37 medidos
SailSAIL_API_KEYsu documento de precios verificado por digest, por ventana de finalizaciónlote0.95–2.37 s12 de 12 medidos
OpenRouterningunasu /models públicono establecidono medidono medido

Las latencias son las mediciones de llamada corta del operador del 2026-09-26. Las cifras por modelo están en el responseShape.latencyMs de cada fila y varían: en Sail, Gemma-4-31B-IT-NVFP4 respondió en 0.38–0.45 s y DeepSeek-V4-Pro-0813 en 1.8–2.4 s. Qwen3.6-35B-A3B tardó 8.3–9.4 s y acepta llamadas síncronas solo con metadata.completion_window: "flex"; sin él, Sail devuelve 400.

Sail es el carril de lote. Es más lento por llamada y más barato: en cada modelo que comparte con AkashML o io.net, su ventana más barata supera a ambos, excepto openai/gpt-oss-120b, donde los $0.03 / $0.17 por millón de AkashML superan los $0.06 / $0.40 de Sail. Úsalo para trabajo que nadie espera (resolución de PR, extracción, barridos nocturnos), no para llamadas interactivas.

Modelos sin impuesto de razonamiento. Cuatro modelos de Sail no devuelven ningún campo reasoning_content y responden a un prompt de una palabra en 2 tokens de salida a max_tokens: 16: nvidia/Gemma-4-31B-IT-NVFP4, google/gemma-4-31B-it, google/gemma-4-12B-it y deepseek-ai/DeepSeek-V4-Pro-0813. El meta-llama/Llama-3.3-70B-Instruct de AkashML se comportó de la misma manera. Para respuestas cortas y clasificación, Gemma-4-31B-IT-NVFP4 fue el más barato ($0.07 / $0.20 por millón en la ventana Flex) y el más rápido de ellos. gemma-4-12B-it responde igual de breve, pero su tarifa de salida es cinco veces mayor ($1.00 por millón en Flex). Cada fila informa reasoningContentField: "absent" donde esto se midió.

Cada entrada de modelo distingue lo medido de lo no medido: responseShape.measurement es "measured" o "unmeasured", y un modelo no medido lleva presupuestos y latencias null, nunca un valor predeterminado. Cuatro de los modelos de Sail fueron medidos por primera vez por el operador; esas observaciones están marcadas como origin: "operator_report" y llevan solo lo que se informó.

Los precios de Sail cambiaron desde la versión anterior. El documento fijado se vuelve a fijar a los bytes de hoy: cinco modelos añadidos, cinco con nuevo precio (GLM-5.3 ASAP de $1.40 / $4.40 a $0.98 / $3.08 por millón), dos retirados. Antes de esto, 1.2.1 informaba correctamente PRICES ARE STALE para Sail.

Nuevo en 1.2.1: formas de io.net medidas, presupuestos de respuesta y bloques de borde

  • io.net ahora se mide, no se infiere. Con una clave el 2026-09-26, los modelos de razonamiento allí escriben message.reasoning_content junto a content y refusal. A max_tokens: 16, GLM-5.3-Flash devolvió una respuesta vacía 3 de 3 veces y DeepSeek-V4.1-Flash 2 de 3, cada una facturada. Sus filas ahora dicen emptyContentObserved: "observed".
  • answerCompletionTokens: los tokens de finalización que una respuesta de una palabra realmente tomó, como un min/max observado sobre samples llamadas. Es un rango porque se mueve por llamada: GLM-5.3-Flash usó 95, 218 y 217 tokens en tres solicitudes idénticas, DeepSeek-V4.1-Flash 16 a 35. Un único piso global de max_tokens es incorrecto en ambas direcciones; presupuesta cada modelo por encima de su max observado, con margen.
  • Bloqueo de borde versus clave muerta en el catálogo. io.net y otros proveedores están detrás de Cloudflare, que puede responder a una clave válida con 403 error code: 1010 dependiendo del cliente y User-Agent. Un catálogo con clave ahora informa EDGE_BLOCKED para eso y PROVIDER_REJECTED solo cuando el proveedor mismo rechazó la credencial.

Nuevo en 1.2.0: AkashML, io.net y la trampa de la respuesta vacía

  • AkashML (inferencia gestionada de Akash Network) tiene un precio por modelo según su propio /models. Sus seis modelos abarcan aproximadamente 44x en precio de salida — openai/gpt-oss-20b a $0.10/M hasta zai-org/GLM-5.3 a $4.40/M — por lo que la línea de la página principal "desde $0.15/M tokens" no describe a ninguno de ellos. Establece AKASHML_API_KEY para incluirlo; sin una clave, reporta KEY_NOT_CONFIGURED en lugar de un catálogo vacío o gratuito.
  • io.net (IO Intelligence) publica precios por token para 37 modelos en un /models público, sin necesidad de clave. 31 de los 37 están marcados como que requieren un nivel de acceso superior al gratuito, por lo que un precio listado no es prueba de que una clave gratuita pueda llamar al modelo; min_access_tier se mantiene en cada fila. Una clave de pago medida el 2026-09-26 alcanzó los 37.
  • KIE (kie.ai) revende modelos de imagen, video, música y chat y publica una tabla de precios pública, leída sin clave: 509 filas el 2026-09-29, una por variante con precio (resolución, duración, tramo de entrada o salida). KIE factura en créditos a un valor declarado de $0.005 cada uno. Una fila se convierte en un precio en USD solo cuando el USD listado por KIE equivale a esa conversión y su etiqueta de unidad es exacta. El 2026-09-29, 56 de las 509 fallaron en uno de esos criterios (unidades mal escritas como "per vedio", unidades en blanco, las dos columnas en desacuerdo) y se mantienen con sus valores nativos y una razón. Los créditos de bonificación en recargas más grandes pueden hacer que la tarifa efectiva sea más baja que la listada.
  • responseShape en filas del catálogo. Un modelo de razonamiento escribe su pensamiento en message.reasoning_content y su respuesta en message.content. Con un max_tokens pequeño, todo el presupuesto puede ir al pensamiento: HTTP 200, cada token facturado, y content es una cadena vacía. En AkashML (medido el 2026-09-25), cinco de seis modelos hicieron esto con max_tokens: 16, y GLM-5.3 gastó un presupuesto de 6,000 tokens solo en razonamiento. El mismo modelo había respondido a un prompt de una palabra en 3 tokens antes, por lo que una sola prueba limpia no prueba nada. Cada fila reporta reasoningAdvertised (la bandera del proveedor), reasoningField, emptyContentObserved (observed / not_observed / unknown) y las observaciones fechadas detrás de ellas. Un modelo que esta compilación nunca llamó es unknown, nunca "seguro".

Mismos seis modelos, tarifas publicadas por millón de tokens (entrada / salida), leídas el 2026-09-25/26:

ModeloAkashMLio.net
openai/gpt-oss-120b$0.03 / $0.17$0.178 / $0.68 (nivel 2)
zai-org/GLM-5.3$1.30 / $4.40$1.358 / $4.268 (nivel 2)
Qwen/Qwen3.8-27B$0.25 / $2.20$0.345 / $2.69 (nivel 2)
Qwen/Qwen3.6-35B-A3B$0.10 / $0.90$0.1672 / $1.107 (nivel 2)
openai/gpt-oss-20b$0.02 / $0.10$0.057 / $0.196 (nivel 1)
meta-llama/Llama-3.3-70B-Instruct$0.20 / $0.52$0.5466 / $1.023 (nivel 1)

AkashML es más barato en once de los doce tramos; io.net es más barato en la salida de GLM-5.3. Estas son tarifas de catálogo publicadas, no cargos medidos: ninguno de los proveedores devuelve un campo de costo por llamada, por lo que el costo de generación para ambos permanece como UNKNOWN. Llama a dashboard_catalogue para las cifras en vivo en lugar de confiar en la fecha de esta tabla.

Evidencia para capas de decisión

Los costos de generación medidos llevan un marcador measurement_origin para que un número nunca esté desvinculado de cómo se obtuvo:

  • fixture — evidencia de prueba determinista o de bucle de retorno.
  • live_provider_read — una respuesta del proveedor o una lectura de facturación del proveedor liquidada proporcionó la observación.
  • unknown — no se estableció ninguna fuente autoritativa.

En el contrato de cable, este marcador es measurementSource en observaciones de libro mayor y measured_cost_source en una selección de consejo renderizada. unknown no puede producir una selección decidible. Un costo medido está vinculado a su proveedor enrutado, por lo que la evidencia de el proveedor A nunca puede aparecer junto al proveedor B.

La verificación de proveedor en vivo detrás de esta versión estableció que uno de los cuatro carriles con clave puede proporcionar un costo por generación, mientras que cero de cuatro produjeron un cargo a nivel de solicitud desde BUTCHER. La cifra medida genuina provino de un delta de contador acumulado liquidado en lugar de un cargo a nivel de solicitud; los precios de catálogo nunca se sustituyen por ella.

Úsalo

Instalación

Claude Code

Para registrar el MCP con Claude Code:

claude mcp add open-dashboard -- npx -y open-dashboard-mcp

Claude Code inicia el servidor cuando lo necesita y se conecta a través de MCP.

Instalar solo las herramientas que deseas

Las diecinueve herramientas están habilitadas por defecto. Para instalar un subconjunto, establece OPEN_DASHBOARD_TOOLS a una lista de permitidos separada por comas en el entorno del servidor. Las herramientas deseleccionadas están ausentes de tools/list por completo — no presentes y fallando — para que un cliente nunca vea una herramienta que no puede usar:

{
  "mcpServers": {
    "open-dashboard": {
      "command": "npx",
      "args": ["-y", "open-dashboard-mcp"],
      "env": {
        "OPEN_DASHBOARD_TOOLS": "dashboard_catalogue,dashboard_price_comparison,dashboard_contract"
      }
    }
  }
}

OPEN_DASHBOARD_PROVIDERS permite que una instalación permita proveedores en lista blanca: los deseleccionados se omiten de las respuestas que contienen proveedores, reduciendo el contexto innecesario. Déjalo sin establecer para obtener todo.

Para Claude Desktop, agrega esto a claude_desktop_config.json:

{
  "mcpServers": {
    "open-dashboard": {
      "command": "npx",
      "args": ["-y", "open-dashboard-mcp"]
    }
  }
}

Ejecutar directamente

Para pruebas manuales u otro cliente MCP, ejecuta:

npx -y open-dashboard-mcp

Esto inicia el servidor MCP y espera a un cliente MCP a través de stdin/stdout. Un terminal aparentemente inactivo es esperado: el comando no es una CLI interactiva y no registra el MCP con Claude u otro agente. npx -y usa el manejo de paquetes de npx y no realiza una instalación global permanente.

Sin @version, npx resuelve la última versión publicada. Ese es el punto: el catálogo sobre el que este paquete informa cambia por debajo de ti, por lo que un comando sin fijar sigue leyendo el actual en lugar de congelarse en una instantánea.

Requiere Node.js 20 o más reciente. No se necesita clave API para iniciar. Las claves solo amplían lo que el catálogo puede ver: AKASHML_API_KEY, SAIL_API_KEY, GROQ_API_KEY y QWENCLOUD_API_KEY agregan los catálogos nativos de esos proveedores, y una clave faltante se reporta como KEY_NOT_CONFIGURED, nunca como un resultado vacío o gratuito. El inventario de claves opcional tiene su propia ruta de aceptación.

De dónde provienen los datos

Hay dos rutas de datos, y difieren en frescura.

  • dashboard_catalogue lee la fuente propia de cada proveedor en cada llamada: su API, o su página de precios publicada donde ninguna API lleva precios (el documento de precios verificado por digest de Sail, la tabla de precios renderizada de Cerebras y la comparación de planes web de Higgsfield). Los 17 proveedores se leen de esta manera. Los créditos de Higgsfield permanecen como créditos nativos de planes web y nunca se convierten a una moneda ni se representan como precios de API. AkashML, Groq, Sail y QwenCloud necesitan sus propias claves (AKASHML_API_KEY, GROQ_API_KEY, SAIL_API_KEY, QWENCLOUD_API_KEY); sin una, ese proveedor reporta KEY_NOT_CONFIGURED en lugar de recurrir a un archivo.
  • Las otras herramientas leen una API HTTP pública sin credenciales que recopila catálogos de proveedores y GitHub diariamente y republica el resultado: economía de modelos, estado, modelos gratuitos, qué cambió, líderes de uso y repositorios de tendencias. Su frescura es la del archivo, y cada respuesta dice qué tan antigua es.

El inventario de claves opcional tiene su propia ruta de credenciales de aceptación. El estudio público es https://opendashboard.sdforest.site/. Por defecto, el paquete lee la implementación de API compatible en https://openrouter-github-dashboard.vercel.app, una implementación ejecutada por el autor de este proyecto en un host de nivel de hobby. Es pública y no necesita credenciales, pero no es un servicio con garantía de tiempo de actividad, y cada usuario de este paquete lee desde la misma instancia.

El informe histórico de observación en vivo de tres hosts 1.6.0 registra la actualización de créditos nativos y planes web de Higgsfield, estados de proveedores, latencias de hosts y instantáneas de estado de capacidades explícitamente limitadas.

Apúntalo a tu propia implementación compatible con DASHBOARD_BASE_URL:

{
  "mcpServers": {
    "open-dashboard": {
      "command": "npx",
      "args": ["-y", "open-dashboard-mcp"],
      "env": { "DASHBOARD_BASE_URL": "https://your-deployment.example.com" }
    }
  }
}

Cuando una fuente no está disponible, las herramientas lo dicen como datos estructurados — unavailable, partial, stale — en lugar de fallar o inventar un valor. Ese es el comportamiento previsto, no un error.

Compilar y ejecutar

Requiere Node.js 20 o más reciente.

npm install
npm run build
node .\build\index.js

El ejecutable compilado permanece como build/index.js. Por defecto, lee la API pública del panel en https://openrouter-github-dashboard.vercel.app con cero credenciales. Para apuntar al hijo a otra implementación compatible, establece solo DASHBOARD_BASE_URL a una URL HTTP(S) absoluta sin credenciales en la URL.

El servidor habla MCP JSON delimitado por nuevas líneas a través de stdin/stdout. Stdout es solo de protocolo; los diagnósticos de aplicación pertenecen a stderr.

El resumen, las declaraciones de proveedores, los discursos, las advertencias y la tabla de herramientas se generan desde el registro de paquetes y un apretón de manos tools/list real en memoria. npm run build los regenera; npm run docs:check falla si los hechos del README confirmado difieren. npm run docs:generate actualiza los bloques generated-do-not-edit marcados. El sitio complementario fija la misma exportación de paquete a una confirmación de fuente inmutable para que su documentación de candidato de versión pueda revisarse antes de la publicación en npm.

Incrustación en Electron

Un host de Electron debe generar la ruta absoluta compilada build/index.js con el ejecutable de Node, opcionalmente establecer solo DASHBOARD_BASE_URL, hablar MCP a través del stdin/stdout del hijo y consumir stderr por separado. Trata los resultados de error estructurados no disponibles, parciales, obsoletos y específicos de endpoint como resultados normales de herramientas; no mates al hijo cuando una fuente ascendente no está disponible.

El inventario de claves debe permanecer apagado en una compilación distribuida: deja OPEN_DASHBOARD_KEY_SOURCES sin establecer y reporta unconfigured. El valor predeterminado de cero credenciales es lo que hace posible la incrustación en absoluto — el propio servidor MCP de OpenRouter acuña una clave API real a través de OAuth y, por lo tanto, no puede enviarse dentro de una aplicación de escritorio distribuida.

Qué cubre

Acceso MCP de solo lectura a evidencia pública de modelos y GitHub, que cubre OpenRouter, Groq, Cerebras, Sail, Nous Research, QwenCloud, DeepInfra, Novita, SambaNova, Chutes, WaveSpeedAI, fal, KIE, Higgsfield, Crazyrouter, AkashML, io.net, ElevenLabs, Cartesia. La versión 2.0.0 registra 19 proveedores y expone diecinueve herramientas acotadas a través de stdio. Los resultados usan el mismo valor legible por máquina en structuredContent y contenido de texto JSON.

Lo que realmente obtienes:

  • Un catálogo en diecinueve proveedores nombrados — OpenRouter, Groq, Cerebras, Sail, Nous Research, QwenCloud, DeepInfra, Novita, SambaNova, Chutes, WaveSpeedAI, fal, KIE, Higgsfield, Crazyrouter, AkashML, io.net, ElevenLabs y Cartesia.
  • En qué campo responde un modelo. Las filas del catálogo llevan responseShape, por lo que un selector puede ver que un modelo de razonamiento ha sido observado devolviendo un content vacío antes de recomendarlo.
  • Precios que puedes comparar, o una negativa. Dos precios se comparan solo cuando comparten una unidad y una condición. De lo contrario, obtienes not_comparable y la razón — nunca un número que parece correcto y no lo es.
  • Cada cifra lleva su procedencia — la página de la que se leyó, la marca de tiempo y si fue publicada, derivada o extraída de prosa.
  • El costo de generación sigue siendo auditable. El costo numérico por generación se muestra solo cuando el proveedor devuelve un campo autoritativo. Las observaciones de OpenRouter retienen usage.cost; Nous Research y Sail permanecen como BLOCKED cuando no existe tal campo, y las muestras cortas permanecen como INSUFFICIENT EVIDENCE en lugar de convertirse en una estimación de apariencia única.
  • UNKNOWN permanece UNKNOWN. Un precio faltante nunca se predetermina a cero, por lo que la selección de costos falla de manera segura en lugar de tratar la evidencia ausente como gratuita.
  • No se necesitan credenciales. Las herramientas del panel leen evidencia pública sin una cuenta o claves API.

Lo que no es: no es un proxy de inferencia ni un panel de facturación. Proporciona la evidencia sobre la que un enrutador o selector decide; nunca reenvía tráfico de inferencia y nunca escribe nada en ningún lugar.

Herramientas

19 herramientas de solo lectura, leídas del gráfico de registro real de MCP tools/list del servidor sin llamar a ninguna herramienta.

HerramientaPropósito
dashboard_benchmarksObservaciones de referencia del panel
dashboard_capability_stateEstado de capacidades para la selección determinista de modelos
dashboard_catalogueCatálogo de modelos del proveedor y precios de medios comparables
dashboard_contractEsquema MCP y contrato de obsolescencia
dashboard_free_modelsModelos gratuitos utilizables del panel
dashboard_generation_costsCostos de generación medidos
dashboard_github_moversImpulsores de momentum público de GitHub del panel
dashboard_github_trendingRepositorios de tendencias de GitHub
dashboard_key_inventoryInventario clave del panel abierto
dashboard_matrixMatriz de aplicaciones y modelos del panel
dashboard_model_economicsEconomía de modelos del panel abierto
dashboard_model_statusEstado de modelos del panel
dashboard_price_comparisonComparación de precios del agregador de modelos compartidos
dashboard_resolve_modelResolver modelo del panel
dashboard_resolve_seatResolver el asiento del proveedor para un rol
dashboard_source_healthSalud de fuentes del panel
dashboard_speedAfirmaciones de velocidad del proveedor y protocolo de sondeo
dashboard_usage_leadersLíderes de uso del ecosistema público del panel
dashboard_whats_changedCambios del panel

Cada herramienta es de solo lectura, no destructiva y de mundo abierto. Los resultados preservan cadenas exactas de enteros/decimales, procedencia, marcadores de obsolescencia, límites y estados explícitos de no disponible/parcial. Una falla de nivel de herramienta en el upstream se devuelve como datos estructurados y no termina la conexión MCP.

Estado determinista de capacidades

dashboard_capability_state es el objeto de estado legible por máquina para un agente de selección. Devuelve una fila por cada slug de modelo vivo disponible, cobertura del proveedor y las mismas dos decisiones sobre esa única tabla: el modelo de pago literalmente más barato y el modelo funcional más barato. Cada campo de decisión tiene su propio checked_at, observed_at, expires_at y age_seconds; los valores caducados se limpian y se etiquetan como expired, nunca se reutilizan como valores actuales. La fila lleva billing_class, context_window, catalogue_price, generation_cost medido (incluidos los recuentos de tokens de entrada/salida), routed_provider, reachability de tres estados, modalidades de entrada/salida, supports_tool_calling, model_family y base_weights_lineage explícitos, y el libro mayor de funcionalidad en caché (resolves, structured_output_ok, p50_latency, p95_latency, last_functionally_tested, más el enlace externo de calidad semántica). Desconocido es un valor, no una omisión.

Las dos políticas son deliberadamente diferentes: queries.public_council es elegible solo con la clasificación de pago actual y el costo autoritativo por generación, mientras que queries.private_council además requiere alcanzabilidad en vivo, soporte de llamadas a herramientas, las compuertas mecánicas de funcionalidad re-probables, el límite de p95 de 60 segundos y un juicio semántico separado. El precio del catálogo nunca se sustituye por el costo de generación. La identidad del proveedor nunca se usa como linaje de familia de modelos o pesos base. Para mantener acotada la carga útil de stdio, dashboard_capability_state tiene como valor predeterminado una instantánea de 500 filas segura para el transporte y max_rows solo puede reducir ese límite. pagination.capped, next_cursor, scope.completeness, considered_rows, candidate_rows y elimination_breakdown exponen el denominador y cada compuerta medida. La colisión de familias se informa explícitamente como no evaluada hasta que el llamador proporcione la lista del consejo ya asignado. Consulte docs/jev-routing-example.json para una proyección Jev acotada: con la fuente actualmente implementada, devuelve deterministamente block sobre su segmento observado porque /api/public/v2/generation-costs y los tres libros mayores fechados no se publican, por lo que billing_class, generation_cost y los campos solo privados permanecen como UNKNOWN explícito.

La respuesta también lleva el manifiesto de medición semanal bloqueado basket-v1. Nombra las ocho filas de modelo/proveedor, la carga de trabajo exacta, tres puntos de vista, la estimación de costo límite inferior del precio publicado y los campos de instantánea de resultados firmados. El plan actual usa n=8: p50 y max of 8 son publicables, mientras que p95 se retiene explícitamente hasta que exista una muestra más grande. Ningún trabajo de Vercel puede reclamar un punto de vista búlgaro, KVM europeo u Oracle de EE. UU., y ninguna instantánea faltante se agrupa silenciosamente.

/api/public/v2/live-models — el catálogo entre proveedores — está implementado y sirviendo a partir del 2026-08-27. Si el panel deja de publicarlo, la resolución de modelos, el estado exacto de los modelos y las consultas de modelos gratuitos utilizables devuelven una declinación explícita de capacidad que apunta a dashboard_source_health en lugar de fabricar datos de catálogo.

Proveedores

Generado desde el registro de paquetes: 19 proveedores en open-dashboard-mcp 2.0.0. Las declaraciones de publicación describen el conector nombrado; no son mediciones frescas ni un inventario completo de proveedores.

ProveedorFuentesPreciosContextoModalidadCiclo de vidaDescuentosVisibilidad de gasto
OpenRouter
Agregador multiproveedor
Catálogo · DocumentaciónAlgunos modelos recopiladosTodos los modelos recopiladosTodos los modelos recopiladosTodos los modelos recopiladosAlgunos modelos recopiladosAPI de facturación
GroqCatálogo · DocumentaciónAlgunos modelos recopiladosTodos los modelos recopiladosTodos los modelos recopiladosNo publicado en este conectorNo publicado en este conectorSin API de facturación
CerebrasCatálogo · DocumentaciónAlgunos modelos recopiladosNo publicado en este conectorNo publicado en este conectorNo publicado en este conectorNo publicado en este conectorSin API de facturación
SailCatálogo · DocumentaciónAlgunos modelos recopiladosAlgunos modelos recopiladosNo publicado en este conectorNo publicado en este conectorNo publicado en este conectorNo establecido
Nous Research
Proveedor de modelos
Catálogo · DocumentaciónAlgunos modelos recopiladosNo establecidoNo establecidoNo establecidoNo establecidoNo establecido
QwenCloudCatálogo · DocumentaciónAlgunos modelos recopiladosAlgunos modelos recopiladosAlgunos modelos recopiladosNo publicado en este conectorNo publicado en este conectorSin API de facturación
DeepInfraCatálogo · DocumentaciónTodos los modelos recopiladosAlgunos modelos recopiladosNo publicado en este conectorAlgunos modelos recopiladosNo publicado en este conectorSin API de facturación
NovitaCatálogo · DocumentaciónAlgunos modelos recopiladosTodos los modelos recopiladosTodos los modelos recopiladosNo publicado en este conectorAlgunos modelos recopiladosSin API de facturación
SambaNovaCatálogo · DocumentaciónTodos los modelos recopiladosTodos los modelos recopiladosNo publicado en este conectorNo publicado en este conectorNo publicado en este conectorSin API de facturación
ChutesCatálogo · DocumentaciónTodos los modelos recopiladosTodos los modelos recopiladosTodos los modelos recopiladosNo publicado en este conectorNo publicado en este conectorSin API de facturación
WaveSpeedAI
Plataforma de generación de medios
Catálogo · DocumentaciónAlgunos modelos recopiladosNo publicado en este conectorAlgunos modelos recopiladosNo publicado en este conectorNo publicado en este conectorNo establecido
fal
Plataforma de generación de medios
Catálogo · DocumentaciónAlgunos modelos recopiladosNo publicado en este conectorAlgunos modelos recopiladosNo publicado en este conectorNo publicado en este conectorNo establecido
KIE
Agregador multiproveedor
Catálogo · DocumentaciónTodos los modelos recopiladosNo publicado en este conectorAlgunos modelos recopiladosNo publicado en este conectorAlgunos modelos recopiladosNo establecido
Higgsfield
Plataforma de generación de medios
Catálogo · DocumentaciónAlgunos modelos recopiladosNo publicado en este conectorAlgunos modelos recopiladosNo publicado en este conectorNo publicado en este conectorNo establecido
Crazyrouter
Agregador multiproveedor
Catálogo · DocumentaciónAlgunos modelos recopiladosNo establecidoAlgunos modelos recopiladosNo establecidoAlgunos modelos recopiladosNo establecido
AkashMLCatálogo · DocumentaciónTodos los modelos recopiladosTodos los modelos recopiladosTodos los modelos recopiladosNo publicado en este conectorNo publicado en este conectorSin API de facturación
io.netCatálogo · DocumentaciónTodos los modelos recopiladosTodos los modelos recopiladosTodos los modelos recopiladosNo publicado en este conectorNo publicado en este conectorNo establecido
ElevenLabs
Plataforma de generación de medios
Catálogo · DocumentaciónTodos los modelos recopiladosNo publicado en este conectorTodos los modelos recopiladosNo publicado en este conectorNo publicado en este conectorNo establecido
Cartesia
Plataforma de generación de medios
Catálogo · DocumentaciónTodos los modelos recopiladosNo publicado en este conectorTodos los modelos recopiladosNo publicado en este conectorNo publicado en este conectorNo establecido

Propuestas de proveedores y advertencias estructuradas

Las citas son palabras de los proveedores. Las advertencias registran límites publicados, incluidos el alcance y las unidades; no afirman velocidad de inferencia medida ni la cuota actual del llamador. Una advertencia ausente va acompañada de su estado de investigación, nunca de un marcador nulo.

OpenRouter

“La interfaz unificada para cada modelo” — OpenRouter, observado el 2026-09-08.

  • rate_limit: 20 solicitudes/minuto. Variantes de modelo gratuitas (IDs que terminan en :free), independientemente del estado de la cuenta; las variantes de pago están fuera de este límite. Esta es la cuota de plataforma publicada, no la asignación restante del llamador. Fuente del proveedor, observado el 2026-09-08; base: provider_published.

Groq

“Groq hace que la inferencia funcione a escala.” — Groq, observado el 2026-09-08.

  • rate_limit: 8000 tokens/minute. Resumen del Plan Gratuito, openai/gpt-oss-120b, cuota combinada de tokens a nivel de organización. Los tokens en caché están excluidos. Los límites exactos de la organización pueden diferir; esto no es tokens por segundo ni un tope de velocidad de inferencia. Fuente del proveedor, observado 2026-09-08; base: provider_published.

Cerebras

“Construye productos que otros no pueden” — Cerebras, observado 2026-09-08.

  • trial_expiry: 30 días. Los créditos de la Prueba Gratuita caducan 30 días después de ser otorgados. Esta es la política de prueba publicada, no el saldo de créditos ni la fecha de caducidad de este llamador. Fuente del proveedor, observado 2026-09-08; base: provider_published.

Sail

“Sail es la API más rentable para los mejores modelos de código abierto.” — Sail Research, observado 2026-09-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-08.

Nous Research

“Tarifa de API publicada: $0.072/M” — Afirmación de precios publicada por Nous Research, observado 2026-09-11.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-11.

QwenCloud

“Fundación para la Innovación en IA” — Alibaba Cloud Model Studio, observado 2026-09-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-08.

DeepInfra

“Acelera tu IA con APIs fáciles para desarrolladores, diseñadas para rendimiento y rentabilidad.” — DeepInfra, observado 2026-09-08.

  • concurrency_limit: 200 concurrent_requests. Límite de cuenta predeterminado por modelo; no solicitudes por minuto. Una cuenta puede solicitar un límite más alto, y un modelo ocupado aún puede devolver 429 por debajo del predeterminado. Fuente del proveedor, observado 2026-09-08; base: provider_published.

Novita

“Ejecuta modelos, escala GPUs y construye agentes de IA, todo en una sola plataforma.” — Novita AI, observado 2026-09-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-08.

SambaNova

“La inferencia de IA más rápida en los modelos más grandes” — SambaNova, SambaCloud, observado 2026-09-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-08.

Chutes

“Computación serverless innovadora para IA, a escala.” — Chutes, observado 2026-09-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-08.

WaveSpeedAI

“WaveSpeedAI es la plataforma definitiva de generación de medios con IA: fácil de usar, asequible, escalable y rápida.” — WaveSpeedAI, observado 2026-09-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-08.

fal

“La plataforma de medios generativos que impulsa las mejores aplicaciones de IA del mundo.” — fal, observado 2026-09-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-08.

KIE

“Accede a los mejores modelos de IA para chat, video, imagen y música en una sola API.” — Descripción de la página de inicio de Kie.ai, observado 2026-09-29.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-29.

Higgsfield

“Planes de precios para las herramientas de imagen, video y audio de Higgsfield.” — Página pública de precios de Higgsfield, observado 2026-09-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-08.

Crazyrouter

“Mismo flujo de trabajo estilo OpenAI. Más modelos. Precios más bajos. Experimentación más fácil.” — Crazyrouter, observado 2026-09-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-08.

AkashML

“precios competitivos desde $0.15/M tokens” — Afirmación de precios en la página de inicio de AkashML, contradicha por sus propias tarifas /models, observado 2026-09-26.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-26.

io.net

“Plataforma de inferencia gratuita impulsada por la red descentralizada de GPUs de io.net.” — Descripción de la página IO Intelligence de io.net, observado 2026-09-26.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-09-26.

ElevenLabs

“Precios de la API de texto a voz” — Página de precios de la API de ElevenLabs, observado 2026-10-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-10-08.

Cartesia

“Sonic-3.6” — Página de precios de Cartesia, observado 2026-10-08.

Advertencias: No encontrado en las fuentes consultadas. No se estableció ningún límite operativo numérico a partir de esta página de plataforma consultada. Esta verificación limitada no establece que el proveedor no publique ninguno en otro lugar. Fuente; consultado 2026-10-08.

DeepInfra, Novita, SambaNova y Chutes publican sus catálogos recopilados sin credencial. QwenCloud requiere la clave internacional vinculada a la región del recopilador. Ambos caminos producen datos públicos de panel que este MCP lee sin credenciales. Mistral, xAI, Together, Fireworks, Nebius, Hyperbolic y Parasail devolvieron 401 en las sondas de catálogo anteriores; esa observación describe esos endpoints, no lo que los proveedores publican en otro lugar.

El catálogo nativo /api/v1/models de QwenCloud está paginado. La recopilación se completó el 2026-09-08 13:47:21 UTC con 255 identidades: 249 nativas y seis suplementos solo de compatibilidad. El catálogo antiguo comparte 159 de sus 165 ids con la fuente nativa; conservar los otros seis evita desapariciones falsas al cambiar de endpoint. De los 249 modelos nativos, 242 tienen bloques de precios: 306 bloques externos contienen 893 entradas de precios internas. Los metadatos nativos añaden 59 pares de precios prompt/completion comparables, 134 valores de contexto utilizables, 247 listas no vacías de modalidades de respuesta y 72 capacidades de razonamiento explícitas. Las 893 entradas comprenden 738 entradas por token y 155 entradas de precios no basadas en token: 94 por segundo, 38 por imagen, 20 por 10,000 caracteres y 3 por voz. Esas 155 entradas se excluyen de las comparaciones de tokens y se cuentan en los metadatos de recopilación; ninguna identidad de modelo se descarta por tener precios de medios. Los modelos solo de medios, los siete modelos nativos sin bloques de precios y los seis suplementos solo de identidad permanecen paid_or_unknown.

El archivo bruto preserva todos los precios nativos, rangos de tokens y bandas de tiempo; la API actual no publica las bandas. Las tarifas planas se retienen deliberadamente para 39 modelos: 37 con múltiples rangos y dos con bandas pico/fuera de pico distintas. Las entradas contienen 782 bandas estándar, 99 no establecidas, seis pico y seis fuera de pico. Los precios planos de prompt/completion se exponen solo para una tarifa general de entrada/salida predeterminada sin ambigüedad que no requiera selección de rango o banda. Otras tarifas permanecen nulas con un marcador missingFields de selección requerida, en lugar de citar silenciosamente una banda. Las 72 capacidades de Razonamiento explícitas se convierten en reasoningEfforts: [], lo que significa soporte sin niveles de esfuerzo nombrados; los límites numéricos de razonamiento permanecen en el archivo bruto, y la ausencia de evidencia positiva de capacidad sigue siendo nula.

Las observaciones del catálogo de tokens a continuación se midieron el 2026-09-08. DeepInfra fijó precios en ocho ejes diferentes y solo 219 de sus 372 modelos tenían precio por token; otros ejes se excluyeron de las comparaciones de tokens. El catálogo de medios ahora informa sus ejes nativos por separado y normaliza los precios comparables de imagen/video. Su campo deprecated es una fecha de retiro, no un indicador, y 114 de los 219 ya llevan uno: una fecha de retiro concreta y un sucesor son evidencia más sólida que un campo faltante. Novita's campo de precio plano no es un nivel consistente: es la banda más barata en un modelo y la más cara en otro, y dos modelos escalonados no publican ningún precio plano, por lo que los precios aquí son el primer nivel con las bandas completas retenidas. Los catálogos discrepan en casi todo, y normalizarlos es el trabajo: las llamadas a la API son la parte fácil.

El conector /v1/models actual de Cerebras proporciona solo ids y propietarios. Una fuente nativa pública separada devolvió metadatos más ricos para tres de tres modelos el 2026-09-08; su integración está pendiente, por lo que esos valores aún no se devuelven aquí. Las brechas del conector actual no establecen ausencia a nivel de proveedor.

Sail publica precios e información de contexto de modelos. Este MCP cita precios solo después de verificar su documento fijado y no recopila los valores de contexto documentados. Sail también documenta rutas de uso y facturación; esta integración no las ha sondeado ni leído, por lo que su registro informa la visibilidad de gasto como desconocida. Ver precios de Sail para la verificación de documentos existente.

Cuatro reglas se derivan de esa tabla, y las herramientas aplican las cuatro:

  • Un modelo sin precio es de costo desconocido, nunca gratuito. Un precio comparable faltante puede reflejar una brecha en el conector, ausencia de precios ascendentes, una unidad de facturación de medios o una elección requerida de rango/banda. Las filas que cumplen con los filtros de capacidad solicitados mantienen su lugar con priceComparable: false y un unrankableReason declarado, listadas después de las filas clasificadas en lugar de eliminarse.
  • La ausencia de señal de ciclo de vida no es lo mismo que ausencia de riesgo. OpenRouter y DeepInfra incluyen declaraciones de ciclo de vida; la cobertura varía según el conector. Los modelos de Groq, Cerebras y Sail reportan retirementRisk: "not_published_by_provider", porque "none" sería una falsa tranquilidad. Para esos tres, que un modelo desaparezca de la lista es el único aviso de retiro que existe — por lo que availability: "disappeared" se trata como inminente.
  • Cada valor nulo tiene contexto de origen. src/providers/registry.ts describe las fuentes conocidas y los límites del conector con always, partial o never; un proveedor desconocido recibe unknown. Un valor nulo no establece que un proveedor haya retenido información.
  • Un precio leído de un documento es tan bueno como el documento. Los precios de Sail provienen de una página de precios fijada en lugar de una API, por lo que el servidor verifica el documento antes de citarlo y se abstiene en lugar de adivinar cuando ha cambiado.

Catálogo completo y precios de medios comparables

dashboard_catalogue conserva las identidades de modelos adquiridas incluso cuando no hay un precio comparable disponible. DeepInfra, WaveSpeedAI y Chutes utilizan fuentes nativas públicas. fal utiliza fuentes autenticadas de modelos/precios cuando se proporciona FAL_API_KEY, y precios públicos de catálogo/resumen en caso contrario. Crazyrouter utiliza identidades visibles con clave cuando se proporciona CRAZYROUTER_API_KEY, e identidades de precios públicas en caso contrario. Otros proveedores conservan su archivo del panel. Todas las solicitudes son solicitudes de metadatos de solo lectura.

Por ejemplo, solicita el detalle de video de WaveSpeed con:

{
  "providers": ["wavespeed"],
  "mediaKind": "video",
  "modelIds": ["wavespeed-ai/wan-2.2/t2v-720p"],
  "offset": 0,
  "limit": 20
}
EntradaSignificado
providersLista opcional de IDs de proveedores, máximo 30; por defecto el registro del paquete.
mediaKindFiltro opcional de image, video, text, audio, other o unknown.
modelIdsIDs de modelos exactos opcionales, máximo 20. También solicita el detalle de precios de WaveSpeed para esos IDs.
offsetDesplazamiento en las filas adquiridas coincidentes, por defecto 0, máximo 1,000,000.
limitFilas por respuesta, por defecto 100, máximo 500. Sigue population.nextOffset hasta que sea nulo.

El filtrado ocurre después de la adquisición, en orden estable de proveedor/ID. population reporta recuentos adquiridos, coincidentes y devueltos, exclusiones por tipo de medio e ID de modelo, y filas omitidas por paginación. Cada proveedor reporta por separado listed, received, retained, excluded, exclusionRules, completeness y el requestParameters aplicado. Un denominador nativo faltante permanece nulo con una explicación; las poblaciones no disponibles y desconocidas nunca se convierten en cero. Estos contadores describen las filas realmente adquiridas, no una afirmación de que se observó todo el inventario global de cada proveedor.

El estado de precios es separado de los puntos: published requiere al menos un punto, mientras que not_published y unknown llevan una lista vacía y un pricingNote explicativo. Un precio faltante o no comparable nunca se representa como cero. Cada cifra resumida normalizada usa { value, unit, assumption, derived_from }; una suposición no puede omitirse.

Los precios de tokens conservan unidades de tokens; el alquiler de cómputo, caracteres, voz y otros ejes de facturación no soportados permanecen como datos nativos en lugar de ser reetiquetados como precios de generación de imágenes o video. Propuestas estructuradas de proveedores y advertencias con alcance acompañan la respuesta en providerMetadata.

La cobertura tiene límites específicos. El archivo heredado del panel no expone cada denominador de población nativo. WaveSpeed enriquece sus cuatro IDs de video predeterminados más hasta 20 IDs solicitados; los precios solo de lista cuya fórmula o cantidad de salida es desconocida permanecen no disponibles. Los fallos de detalle aislados se registran y no impiden búsquedas posteriores de modelos solicitados; los fallos de servicio o acceso compartidos detienen el lote. Los precios autenticados de fal se solicitan en lotes de 50 bajo un presupuesto fijo de solicitudes/tiempo; un 429 detiene el lote sin reintento. Las unidades de precio nativas pueden describir tiempo de cómputo, por lo que los segundos genéricos no se convierten en segundos de video de salida sin evidencia explícita. Su respaldo público verifica solo la tabla de precios resumida. Crazyrouter conserva sus fórmulas de facturación nativas; las fórmulas de medios o niveles no soportadas permanecen sin precio para comparación. Las cifras exactas del grupo predeterminado de GPT-4o, GPT-4o mini y GPT-4.1 que son exactamente 0.65x los precios de lista de OpenAI llevan procedencia derivada y se excluyen de las comparaciones de competencia. Una lectura de fuente fallida es distinta de una fila faltante verificada con éxito, y ninguna significa no publicación a nivel de proveedor. Los recuentos de identidad completos permanecen intactos cuando la cobertura de precios es parcial. Los precios de alquiler de cómputo de Chutes no son precios de generación.

Comparación de precios de modelos compartidos

dashboard_price_comparison une los alias de Crazyrouter con OpenRouter usando IDs exactos y evidencia explícita de autor nativo. Conserva identidades de Crazyrouter no coincidentes y sin precio, registra la población de cada fuente, y reporta filtros y paginación por separado. El modelIds opcional selecciona hasta 20 IDs exactos de Crazyrouter; offset por defecto es 0 y limit es 50 (máximo 500).

{"modelIds":["gpt-4o","gpt-4o-mini","gpt-4.1"],"limit":20}

La respuesta presenta cada punto de precio de entrada/salida compatible y condición lado a lado y calcula ahorros con fracciones decimales exactas. Si las unidades o condiciones no coinciden, esa parte es not_comparable con una razón; nunca elige una tarifa silenciosamente. Las cotizaciones de Crazyrouter son su grupo de precios públicos predeterminado; el grupo de facturación del llamante y los cargos liquidados no están verificados. Las insignias de descuento por modelo se conservan como puntos derived con su factor específico del modelo y texto de origen; no hay suposición global de 0.65. Las cotizaciones de OpenRouter se recopilan durante la llamada para las filas que siguen siendo elegibles. Las referencias directas de proveedores disponibles son observaciones de precios publicados con fecha explícita, no precios de cuenta en vivo. Los alias exactos de API no establecen que dos servicios resuelvan al mismo snapshot de modelo inmutable.

La afirmación con fecha de Crazyrouter se atribuye y verifica solo donde existe una referencia directa de proveedor independientemente comparable. Las coincidencias derivadas de tarjetas de tarifas se conservan como evidencia pero se excluyen de esa evaluación; una cotización fuera del rango reclamado se reporta como discrepancia, y los precios directos ausentes permanecen desconocidos. Algunos alias comparados no prueban una afirmación sobre la mayoría de los modelos. La herramienta no hace solicitudes de inferencia ni mide latencia o calidad del modelo.

Suministra FAL_API_KEY y CRAZYROUTER_API_KEY opcionales a través del entorno del host. El inicio y el descubrimiento de herramientas permanecen sin credenciales. Este paquete no lee Secret Manager por sí mismo, escribe claves ni modifica una cuenta. El gasto de la cuenta permanece sin leer por estos recopiladores.

La selección de herramientas y proveedores en la instalación pertenece a 1.0. Establece OPEN_DASHBOARD_TOOLS y/o OPEN_DASHBOARD_PROVIDERS como listas de permitidos separadas por comas antes del inicio. Las herramientas deseleccionadas están ausentes de tools/list; las herramientas con proveedores omiten los proveedores deseleccionados, y la herramienta de comparación de precios se omite a menos que tanto openrouter como crazyrouter estén seleccionados. Los filtros de solicitud aún seleccionan la salida dentro de la superficie instalada.

Descuentos

La cobertura de descuentos varía según el conector. OpenRouter publica descuentos de endpoints y Novita publica precios efectivos versus originales. Los conectores de tokens originales de Groq, Cerebras y Sail reportan not_published_by_provider; esto está limitado a sus datos recopilados. Usa la tabla de registro generada para las declaraciones de publicación actuales.

OpenRouter publica descuentos como un hecho de endpoint de proveedor en lugar de un hecho de modelo — medido el 2026-08-19, cero de 550 modelos llevan una clave discount mientras que 272 de 272 endpoints de proveedores sí. dashboard_model_economics por lo tanto lee /api/public/v2/models/{id}/providers por modelo y reporta el mejor descuento publicado con el proveedor nombrado, para que el número sea verificable. Las filas de Groq, Cerebras y Sail reportan not_published_by_provider y no cuestan ninguna solicitud ascendente.

Cuatro distinciones que la herramienta se niega a colapsar:

  • discounted — se encontró un descuento publicado distinto de cero.
  • no_discount — se leyeron los endpoints y cada uno publicó nada o cero. El único valor que significa precio completo.
  • unavailable — el panel no tiene ninguna observación de endpoint para ese modelo. El upstream observa endpoints bajo un presupuesto diario de solicitudes, por lo que la mayor parte del catálogo no está observado en cualquier momento. Desconocido, nunca precio completo.
  • not_published_by_provider — este proveedor no tiene ningún concepto de descuento. Nada que buscar.
  • not_checked — se alcanzó el límite de enriquecimiento por llamada. También desconocido.

Una expiración faltante no significa un descuento permanente. La integración original de endpoints de OpenRouter expone una proporción de descuento y sin fecha de fin; los conectores originales de Groq, Cerebras y Sail no exponen expiración de descuento. Estas filas llevan expiresAt: null con expiryPublished: false. Las declaraciones actuales de conectores permanecen en el registro en lugar de un recuento de proveedores mantenido manualmente aquí.

No hay una ruta pública que liste todos los modelos con descuento, por lo que el descubrimiento es por modelo y está limitado por discountEnrichment.

Tendencias de GitHub

dashboard_github_trending lee /api/public/v2/github/trending, que extrae github.com/trending porque GitHub no publica una API para ello.

El tablero de tendencias de GitHub cambia a lo largo del día, por lo que una lista sin hora de recopilación no es interpretable: una fresca y una de hace tres días se ven idénticas. Cada respuesta por lo tanto lleva:

  • collectedAt — cuándo se recuperó realmente la página ascendente, tomado del encabezado Date del origen. No cuándo se ejecutó la herramienta, y no cuándo se ensambló la respuesta; la búsqueda subyacente está en caché, por lo que esos sobreestimarían la frescura hasta en tres horas.
  • ageHours y stale — calculados contra una ventana de seis horas, bien dentro de un ciclo. Una marca de tiempo no analizable se lee como máxima antigüedad en lugar de frescura.
  • source — direct o firecrawl, registrado en lugar de inferido.
  • fallbackReason — por qué se abandonó el raspado directo gratuito, cuando ocurrió. Nulo en el camino feliz.

El raspado directo es el camino principal y lleva tráfico de producción. Existe un respaldo de pago de Firecrawl para el día en que GitHub bloquee el raspado o cambie su marcado; cuando sirve, la herramienta lo dice sin que se le pregunte, porque un respaldo del que nadie está informado es cómo terminas en el camino de pago durante meses sin saber que el gratuito murió.

Modelos que dejaron de ser gratuitos

Un modelo gratuito no se anuncia cuando comienza a cobrar. Su ID no cambia, permanece listado, y nada más en un catálogo se mueve. La factura es la notificación.

dashboard_whats_changed compara las dos ejecuciones de catálogo archivadas más recientes y reporta el movimiento de precios, con los modelos que dejaron de ser gratuitos en su propio grupo:

"priceChanges": {
  "status": "available",
  "becamePaid": [
    {
      "modelId": "vendor/was-free",
      "transition": "became_paid",
      "basePromptPrice": "0", "headPromptPrice": "0.0000004",
      "wasFree": true, "isFree": false,
      "note": "vendor/was-free was free and now charges 0.0000004 per prompt
               token. Nothing about its id changed, so a pinned config keeps
               calling it and starts paying."
    }
  ],
  "otherChanges": [],
  "headPublishedOn": "2026-08-26",
  "coverage": {
    "status": "indeterminate",
    "reason": "The producer identifies this comparison by run id and publishes no
               date for either run, so how far back it reaches is not published.
               Whether it covers 2026-08-18 to 2026-08-25 cannot be determined
               from this response, so an empty result is not evidence that
               nothing started charging."
  },
  "comparison": { "baseRunId": "…", "headRunId": "…" }
}

La comparación es la propia cadena de ejecuciones del archivo, no una fecha que elijas, por lo que la respuesta siempre es "desde la última recopilación" y no puede abarcar una ejecución omitida y presentar un delta obsoleto como fresco. Los precios se comparan como decimales exactos — nunca flotantes — porque un error de redondeo en una comparación de precios inventaría u ocultaría un cambio. El cero se reconoce semánticamente, por lo que 0, 0.0 y 0.00000000000000000000 son todos gratuitos; un precio nulo no es gratuito, significa que no hay un precio comparable disponible en ese campo.

La ventana que pediste no es la ventana sobre la que se compararon los precios

Cada otra sección de dashboard_whats_changed respeta el since que pasas. El movimiento de precios no puede: la ruta pública no acepta parámetro de ventana y siempre compara las dos ejecuciones archivadas más recientes. Un becamePaid vacío dentro de una respuesta de un mes se leería como una señal de todo claro para el mes que nunca fue.

Y el lapso de la comparación no se publica. La ruta identifica sus dos ejecuciones por id y no lleva fecha para ninguna. El sobre de respuesta sí tiene un window, pero esa es la fecha de publicación principal, no el lapso — medido contra producción el 2026-08-27, window.start === window.end === 2026-08-26 mientras que baseRunId !== headRunId en una cadencia de recolección diaria, así que la comparación real cubre al menos dos días y el sobre lo llama uno. Leerlo como el lapso subestima la comparación e inventa una respuesta de cobertura.

Así que la sección solo reporta lo que el payload respalda:

  • headPublishedOn — el estado de catálogo más reciente examinado, nombrado por lo que es.
  • coverage.status es incomplete o indeterminate, y nunca complete. La cobertura completa requeriría la fecha de la ejecución base, que no se publica. incomplete es el único veredicto que la respuesta sí respalda: nada después de la ejecución principal fue examinado, así que un headPublishedOn anterior a la through del reporte prueba que la cola de tu ventana quedó sin revisar — el caso del recolector rezagado, y los días que un lector más asume que están cubiertos.
  • coverage.reason dice cuál de los dos es y por qué, y la misma frase se empuja al warnings de la respuesta cada vez, porque un campo que nadie lee no es una divulgación.

indeterminate no es una forma más suave de decir bien. Significa que un resultado vacío no es evidencia sobre tu ventana.

Así que dashboard_whats_changed no devuelve "ok". Mientras la ruta siga sin fecha, una sección de precios disponible nunca puede establecer que cubrió lo que preguntaste, y un estado de ok junto a Nothing changed afirmaría que lo hizo. La herramienta devuelve partial, y el resumen lleva la advertencia en lugar de dejarla a una alerta — porque el resumen es la línea que un llamador transmite:

5 cambios encontrados en la evidencia escaneada desde 2026-08-18; la comparación está incompleta. No se pudo demostrar que el movimiento de precios cubriera 2026-08-18 a 2026-08-25, así que esto no es una señal de todo claro sobre modelos que comenzaron a cobrar.

Medido contra producción, 2026-08-27.

Para ser exactos sobre lo que eso cuesta: ok es inalcanzable en esta versión. Una sección de precios legible nunca puede establecer cobertura, y una ilegible está degradada — de cualquier manera, un reporte exitoso es partial. No escribas una rama esperando ok. Hacerlo alcanzable requeriría que el productor publicara fechas para las ejecuciones que compara y que este cliente las leyera; ninguno existe hoy, y este README no adivinará la forma de ninguno.

Esto es solo sobre reportes exitosos. Una lectura que falla por completo — entrada inválida, o un manifiesto que no se puede obtener — aún devuelve status: "error" con el error seguro adjunto. Maneja tres: partial, error, y ok por completitud aunque nada lo produzca.

Una ventana invertida es un resultado, no una advertencia. since es tuyo y through se deriva del cubo completo más reciente, así que los dos pueden cruzarse. Cada sección con ámbito de ventana reportaría entonces nada — que es exactamente lo que parece una consulta satisfecha. Una advertencia junto a un resumen normal no arregla eso, porque el resumen es la línea que un llamador transmite y leería Nada cambió desde 2027-01-01. Así que un rango invertido devuelve status: "partial" con las secciones con ámbito de ventana unavailable y un resumen que nombra la inversión. El movimiento de precios es independiente de tu ventana, así que aún reporta.

El resumen ya no puede leerse como una señal de todo claro mientras los precios se movieron. Lidera con el dinero — 1 model stopped being free in the comparison ending 2026-08-26 — y el movimiento de precios sin fila de gratuito a pagado aún recibe su propia frase en lugar de pasar sin mencionarse. Donde el resumen solía decir sin cambios y nada cambió, dice sin otros cambios y nada más cambió siempre que la sección de precios reporte movimiento.

Los dos conteos nunca se suman. Las filas de precios vienen de la comparación del productor, no de tu ventana, así que un total único declararía un número para una ventana donde algunos de los elementos contados están fuera. Cada frase lleva su propio conteo y su propia comparación en su lugar.

Una página de precios limitada es un piso, no un total. /price-changes pagina y la sección lee una página de 100 filas mixtas, así que cuando cap.capped es verdadero ambos conteos están calificados, porque una fila no leída puede ser de cualquier tipo — At least 2 models stopped being free …, alongside at least 3 other price moves; the price comparison was capped at 100 rows with more unread. Una página limitada tampoco puede descartar la transición: donde una página sin límite dice none of them a model leaving free, una limitada dice None of the rows read was a model leaving free, but … an unread row still could be. El cero categórico es la afirmación costosa aquí, y solo una lectura completa lo gana.

Una sección de precios que falló al leerse degrada el reporte. Un whats_changed cuya sección de precios es unavailable o unsupported_by_public_api devuelve status: "partial", nunca "ok", y el resumen dice que la falla no es evidencia de que nada comenzó a cobrar.

Tres estados de falla, ninguno de los cuales es una lista vacía. Un becamePaid vacío significa que nada quedó gratuito en lo que se comparó. Si el despliegue no sirve el endpoint, obtienes unsupported_by_public_api; si no se pudo leer, unavailable con la razón. Devolver una lista vacía en una falla se leería como nada comenzó a cobrarte, que es la respuesta incorrecta más costosa que este servidor podría dar.

Solo los modelos presentes en ambas ejecuciones se comparan. Un modelo que apareció o desapareció es una pregunta diferente, respondida por las secciones de aparición y desaparición — incluirlo aquí reportaría un modelo completamente nuevo como si hubiera comenzado a cobrar.

Inventario de claves

dashboard_key_inventory es la única herramienta que toca una credencial, y es opt-in para que el valor predeterminado de cero credenciales sobreviva para todo lo demás. Sin configurar, devuelve unconfigured, que es un resultado normal en lugar de un error.

Establece OPEN_DASHBOARD_KEY_SOURCES a triplas provider:secretManagerName=ENV_VAR separadas por comas y proporciona cada variable de entorno nombrada:

OPEN_DASHBOARD_KEY_SOURCES=openrouter:my-openrouter-key=OPENROUTER_API_KEY,groq:my-groq-key=GROQ_API_KEY,cerebras:my-cerebras-key=CEREBRAS_API_KEY

Solo los nombres del Secret Manager se reportan. Los valores de las claves nunca se devuelven, registran ni escriben en evidencia — una prueba afirma que el resultado serializado no contiene material de clave. La herramienta solo emite solicitudes GET y no contiene ninguna ruta de código que pueda acuñar, modificar o revocar una clave. Mantén el aprovisionamiento con una clave separada y privilegiada que este servidor nunca ve.

El gasto no es uniformemente legible, y la herramienta lo dice en lugar de dejar un espacio en blanco. OpenRouter expone el uso y el techo por clave. Groq y Cerebras retienen la clasificación no_billing_api del registro. Sail documenta rutas de facturación que esta integración no lee: sus claves reportan spendReadability: "unread", su registro reporta visibilidad de gasto unknown, y usdSpent permanece nulo. No se agrega ninguna solicitud de facturación. Un campo de dinero en blanco no debe leerse como cero.

usdLimit: null con uncapped: true es el hallazgo que vale la pena actuar: una clave sin techo de gasto puede gastar sin límite si se filtra.

Bloqueo en el borde versus clave muerta

Un 401/403 que lleva el código 1010 de Cloudflare significa que la solicitud fue rechazada en el borde antes de llegar al proveedor — usualmente por no enviar un User-Agent — y no dice nada sobre si la clave es válida. Se reporta como edge_blocked con alive: null, distinto de rejected, porque tratarlo como clave muerta ha causado rotaciones incorrectas antes. Cada sonda envía un User-Agent por esta razón.

Verificado el 2026-08-27 desde un host Windows: Groq responde 401 invalid_api_key y Cerebras 403 {"detail":"Not authenticated"}, con y sin User-Agent — errores de credencial ordinarios, sin 1010. El caso 1010 es real pero específico del host, así que se detecta desde el cuerpo en lugar de asumirse desde el estado.

Auditoría de slugs de modelo fijados

Pasa ids a dashboard_model_economics con los slugs que un config fija, en cualquier proveedor. Los Ids ausentes de todos los catálogos de proveedores regresan en missingIds — el 404 que un config está a punto de golpear, observado antes de que ocurra — y los ids sobrevivientes llevan precio actual, descuento y retirementRisk.

Advertencias

Frescura, y qué pasa cuando la fuente es lenta

Las herramientas respaldadas por el panel leen una API HTTP pública, de cero credenciales en tiempo de consulta. Ese host es un despliegue de nivel hobby sin obligación de disponibilidad, y las respuestas respaldadas por el panel dependen de él. Dos cosas se siguen, y ambas son visibles en la respuesta en lugar de asumidas.

Las respuestas se almacenan en caché, y cada respuesta lleva su propia edad. Una sola llamada a dashboard_model_economics puede hacer dos docenas de solicitudes ascendentes; leer en vivo cada vez pondría carga evitable en ese host. Cada entrada de evidence[] lleva freshness:

"freshness": {
  "state": "cached",
  "fetchedAt": "2026-08-27T20:21:52.494Z",
  "ageSeconds": 30,
  "expiresAt": "2026-08-27T20:26:52.494Z"
}

state es live (obtenido durante esta llamada), cached (dentro de su expiración), o expired. El TTL predeterminado es de cinco minutos; pasa cache: { ttlMs: 0 } para leer en vivo cada vez, o cache: false para deshabilitarlo.

Cuando el host es lento o está caído, obtienes una respuesta honesta, nunca una alternativa silenciosa. Sin nada en caché, la falla ascendente se devuelve como datos estructurados — unavailable con una razón. Con una entrada expirada en mano, el último valor conocido sí se devuelve, pero marcado:

"freshness": {
  "state": "expired",
  "fetchedAt": "2026-08-27T20:21:52.494Z",
  "ageSeconds": 3600,
  "note": "Upstream could not be reached, so this is the last known value,
           measured 2026-08-27T20:21:52.494Z (3600s ago). It is not current."
}

El precio obsoleto es exactamente el daño que esta herramienta existe para prevenir, así que un número nunca se entrega como actual cuando no lo es. No medido no es cero, y obsoleto no es fresco — la edad llega con la respuesta para que un llamador pueda rechazarla.

Gratuito versus gratuito con límite de velocidad

freeKind separa concrete_free (un modelo real de precio cero) de free_router (un nivel de enrutamiento gratuito con límite de velocidad, utilizable para una sonda pero no para una carga de trabajo) de paid_or_unknown (que incluye cada proveedor que no publica precio — desconocido, y nunca tratado como gratuito). genuinelyFree es verdadero solo para concrete_free.

emitsText es true, false, o null donde el proveedor no publica modalidad. Sin él, el modelo gratuito más barato es un generador de música. includeUnknownCapability (predeterminado verdadero) decide si las filas con capacidad no publicada participan; establécelo en falso cuando se necesita una garantía dura, al costo de excluir a Cerebras por completo.

Precios de Sail: un documento fijado, no una API

La API de catálogo de Sail devuelve ids de modelo y nada más — sin precio, sin longitud de contexto, sin modalidad. Sus precios viven en una página de precios legible por humanos, https://docs.sailresearch.com/pricing.md.

Una página no es una API. Puede reestructurarse, reformularse o revalorizarse sin aviso, y un analizador que siga leyéndola de todos modos seguirá devolviendo números que se ven exactamente tan confiados como cuando eran correctos. Así que el servidor genera un hash del documento y lo compara con un digest fijado antes de citar cualquier cosa de él:

  • El digest coincide — los precios se analizan y los modelos de Sail se unen al ranking.
  • El digest difiere — los modelos de Sail se omiten, y la respuesta lleva PRICES ARE STALE, nombrando ambos digests. No recurre a los últimos precios conocidos, porque un precio que era verdadero la semana pasada no es un precio.

El intercambio es deliberado: la herramienta se queda callada sobre Sail en lugar de citar un número que no puede respaldar. Lo que cuesta es disponibilidad — cada cambio legítimo ascendente también silencia a Sail hasta que el pin se reconcilie con el documento en vivo.

El pin se reconcilió el 2026-09-26 contra un revalorización real: cinco modelos agregados, cinco revalorizados, dos retirados, todos verificados a mano antes de que el digest se moviera. El mismo digest ahora también controla las filas de Sail en dashboard_catalogue, que leen identidades del /models con clave de Sail (SAIL_API_KEY) y precios solo de este documento. Eso no es hipotético. Entre dos capturas, el documento creció aproximadamente un 10% y el catálogo de Sail ganó un modelo (google/gemma-4-12B-it, 9 → 10) mientras que zai-org/GLM-5.3 se mantuvo en $1.40 / $4.40 por millón. Un resumen que cambia te dice que el documento se movió. No puede decirte si los precios cambiaron.

El fixture utilizado en las pruebas es byte-idéntico al documento en vivo y está marcado como -text en .gitattributes, porque core.autocrlf de lo contrario reescribirá sus finales de línea al hacer checkout y cambiará el hash, lo que parece precisamente un cambio de precio upstream y no lo es.

Huecos en los números de versión

No hay 0.9.0 en npm y nunca lo hubo. Fue construido y verificado en el repositorio y nunca se publicó, por lo que el salto de 0.8.0 → 1.0.0 no es un lanzamiento que te perdiste; los cambios disruptivos en ese salto están en las notas de lanzamiento de 1.0.0. Tampoco hay 1.1.1. Si sigues los números de versión, estos huecos son contabilidad, no lanzamientos que vinieron y se fueron.

OpenRouter envía su propio servidor MCP. Es de un solo proveedor por construcción, lo que lo hace incapaz de responder la pregunta para la que existe este: de los proveedores con los que realmente tengo claves, ¿cuál es la opción capaz más barata en este momento?

Verificación

Construye primero, luego ejecuta el hijo compilado real a través del cliente oficial del SDK:

npm run verify:stdio -- --mode live
npm run verify:stdio -- --mode fixture
npm run verify:stdio -- --mode offline
npm run verify:stdio -- --mode html
npm run verify:stdout
npm run verify:stdio -- --mode alien-cwd

Los seis modos de arnés originales pasaron el 2026-08-27. Ese fixture histórico afirma que sus filas originales de OpenRouter, Groq, Cerebras y Sail sobreviven en una sola respuesta, que un modelo de Groq con precio se clasifica mientras que un modelo de Cerebras sin precio se mantiene y explica, que Sail se inyecta solo cuando su documento fijado verifica, y que no se inventa ninguna expiración de descuento.

live y alien-cwd usan el valor predeterminado público de cero credenciales. fixture, offline, html y verify:stdout usan infraestructura de prueba solo de loopback. La evidencia se escribe bajo verification/raw/ ignorado solo después de la validación. El verificador crudo es separado porque el transporte stdio oficial no expone la salida estándar del hijo y, por lo tanto, no puede probar la pureza de bytes por sí solo.

Los diez casos de evaluación independientes con fecha archivada están en evals/dashboard-intelligence.xml. Los payloads y tiempos verificados más recientes están registrados en docs/verification-report.md.

Semántica

Cómo se modelan los precios y la velocidad

Todo lo anterior se basa en estas definiciones. Lee esto cuando un número te sorprenda.

Un modelo no tiene un precio. Tiene un conjunto de puntos de precio, cada uno válido solo bajo una condición declarada, y el conjunto es la unidad que publica este paquete.

Un punto es { amount, unit, condition, source: { url, readAt }, provenance }. Los montos son cadenas decimales exactas, nunca flotantes, por lo que una tarifa por token de menos de un centavo sobrevive un viaje de ida y vuelta. source nombra la página de la que se leyó y cuándo; un precio cuyo tiempo de lectura no se puede establecer no se emite en absoluto.

Unidades (15): token_in, token_out, token_cached, token_cache_create, image, megapixel, video_second, video, credit_image, credit_video, credit_audio, request, gpu_hour, character_1k, plan_month.

Tipos de condición (seis): latency_window, time_band, tier, rate_class, price_scope, generation. Una tarifa nunca se separa de la elección que la produjo: una ventana de latencia, una hora del día, un nivel de volumen, una clase de tarifa o de quién es el precio. price_scope distingue una tarifa cotizada a una cuenta autenticada de una tarifa de lista pública; sin ella, las dos se ven idénticas y se comparan como si fueran la misma cantidad.

Procedencia: published, derived, parsed_from_prose, unknown. Un punto derived nombra derivedFrom; un punto parsed_from_prose conserva el sourceText del que se leyó. unknown es una respuesta real y nunca se redondea a un número.

La regla de rechazo. Una comparación devuelve cada par compatible o se rechaza. Dos puntos se comparan solo bajo la misma unidad Y la misma condición; unidades no coincidentes, condiciones no coincidentes o una línea base cero se rechazan, siempre con una razón. El rechazo aparece bajo dos nombres, uno por capa: la primitiva del conjunto de precios devuelve status: "refused", y una respuesta de herramienta lo transmite como una pierna de comparación con status: "not_comparable" y la misma razón. Nada se coacciona para hacer posible una comparación, porque una comparación entre condiciones no es una respuesta más débil, es una incorrecta.

La velocidad lleva sus propias condiciones. Las observaciones dashboard_speed son measured, published, unknown. Una tarifa nombra token_basis (visible_output, billed_total, unknown) porque un modelo de razonamiento emite tokens que nunca llegan al contenido, por lo que una tarifa de salida visible y una tarifa facturada difieren por múltiplos. Cada observación lleva un vantagePoint: la latencia es una propiedad de un proveedor y de dónde se midió, por lo que una cifra sin uno halaga a quien esté más cerca del host de referencia. Una afirmación que este paquete no puede rastrear se publica como unknown, no como un número.

El costo de generación medido es una corriente de evidencia separada. Un costUsd reportado por el proveedor lleva procedencia MEASURED, su propio observedAt, checkedAt y expiresAt; UNKNOWN, LAG y EXPIRED siguen siendo estados explícitos. Cada observación de libro mayor también lleva measurementSource (fixture, live_provider_read o unknown), y cada selección de consejo decidible renderiza el measured_cost_source correspondiente. Por lo tanto, una decisión respaldada por fixture no puede parecer una observación de facturación en vivo. Cada llamada real puede agregar una observación más reciente, mientras que los precios del catálogo siguen siendo un campo diferente y nunca rellenan el costo medido. Un cero reportado por el proveedor es válido para un modelo local de costo cero; un delta de saldo cero es retraso de facturación.

Deprecaciones. dashboard_contract devuelve schema_version, el package_version instalado y cada campo o herramienta anunciado para eliminación. Un aviso nombra replaced_by, o da un reason simple cuando la capacidad se ha ido sin reemplazo. Desde 1.0.0 en adelante, una eliminación se anuncia antes del lanzamiento que la realiza; los avisos de 1.0.0 son retrospectivos porque ningún lanzamiento publicado anteriormente llevaba este mecanismo.

Afirmaciones de velocidad y medición

dashboard_speed mantiene las afirmaciones del editor y las mediciones en observaciones separadas. El protocolo de sonda fijo es un prompt de streaming con maxTokens: 700, cuatro ejecuciones, la primera descartada, y mediana/mín/máx sobre las tres restantes. Una observación medida registra proveedor, modelo, marca de tiempo (o unknown explícito), punto de vista, hash del prompt, recuento de tokens, TTFT y tokens sostenidos por segundo. Una afirmación publicada tiene atribución del proveedor y URL de origen, pero sin medición fabricada. Los metadatos actuales incluyen la afirmación publicada de Cerebras de aproximadamente 3,000 tokens/segundo junto con el registro medido retenido del 2026-08-28 de 867/1,022/1,108 tokens/segundo, y el techo publicado de Groq de 8,000 tokens/minuto; las unidades y estados siguen siendo distintos. Las observaciones faltantes son unknown.

Versionado de contrato y deprecaciones

dashboard_contract es el endpoint explícito del contrato MCP. Devuelve schema_version, el package_version instalado y deprecations[]. Cada aviso nombra el campo o herramienta que se retira, el lanzamiento que lo elimina, su reemplazo (o una razón simple cuando no hay ninguno) y la fecha en que el aviso apareció por primera vez. Una eliminación futura conocida sin fecha de lanzamiento confiable usa removed_in: "unknown"; nunca se adivina.

La versión 1.0 introduce este mecanismo de aviso. Por lo tanto, no pudo preanunciar las eliminaciones de 0.9 a 1.0: las notas de lanzamiento de 1.0 establecen esa excepción una vez, y esos avisos son necesariamente retrospectivos. Las eliminaciones futuras se anunciarán en un lanzamiento anterior; un campo no se reutiliza bajo un nombre antiguo.