openrouter-dashboard-mcp

Um MCP gratuito e somente leitura que fornece aos agentes IDs de modelos em tempo real e preços verificados em mais de 16 fontes, estruturado para roteadores de modelos System-1.

Documentação

Open Dashboard MCP

Mais de 5.000 IDs de modelos, com preços que falham com segurança

Abra o dashboard ao vivo · Veja open-dashboard-mcp no npm

Nota 2.0.0: esta versão alinha o pacote com o openDashboard 2.0 e não traz nenhuma mudança disruptiva em qualquer ferramenta ou formato de resposta desde a 1.6.3. Nada mais foi adicionado. A edição de ranking do OpenRouter roda localmente (veja a página /openrouter do dashboard); este pacote já lê o OpenRouter da sua própria máquina.

Conforme medido na 1.6.3, o open-dashboard-mcp indexa 5.326 entradas de modelos por meio de 17 adaptadores npm e expõe 19 ferramentas MCP somente leitura. Ele lê preços de 17 fontes de provedores. Quinze estão ativas hoje; fal está parcial e Sail está desatualizado. Seu catálogo TTS somente leitura também carrega evidências publicadas da ElevenLabs e da Cartesia sem chamadas de síntese. As evidências são medidas diariamente a partir de três hosts: Local/Bulgária, KVM2/Europa e Oracle/EUA.

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

Um preço ausente permanece UNKNOWN; ele nunca se torna zero. A seleção de custo, portanto, falha com segurança em vez de tratar silenciosamente evidências ausentes como gratuitas. Cada valor mantém sua fonte e horário de verificação, para que uma taxa publicada não seja confundida com o custo medido da solicitação.

Esta é uma camada de fatos estruturada para roteadores de modelos, baseada no padrão Jev do OpenRouter. O projeto separado Model Router toma decisões de roteamento; o dashboard apenas lê e serve evidências. Ele nunca envia chamadas de inferência. As ferramentas do dashboard são gratuitas e não exigem conta ou chaves de API.

Model Router: seleção de assento compatível com Jev

O Model Router é compatível com Jev: ele usa Jev, a camada de decisão System One da TypeSafe AI para selecionar o assento suficiente mais barato sob as regras rígidas. A camada de decisão do Jev ajuda a determinar o que é suficiente; o roteador permanece responsável por impor restrições do consumidor, exclusões, requisitos de capacidade e contexto, e o teto de preço. Uma recomendação deve satisfazer essas regras antes que um assento possa ser selecionado.

No open-dashboard-mcp 2.0.0, o dashboard_resolve_seat delega essa seleção somente leitura ao endpoint POST /v1/seats/resolve do roteador. Configure o MODEL_ROUTER_URL para o roteador real e, quando necessário, o MODEL_ROUTER_TOKEN no ambiente MCP. O resultado inclui o assento selecionado, base de custo, motivos, ID da decisão e metadados do Jev; um roteador inacessível ou que rejeita retorna uma falha explícita, nunca um assento fabricado ou um palpite de catálogo alternativo.

O MCP não invoca o assento selecionado nem gasta em inferência. Seu agente usa as instruções de invocação retornadas com suas próprias credenciais. O dashboard_resolve_model resolve separadamente identidades de modelos de provedores e restrições de catálogo; ele não é a ferramenta de seleção de assento do roteador.

GitHub trending

O dashboard_github_trending lê as evidências diárias de momentum de repositórios do dashboard. Ele relata a janela de observação e a atualidade para que os agentes possam distinguir uma tendência atual de um snapshot mais antigo. Use o dashboard_github_movers para mudanças entre observações; nenhuma das ferramentas invoca um modelo ou gasta em inferência.

O caminho fácil: evidências primeiro, roteamento separado

Use este pacote como a camada de fatos estruturada e o Jev como o padrão de decisão tipado. O Model Router separado pergunta ao dashboard_resolve_model por evidências que satisfaçam restrições tipadas; seu aplicativo então decide se deve chamar o provedor selecionado. O MCP nunca faz proxy de inferência, vende acesso hospedado ou fornece uma credencial compartilhada/padrão.

  1. Instale o MCP: claude mcp add open-dashboard -- npx -y open-dashboard-mcp.
  2. Dê ao roteador sua tarefa e restrições tipadas—capacidades, contexto, teto de preço e provedores permitidos—e deixe-o selecionar entre dashboard_resolve_model.
  3. Se você optar por executar inferência, chame o provedor selecionado a partir do seu próprio aplicativo. Essa chamada está fora do dashboard e usa as credenciais do provedor do seu aplicativo.

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

19 ferramentas somente leitura. O dashboard_catalogue lê os catálogos próprios de 17 provedores ao vivo a cada chamada: 13 não precisam de chave; AkashML, Groq, Sail e QwenCloud precisam das suas próprias. Cada preço carrega sua fonte e horário de leitura, e um preço ausente é relatado como desconhecido, nunca zero.

O max_tokens é um parâmetro de correção, não um limite de segurança. No AkashML, io.net e Sail, a maioria dos modelos raciocina antes de responder. Com um orçamento pequeno demais, a chamada retorna HTTP 200, cobra todos os tokens, e o message.content fica vazio (ou null), com o texto preso em message.reasoning_content. Um chamador que lê apenas o content vê silêncio e culpa a chave. Cada linha do catálogo carrega um responseShape.minViableBudget medido: defina o max_tokens acima dele, com margem, por modelo.

Fontes de preço, lidas ao vivo por execução (1.4.0)

O dashboard_catalogue lê a fonte própria de cada provedor a cada chamada. Ele não passa por um feed compartilhado para essas fontes. Cada linha carrega a URL da fonte e o horário de leitura, e um preço ausente é unknown, nunca zero e nunca emprestado de um modelo irmão. Os códigos de status são o que as fontes retornaram em 26/09/2026.

ProvedorFonteAutenticaçãoStatusModelos / precificadosTaxa de entrada em cacheContexto
AkashMLapi.akashml.com/v1/modelsAKASHML_API_KEY2006 / 65 modelosexato
io.netapi.intelligence.io.solutions/api/v1/modelsnenhuma (User-Agent sempre enviado)20037 / 3737 modelosexato
Groqapi.groq.com/openai/v1/modelsGROQ_API_KEY20011 / 88 modelosexato
OpenRouteropenrouter.ai/api/v1/modelsnenhuma200458 / 452291 modelosexato
Sail/v1/models com chave + docs.sailresearch.com/pricing.md verificado por digestSAIL_API_KEY200 / 20012 / 1212 modelos (por janela)rótulo publicado, ex.: 262K
Cerebrastabela www.cerebras.ai/pricing renderizada, correspondida aos IDs da APInenhuma2003 / 2não publicadonão publicado
Nousinference-api.nousresearch.com/v1/modelsnenhuma200417 / 417280 modelosexato

Notas que mudam uma decisão de roteamento:

  • Os preços são decimais exatos. As strings de cada fonte (e os números JSON do io.net, via seu texto decimal) são convertidas sem ponto flutuante binário, então a sexta e a sétima casas decimais sobrevivem.
  • Cerebras nomeia em sua página de preços de forma que não corresponde aos IDs da API. Um ID sem linha correspondente é relatado como offered_unpriced, não adivinhado; hoje isso é gemma-4-31b.
  • Os tamanhos de contexto do Sail são mantidos como o rótulo publicado (contextLengthLabel), porque não é informado se "K" significa 1.000 ou 1.024.
  • Nous revende o catálogo do OpenRouter (372 de 417 IDs; sem modelos Hermes) e carrega correlatedWith: "openrouter". Não conte os dois como caminhos independentes de failover. Os preços de sua API são o que a Nous cobra, promoções incluídas, os mesmos números que seu portal mostra. Seus descontos anunciados são medidos contra seu próprio pricing.original, que geralmente está acima do preço do OpenRouter. Então cada linha da Nous também relata resale.versusOpenRouter (identical / cheaper / dearer / mixed / not_listed / unknown) contra o preço ao vivo do OpenRouter para o mesmo ID. mistral-nemo, anunciado com 80% de desconto, é cheaper apenas porque a entrada é $0,018 contra $0,019 por milhão, com saída igual; mercury-2.5 e gemini-3.7-flash são identical; deepseek-v4.1-flash é genuinamente cheaper; a saída do qwen3-coder é mais cara.
  • O base chatapi.akash.network/api/v1 do AkashML anteriormente divulgado responde 301 a uma página HTML; o pacote sempre usou apenas api.akashml.com/v1.

Novo na 1.3.0: Sail como provedor de preço nativo

O conjunto inicial é de quatro provedores, cada um lido de seu próprio catálogo:

ProvedorChavePrecificado a partir deFaixaLatência de chamada curtaFormatos de resposta
AkashMLAKASHML_API_KEYseu /models com chave, por modelointerativa0,57–0,90 s6 de 6 medidos
io.netnenhumaseu /models público, por modelointerativa0,64–0,91 s3 de 37 medidos
SailSAIL_API_KEYseu documento de precificação verificado por digest, por janela de conclusãobatch0,95–2,37 s12 de 12 medidos
OpenRouternenhumaseu /models públiconão estabelecidanão medidonão medido

As latências são as medições de chamada curta do operador em 26/09/2026. Os valores por modelo estão em cada linha do responseShape.latencyMs e variam: no Sail, Gemma-4-31B-IT-NVFP4 respondeu em 0,38–0,45 s e DeepSeek-V4-Pro-0813 em 1,8–2,4 s. Qwen3.6-35B-A3B levou 8,3–9,4 s e aceita chamadas síncronas apenas com metadata.completion_window: "flex"; sem ele, o Sail retorna 400.

Sail é a faixa batch. É mais lento por chamada e mais barato: em todos os modelos que compartilha com AkashML ou io.net, sua janela mais barata supera ambos, exceto openai/gpt-oss-120b, onde os $0,03 / $0,17 por milhão do AkashML ficam abaixo dos $0,06 / $0,40 do Sail. Use-o para trabalho que ninguém espera (resolução de PRs, extração, varreduras noturnas), não para chamadas interativas.

Modelos sem imposto de raciocínio. Quatro modelos do Sail não retornam nenhum campo reasoning_content e respondem a um prompt de uma palavra em 2 tokens de saída a max_tokens: 16: nvidia/Gemma-4-31B-IT-NVFP4, google/gemma-4-31B-it, google/gemma-4-12B-it e deepseek-ai/DeepSeek-V4-Pro-0813. O meta-llama/Llama-3.3-70B-Instruct do AkashML se comportou da mesma forma. Para respostas curtas e classificação, Gemma-4-31B-IT-NVFP4 foi o mais barato ($0,07 / $0,20 por milhão na janela Flex) e o mais rápido deles. gemma-4-12B-it responde de forma igualmente breve, mas sua taxa de saída é cinco vezes maior ($1,00 por milhão no Flex). Cada linha relata reasoningContentField: "absent" onde isso foi medido.

Cada entrada de modelo distingue medido de não medido: responseShape.measurement é "measured" ou "unmeasured", e um modelo não medido carrega orçamentos e latências null, nunca um padrão. Quatro dos modelos do Sail foram medidos pela primeira vez pelo operador; essas observações são marcadas como origin: "operator_report" e carregam apenas o que foi relatado.

Os preços do Sail mudaram desde a versão anterior. O documento fixado é re-fixado aos bytes de hoje: cinco modelos adicionados, cinco re-precificados (GLM-5.3 ASAP de $1,40 / $4,40 para $0,98 / $3,08 por milhão), dois aposentados. Antes disso, a 1.2.1 estava relatando corretamente PRICES ARE STALE para o Sail.

Novo na 1.2.1: formatos medidos do io.net, orçamentos de resposta e bloqueios de borda

  • io.net agora é medido, não inferido. Com uma chave em 26/09/2026, modelos de raciocínio lá escrevem message.reasoning_content ao lado de content e refusal. A max_tokens: 16, GLM-5.3-Flash retornou uma resposta vazia 3 de 3 vezes e DeepSeek-V4.1-Flash 2 de 3, cada uma cobrada. Suas linhas agora dizem emptyContentObserved: "observed".
  • answerCompletionTokens: os tokens de conclusão que uma resposta de uma palavra realmente levou, como um min/max observado ao longo de samples chamadas. É um intervalo porque varia por chamada: GLM-5.3-Flash usou 95, 218 e 217 tokens em três solicitações idênticas, DeepSeek-V4.1-Flash 16 a 35. Um único piso global de max_tokens está errado em ambas as direções; faça o orçamento de cada modelo acima do seu max observado, com margem.
  • Bloqueio de borda versus chave morta no catálogo. io.net e outros provedores ficam atrás do Cloudflare, que pode responder a uma chave válida com 403 error code: 1010 dependendo do cliente e do User-Agent. Um catálogo com chave agora relata EDGE_BLOCKED para isso e PROVIDER_REJECTED apenas quando o próprio provedor recusou a credencial.

Novo na 1.2.0: AkashML, io.net e a armadilha da resposta vazia

  • AkashML (inferência gerenciada da Akash Network) é precificado por modelo a partir de seu próprio /models. Seus seis modelos variam cerca de 44x no preço de saída — openai/gpt-oss-20b a $0,10/M até zai-org/GLM-5.3 a $4,40/M — então a linha da página inicial "a partir de $0,15/M tokens" não descreve nenhum deles. Defina AKASHML_API_KEY para incluí-lo; sem uma chave, ele reporta KEY_NOT_CONFIGURED em vez de um catálogo vazio ou gratuito.
  • io.net (IO Intelligence) publica preços por token para 37 modelos em um /models público, sem necessidade de chave. 31 dos 37 estão marcados como necessitando de um nível de acesso acima do gratuito, então um preço listado não é prova de que uma chave gratuita pode chamar o modelo; min_access_tier é mantido em cada linha. Uma chave paga medida em 26/09/2026 alcançou todos os 37.
  • KIE (kie.ai) revende modelos de imagem, vídeo, música e chat e publica uma tabela de preços pública, lida sem chave: 509 linhas em 29/09/2026, uma por variante precificada (resolução, duração, perna de entrada ou saída). A KIE cobra em créditos a um valor declarado de $0,005 cada. Uma linha se torna um preço em USD apenas quando o USD listado pela KIE equivale a essa conversão e seu rótulo de unidade é exato. Em 29/09/2026, 56 das 509 falharam em um desses critérios (unidades com erro de digitação como "per vedio", unidades em branco, as duas colunas discordando) e são mantidas com seus valores nativos e um motivo. Créditos de bônus em recargas maiores podem tornar a taxa efetiva menor do que a listada.
  • responseShape em linhas de catálogo. Um modelo de raciocínio escreve seu pensamento em message.reasoning_content e sua resposta em message.content. Com um max_tokens pequeno, todo o orçamento pode ir para o pensamento: HTTP 200, todos os tokens cobrados, e content é uma string vazia. No AkashML (medido em 25/09/2026), cinco dos seis modelos fizeram isso em max_tokens: 16, e o GLM-5.3 gastou um orçamento de 6.000 tokens apenas em raciocínio. O mesmo modelo havia respondido a um prompt de uma palavra em 3 tokens antes, então uma única sondagem limpa não prova nada. Cada linha reporta reasoningAdvertised (o sinalizador do provedor), reasoningField, emptyContentObserved (observed / not_observed / unknown) e as observações datadas por trás disso. Um modelo que esta compilação nunca chamou é unknown, nunca "seguro".

Mesmos seis modelos, taxas publicadas por milhão de tokens (entrada / saída), lidas em 25/26/09/2026:

ModeloAkashMLio.net
openai/gpt-oss-120b$0,03 / $0,17$0,178 / $0,68 (nível 2)
zai-org/GLM-5.3$1,30 / $4,40$1,358 / $4,268 (nível 2)
Qwen/Qwen3.8-27B$0,25 / $2,20$0,345 / $2,69 (nível 2)
Qwen/Qwen3.6-35B-A3B$0,10 / $0,90$0,1672 / $1,107 (nível 2)
openai/gpt-oss-20b$0,02 / $0,10$0,057 / $0,196 (nível 1)
meta-llama/Llama-3.3-70B-Instruct$0,20 / $0,52$0,5466 / $1,023 (nível 1)

O AkashML é mais barato em onze das doze pernas; o io.net é mais barato na saída do GLM-5.3. Estas são taxas de catálogo publicadas, não cobranças medidas: nenhum dos provedores retorna um campo de custo por chamada, então o custo de geração para ambos permanece UNKNOWN. Chame dashboard_catalogue para os valores ao vivo em vez de confiar na data desta tabela.

Evidências para camadas de decisão

Os custos de geração medidos carregam um marcador measurement_origin para que um número nunca seja desvinculado de como foi obtido:

  • fixture — teste determinístico ou evidência de loopback.
  • live_provider_read — uma resposta do provedor ou leitura de cobrança do provedor liquidada forneceu a observação.
  • unknown — nenhuma fonte autoritativa foi estabelecida.

No contrato de rede, este marcador é measurementSource em observações de ledger e measured_cost_source em uma seleção de conselho renderizada. unknown não pode produzir uma seleção decidível. Um custo medido está vinculado ao seu provedor roteado, então evidências do provedor A nunca podem aparecer ao lado do provedor B.

A verificação de provedor ao vivo por trás deste lançamento estabeleceu que uma de quatro vias com chave pode fornecer um custo por geração, enquanto zero de quatro produziu uma cobrança em nível de solicitação do BUTCHER. O valor medido genuíno veio de um delta de contador contínuo liquidado em vez de uma cobrança em nível de solicitação; os preços de catálogo nunca são substituídos por ele.

Use

Instalação

Claude Code

Para registrar o MCP com o Claude Code:

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

O Claude Code inicia o servidor quando precisa dele e se conecta via MCP.

Instalando apenas as ferramentas que você deseja

Todas as dezenove ferramentas estão habilitadas por padrão. Para instalar um subconjunto, defina OPEN_DASHBOARD_TOOLS para uma lista de permissões separada por vírgulas no ambiente do servidor. Ferramentas desmarcadas estão ausentes do tools/list inteiramente — não presentes e falhando — então um cliente nunca vê uma ferramenta que não pode 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 uma instalação coloque provedores na lista de permissões: os desmarcados são omitidos das respostas que contêm provedores, reduzindo contexto desnecessário. Deixe sem definir para obter tudo.

Para o Claude Desktop, adicione isto ao claude_desktop_config.json:

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

Executar diretamente

Para testes manuais ou outro cliente MCP, execute:

npx -y open-dashboard-mcp

Isso inicia o servidor MCP e aguarda um cliente MCP via stdin/stdout. Um terminal aparentemente ocioso é esperado: o comando não é um CLI interativo e não registra o MCP com o Claude ou outro agente. npx -y usa o gerenciamento de pacotes do npx e não realiza uma instalação global permanente.

Sem @version, o npx resolve a versão publicada mais recente. Esse é o ponto: o catálogo sobre o qual este pacote reporta muda sob você, então um comando sem fixação de versão continua lendo o atual em vez de congelar em um instantâneo.

Requer Node.js 20 ou mais recente. Nenhuma chave de API é necessária para iniciar. As chaves apenas ampliam o que o catálogo pode ver: AKASHML_API_KEY, SAIL_API_KEY, GROQ_API_KEY e QWENCLOUD_API_KEY adicionam os catálogos nativos desses provedores, e uma chave ausente é reportada como KEY_NOT_CONFIGURED, nunca como um resultado vazio ou gratuito. O inventário de chaves opcional tem seu próprio caminho de adesão.

De onde vêm os dados

Existem dois caminhos de dados, e eles diferem em frescor.

  • dashboard_catalogue lê a fonte de cada provedor em cada chamada: sua API, ou sua página de preços publicada onde nenhuma API carrega preços (documento de preços verificado por digest da Sail, tabela de preços renderizada da Cerebras e comparação de planos web da Higgsfield). Todos os 17 provedores são lidos dessa forma. Os créditos da Higgsfield permanecem créditos nativos de planos web e nunca são convertidos para uma moeda ou representados como preços de API. AkashML, Groq, Sail e QwenCloud precisam de suas próprias chaves (AKASHML_API_KEY, GROQ_API_KEY, SAIL_API_KEY, QWENCLOUD_API_KEY); sem uma, esse provedor reporta KEY_NOT_CONFIGURED em vez de recorrer a um arquivo.
  • As outras ferramentas leem uma API HTTP pública, sem credenciais, que coleta catálogos de provedores e GitHub diariamente e republica o resultado: economia de modelos, status, modelos gratuitos, o que mudou, líderes de uso e repositórios em tendência. O frescor delas é o do arquivo, e cada resposta diz o quão antiga é.

O inventário de chaves opcional tem seu próprio caminho de credenciais de adesão. O estúdio público é https://opendashboard.sdforest.site/. Por padrão, o pacote lê a implantação de API compatível em https://openrouter-github-dashboard.vercel.app, uma implantação executada pelo autor deste projeto em um host de nível hobby. É pública e não precisa de credenciais, mas não é um serviço com garantia de disponibilidade, e todo usuário deste pacote lê da mesma instância.

O relatório histórico de observação ao vivo de três hosts 1.6.0 registra a atualização do plano web e dos créditos nativos da Higgsfield, estados dos provedores, latências dos hosts e instantâneos de estado de capacidade explicitamente limitados.

Aponte para sua própria implantação compatível com DASHBOARD_BASE_URL:

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

Quando uma fonte está indisponível, as ferramentas dizem isso como dados estruturados — unavailable, partial, stale — em vez de falhar ou inventar um valor. Esse é o comportamento pretendido, não um erro.

Compilar e executar

Requer Node.js 20 ou mais recente.

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

O executável compilado permanece build/index.js. Por padrão, ele lê a API pública do painel em https://openrouter-github-dashboard.vercel.app com zero credenciais. Para apontar o filho para outra implantação compatível, defina apenas DASHBOARD_BASE_URL para uma URL HTTP(S) absoluta sem credenciais na URL.

O servidor fala MCP JSON delimitado por nova linha via stdin/stdout. Stdout é somente protocolo; diagnósticos de aplicação pertencem ao stderr.

O resumo, declarações de provedores, pitches, ressalvas e tabela de ferramentas são gerados a partir do registro do pacote e um handshake tools/list real em memória. npm run build os regenera; npm run docs:check falha se os fatos do README confirmados diferirem. npm run docs:generate atualiza os blocos generated-do-not-edit marcados. O site complementar fixa a mesma exportação do pacote em um commit de origem imutável para que sua documentação de candidato a lançamento possa ser revisada antes da publicação no npm.

Incorporação em Electron

Um host Electron deve iniciar o caminho absoluto compilado build/index.js com o executável Node, opcionalmente definir apenas DASHBOARD_BASE_URL, falar MCP via stdin/stdout do filho e consumir stderr separadamente. Trate resultados de erro estruturados indisponíveis, parciais, desatualizados e específicos de endpoint como resultados normais de ferramenta; não mate o filho quando uma fonte upstream estiver indisponível.

O inventário de chaves deve permanecer desligado em uma compilação distribuída: deixe OPEN_DASHBOARD_KEY_SOURCES sem definir e ele reporta unconfigured. O padrão de zero credenciais é o que torna a incorporação possível — o próprio servidor MCP do OpenRouter gera uma chave de API real via OAuth e, portanto, não pode ser enviado dentro de um aplicativo de desktop distribuído.

O que cobre

Acesso MCP somente leitura a evidências públicas de modelos e GitHub, cobrindo OpenRouter, Groq, Cerebras, Sail, Nous Research, QwenCloud, DeepInfra, Novita, SambaNova, Chutes, WaveSpeedAI, fal, KIE, Higgsfield, Crazyrouter, AkashML, io.net, ElevenLabs, Cartesia. A versão 2.0.0 registra 19 provedores e expõe dezenove ferramentas limitadas via stdio. Os resultados usam o mesmo valor legível por máquina em structuredContent e conteúdo de texto JSON.

O que você realmente obtém:

  • Um catálogo em dezenove provedores nomeados — OpenRouter, Groq, Cerebras, Sail, Nous Research, QwenCloud, DeepInfra, Novita, SambaNova, Chutes, WaveSpeedAI, fal, KIE, Higgsfield, Crazyrouter, AkashML, io.net, ElevenLabs e Cartesia.
  • Em qual campo um modelo responde. As linhas do catálogo carregam responseShape, então um seletor pode ver que um modelo de raciocínio foi observado retornando um content vazio antes de recomendá-lo.
  • Preços que você pode comparar, ou uma recusa. Dois preços são comparados apenas quando compartilham uma unidade e uma condição. Caso contrário, você obtém not_comparable e o motivo — nunca um número que parece certo e não é.
  • Cada valor carrega sua proveniência — a página de onde foi lido, o timestamp e se foi publicado, derivado ou extraído de prosa.
  • O custo de geração permanece auditável. O custo numérico por geração é mostrado apenas quando o provedor retorna um campo autoritativo. As observações do OpenRouter retêm usage.cost; Nous Research e Sail permanecem BLOCKED quando nenhum campo desse tipo existe, e amostras curtas permanecem INSUFFICIENT EVIDENCE em vez de se tornarem uma estimativa de aparência única.
  • UNKNOWN permanece UNKNOWN. Um preço ausente nunca assume o padrão de zero, então a seleção de custo falha com segurança em vez de tratar evidência ausente como gratuita.
  • Nenhuma credencial necessária. As ferramentas do painel leem evidências públicas sem conta ou chaves de API.

O que não é: não é um proxy de inferência e não é um painel de cobrança. Ele fornece a evidência sobre a qual um roteador ou seletor decide; ele nunca encaminha tráfego de inferência e nunca escreve nada em lugar algum.

Ferramentas

19 ferramentas somente leitura, lidas do gráfico de registro real de MCP tools/list do servidor sem chamar nenhuma ferramenta.

FerramentaFinalidade
dashboard_benchmarksObservações de benchmark do dashboard
dashboard_capability_stateEstado de capacidade para seleção determinística de modelo
dashboard_catalogueCatálogo de modelos do provedor e preços de mídia comparáveis
dashboard_contractEsquema MCP e contrato de descontinuação
dashboard_free_modelsModelos gratuitos utilizáveis no dashboard
dashboard_generation_costsCustos de geração medidos
dashboard_github_moversMovimentadores de momentum do GitHub público do dashboard
dashboard_github_trendingRepositórios em alta no GitHub
dashboard_key_inventoryInventário de chaves do Open Dashboard
dashboard_matrixMatriz de aplicativos e modelos do dashboard
dashboard_model_economicsEconomia de modelos do Open Dashboard
dashboard_model_statusStatus de modelos do dashboard
dashboard_price_comparisonComparação de preços do agregador de modelos compartilhados
dashboard_resolve_modelResolver modelo do dashboard
dashboard_resolve_seatResolver o assento do provedor para uma função
dashboard_source_healthSaúde das fontes do dashboard
dashboard_speedAlegações de velocidade do provedor e protocolo de sondagem
dashboard_usage_leadersLíderes de uso do ecossistema público do dashboard
dashboard_whats_changedAlterações do dashboard

Toda ferramenta é somente leitura, não destrutiva e de mundo aberto. Os resultados preservam strings exatas de inteiros/decimais, proveniência, marcadores de desatualização, limites e estados explícitos de indisponibilidade/parcialidade. Uma falha upstream em nível de ferramenta é retornada como dados estruturados e não encerra a conexão MCP.

Estado de capacidade determinístico

dashboard_capability_state é o objeto de estado legível por máquina para um agente de seleção. Ele retorna uma linha por slug de modelo vivo disponível, cobertura do provedor e as mesmas duas decisões sobre essa única tabela: o modelo pago mais barato literal e o modelo funcional mais barato. Cada campo de decisão tem seu próprio checked_at, observed_at, expires_at e age_seconds; valores expirados são limpos e rotulados como expired, nunca reutilizados como valores atuais. A linha carrega billing_class, context_window, catalogue_price, generation_cost medido (incluindo contagens de tokens de entrada/saída), routed_provider, reachability de três estados, modalidades de entrada/saída, supports_tool_calling, model_family e base_weights_lineage explícitos, e o razão de funcionalidade em cache (resolves, structured_output_ok, p50_latency, p95_latency, last_functionally_tested, além do gancho externo de qualidade semântica). Desconhecido é um valor, não uma omissão.

As duas políticas são deliberadamente diferentes: queries.public_council é elegível apenas com base na classificação paga atual e no custo autoritativo por geração, enquanto queries.private_council adicionalmente exige alcançabilidade ao vivo, suporte a chamadas de ferramenta, os portões de funcionalidade mecânica re-testáveis, o limite de p95 de 60 segundos e um julgamento semântico separado. O preço de catálogo nunca é substituído pelo custo de geração. A identidade do fornecedor nunca é usada como linhagem de família de modelo ou peso base. Para manter as cargas úteis de stdio limitadas, dashboard_capability_state padroniza para um instantâneo de 500 linhas seguro para transporte e max_rows só pode reduzir esse limite. pagination.capped, next_cursor, scope.completeness, considered_rows, candidate_rows e elimination_breakdown expõem o denominador e cada portão medido. Colisão de família é explicitamente relatada como não avaliada até que o chamador forneça o roster do conselho já assentado. Veja docs/jev-routing-example.json para uma projeção Jev limitada: com a fonte atualmente implantada, ela retorna deterministicamente block sobre sua fatia observada porque /api/public/v2/generation-costs e os três razões datados não são publicados, então billing_class, generation_cost e os campos somente privados permanecem explicitamente UNKNOWN.

A resposta também carrega o manifesto de medição semanal bloqueado basket-v1. Ele nomeia as oito linhas de modelo/provedor, a carga de trabalho exata, três pontos de vista, a estimativa de custo de limite inferior do preço publicado e os campos de instantâneo de resultado assinado. O plano atual usa n=8: p50 e max of 8 são publicáveis, enquanto p95 é explicitamente retido até que uma amostra maior exista. Nenhum job da Vercel pode reivindicar um ponto de vista búlgaro, KVM europeu ou Oracle dos EUA, e nenhum instantâneo ausente é silenciosamente agrupado.

/api/public/v2/live-models — o catálogo entre provedores — está implantado e em serviço desde 2026-08-27. Se o dashboard parar de publicá-lo, a resolução de modelo, o status exato do modelo e as consultas de modelos gratuitos utilizáveis retornam um declínio explícito de capacidade apontando para dashboard_source_health em vez de fabricar dados de catálogo.

Provedores

Gerado a partir do registro de pacotes: 19 provedores em open-dashboard-mcp 2.0.0. As declarações de publicação descrevem o conector nomeado; não são medições recentes ou um inventário completo de provedores.

ProvedorFontesPreçosContextoModalidadeCiclo de vidaDescontosVisibilidade de gastos
OpenRouter
Agregador multi-provedor
Catálogo · DocumentaçãoAlguns modelos coletadosTodos os modelos coletadosTodos os modelos coletadosTodos os modelos coletadosAlguns modelos coletadosAPI de cobrança
GroqCatálogo · DocumentaçãoAlguns modelos coletadosTodos os modelos coletadosTodos os modelos coletadosNão publicado neste conectorNão publicado neste conectorSem API de cobrança
CerebrasCatálogo · DocumentaçãoAlguns modelos coletadosNão publicado neste conectorNão publicado neste conectorNão publicado neste conectorNão publicado neste conectorSem API de cobrança
SailCatálogo · DocumentaçãoAlguns modelos coletadosAlguns modelos coletadosNão publicado neste conectorNão publicado neste conectorNão publicado neste conectorNão estabelecido
Nous Research
Provedor de modelos
Catálogo · DocumentaçãoAlguns modelos coletadosNão estabelecidoNão estabelecidoNão estabelecidoNão estabelecidoNão estabelecido
QwenCloudCatálogo · DocumentaçãoAlguns modelos coletadosAlguns modelos coletadosAlguns modelos coletadosNão publicado neste conectorNão publicado neste conectorSem API de cobrança
DeepInfraCatálogo · DocumentaçãoTodos os modelos coletadosAlguns modelos coletadosNão publicado neste conectorAlguns modelos coletadosNão publicado neste conectorSem API de cobrança
NovitaCatálogo · DocumentaçãoAlguns modelos coletadosTodos os modelos coletadosTodos os modelos coletadosNão publicado neste conectorAlguns modelos coletadosSem API de cobrança
SambaNovaCatálogo · DocumentaçãoTodos os modelos coletadosTodos os modelos coletadosNão publicado neste conectorNão publicado neste conectorNão publicado neste conectorSem API de cobrança
ChutesCatálogo · DocumentaçãoTodos os modelos coletadosTodos os modelos coletadosTodos os modelos coletadosNão publicado neste conectorNão publicado neste conectorSem API de cobrança
WaveSpeedAI
Plataforma de geração de mídia
Catálogo · DocumentaçãoAlguns modelos coletadosNão publicado neste conectorAlguns modelos coletadosNão publicado neste conectorNão publicado neste conectorNão estabelecido
fal
Plataforma de geração de mídia
Catálogo · DocumentaçãoAlguns modelos coletadosNão publicado neste conectorAlguns modelos coletadosNão publicado neste conectorNão publicado neste conectorNão estabelecido
KIE
Agregador multi-provedor
Catálogo · DocumentaçãoTodos os modelos coletadosNão publicado neste conectorAlguns modelos coletadosNão publicado neste conectorAlguns modelos coletadosNão estabelecido
Higgsfield
Plataforma de geração de mídia
Catálogo · DocumentaçãoAlguns modelos coletadosNão publicado neste conectorAlguns modelos coletadosNão publicado neste conectorNão publicado neste conectorNão estabelecido
Crazyrouter
Agregador multi-provedor
Catálogo · DocumentaçãoAlguns modelos coletadosNão estabelecidoAlguns modelos coletadosNão estabelecidoAlguns modelos coletadosNão estabelecido
AkashMLCatálogo · DocumentaçãoTodos os modelos coletadosTodos os modelos coletadosTodos os modelos coletadosNão publicado neste conectorNão publicado neste conectorSem API de cobrança
io.netCatálogo · DocumentaçãoTodos os modelos coletadosTodos os modelos coletadosTodos os modelos coletadosNão publicado neste conectorNão publicado neste conectorNão estabelecido
ElevenLabs
Plataforma de geração de mídia
Catálogo · DocumentaçãoTodos os modelos coletadosNão publicado neste conectorTodos os modelos coletadosNão publicado neste conectorNão publicado neste conectorNão estabelecido
Cartesia
Plataforma de geração de mídia
Catálogo · DocumentaçãoTodos os modelos coletadosNão publicado neste conectorTodos os modelos coletadosNão publicado neste conectorNão publicado neste conectorNão estabelecido

Discursos dos provedores e ressalvas estruturadas

As citações são palavras dos provedores. As ressalvas registram limites publicados, incluindo escopo e unidades; elas não afirmam velocidade de inferência medida ou cota atual do chamador. Uma ressalva ausente é acompanhada por seu status de pesquisa, nunca por um espaço reservado nulo.

OpenRouter

“A Interface Unificada Para Cada Modelo” — OpenRouter, observado em 2026-09-08.

  • rate_limit: 20 solicitações/minuto. Variantes de modelo gratuito (IDs terminando em :free), independentemente do status da conta; variantes pagas estão fora deste limite. Esta é a cota de plataforma publicada, não a permissão restante do chamador. Fonte do provedor, observado em 2026-09-08; base: provider_published.

Groq

“Groq faz a inferência funcionar em escala.” — Groq, observado em 2026-09-08.

  • rate_limit: 8000 tokens/minute. Resumo do Plano Gratuito, openai/gpt-oss-120b, cota combinada de tokens em nível de organização. Tokens em cache são excluídos. Os limites exatos da organização podem diferir; isso não é tokens por segundo nem um teto de velocidade de inferência. Fonte do provedor, observado em 2026-09-08; base: provider_published.

Cerebras

“Construa produtos que outros não conseguem” — Cerebras, observado em 2026-09-08.

  • trial_expiry: 30 dias. Os créditos do Teste Gratuito expiram 30 dias após serem concedidos. Esta é a política de teste publicada, não o saldo de créditos ou a data de expiração deste chamador. Fonte do provedor, observado em 2026-09-08; base: provider_published.

Sail

“Sail é a API mais econômica para os melhores modelos de código aberto.” — Sail Research, observado em 2026-09-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-08.

Nous Research

“Taxa de API publicada: $0,072/M” — Alegação de preço publicada pela Nous Research, observado em 2026-09-11.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-11.

QwenCloud

“Fundação para Inovação em IA” — Alibaba Cloud Model Studio, observado em 2026-09-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-08.

DeepInfra

“Acelere sua IA com APIs amigáveis para desenvolvedores, projetadas para desempenho e custo-benefício.” — DeepInfra, observado em 2026-09-08.

  • concurrency_limit: 200 concurrent_requests. Limite padrão da conta por modelo; não é solicitações por minuto. Uma conta pode solicitar um limite maior, e um modelo ocupado ainda pode retornar 429 abaixo do padrão. Fonte do provedor, observado em 2026-09-08; base: provider_published.

Novita

“Execute modelos, dimensione GPUs e crie agentes de IA, tudo em uma única plataforma.” — Novita AI, observado em 2026-09-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-08.

SambaNova

“A inferência de IA mais rápida nos maiores modelos” — SambaNova, SambaCloud, observado em 2026-09-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-08.

Chutes

“Computação Serverless Inovadora para IA, em Escala.” — Chutes, observado em 2026-09-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-08.

WaveSpeedAI

“WaveSpeedAI é a plataforma definitiva de geração de mídia por IA — fácil de usar, acessível, escalável e rápida.” — WaveSpeedAI, observado em 2026-09-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-08.

fal

“A plataforma de mídia generativa que impulsiona os principais aplicativos de IA do mundo.” — fal, observado em 2026-09-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-08.

KIE

“Acesse os melhores modelos de IA para chat, vídeo, imagem e música em uma única API.” — Descrição da página inicial da Kie.ai, observado em 2026-09-29.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-29.

Higgsfield

“Planos de preços para as ferramentas de imagem, vídeo e áudio da Higgsfield.” — Página pública de preços da Higgsfield, observado em 2026-09-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-08.

Crazyrouter

“Mesmo fluxo de trabalho no estilo OpenAI. Mais modelos. Preços mais baixos. Experimentação mais fácil.” — Crazyrouter, observado em 2026-09-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-08.

AkashML

“preços competitivos a partir de $0,15/M tokens” — Alegação de preço na página inicial da AkashML, contradita pelas próprias taxas /models, observado em 2026-09-26.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-26.

io.net

“Plataforma gratuita de inferência alimentada pela rede descentralizada de GPUs da io.net.” — Descrição da página IO Intelligence da io.net, observado em 2026-09-26.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-09-26.

ElevenLabs

“Preços da API de Texto para Fala” — Página de preços da API da ElevenLabs, observado em 2026-10-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-10-08.

Cartesia

“Sonic-3.6” — Página de preços da Cartesia, observado em 2026-10-08.

Ressalvas: Não encontrado nas fontes verificadas. Nenhum limite operacional numérico foi estabelecido a partir desta página de plataforma verificada. Esta verificação limitada não estabelece que o provedor não publique nenhum em outro lugar. Fonte; verificado em 2026-10-08.

DeepInfra, Novita, SambaNova e Chutes publicam seus catálogos coletados sem credencial. QwenCloud exige a chave internacional vinculada à região do coletor. Ambos os caminhos produzem dados públicos de painel que este MCP lê sem credenciais. Mistral, xAI, Together, Fireworks, Nebius, Hyperbolic e Parasail retornaram 401 nas sondagens anteriores de catálogo; essa observação descreve esses endpoints, não o que os provedores publicam em outro lugar.

O catálogo nativo /api/v1/models da QwenCloud é paginado. A coleta foi concluída em 2026-09-08 13:47:21 UTC com 255 identidades: 249 nativas e seis suplementos somente de compatibilidade. O catálogo antigo compartilha 159 de seus 165 ids com a fonte nativa; manter os outros seis evita desaparecimento falso ao alternar endpoints. Dos 249 modelos nativos, 242 têm blocos de preço: 306 blocos externos contêm 893 entradas de preço internas. Os metadados nativos adicionam 59 pares comparáveis de preços de prompt/completion, 134 valores utilizáveis de contexto, 247 listas não vazias de modalidades de resposta e 72 capacidades explícitas de raciocínio. As 893 entradas compreendem 738 entradas por token e 155 entradas de preço não baseadas em token: 94 por segundo, 38 por imagem, 20 por 10.000 caracteres e 3 por voz. Essas 155 entradas são excluídas das comparações de tokens e contadas nos metadados da coleta; nenhuma identidade de modelo é descartada por ter preços de mídia. Modelos somente de mídia, os sete modelos nativos sem blocos de preço e os seis suplementos somente de identidade permanecem paid_or_unknown.

O arquivo bruto preserva todos os preços nativos, faixas de tokens e bandas de tempo; a API atual não publica as bandas. Taxas fixas são deliberadamente omitidas para 39 modelos: 37 com múltiplas faixas e dois com bandas distintas de pico/fora de pico. As entradas contêm 782 bandas padrão, 99 não definidas, seis de pico e seis fora de pico. Preços fixos de prompt/completion são expostos apenas para uma taxa padrão inequívoca de entrada/saída geral que não requer seleção de faixa ou banda. Outras taxas permanecem nulas com um marcador missingFields de seleção necessária, em vez de citar silenciosamente uma banda. As 72 capacidades explícitas de Reasoning tornam-se reasoningEfforts: [], significando suporte sem níveis de esforço nomeados; limites numéricos de raciocínio permanecem no arquivo bruto, e evidências ausentes de capacidade positiva permanecem nulas.

As observações do catálogo de tokens abaixo foram medidas em 2026-09-08. DeepInfra precificou em oito eixos diferentes e apenas 219 de seus 372 modelos foram precificados por token; outros eixos foram excluídos das comparações de tokens. O catálogo de mídia agora relata seus eixos nativos separadamente e normaliza preços comparáveis de imagem/vídeo. Seu campo deprecated é uma data de aposentadoria, não um sinalizador, e 114 dos 219 já carregam um — uma data concreta de aposentadoria e um sucessor são evidências mais fortes do que um campo ausente. Novita's campo de preço fixo não é um nível consistente: é a banda mais barata em um modelo e a mais cara em outro, e dois modelos em níveis não publicam nenhum preço fixo, então os preços aqui são o primeiro nível com as bandas completas retidas. Os catálogos discordam sobre quase tudo, e normalizá-los é o trabalho — as chamadas de API são a parte fácil.

O conector atual /v1/models da Cerebras fornece apenas ids e proprietários. Uma fonte nativa pública separada retornou metadados mais ricos para três de três modelos em 2026-09-08; a integração está pendente, então esses valores ainda não são retornados aqui. As lacunas do conector atual não estabelecem ausência em todo o provedor.

Sail publica preços e informações de contexto do modelo. Este MCP cita preços somente após verificar seu documento fixado e não coleta os valores de contexto documentados. Sail também documenta rotas de uso e cobrança; esta integração não as sondou nem leu, então seu registro relata visibilidade de gastos como desconhecida. Veja Preços da Sail para a verificação de documento existente.

Quatro regras decorrem dessa tabela, e as ferramentas aplicam todas as quatro:

  • Um modelo sem preço tem custo desconhecido, nunca é gratuito. A ausência de um preço comparável por token pode refletir uma lacuna no conector, ausência de preço na fonte upstream, unidade de cobrança de mídia ou uma escolha necessária de faixa/banda. As linhas que atendem aos filtros de capacidade solicitados mantêm sua posição com priceComparable: false e um unrankableReason declarado, listadas após as linhas classificadas em vez de serem descartadas.
  • Ausência de sinal de ciclo de vida não é o mesmo que ausência de risco. OpenRouter e DeepInfra possuem declarações de ciclo de vida; a cobertura varia por conector. Modelos Groq, Cerebras e Sail relatam retirementRisk: "not_published_by_provider", porque "none" seria uma garantia falsa. Para esses três, um modelo desaparecer da lista é o único aviso de descontinuação que existe — portanto, availability: "disappeared" é tratado como iminente.
  • Todo valor nulo tem contexto de origem. src/providers/registry.ts descreve as fontes conhecidas e os limites do conector com always, partial ou never; um provedor desconhecido recebe unknown. Um valor nulo não estabelece que um provedor reteve informações.
  • Um preço lido de um documento é tão bom quanto o próprio documento. Os preços da Sail vêm de uma página de preços fixada em vez de uma API, então o servidor verifica o documento antes de citá-lo e recusa em vez de adivinhar quando ele mudou.

Catálogo completo e preços de mídia comparáveis

dashboard_catalogue mantém identidades de modelos adquiridas mesmo quando nenhum preço comparável está disponível. DeepInfra, WaveSpeedAI e Chutes usam fontes nativas públicas. fal usa fontes autenticadas de modelos/preços quando FAL_API_KEY é fornecido, e preços públicos de catálogo/resumo caso contrário. Crazyrouter usa identidades visíveis por chave quando CRAZYROUTER_API_KEY é fornecido, e identidades públicas de preços caso contrário. Outros provedores mantêm seu arquivo do painel. Todas as solicitações são requisições de metadados somente leitura.

Por exemplo, solicite detalhes de vídeo da WaveSpeed com:

{
  "providers": ["wavespeed"],
  "mediaKind": "video",
  "modelIds": ["wavespeed-ai/wan-2.2/t2v-720p"],
  "offset": 0,
  "limit": 20
}
EntradaSignificado
providersLista opcional de IDs de provedores, no máximo 30; padrão é o registro do pacote.
mediaKindFiltro opcional de image, video, text, audio, other ou unknown.
modelIdsIDs exatos de modelos opcionais, no máximo 20. Também solicita detalhes de preços da WaveSpeed para esses IDs.
offsetDeslocamento nas linhas adquiridas correspondentes, padrão 0, máximo 1.000.000.
limitLinhas por resposta, padrão 100, máximo 500. Siga population.nextOffset até nulo.

A filtragem ocorre após a aquisição, em ordem estável de provedor/ID. population relata contagens adquiridas, correspondidas e retornadas, exclusões por tipo de mídia e ID de modelo, e linhas omitidas pela paginação. Cada provedor relata separadamente listed, received, retained, excluded, exclusionRules, completeness e o requestParameters aplicado. Um denominador nativo ausente permanece nulo com uma explicação; populações indisponíveis e desconhecidas nunca se tornam zero. Esses contadores descrevem as linhas realmente adquiridas, não uma afirmação de que todo o inventário global de cada provedor foi observado.

O estado de preços é separado dos pontos: published exige pelo menos um ponto, enquanto not_published e unknown carregam uma lista vazia e um pricingNote explicativo. Um preço ausente ou não comparável nunca é representado como zero. Toda figura resumida normalizada usa { value, unit, assumption, derived_from }; uma suposição não pode ser omitida.

Preços de tokens mantêm unidades de token; aluguel de computação, caracteres, voz e outros eixos de cobrança não suportados permanecem como dados nativos em vez de serem rotulados como preços de geração de imagem ou vídeo. Propostas estruturadas de provedores e ressalvas específicas acompanham a resposta em providerMetadata.

A cobertura tem limites específicos. O arquivo legado do painel não expõe todos os denominadores de população nativos. WaveSpeed enriquece seus quatro IDs de vídeo padrão mais até 20 IDs solicitados; preços somente de lista cuja fórmula ou quantidade de saída é desconhecida permanecem indisponíveis. Falhas isoladas de detalhes são registradas e não impedem consultas posteriores de modelos solicitados; falhas compartilhadas de serviço ou acesso interrompem o lote. Preços autenticados da fal são solicitados em lotes de 50 sob um orçamento fixo de requisições/tempo; um 429 interrompe o lote sem nova tentativa. Unidades de preço nativas podem descrever tempo de computação, então segundos genéricos não se tornam segundos de vídeo de saída sem evidência explícita. Seu fallback público verifica apenas a tabela de preços resumida. Crazyrouter preserva suas fórmulas de cobrança nativas; fórmulas de mídia ou em camadas não suportadas permanecem sem preço para comparação. Os valores exatos do grupo padrão GPT-4o, GPT-4o mini e GPT-4.1 que são exatamente 0,65x os preços de lista da OpenAI carregam proveniência derivada e são excluídos das comparações de concorrência. Uma leitura de fonte falha é distinta de uma linha ausente verificada com sucesso, e nenhuma das duas significa não publicação em todo o provedor. Contagens completas de identidade permanecem intactas quando a cobertura de preços é parcial. Preços de aluguel de computação da Chutes não são preços de geração.

Comparação de preços de modelos compartilhados

dashboard_price_comparison une aliases do Crazyrouter ao OpenRouter usando IDs exatos e evidência explícita de autor nativo. Ele retém identidades Crazyrouter não correspondidas e sem preço, registra a população de cada fonte e relata filtros e paginação separadamente. modelIds opcional seleciona até 20 IDs exatos do Crazyrouter; offset padrão é 0 e limit é 50 (máximo 500).

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

A resposta apresenta cada ponto de preço de entrada/saída compatível e condição lado a lado e calcula economias com frações decimais exatas. Se unidades ou condições não corresponderem, essa perna é not_comparable com um motivo; nunca escolhe uma taxa silenciosamente. As citações do Crazyrouter são seu grupo de preços públicos padrão; o grupo de cobrança do chamador e os encargos liquidados não são verificados. Selos de desconto por modelo são retidos como pontos derived com seu fator específico do modelo e texto da fonte; não há suposição global de 0.65. As citações do OpenRouter são coletadas durante a chamada para linhas que permanecem elegíveis. Referências diretas disponíveis de provedores são observações de preços publicadas com data explícita, não preços de conta ao vivo. Aliases exatos de API não estabelecem que dois serviços resolvem para o mesmo snapshot imutável de modelo.

A afirmação datada do Crazyrouter é atribuída e verificada apenas onde existe uma referência direta de provedor independentemente comparável. Correspondências derivadas de tabelas de tarifas são retidas como evidência, mas excluídas dessa avaliação; uma cotação fora do intervalo declarado é relatada como discrepância, e preços diretos ausentes permanecem desconhecidos. Alguns aliases comparados não provam uma afirmação sobre a maioria dos modelos. A ferramenta não faz solicitação de inferência e não mede latência ou qualidade do modelo.

Forneça FAL_API_KEY e CRAZYROUTER_API_KEY opcionais através do ambiente do host. A inicialização e a descoberta de ferramentas permanecem sem credenciais. Este pacote não lê o Secret Manager por conta própria, não escreve chaves nem modifica uma conta. Os gastos da conta permanecem não lidos por esses coletores.

A seleção de ferramentas e provedores na instalação pertence à versão 1.0. Defina OPEN_DASHBOARD_TOOLS e/ou OPEN_DASHBOARD_PROVIDERS como listas de permissão separadas por vírgulas antes da inicialização. Ferramentas desmarcadas estão ausentes de tools/list; ferramentas com provedores omitem provedores desmarcados, e a ferramenta de comparação de preços é omitida a menos que tanto openrouter quanto crazyrouter estejam selecionados. Filtros de solicitação ainda selecionam saída dentro da superfície instalada.

Descontos

A cobertura de descontos varia por conector. OpenRouter publica descontos de endpoint e Novita publica preços efetivos versus originais. Os conectores originais de token Groq, Cerebras e Sail relatam not_published_by_provider; isso é limitado aos dados coletados por eles. Use a tabela de registro gerada para declarações atuais de publicação.

OpenRouter publica descontos como um fato de endpoint de provedor em vez de um fato de modelo — medido em 2026-08-19, zero de 550 modelos carregam uma chave discount enquanto 272 de 272 endpoints de provedores carregam. dashboard_model_economics portanto lê /api/public/v2/models/{id}/providers por modelo e relata o melhor desconto publicado com o provedor nomeado, para que o número seja verificável. Linhas Groq, Cerebras e Sail relatam not_published_by_provider e não custam solicitação upstream.

Quatro distinções que a ferramenta se recusa a colapsar:

  • discounted — um desconto publicado diferente de zero foi encontrado.
  • no_discount — endpoints foram lidos e cada um publicou nada ou zero. O único valor que significa preço integral.
  • unavailable — o painel não possui observação de endpoint para esse modelo. Upstream observa endpoints sob um orçamento diário de requisições, então a maior parte do catálogo não é observada a qualquer momento. Desconhecido, nunca preço integral.
  • not_published_by_provider — este provedor não tem conceito de desconto algum. Nada para consultar.
  • not_checked — o limite de enriquecimento por chamada foi atingido. Também desconhecido.

Uma expiração ausente não significa um desconto permanente. A integração original de endpoint do OpenRouter expõe uma taxa de desconto e nenhuma data de término; os conectores originais Groq, Cerebras e Sail não expõem expiração de desconto. Essas linhas carregam expiresAt: null com expiryPublished: false. Declarações atuais de conectores permanecem no registro em vez de uma contagem de provedores mantida manualmente aqui.

Não há rota pública listando todos os modelos com desconto, então a descoberta é por modelo e limitada por discountEnrichment.

Tendências do GitHub

dashboard_github_trending lê /api/public/v2/github/trending, que faz scraping de github.com/trending porque o GitHub não publica uma API para isso.

O quadro de tendências do GitHub muda ao longo do dia, então uma lista sem horário de coleta não é interpretável: uma nova e uma de três dias atrás parecem idênticas. Portanto, toda resposta carrega:

  • collectedAt — quando a página upstream foi realmente recuperada, tirada do cabeçalho Date da origem. Não quando a ferramenta foi executada, e não quando a resposta foi montada; a busca subjacente é armazenada em cache, então isso superestimaria a atualidade em até três horas.
  • ageHours e stale — calculados contra uma janela de seis horas, bem dentro de uma rotação. Um timestamp não analisável é lido como maximamente desatualizado em vez de fresco.
  • source — direct ou firecrawl, registrado em vez de inferido.
  • fallbackReason — por que o scraping direto gratuito foi abandonado, quando foi. Nulo no caminho feliz.

O scraping direto é o caminho primário e carrega tráfego de produção. Um fallback pago do Firecrawl existe para o dia em que o GitHub bloqueia o scraping ou muda sua marcação; quando ele atende, a ferramenta diz isso sem ser solicitada, porque um fallback do qual ninguém é informado é como você acaba no caminho pago por meses sem saber que o gratuito morreu.

Modelos que pararam de ser gratuitos

Um modelo gratuito não se anuncia quando começa a cobrar. Seu id não muda, ele permanece listado e nada mais em um catálogo se move. A conta é a notificação.

dashboard_whats_changed compara as duas execuções de catálogo arquivadas mais recentes e relata movimento de preços, com modelos que saíram do gratuito em seu próprio balde:

"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": "…" }
}

A comparação é a própria cadeia de execuções do arquivo, não uma data que você escolhe, então a resposta é sempre "desde a última coleta" e não pode atravessar uma execução perdida e apresentar um delta desatualizado como fresco. Preços são comparados como decimais exatos — nunca floats — porque um erro de arredondamento em uma comparação de preços inventaria ou esconderia uma mudança. Zero é reconhecido semanticamente, então 0, 0.0 e 0.00000000000000000000 são todos gratuitos; um preço nulo não é gratuito, significa que nenhum preço comparável está disponível nesse campo.

A janela que você pediu não é a janela sobre a qual os preços foram comparados

Toda outra seção de dashboard_whats_changed honra o since que você passa. Movimento de preço não pode: a rota pública não aceita parâmetro de janela e sempre compara as duas execuções arquivadas mais recentes. Um becamePaid vazio dentro de uma resposta de um mês inteiro seria lido como um "tudo limpo" de um mês que nunca foi.

E a extensão da comparação não é publicada. A rota identifica suas duas execuções por id e não carrega data para nenhuma delas. O envelope de resposta tem um window, mas essa é a data de publicação principal, não a extensão — medido contra produção em 2026-08-27, window.start === window.end === 2026-08-26 enquanto baseRunId !== headRunId em uma cadência de coleta diária, então a comparação real cobre pelo menos dois dias e o envelope a chama de um. Ler isso como a extensão subestima a comparação e inventa uma resposta de cobertura.

Então a seção relata apenas o que o payload suporta:

  • headPublishedOn — o estado de catálogo mais recente examinado, nomeado pelo que é.
  • coverage.status é incomplete ou indeterminate, e nunca complete. Cobertura completa exigiria a data da execução base, que não é publicada. incomplete é o único veredito que a resposta suporta: nada após a execução principal foi examinado, então um headPublishedOn anterior à through do relatório prova que o final da sua janela ficou sem verificação — o caso do coletor atrasado, e os dias que um leitor mais assume como cobertos.
  • coverage.reason diz qual dos dois é e por quê, e a mesma frase é empurrada para o warnings da resposta toda vez, porque um campo que ninguém lê não é uma divulgação.

indeterminate não é uma forma mais suave de dizer "tudo bem". Significa que um resultado vazio não é evidência sobre sua janela.

Então dashboard_whats_changed não retorna "ok". Enquanto a rota permanecer sem data, uma seção de preço disponível nunca pode estabelecer que cobriu o que você perguntou, e um status de ok ao lado de Nothing changed afirmaria que cobriu. A ferramenta retorna partial, e o resumo carrega a ressalva em vez de deixá-la para um aviso — porque o resumo é a linha que um chamador repassa:

5 mudanças encontradas em evidências escaneadas desde 2026-08-18; a comparação está incompleta. Movimento de preço não pôde ser mostrado como cobrindo 2026-08-18 a 2026-08-25, então isso não é um "tudo limpo" sobre modelos que começaram a cobrar.

Medido contra produção, 2026-08-27.

Para ser exato sobre o que isso custa: ok é inalcançável nesta versão. Uma seção de preço legível nunca pode estabelecer cobertura, e uma ilegível é degradada — de qualquer forma, um relatório bem-sucedido é partial. Não escreva um ramo esperando por ok. Torná-lo alcançável exigiria que o produtor publicasse datas para as execuções que compara e que este cliente as lesse; nenhum dos dois existe hoje, e este README não vai adivinhar a forma de nenhum deles.

Isso é sobre relatórios bem-sucedidos apenas. Uma leitura que falha completamente — entrada inválida, ou um manifesto que não pode ser buscado — ainda retorna status: "error" com o erro seguro anexado. Trate três: partial, error, e ok por completude, mesmo que nada o produza.

Uma janela invertida é um resultado, não um aviso. since é seu e through é derivado do bucket completo mais recente, então os dois podem se cruzar. Toda seção com escopo de janela então relataria nada — que é exatamente o que uma consulta satisfeita parece. Um aviso ao lado de um resumo normal não corrige isso, porque o resumo é a linha que um chamador repassa e ela leria Nada mudou desde 2027-01-01. Então um intervalo invertido retorna status: "partial" com as seções com escopo de janela unavailable e um resumo que nomeia a inversão. Movimento de preço é independente da sua janela, então ainda relata.

O resumo não pode mais ser lido como um "tudo limpo" enquanto os preços mudaram. Ele lidera com o dinheiro — 1 model stopped being free in the comparison ending 2026-08-26 — e movimento de preço sem linha de gratuito-para-pago ainda ganha sua própria frase em vez de passar despercebido. Onde o resumo costumava dizer sem mudanças e nada mudou, ele diz sem outras mudanças e nada mais mudou sempre que a seção de preço relata movimento.

As duas contagens nunca são somadas. Linhas de preço vêm da comparação do produtor, não da sua janela, então um total único afirmaria um número para uma janela onde alguns dos itens contados estão fora dela. Cada frase carrega sua própria contagem e sua própria comparação.

Uma página de preço limitada é um piso, não um total. /price-changes pagina e a seção lê uma página de 100 linhas mistas, então quando cap.capped é verdadeiro ambas as contagens são qualificadas, porque uma linha não lida pode ser de qualquer 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. Uma página limitada também pode não descartar a transição: onde uma página ilimitada diz none of them a model leaving free, uma limitada diz None of the rows read was a model leaving free, but … an unread row still could be. O zero categórico é a afirmação cara aqui, e apenas uma leitura completa a merece.

Uma seção de preço que falhou ao ler degrada o relatório. Um whats_changed cuja seção de preço é unavailable ou unsupported_by_public_api retorna status: "partial", nunca "ok", e o resumo diz que a falha não é evidência de que nada começou a cobrar.

Três estados de falha, nenhum dos quais é uma lista vazia. Um becamePaid vazio significa que nada permaneceu gratuito no que foi comparado. Se a implantação não serve o endpoint, você obtém unsupported_by_public_api; se não pôde ser lido, unavailable com o motivo. Retornar uma lista vazia em falha seria lido como nada começou a te cobrar, que é a resposta errada mais cara que este servidor poderia dar.

Apenas modelos presentes em ambas as execuções são comparados. Um modelo que apareceu ou desapareceu é uma questão diferente, respondida pelas seções de aparecimento e desaparecimento — incluí-lo aqui relataria um modelo totalmente novo como tendo começado a cobrar.

Inventário de chaves

dashboard_key_inventory é a única ferramenta que toca uma credencial, e é opt-in para que o padrão de zero credenciais sobreviva para todo o resto. Não configurada, ela retorna unconfigured, que é um resultado normal em vez de um erro.

Defina OPEN_DASHBOARD_KEY_SOURCES para triplas provider:secretManagerName=ENV_VAR separadas por vírgula e forneça cada variável de ambiente nomeada:

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

Apenas os nomes do Secret Manager são relatados. Valores de chave nunca são retornados, registrados ou escritos em evidências — um teste afirma que o resultado serializado não contém material de chave. A ferramenta emite apenas solicitações GET e não contém caminho de código que possa criar, modificar ou revogar uma chave. Mantenha o provisionamento com uma chave separada e privilegiada que este servidor nunca vê.

Gasto não é uniformemente legível, e a ferramenta diz isso em vez de deixar um espaço em branco. OpenRouter expõe uso e teto por chave. Groq e Cerebras retêm a classificação no_billing_api do registro. Sail documenta rotas de cobrança que esta integração não lê: suas chaves relatam spendReadability: "unread", seu registro relata visibilidade de gasto unknown, e usdSpent permanece nulo. Nenhuma solicitação de cobrança é adicionada. Um campo de dinheiro em branco não deve ser lido como zero.

usdLimit: null com uncapped: true é a descoberta que vale agir: uma chave sem teto de gasto pode gastar sem limite se vazar.

Bloco de borda versus chave morta

Um 401/403 carregando código Cloudflare 1010 significa que a solicitação foi rejeitada na borda antes de chegar ao provedor — geralmente por não enviar User-Agent — e não diz nada sobre se a chave é válida. Relatado como edge_blocked com alive: null, distinto de rejected, porque tratá-lo como chave morta causou rotações erradas antes. Cada sonda envia um User-Agent por esse motivo.

Verificado em 2026-08-27 de um host Windows: Groq responde 401 invalid_api_key e Cerebras 403 {"detail":"Not authenticated"}, com e sem User-Agent — erros de credencial comuns, sem 1010. O caso 1010 é real, mas específico do host, então é detectado pelo corpo em vez de assumido pelo status.

Auditando slugs de modelo fixados

Passe ids para dashboard_model_economics com os slugs que uma configuração fixa, em qualquer provedor. Ids ausentes de todos os catálogos de provedores voltam em missingIds — o 404 que uma configuração está prestes a atingir, observado antes de acontecer — e ids sobreviventes carregam preço atual, desconto e retirementRisk.

Ressalvas

Frescor, e o que acontece quando a fonte está lenta

Ferramentas baseadas em dashboard leem uma API HTTP pública, sem credenciais no momento da consulta. Esse host é uma implantação de nível hobby sem obrigação de uptime, e respostas baseadas em dashboard dependem dele. Duas coisas se seguem, e ambas são visíveis na resposta em vez de assumidas.

Respostas são armazenadas em cache, e cada resposta carrega sua própria idade. Uma única chamada dashboard_model_economics pode fazer duas dúzias de solicitações upstream; ler ao vivo toda vez colocaria carga evitável naquele host. Cada entrada evidence[] carrega freshness:

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

state é live (buscado durante esta chamada), cached (dentro de sua expiração), ou expired. TTL padrão é cinco minutos; passe cache: { ttlMs: 0 } para ler ao vivo toda vez, ou cache: false para desativá-lo.

Quando o host está lento ou fora do ar, você obtém uma resposta honesta, nunca um fallback silencioso. Sem nada em cache, a falha upstream é retornada como dados estruturados — unavailable com um motivo. Com uma entrada expirada em mãos, o último valor conhecido é retornado, mas 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."
}

Preço desatualizado é exatamente o dano que esta ferramenta existe para prevenir, então um número nunca é devolvido como atual quando não é. Não medido não é zero, e desatualizado não é fresco — a idade chega com a resposta para que um chamador possa recusá-la.

Gratuito versus gratuito com limite de taxa

freeKind separa concrete_free (um modelo real de preço zero) de free_router (um nível de roteamento gratuito com limite de taxa, utilizável para uma sonda, mas não para uma carga de trabalho) de paid_or_unknown (que inclui todo provedor que não publica preço — desconhecido, e nunca tratado como gratuito). genuinelyFree é verdadeiro apenas para concrete_free.

emitsText é true, false, ou null onde o provedor não publica modalidade. Sem ele, o modelo gratuito mais barato é um gerador de música. includeUnknownCapability (padrão verdadeiro) decide se linhas com capacidade não publicada participam; defina-o como falso quando uma garantia rígida for necessária, ao custo de excluir Cerebras inteiramente.

Preços Sail: um documento fixado, não uma API

A API de catálogo da Sail retorna ids de modelo e nada mais — sem preço, sem comprimento de contexto, sem modalidade. Seus preços vivem em uma página de preços legível por humanos, https://docs.sailresearch.com/pricing.md.

Uma página não é uma API. Ela pode ser reestruturada, reformulada ou reajustada sem aviso, e um parser que continua lendo-a independentemente continuará retornando números que parecem exatamente tão confiantes quanto quando estavam certos. Então o servidor faz hash do documento e o compara a um digest fixado antes de citar qualquer coisa dele:

  • Digest corresponde — preços são analisados e modelos Sail entram no ranking.
  • Digest difere — modelos Sail são omitidos, e a resposta carrega PRICES ARE STALE, nomeando ambos os digests. Não cai para os últimos preços conhecidos, porque um preço que era verdadeiro na semana passada não é um preço.

A troca é deliberada: a ferramenta fica em silêncio sobre Sail em vez de citar um número que não pode sustentar. O que custa é disponibilidade — toda mudança upstream legítima também silencia Sail até que o pin seja reconciliado com o documento ao vivo.

O pin foi reconciliado em 2026-09-26 contra um reajuste real: cinco modelos adicionados, cinco reajustados, dois aposentados, todos verificados à mão antes de o digest mudar. O mesmo digest agora também controla as linhas Sail em dashboard_catalogue, que leem identidades do /models chaveado da Sail (SAIL_API_KEY) e preços apenas deste documento. Isso não é hipotético. Entre duas capturas, o documento cresceu cerca de 10% e o catálogo da Sail ganhou um modelo (google/gemma-4-12B-it, 9 → 10) enquanto zai-org/GLM-5.3 permaneceu em US$ 1,40 / US$ 4,40 por milhão. Um resumo que muda indica que o documento foi alterado. Ele não pode dizer se os preços mudaram.

O fixture usado nos testes é byte-idêntico ao documento ativo e está marcado como -text em .gitattributes, porque core.autocrlf reescreverá suas quebras de linha no checkout e alterará o hash — o que se parece exatamente com uma mudança de preço upstream, mas não é.

Lacunas nos números de versão

Não existe 0.9.0 no npm e nunca existiu. Ele foi compilado e verificado no repositório e nunca publicado, então o salto 0.8.0 → 1.0.0 não é um lançamento que você perdeu; as mudanças de quebra nesse salto estão nas notas de lançamento da 1.0.0. Também não existe 1.1.1. Se você acompanha números de versão, essas lacunas são contabilidade, não lançamentos que vieram e foram.

A OpenRouter fornece seu próprio servidor MCP. Ele é de fornecedor único por construção, o que o torna incapaz de responder à pergunta para a qual este existe: dos provedores com os quais realmente tenho chaves, qual é a opção capaz mais barata agora.

Verificação

Compile primeiro, depois execute o filho compilado real através do cliente oficial do 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

Os seis modos de harness originais passaram em 27/08/2026. Esse fixture histórico afirma que suas linhas originais da OpenRouter, Groq, Cerebras e Sail sobrevivem em uma única resposta, que um modelo da Groq com preço é classificado enquanto um modelo da Cerebras sem preço é mantido e explicado, que a Sail é injetada somente quando seu documento fixado verifica, e que nenhuma expiração de desconto é inventada.

live e alien-cwd usam o padrão público de zero credenciais. fixture, offline, html e verify:stdout usam infraestrutura de teste somente loopback. As evidências são gravadas sob o ignorado verification/raw/ somente após validação. O verificador bruto é separado porque o transporte stdio oficial não expõe a saída padrão do filho e, portanto, não pode provar pureza de bytes por conta própria.

Os dez casos de avaliação independentes com data arquivada estão em evals/dashboard-intelligence.xml. Os payloads e tempos mais recentes verificados estão registrados em docs/verification-report.md.

Semântica

Como preços e velocidade são modelados

Tudo acima se baseia nestas definições. Leia isto quando um número surpreender você.

Um modelo não tem um preço. Ele tem um conjunto de pontos de preço, cada um válido somente sob uma condição declarada, e o conjunto é a unidade que este pacote publica.

Um ponto é { amount, unit, condition, source: { url, readAt }, provenance }. Os valores são strings decimais exatas, nunca floats, então uma taxa por token abaixo de um centavo sobrevive a uma ida e volta. source nomeia a página da qual foi lido e quando; um preço cujo tempo de leitura não pode ser estabelecido não é emitido de forma alguma.

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 condição (seis): latency_window, time_band, tier, rate_class, price_scope, generation. Uma taxa nunca é desvinculada da escolha que a produziu: uma janela de latência, um horário do dia, um nível de volume, uma classe de taxa ou de quem é o preço. price_scope distingue uma taxa cotada para uma conta autenticada de uma taxa de lista pública — sem ela, as duas parecem idênticas e são comparadas como se fossem a mesma quantidade.

Proveniência: published, derived, parsed_from_prose, unknown. Um ponto derived nomeia derivedFrom; um ponto parsed_from_prose retém o sourceText do qual foi lido. unknown é uma resposta real e nunca é arredondado para um número.

A regra de recusa. Uma comparação retorna cada par compatível ou recusa. Dois pontos comparam somente sob a mesma unidade E a mesma condição; unidades incompatíveis, condições incompatíveis ou uma linha de base zero recusam, sempre com um motivo. A recusa aparece sob dois nomes, um por camada: o primitivo do conjunto de preços retorna status: "refused", e uma resposta de ferramenta transmite isso como uma perna de comparação com status: "not_comparable" e o mesmo motivo. Nada é coagido para tornar uma comparação possível, porque uma comparação entre condições não é uma resposta mais fraca, é uma resposta errada.

A velocidade carrega suas próprias condições. Observações dashboard_speed são measured, published, unknown. Uma taxa nomeia token_basis (visible_output, billed_total, unknown) porque um modelo de raciocínio emite tokens que nunca chegam ao conteúdo, então uma taxa de saída visível e uma taxa cobrada diferem por múltiplos. Cada observação carrega um vantagePoint: latência é uma propriedade de um provedor e de onde foi medida, então um número sem isso favorece quem está mais próximo do host de benchmark. Uma afirmação que este pacote não pode originar é publicada como unknown, não como um número.

O custo de geração medido é um fluxo de evidências separado. Um costUsd relatado pelo provedor carrega proveniência MEASURED, seu próprio observedAt, checkedAt e expiresAt; UNKNOWN, LAG e EXPIRED permanecem estados explícitos. Cada observação de ledger também carrega measurementSource (fixture, live_provider_read ou unknown), e cada seleção de conselho decidível renderiza o measured_cost_source correspondente. Uma decisão baseada em fixture, portanto, não pode parecer uma observação de cobrança ao vivo. Cada chamada real pode anexar uma observação mais recente, enquanto os preços do catálogo permanecem um campo diferente e nunca preenchem o custo medido. Um zero relatado pelo provedor é válido para um modelo local de custo zero; um delta de saldo zero é atraso de cobrança.

Depreciações. dashboard_contract retorna schema_version, o package_version instalado e cada campo ou ferramenta anunciado para remoção. Um aviso nomeia replaced_by, ou fornece um reason simples quando a capacidade se foi sem substituição. A partir da 1.0.0, uma remoção é anunciada antes do lançamento que a executa; os avisos da 1.0.0 são retrospectivos porque nenhum lançamento publicado anteriormente carregava este mecanismo.

Afirmações de velocidade e medição

dashboard_speed mantém afirmações do editor e medições em observações separadas. O protocolo de sonda fixo é um prompt de streaming com maxTokens: 700, quatro execuções, a primeira descartada, e mediana/mín/máx sobre as três restantes. Uma observação medida registra provedor, modelo, timestamp (ou unknown explícito), ponto de vista, hash do prompt, contagem de tokens, TTFT e tokens sustentados por segundo. Uma afirmação publicada tem atribuição ao provedor e URL de origem, mas nenhuma medição fabricada. Os metadados atuais incluem a afirmação publicada da Cerebras de aproximadamente 3.000 tokens/segundo, juntamente com o registro medido retido de 28/08/2026 de 867/1.022/1.108 tokens/segundo, e o teto publicado da Groq de 8.000 tokens/minuto; as unidades e estados permanecem distintos. Observações ausentes são unknown.

Versionamento de contrato e depreciações

dashboard_contract é o endpoint explícito do contrato MCP. Ele retorna schema_version, o package_version instalado e deprecations[]. Cada aviso nomeia o campo ou ferramenta sendo aposentado, o lançamento que o remove, sua substituição (ou um motivo simples quando não há nenhum) e a data em que o aviso apareceu pela primeira vez. Uma remoção futura conhecida sem data de lançamento confiável usa removed_in: "unknown"; nunca é adivinhada.

A versão 1.0 introduz este mecanismo de aviso. Portanto, ela não pôde pré-anunciar as remoções de 0.9 para 1.0: as notas de lançamento da 1.0 declaram essa exceção uma vez, e esses avisos são necessariamente retrospectivos. Remoções futuras serão anunciadas em um lançamento anterior; um campo não é reaproveitado sob um nome antigo.