MCP
Guia MCP do BasicRouter
Encapsula o BasicRouter (um gateway de LLM compatível com OpenAI) como um servidor MCP, para que suas ferramentas de IA possam chamar diretamente os endpoints de chat, modelos, cobrança, imagem e vídeo do BasicRouter.
Recursos
- 🤖 Chat multi-API: suporta os endpoints compatíveis com OpenAI Chat Completions, Anthropic Messages e OpenAI Responses
- 🖼️ Geração multimodal: além do chat de texto, suporta tarefas assíncronas de geração de imagem e vídeo (texto-para-, imagem-para-, primeiro/último quadro, ativo de referência)
- 🔍 Consulta de modelos e conta: lista modelos disponíveis, detalhes de modelos, saldo da conta, detalhes de uso/cobrança e transações de recarga
- 🔑 Chave passada via cabeçalho: cada chamada lê a chave da API a partir do cabeçalho da requisição, então uma única implantação pode ser compartilhada por várias contas — o servidor nunca persiste nem armazena em cache qualquer chave
Início rápido
Use no Claude Code (recomendado). Adicione -s user para registrá-lo no escopo do usuário (disponível em todos os seus projetos).
Passo 1: Adicionar a conexão
claude mcp add --transport http basicrouter https://api.basicrouter.ai/mcp \
--header "X-Basicrouter-Api-Key: <sua chave de API do BasicRouter>" \
-s userPasso 2: Verificar a conexão
claude mcp list # deve mostrar ✓ Connected
claude mcp get basicrouter # deve mostrar Scope: User config (available in all your projects)Passo 3: Comece a usar
Você pode pedir ao Claude coisas como:
- "Use o BasicRouter para chamar o claude-sonnet-5 e escrever um poema sobre o outono"
- "Liste os modelos disponíveis na minha conta BasicRouter"
- "Verifique meu saldo e uso recente no BasicRouter"
- "Use o BasicRouter para gerar uma imagem de uma cidade cyberpunk à noite"
O Claude chamará automaticamente a ferramenta MCP correspondente e retornará o resultado.
Usando com o Claude Desktop
Adicione isto à seção mcpServers:
{
"mcpServers": {
"basicrouter": {
"type": "http",
"url": "https://api.basicrouter.ai/mcp",
"headers": {
"X-Basicrouter-Api-Key": "<sua chave de API do BasicRouter>"
}
}
}
}Usando com o Codex CLI
Recomendado: use env_http_headers para ler a chave a partir de uma variável de ambiente
Primeiro, exporte a variável de ambiente no seu shell:
export BASICROUTER_API_KEY=<sua chave de API do BasicRouter>Depois, em ~/.codex/config.toml:
[mcp_servers.basicrouter]
url = "https://api.basicrouter.ai/mcp"
env_http_headers = { "X-Basicrouter-Api-Key" = "BASICROUTER_API_KEY" }Alternativa: use http_headers para escrever a chave diretamente na configuração (útil se você não quiser gerenciar uma variável de ambiente separada, mas note que a chave fica então armazenada em texto simples no arquivo de configuração):
[mcp_servers.basicrouter]
url = "https://api.basicrouter.ai/mcp"
http_headers = { "X-Basicrouter-Api-Key" = "<sua chave de API do BasicRouter>" }Se estiver adicionando pela interface de configurações do Codex:
- Tipo: HTTP / Streamable HTTP
- Nome: basicrouter
- URL:
https://api.basicrouter.ai/mcp - Nome do cabeçalho:
X-Basicrouter-Api-Key - Valor do cabeçalho: sua chave de API do BasicRouter
Verificar a conexão
Depois de iniciar o Codex CLI, o comando /mcp lista os servidores MCP configurados e o status de suas conexões — basta confirmar que carregou corretamente. O padrão de uso é igual ao do Claude: o Codex escolhe automaticamente a ferramenta certa.
Se o seu arquivo de configuração já tiver outros servidores MCP, adicione este no mesmo nível. Saia completamente e reabra o Claude Desktop após editar.
Ferramentas
Este servidor MCP fornece 14 ferramentas, agrupadas em cinco categorias:
1. Chat
1. chat_completion — Chat Completions
Envia uma única requisição de chat e retorna a resposta completa do modelo (sem streaming). Além de texto simples, também aceita imagens para compreensão visual (o modelo deve suportar vision) — mude o content da mensagem de string para um array de blocos de conteúdo misturando text e image_url.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| model | ✅ | ID do modelo, ex.: "claude-sonnet-5" — verifique primeiro com list_models |
| messages | ✅ | Lista de mensagens, cada uma no formato {"role": "user"|"assistant"|"system", "content": "..."}; para entrada multimodal, content é um array de blocos de conteúdo (veja Entrada multimodal abaixo) |
| temperature | ❌ | Temperatura de amostragem — quanto maior, mais aleatório |
| max_tokens | ❌ | Número máximo de tokens a gerar |
Entrada multimodal (text / image / video)
Entrada de imagem (URL):
{"role": "user", "content": [
{"type": "text", "text": "O que há nesta imagem?"},
{"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}
]}Entrada de imagem (Base64):
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,<BASE64_STRING>"}}Formatos suportados: PNG, JPEG, GIF (apenas o primeiro quadro), WebP. Limite de tamanho por imagem 20MB.
Nota: imagens grandes em Base64 produzem strings muito longas e podem falhar pelo corpo da requisição exceder o limite; prefira passar imagens por URL.
O parâmetro detail (opcional, definido no objeto image_url) controla a fidelidade do processamento da imagem: "auto" (padrão — o modelo decide pelo tamanho) / "low" (miniatura 512x512, rápido e barato, bom para classificação simples) / "high" (resolução total, bom para texto pequeno / detalhes). O array content de uma mensagem pode conter vários blocos image_url para passar várias imagens.
Entrada de vídeo (URL):
{"role": "user", "content": [
{"type": "text", "text": "Descreva o que acontece neste vídeo."},
{"type": "video_url", "video_url": {"url": "https://example.com/video.mp4"}}
]}Entrada de vídeo (Base64):
{"type": "video_url", "video_url": {"url": "data:video/mp4;base64,<BASE64_STRING>"}}Modelos com suporte a entrada de vídeo no BasicRouter incluem alguns modelos das séries Qwen, Doubao (dola-seed), Kimi, MiniMax — verifique input_modalities retornado por list_models. O padrão oficial Chat Completions da OpenAI não suporta vídeo nativamente, mas o gateway BasicRouter suporta via
{"type": "video_url", "video_url": {"url": "..."}}formato de extensão. Este formato é consistente com o formato video_url usado por OpenRouter, NVIDIA NIM, vLLM e outras plataformas.
2. create_message — Compatível com Anthropic Messages
Chama o endpoint compatível com Anthropic Messages (sem streaming). Os blocos de conteúdo suportam text, image, tool_use, tool_result, thinking, redacted_thinking. As imagens são passadas via blocos de conteúdo.
{"type": "image", "source": {...}}| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| model | ✅ | ID do modelo, ex.: "claude-sonnet-4.6" |
| messages | ✅ | Lista de mensagens; o conteúdo pode ser uma string ou um array de blocos de conteúdo (text/image/tool_use/tool_result/thinking, etc.) |
| max_tokens | ✅ | Número máximo de tokens de saída |
| system | ❌ | Prompt do sistema, uma string ou [{"type": "text", "text": "..."}] |
| temperature / top_p / top_k | ❌ | Parâmetros de amostragem |
| tools | ❌ | Definições de ferramentas, cada uma no formato {"name", "description", "input_schema", ...} |
| tool_choice | ❌ | Estratégia de seleção de ferramenta |
| thinking | ❌ | Configuração de raciocínio estendido |
| stop_sequences | ❌ | Sequências de parada personalizadas |
| metadata | ❌ | Metadados adicionais |
| anthropic_beta | ❌ | Identificador de recurso beta para o cabeçalho anthropic-beta |
Entrada multimodal (text / image / video)
A entrada de imagem suporta três tipos de source:
1. Codificação Base64 (atenção: o campo data é uma string Base64 pura, sem o prefixo data:); media_type suporta image/jpeg, image/png, image/gif, image/webp:
{"type": "image", "source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "<BASE64_STRING>"
}}2. Referência por URL:
{"type": "image", "source": {
"type": "url",
"url": "https://example.com/image.jpg"
}}3. File ID (primeiro faça upload da imagem via Files API com purpose="vision" para obter um file_id):
{"type": "image", "source": {
"type": "file",
"file_id": "<file_id>"
}}O array content de uma mensagem pode conter vários blocos image para passar várias imagens.
Nota: imagens grandes em Base64 produzem strings muito longas e podem falhar pelo corpo da requisição exceder o limite; prefira passar imagens por URL.
Entrada de vídeo: a API Anthropic Messages não suporta arquivos de vídeo nativamente. Para compreensão de vídeo, primeiro extraia quadros-chave com ffmpeg ou similar, depois passe cada quadro como um bloco de conteúdo image. Para os modelos com suporte a entrada de vídeo no BasicRouter (verifique input_modalities retornado por list_models), use a interface chat_completion ou create_response para suporte nativo a vídeo.
3. create_response — Compatível com OpenAI Responses
Usa input em vez de messages, instructions em vez de mensagem de sistema e text.format em vez de response_format. Além de texto simples, também aceita imagens para compreensão visual (o modelo deve suportar vision) — defina input como um array de objetos de mensagem cujo content é um array de blocos de conteúdo misturando texto e imagens.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| model | ✅ | ID do modelo, ex.: "glm-5.2" |
| input | ✅ | Uma string simples (como uma mensagem de usuário) ou um array de objetos de mensagem (usado para entrada multimodal, veja abaixo) |
| instructions | ❌ | Prompt do sistema |
| max_output_tokens | ❌ | Número máximo de tokens de saída |
| temperature / top_p | ❌ | Parâmetros de amostragem |
| tools | ❌ | Definições de ferramentas, formato de nível superior {"type", "name", "description", "parameters"} |
| tool_choice | ❌ | "auto" / "none" / "required" ou {"type", "name"} |
| text | ❌ | Configuração do formato de saída, ex.: {"format": {"type": "text" | "json_object" | "json_schema", ...}} |
| previous_response_id | ❌ | ID da resposta anterior para conversas de múltiplos turnos |
| parallel_tool_calls | ❌ | Se deve permitir chamadas de ferramentas em paralelo |
| metadata | ❌ | Metadados adicionais |
Entrada multimodal (text / image / video)
Nota: a Responses API usa os tipos de bloco de conteúdo input_text / input_image / input_video (não text / image_url / video_url do Chat Completions), e image_url / video_url é uma string direta, não um objeto aninhado.
Entrada de imagem (URL):
[{"role": "user", "content": [
{"type": "input_text", "text": "O que há nesta imagem?"},
{"type": "input_image", "image_url": "https://example.com/image.jpg"}
]}]Entrada de imagem (Base64):
{"type": "input_image", "image_url": "data:image/jpeg;base64,<BASE64_STRING>"}Formatos suportados: PNG, JPEG, GIF (apenas o primeiro quadro), WebP. Limite de tamanho por imagem 20MB.
Nota: imagens grandes em Base64 produzem strings muito longas e podem falhar pelo corpo da requisição exceder o limite; prefira passar imagens por URL.
Entrada de imagem (File ID):
{"type": "input_image", "file_id": "<file_id>"}o file_id é obtido fazendo upload da imagem via Files API com purpose="vision".
O parâmetro detail (opcional, no objeto input_image) controla a fidelidade do processamento: "auto" (padrão) / "low" (miniatura 512x512, rápido e barato) / "high" (resolução total, para texto pequeno / detalhes) / "original" (resolução original). O array content de uma mensagem pode conter vários blocos input_image para várias imagens.
Entrada de vídeo (URL):
[{"role": "user", "content": [
{"type": "input_text", "text": "Descreva o que acontece neste vídeo."},
{"type": "input_video", "video_url": "https://example.com/video.mp4"}
]}]Entrada de vídeo (Base64):
{"type": "input_video", "video_url": "data:video/mp4;base64,<BASE64_STRING>"}Entrada de vídeo (File ID):
{"type": "input_video", "file_id": "<file_id>"}Modelos com suporte a entrada de vídeo no BasicRouter incluem alguns modelos das séries Qwen, Doubao (dola-seed), Kimi, MiniMax — verifique input_modalities retornado por list_models. O padrão oficial Responses API da OpenAI não suporta vídeo nativamente, mas o gateway BasicRouter suporta via
{"type": "input_video", "video_url": "..."}formato de extensão. Este formato é consistente com o formato input_video usado por BytePlus/Volcengine e outras plataformas.
2. Modelos e conta
4. list_models — Listar modelos disponíveis
Retorna os modelos disponíveis para a conta atual, com metadados de fornecedor, modalidade, capacidade e preço. Sem parâmetros. Cada item da lista inclui uma faixa de preço price_tiers — o preço de cobrança efetivo do chamador, correspondendo ao débito real (veja Referência do campo de faixas de preço) (only some newer models).
5. get_model — Obter detalhes de um modelo
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| model | ✅ | ID do modelo, ex.: "gpt-5.5" — retorna um erro claro se não existir |
A resposta inclui uma faixa de preço price_tiers (veja Referência do campo de faixas de preço); retorna 404 (sem campos de preço) quando o modelo não existe.
6. get_balance — Verificar saldo da conta
Retorna o uso e o saldo da conta atual. Sem parâmetros.
3. Cobrança
7. list_usage — Detalhes de uso/cobrança de modelos
Detalhes paginados de cobrança por uso de modelos, ordenados pela data de criação do pedido em ordem decrescente. Apenas cobranças normais de uso — sem recargas ou ajustes.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| page | ❌ | Número da página, começando em 1, padrão 1 |
| size | ❌ | Tamanho da página, padrão 20 |
| start_time | ❌ | Hora de início, formato "yyyy-MM-ddTHH:mm:ss" (ex.: "2026-07-01T00:00:00") |
| end_time | ❌ | Hora de término, mesmo formato |
8. list_transactions — Transações de recarga/pacote
Transações pagas de recarga / compra de pacote, paginadas e ordenadas pela data de criação em ordem decrescente.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| page | ❌ | Número da página, começando em 1, padrão 1 |
| size | ❌ | Tamanho da página, padrão 20 |
| start_time | ❌ | Hora de início, formato "yyyy-MM-dd HH:mm:ss" (atenção: um espaço, não "T", entre a data e a hora) |
| end_time | ❌ | Hora de término, mesmo formato |
4. Geração de imagens
9. list_image_models — Listar modelos de imagem
Retorna os modelos de geração de imagem suportados, com resolução, proporção de tela, número máximo de imagens (maxCount) e número máximo de imagens de referência (fileMax). Sem parâmetros. Verifique isso antes de gerar imagens — você só pode passar valores que ele publica. Cada item da lista inclui uma faixa de preço priceTiers (veja Referência do campo de faixas de preço).
10. create_image_generation — Enviar uma tarefa de geração de imagem
Envia de forma assíncrona e retorna imediatamente um taskId; consome crédito da conta.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| text | ✅ | Prompt de geração de imagem |
| model | ✅ | Nome do modelo, a partir do id retornado por list_image_models |
| count | ❌ | Número de imagens a gerar |
| resolution | ❌ | Resolução, a partir das resolutions de list_image_models |
| ratio | ❌ | Proporção de tela, a partir das ratios de list_image_models |
| image_urls | ❌ | URLs de imagens de referência (imagem para imagem), quantidade limitada ao fileMax desse modelo |
| callback_url | ❌ | Webhook chamado na conclusão; omita para fazer polling |
11. get_image_generation — Consultar uma tarefa de imagem
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| task_id | ✅ | O taskId retornado por create_image_generation |
Retorna: status é pending / success / failed; images é um array de string JSON com URLs de imagens; text traz qualquer saída extra do modelo (ex.: saída multimodal do Gemini).
5. Geração de vídeos
12. list_video_models — Listar modelos de vídeo
Retorna os modelos de geração de vídeo suportados, com allowedVideoTypes, faixa de duração (videoDurationMin/Max), resolução, proporção de tela e limite de ativos de referência (fileMax). Sem parâmetros. Verifique isso antes de gerar vídeo. Cada item da lista inclui uma faixa de preço priceTiers (veja Referência do campo de faixas de preço).
13. create_video_generation — Enviar uma tarefa de geração de vídeo
Envia de forma assíncrona e retorna imediatamente um taskId; consome crédito da conta.
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| text | ✅ | Prompt de geração de vídeo; quando video_type=5, ativos de referência com "@Imagem N"/"@Vídeo N"/"@Áudio N" |
| model | ✅ | Nome do modelo, a partir do id retornado por list_video_models |
| video_type | ✅ | Código do modo de geração (1-5, veja abaixo) — apenas valores em allowedVideoTypes desse modelo são válidos |
| image_urls | ❌ | URLs de imagens; o significado depende de video_type |
| video_urls | ❌ | URLs de vídeos, apenas para video_type=5 |
| audio_urls | ❌ | URLs de áudios, apenas para video_type=5 |
| resolution / ratio | ❌ | Resolução / proporção de tela, a partir de list_video_models |
| duration | ❌ | Duração do vídeo em segundos, deve estar dentro de videoDurationMin/Max |
| callback_url | ❌ | Webhook chamado na conclusão; omita para fazer polling |
Significado de video_type:
| Valor | Modo | Requisito de ativo |
|---|---|---|
| 1 | Texto para vídeo | Nenhum ativo necessário |
| 2 | Imagem para vídeo (primeiro quadro) | image_urls fornece um único quadro inicial |
| 3 | Imagem para vídeo (primeiro/último quadro) | image_urls fornece [primeiro quadro, último quadro] nessa ordem |
| 4 | Imagem para vídeo (referência) | image_urls fornece uma ou mais imagens de referência de estilo/conteúdo |
| 5 | Todas as referências | Combinação de image_urls/video_urls/audio_urls, referenciados por posição no texto |
14. get_video_generation — Consultar uma tarefa de vídeo
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
| task_id | ✅ | O taskId retornado por create_video_generation |
Referência do campo de faixas de preço
As saídas destas 4 ferramentas de consulta de modelos — list_models, get_model, list_image_models, list_video_models — retornam o preço de cobrança efetivo do chamador (usuário do API Key), correspondendo exatamente ao débito real, e incluem todas as faixas de preço do modelo.
Diferença de nomenclatura: list_models / get_model seguem o snake_case do OpenAI (price_tiers); list_image_models / list_video_models seguem camelCase (priceTiers). A estrutura é a mesma.
price_tiers / priceTiers é um array; cada elemento é uma faixa de preço:
| Campo | Tipo | Descrição |
|---|---|---|
region | string | Região de camadas V2 de modelos de texto, ex. GLOBAL / NON_GLOBAL / us-central1. Null para modelos de imagem/vídeo |
bandMin | long | Limite inferior da faixa de input token do modelo de texto (inclusivo); null = ilimitado |
bandMax | long | Limite superior da faixa de input token do modelo de texto (inclusivo); null = ilimitado |
resolution | string | Resolução de imagem/vídeo, ex. 1080p / 4K. Null para modelos de texto |
clarity | string | Nível de clareza |
unit | string | Unidade de cobrança: token (texto) / image (imagem) / video (vídeo) |
quantity | integer | Quantidade da unidade (ex. por 1000 tokens, por 1 imagem) |
description | string | Descrição do preço |
inputPrice | decimal | Preço unitário de entrada efetivo do chamador |
outputPrice | decimal | Preço unitário de saída efetivo do chamador |
cachePrice | decimal | Preço de cache (modelos gerais, fórmula de cobrança antiga) |
cacheReadPrice | decimal | Preço unitário de leitura de cache (apenas Bedrock Claude) |
cacheWritePrice | decimal | Preço unitário de escrita de cache (apenas Bedrock Claude) |
ratio | decimal | Multiplicador de cobrança. 1 no modo FIXED; multiplicador de usuário/grupo no modo RATIO |
mode | string | Modo de preço: RATIO / FIXED |
planId | string | id do plano de preço correspondido; pode ser null |
Os três tipos de modelo compartilham a mesma estrutura; apenas os campos de descrição diferem, e campos não aplicáveis são null:
| Tipo de modelo | unit | Campos de descrição efetivos |
|---|---|---|
| Texto | token | region / bandMin / bandMax |
| Imagem | image | resolution / clarity |
| Vídeo | video | resolution / clarity |
Significado do preço: os inputPrice / outputPrice / cacheReadPrice / cacheWritePrice retornados, etc., são os preços unitários finais de cobrança para o usuário atual do API Key, resolvidos através da cadeia de preço (chain) → guidance → preço base, e correspondem ao débito real. O preço unitário que o chamador vê varia conforme sua cadeia de preço (reseller / distributor / empresa / configuração de nível de usuário).
Débito real = uso ÷ quantity × preço unitário × ratio. Para cobrança de vídeo por segundo: débito real = duration × outputPrice × ratio.
Casos extremos e tratamento de erros (um endpoint somente leitura nunca retorna 500 por configuração de preço):
| Cenário | Comportamento |
|---|---|
| Uma faixa falha ao resolver (política de preço nega acesso, configuração ausente) | Pular a faixa, registrar log warn, continuar resolvendo as demais |
| Todas as faixas de um modelo falham ao resolver | Array vazio []; modelo ainda retornado normalmente |
| Modelo sem nenhuma configuração de preço | Array vazio [] |
| Resolução de preço lança exceção não capturada | Capturada no todo, retorna array vazio; endpoint ainda 200 |
Exemplo de resposta (list_models, modelo de texto):
{
"object": "list",
"data": [
{
"id": "gpt-4o",
"object": "model",
"display_name": "gpt-4o",
"context_length": 128000,
"description": "...",
"price_tiers": [
{
"region": "GLOBAL",
"bandMin": null,
"bandMax": null,
"resolution": null,
"clarity": null,
"unit": "token",
"quantity": 1000,
"description": "por 1K tokens",
"inputPrice": 0.0025,
"outputPrice": 0.01,
"cachePrice": 0.00125,
"cacheReadPrice": 0,
"cacheWritePrice": 0,
"ratio": 1,
"mode": "RATIO",
"planId": null
}
]
}
]
}Exemplo de resposta (list_image_models, modelo de imagem; priceTiers mesma estrutura, unit é image):
{
"object": "list",
"data": [
{
"id": "dall-e-3",
"object": "image_model",
"displayName": "dall-e-3",
"resolutions": ["1024x1024", "1792x1024", "1024x1792"],
"priceTiers": [
{
"region": null,
"bandMin": null,
"bandMax": null,
"resolution": "1024x1024",
"clarity": "standard",
"unit": "image",
"quantity": 1,
"description": "por imagem",
"inputPrice": 0,
"outputPrice": 0.04,
"cachePrice": 0,
"cacheReadPrice": 0,
"cacheWritePrice": 0,
"ratio": 1,
"mode": "RATIO",
"planId": null
}
]
}
]
}Exemplos
Exemplo 1: uma requisição de chat simples
Pergunte: "Use o BasicRouter para chamar o claude-sonnet-5 e perguntar o que é o GIL do Python"
A IA chamará chat_completion com:
{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "What is Python's GIL?"}]
}Exemplo 2: uso de ferramentas via o endpoint Anthropic Messages
Pergunte: "Use o endpoint Messages do BasicRouter e deixe o modelo decidir se deve verificar o clima"
A IA chamará create_message, passando uma definição de tools e tool_choice; a resposta incluirá um bloco de conteúdo tool_use.
Exemplo 3: listar modelos disponíveis
Pergunte: "Liste os modelos na minha conta BasicRouter"
A IA chamará list_models, retornando IDs, fornecedores, modalidades, preços e mais para cada modelo disponível.
Exemplo 4: verificar saldo e uso
Pergunte: "Verifique meu uso do BasicRouter neste mês"
A IA chamará get_balance para o saldo e, em seguida, list_usage (com start_time delimitado a este mês) para o detalhamento de uso.
Exemplo 5: gerar uma imagem
Pergunte: "Use o BasicRouter para gerar uma imagem de uma cidade cyberpunk à noite"
A IA primeiro chamará list_image_models para verificar as especificações, depois create_image_generation para obter um taskId, e então fará polling em get_image_generation para obter a URL da imagem.
Exemplo 6: texto para vídeo
Pergunte: "Use o BasicRouter para gerar um vídeo de 5 segundos de uma nebulosa espacial"
A IA primeiro chamará list_video_models para verificar as especificações, depois create_video_generation (video_type=1, duration=5), e após obter um taskId, fará polling em get_video_generation.
FAQ
A chamada de ferramenta falha com "missing BasicRouter API Key"
- Você executou
claude mcp addsem--header, ou a chave está errada - Se estiver editando o JSON de configuração diretamente, o nome do campo
headersestá errado (deveria serX-Basicrouter-Api-Key) - Executando localmente sem a variável de ambiente
BASICROUTER_API_KEYdefinida
A chamada de ferramenta falha com "BasicRouter returned 401 unauthorized"
A própria chave de API está errada ou expirou — gere uma nova no console do BasicRouter.
O Claude não está chamando as ferramentas do BasicRouter — o que fazer?
- Confirme que a conexão mostra ✓ Connected via
claude mcp list - Verifique o status da conexão:
claude mcp get basicrouter - Tente ser explícito: "Use a ferramenta
chat_completiondo BasicRouter para chamarclaude-sonnet-5…"
A geração de imagem/vídeo fica pendente para sempre
- Faça polling de tarefas de imagem com
get_image_generatione de tarefas de vídeo comget_video_generation— note que o status de uma tarefa de vídeo em execução é "running", não "pending" - A geração leva tempo, geralmente de alguns a dezenas de segundos, mais para vídeo
- Se você passou um
callback_url, a tarefa fará o callback na conclusão — sem necessidade de polling
Erros em list_image_models / list_video_models
Nenhuma das duas ferramentas consome crédito por si só — um erro geralmente indica um problema de chave ou de rede. Primeiro confirme que list_models funciona normalmente.
Notas
- Nome do cabeçalho:O MCP passa a chave via
X-Basicrouter-Api-Key. - Consumo de crédito:
chat_completion/create_message/create_response/create_image_generation/create_video_generationconsomem todos crédito da conta — verifiqueget_balanceprimeiro se quiser saber o saldo antecipadamente. - Verifique as especificações antes de gerar:Parâmetros de geração de imagem/vídeo como model, resolution, ratio, count, duration e video_type devem usar apenas valores publicados por
list_image_models/list_video_models, caso contrário a chamada resulta em erro. - Sem streaming:Nenhum dos três endpoints de chat suporta streaming — cada um retorna o resultado completo de uma vez.
- Design sem estado:Cada requisição é independente e nenhuma sessão é armazenada; para conversas de múltiplos turnos, use
previous_response_iddecreate_responseou mantenha o histórico você mesmo emmessages.
