MCP
Guía de MCP de BasicRouter
Envuelve BasicRouter (una pasarela LLM compatible con OpenAI) como un servidor MCP para que sus herramientas de IA puedan llamar directamente a los endpoints de chat, modelos, facturación, imagen y video de BasicRouter.
Características
- 🤖 Chat multi-API: admite endpoints compatibles con OpenAI Chat Completions, Anthropic Messages y OpenAI Responses
- 🖼️ Generación multimodal: además del chat de texto, admite tareas asíncronas de generación de imagen y video (texto a, imagen a, primer/último cuadro, activo de referencia)
- 🔍 Consulta de modelos y cuenta: liste los modelos disponibles, los detalles de modelos, el saldo de la cuenta, los detalles de uso/facturación y las transacciones de recarga
- 🔑 Clave enviada mediante encabezado: cada llamada lee la clave API desde el encabezado de la solicitud, de modo que una sola implementación puede compartirse entre varias cuentas — el servidor nunca persiste ni almacena en caché ninguna clave
Inicio rápido
Úselo en Claude Code (recomendado). Agregue -s user para registrarlo en el ámbito de usuario (disponible en todos sus proyectos).
Paso 1: agregar la conexión
claude mcp add --transport http basicrouter https://api.basicrouter.ai/mcp \
--header "X-Basicrouter-Api-Key: <su clave API de BasicRouter>" \
-s userPaso 2: verificar la conexión
claude mcp list # debería mostrar ✓ Connected
claude mcp get basicrouter # debería mostrar Scope: User config (available in all your projects)Paso 3: empezar a usarlo
Puede pedirle a Claude cosas como:
- "Usa BasicRouter para llamar a claude-sonnet-5 y escribe un poema sobre el otoño"
- "Lista los modelos disponibles en mi cuenta de BasicRouter"
- "Consulta mi saldo y uso reciente en BasicRouter"
- "Usa BasicRouter para generar una imagen de una ciudad cyberpunk de noche"
Claude llamará automáticamente a la herramienta MCP correspondiente y devolverá el resultado.
Uso con Claude Desktop
Agregue esto a la sección mcpServers:
{
"mcpServers": {
"basicrouter": {
"type": "http",
"url": "https://api.basicrouter.ai/mcp",
"headers": {
"X-Basicrouter-Api-Key": "<su clave API de BasicRouter>"
}
}
}
}Uso con Codex CLI
Recomendado: use env_http_headers para leer la clave desde una variable de entorno
Primero exporte la variable de entorno en su shell:
export BASICROUTER_API_KEY=<su clave API de BasicRouter>Luego, en ~/.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 escribir la clave directamente en la configuración (útil si no desea gestionar una variable de entorno aparte, pero tenga en cuenta que la clave quedará almacenada en texto plano en el archivo de configuración):
[mcp_servers.basicrouter]
url = "https://api.basicrouter.ai/mcp"
http_headers = { "X-Basicrouter-Api-Key" = "<su clave API de BasicRouter>" }Si lo agrega mediante la interfaz de configuración de Codex:
- Tipo: HTTP / Streamable HTTP
- Nombre: basicrouter
- URL:
https://api.basicrouter.ai/mcp - Nombre del encabezado:
X-Basicrouter-Api-Key - Valor del encabezado: su clave API de BasicRouter
Verificar la conexión
Después de iniciar Codex CLI, el comando /mcp lista los servidores MCP configurados y su estado de conexión — solo confirme que se cargó correctamente. El patrón de uso coincide con el de Claude: Codex elige automáticamente la herramienta adecuada.
Si su archivo de configuración ya tiene otros servidores MCP, agregue este al mismo nivel. Cierre por completo y vuelva a abrir Claude Desktop después de editar.
Herramientas
Este servidor MCP ofrece 14 herramientas, agrupadas en cinco categorías:
1. Chat
1. chat_completion — Chat Completions
Envía una única solicitud de chat y devuelve la respuesta completa del modelo (sin streaming). Además de texto, también acepta imágenes para comprensión visual (el modelo debe soportar vision) — cambia el content del mensaje de string a un array de bloques de contenido mezclando text e image_url.
| Parámetro | Obligatorio | Descripción |
|---|---|---|
| model | ✅ | ID del modelo, p. ej. "claude-sonnet-5" — consulte primero list_models |
| messages | ✅ | Lista de mensajes, cada uno con la forma {"role": "user"|"assistant"|"system", "content": "..."}; para entrada multimodal, content es un array de bloques de contenido (ver Entrada multimodal más abajo) |
| temperature | ❌ | Temperatura de muestreo — cuanto más alta, más aleatoria |
| max_tokens | ❌ | Máximo de tokens a generar |
Entrada multimodal (text / image / video)
Entrada de imagen (URL):
{"role": "user", "content": [
{"type": "text", "text": "¿Qué hay en esta imagen?"},
{"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}
]}Entrada de imagen (Base64):
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,<BASE64_STRING>"}}Formatos soportados: PNG, JPEG, GIF (solo el primer fotograma), WebP. Límite de tamaño por imagen 20MB.
Nota: las imágenes grandes en Base64 producen cadenas muy largas y pueden fallar por un cuerpo de solicitud demasiado grande; se recomienda pasar imágenes por URL.
El parámetro detail (opcional, definido en el objeto image_url) controla la fidelidad del procesamiento de la imagen: "auto" (predeterminado — el modelo decide según el tamaño) / "low" (miniatura 512x512, rápido y barato, bueno para clasificación simple) / "high" (resolución total, bueno para texto pequeño / detalles). El array content de un mensaje puede contener varios bloques image_url para pasar varias imágenes.
Entrada de video (URL):
{"role": "user", "content": [
{"type": "text", "text": "Describe lo que sucede en este video."},
{"type": "video_url", "video_url": {"url": "https://example.com/video.mp4"}}
]}Entrada de video (Base64):
{"type": "video_url", "video_url": {"url": "data:video/mp4;base64,<BASE64_STRING>"}}Los modelos que admiten entrada de video en BasicRouter incluyen algunos modelos de las series Qwen, Doubao (dola-seed), Kimi, MiniMax — verifica input_modalities devuelto por list_models. El estándar oficial Chat Completions de OpenAI no admite video nativamente, pero la pasarela BasicRouter lo admite a través de
{"type": "video_url", "video_url": {"url": "..."}}formato de extensión. Este formato es consistente con el formato video_url utilizado por OpenRouter, NVIDIA NIM, vLLM y otras plataformas.
2. create_message — Compatible con Anthropic Messages
Llama al endpoint compatible con Anthropic Messages (sin streaming). Los bloques de contenido soportan text, image, tool_use, tool_result, thinking, redacted_thinking. Las imágenes se pasan mediante bloques de contenido.
{"type": "image", "source": {...}}| Parámetro | Obligatorio | Descripción |
|---|---|---|
| model | ✅ | ID del modelo, p. ej. "claude-sonnet-4.6" |
| messages | ✅ | Lista de mensajes; el contenido puede ser una cadena o un arreglo de bloques de contenido (text/image/tool_use/tool_result/thinking, etc.) |
| max_tokens | ✅ | Máximo de tokens de salida |
| system | ❌ | Prompt del sistema, una cadena o [{"type": "text", "text": "..."}] |
| temperature / top_p / top_k | ❌ | Parámetros de muestreo |
| tools | ❌ | Definiciones de herramientas, cada una con la forma {"name", "description", "input_schema", ...} |
| tool_choice | ❌ | Estrategia de selección de herramientas |
| thinking | ❌ | Configuración de razonamiento extendido |
| stop_sequences | ❌ | Secuencias de parada personalizadas |
| metadata | ❌ | Metadatos adicionales |
| anthropic_beta | ❌ | Identificador de función beta para el encabezado anthropic-beta |
Entrada multimodal (text / image / video)
La entrada de imagen soporta tres tipos de source:
1. Codificación Base64 (nota: el campo data es una string Base64 pura, sin el prefijo data:); media_type soporta image/jpeg, image/png, image/gif, image/webp:
{"type": "image", "source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "<BASE64_STRING>"
}}2. Referencia por URL:
{"type": "image", "source": {
"type": "url",
"url": "https://example.com/image.jpg"
}}3. File ID (primero sube la imagen vía la Files API con purpose="vision" para obtener un file_id):
{"type": "image", "source": {
"type": "file",
"file_id": "<file_id>"
}}El array content de un mensaje puede contener varios bloques image para pasar varias imágenes.
Nota: las imágenes grandes en Base64 producen cadenas muy largas y pueden fallar por un cuerpo de solicitud demasiado grande; se recomienda pasar imágenes por URL.
Entrada de vídeo: la API Anthropic Messages no soporta archivos de vídeo nativamente. Para comprensión de vídeo, primero extrae fotogramas clave con ffmpeg o similar, luego pasa cada fotograma como un bloque de contenido image. Para los modelos que admiten entrada de vídeo en BasicRouter (verifica input_modalities mediante list_models), usa la interfaz chat_completion o create_response para obtener soporte nativo de vídeo.
3. create_response — Compatible con OpenAI Responses
Usa input en lugar de messages, instructions en lugar del mensaje del sistema y text.format en lugar de response_format. Además de texto, también acepta imágenes para comprensión visual (el modelo debe soportar vision) — define input como un array de objetos mensaje cuyo content es un array de bloques de contenido que mezcla texto e imágenes.
| Parámetro | Obligatorio | Descripción |
|---|---|---|
| model | ✅ | ID del modelo, p. ej. "glm-5.2" |
| input | ✅ | Un string simple (como un mensaje de usuario) o un array de objetos mensaje (usado para entrada multimodal, ver más abajo) |
| instructions | ❌ | Prompt del sistema |
| max_output_tokens | ❌ | Máximo de tokens de salida |
| temperature / top_p | ❌ | Parámetros de muestreo |
| tools | ❌ | Definiciones de herramientas, forma de nivel superior {"type", "name", "description", "parameters"} |
| tool_choice | ❌ | "auto" / "none" / "required" o {"type", "name"} |
| text | ❌ | Configuración del formato de salida, p. ej. {"format": {"type": "text" | "json_object" | "json_schema", ...}} |
| previous_response_id | ❌ | ID de la respuesta anterior para conversaciones de varios turnos |
| parallel_tool_calls | ❌ | Si se permiten llamadas a herramientas en paralelo |
| metadata | ❌ | Metadatos adicionales |
Entrada multimodal (text / image / video)
Nota: la Responses API usa los tipos de bloque de contenido input_text / input_image / input_video (no text / image_url / video_url de Chat Completions), y image_url / video_url es un string directo, no un objeto anidado.
Entrada de imagen (URL):
[{"role": "user", "content": [
{"type": "input_text", "text": "¿Qué hay en esta imagen?"},
{"type": "input_image", "image_url": "https://example.com/image.jpg"}
]}]Entrada de imagen (Base64):
{"type": "input_image", "image_url": "data:image/jpeg;base64,<BASE64_STRING>"}Formatos soportados: PNG, JPEG, GIF (solo el primer fotograma), WebP. Límite de tamaño por imagen 20MB.
Nota: las imágenes grandes en Base64 producen cadenas muy largas y pueden fallar por un cuerpo de solicitud demasiado grande; se recomienda pasar imágenes por URL.
Entrada de imagen (File ID):
{"type": "input_image", "file_id": "<file_id>"}— el file_id se obtiene subiendo la imagen vía la Files API con purpose="vision".
El parámetro detail (opcional, en el objeto input_image) controla la fidelidad del procesamiento: "auto" (predeterminado) / "low" (miniatura 512x512, rápido y barato) / "high" (resolución total, para texto pequeño / detalles) / "original" (resolución original). El array content de un mensaje puede contener varios bloques input_image para varias imágenes.
Entrada de video (URL):
[{"role": "user", "content": [
{"type": "input_text", "text": "Describe lo que sucede en este video."},
{"type": "input_video", "video_url": "https://example.com/video.mp4"}
]}]Entrada de video (Base64):
{"type": "input_video", "video_url": "data:video/mp4;base64,<BASE64_STRING>"}; Video input (File ID):
{"type": "input_video", "file_id": "<file_id>"}. Los modelos que admiten entrada de video en BasicRouter incluyen algunos modelos de las series Qwen, Doubao (dola-seed), Kimi, MiniMax — verifica input_modalities devuelto por list_models. El estándar oficial Responses API de OpenAI no admite video nativamente, pero la pasarela BasicRouter lo admite a través de
{"type": "input_video", "video_url": "..."}formato de extensión. Este formato es consistente con el formato input_video utilizado por BytePlus/Volcengine y otras plataformas.
2. Modelos y cuenta
4. list_models — Listar modelos disponibles
Devuelve los modelos disponibles para la cuenta actual, con metadatos de proveedor, modalidad, capacidad y precios. Sin parámetros. Cada elemento de la lista incluye un tramo de precio price_tiers — el precio de facturación efectivo del llamador, coincidente con el cargo real (ver Referencia del campo de tramos de precio) (only some newer models).
5. get_model — Obtener los detalles de un modelo
| Parámetro | Obligatorio | Descripción |
|---|---|---|
| model | ✅ | ID del modelo, p. ej. "gpt-5.5" — devuelve un error claro si no existe |
La respuesta incluye un tramo de precio price_tiers (ver Referencia del campo de tramos de precio); devuelve 404 (sin campos de precio) cuando el modelo no existe.
6. get_balance — Consultar el saldo de la cuenta
Devuelve el uso y el saldo actuales de la cuenta. Sin parámetros.
3. Facturación
7. list_usage — Detalles de uso/facturación de modelos
Detalles de facturación por uso de modelos, paginados, ordenados por fecha de creación del pedido en orden descendente. Solo cargos regulares por uso — sin recargas ni ajustes.
| Parámetro | Obligatorio | Descripción |
|---|---|---|
| page | ❌ | Número de página, comenzando en 1, por defecto 1 |
| size | ❌ | Tamaño de página, por defecto 20 |
| start_time | ❌ | Hora de inicio, formato "yyyy-MM-ddTHH:mm:ss" (p. ej. "2026-07-01T00:00:00") |
| end_time | ❌ | Hora de fin, mismo formato |
8. list_transactions — Transacciones de recarga/paquete
Transacciones pagadas de recarga / compra de paquete, paginadas, ordenadas por fecha de creación en orden descendente.
| Parámetro | Obligatorio | Descripción |
|---|---|---|
| page | ❌ | Número de página, comenzando en 1, por defecto 1 |
| size | ❌ | Tamaño de página, por defecto 20 |
| start_time | ❌ | Hora de inicio, formato "yyyy-MM-dd HH:mm:ss" (nota: un espacio, no "T", entre la fecha y la hora) |
| end_time | ❌ | Hora de fin, mismo formato |
4. Generación de imágenes
9. list_image_models — Listar modelos de imagen
Devuelve los modelos de generación de imágenes admitidos, con resolución, relación de aspecto, número máximo de imágenes (maxCount) y número máximo de imágenes de referencia (fileMax). Sin parámetros. Consulte esto antes de generar imágenes — solo puede pasar los valores que publica. Cada elemento de la lista incluye un tramo de precio priceTiers (ver Referencia del campo de tramos de precio).
10. create_image_generation — Enviar una tarea de generación de imágenes
Se envía de forma asíncrona y devuelve inmediatamente un taskId; consume crédito de la cuenta.
| Parámetro | Obligatorio | Descripción |
|---|---|---|
| text | ✅ | Prompt de generación de imagen |
| model | ✅ | Nombre del modelo, del id devuelto por list_image_models |
| count | ❌ | Número de imágenes a generar |
| resolution | ❌ | Resolución, de las resolutions de list_image_models |
| ratio | ❌ | Relación de aspecto, de las ratios de list_image_models |
| image_urls | ❌ | URLs de imágenes de referencia (imagen a imagen), la cantidad está limitada por el fileMax de ese modelo |
| callback_url | ❌ | Webhook llamado al completarse; omítalo para sondear en su lugar |
11. get_image_generation — Sondear una tarea de imagen
| Parámetro | Obligatorio | Descripción |
|---|---|---|
| task_id | ✅ | El taskId devuelto por create_image_generation |
Devuelve: status es pending / success / failed; images es un arreglo en formato de cadena JSON de URLs de imágenes; text lleva cualquier salida adicional del modelo (p. ej. salida multimodal de Gemini).
5. Generación de video
12. list_video_models — Listar modelos de video
Devuelve los modelos de generación de video admitidos, con allowedVideoTypes, rango de duración (videoDurationMin/Max), resolución, relación de aspecto y límite de activos de referencia (fileMax). Sin parámetros. Consulte esto antes de generar video. Cada elemento de la lista incluye un tramo de precio priceTiers (ver Referencia del campo de tramos de precio).
13. create_video_generation — Enviar una tarea de generación de video
Se envía de forma asíncrona y devuelve inmediatamente un taskId; consume crédito de la cuenta.
| Parámetro | Obligatorio | Descripción |
|---|---|---|
| text | ✅ | Prompt de generación de video; cuando video_type=5, active los activos de referencia con "@Imagen N"/"@Video N"/"@Audio N" |
| model | ✅ | Nombre del modelo, del id devuelto por list_video_models |
| video_type | ✅ | Código del modo de generación (1-5, ver abajo) — solo son válidos los valores presentes en el allowedVideoTypes de ese modelo |
| image_urls | ❌ | URLs de activos de imagen; el significado depende de video_type |
| video_urls | ❌ | URLs de activos de video, solo para video_type=5 |
| audio_urls | ❌ | URLs de activos de audio, solo para video_type=5 |
| resolution / ratio | ❌ | Resolución / relación de aspecto, de list_video_models |
| duration | ❌ | Duración del video en segundos, debe estar dentro de videoDurationMin/Max |
| callback_url | ❌ | Webhook llamado al completarse; omítalo para sondear en su lugar |
Significado de video_type:
| Valor | Modo | Requisito de activo |
|---|---|---|
| 1 | Texto a video | No se necesita ningún activo |
| 2 | Imagen a video (primer cuadro) | image_urls proporciona un único cuadro inicial |
| 3 | Imagen a video (primer/último cuadro) | image_urls proporciona [primer cuadro, último cuadro] en ese orden |
| 4 | Imagen a video (referencia) | image_urls proporciona una o más imágenes de referencia de estilo/contenido |
| 5 | Todas las referencias | Mezcla de image_urls/video_urls/audio_urls, referenciados por posición en text |
14. get_video_generation — Sondear una tarea de video
| Parámetro | Obligatorio | Descripción |
|---|---|---|
| task_id | ✅ | El taskId devuelto por create_video_generation |
Referencia del campo de tramos de precio
Las salidas de estas 4 herramientas de consulta de modelos — list_models, get_model, list_image_models, list_video_models — devuelven el precio de facturación efectivo del llamador (usuario del API Key), que coincide exactamente con el cargo real, e incluyen todos los tramos de precio del modelo.
Diferencia de nomenclatura: list_models / get_model siguen snake_case de OpenAI (price_tiers); list_image_models / list_video_models siguen camelCase (priceTiers). La estructura es la misma.
price_tiers / priceTiers es un array; cada elemento es un tramo de precio:
| Campo | Tipo | Descripción |
|---|---|---|
region | string | Región de capas V2 de modelos de texto, ej. GLOBAL / NON_GLOBAL / us-central1. Null para modelos de imagen/vídeo |
bandMin | long | Límite inferior del rango de input token del modelo de texto (inclusivo); null = ilimitado |
bandMax | long | Límite superior del rango de input token del modelo de texto (inclusivo); null = ilimitado |
resolution | string | Resolución de imagen/vídeo, ej. 1080p / 4K. Null para modelos de texto |
clarity | string | Nivel de claridad |
unit | string | Unidad de facturación: token (texto) / image (imagen) / video (vídeo) |
quantity | integer | Cantidad de unidades (ej. por 1000 tokens, por 1 imagen) |
description | string | Descripción del precio |
inputPrice | decimal | Precio unitario de entrada efectivo del llamador |
outputPrice | decimal | Precio unitario de salida efectivo del llamador |
cachePrice | decimal | Precio de caché (modelos generales, fórmula de facturación antigua) |
cacheReadPrice | decimal | Precio unitario de lectura de caché (solo Bedrock Claude) |
cacheWritePrice | decimal | Precio unitario de escritura de caché (solo Bedrock Claude) |
ratio | decimal | Multiplicador de facturación. 1 en modo FIXED; multiplicador de usuario/grupo en modo RATIO |
mode | string | Modo de precio: RATIO / FIXED |
planId | string | id del plan de precio coincidido; puede ser null |
Los tres tipos de modelo comparten la misma estructura; solo difieren los campos de descripción, y los campos no aplicables son null:
| Tipo de modelo | unit | Campos de descripción efectivos |
|---|---|---|
| Texto | token | region / bandMin / bandMax |
| Imagen | image | resolution / clarity |
| Vídeo | video | resolution / clarity |
Significado del precio: los inputPrice / outputPrice / cacheReadPrice / cacheWritePrice devueltos, etc., son los precios unitarios finales de facturación para el usuario actual del API Key, resueltos a través de la cadena de precio (chain) → guidance → precio base, y coinciden con el cargo real. El precio unitario que ve el llamador varía según su cadena de precio (reseller / distributor / empresa / configuración de nivel de usuario).
Cargo real = uso ÷ quantity × precio unitario × ratio. Para facturación de vídeo por segundo: cargo real = duration × outputPrice × ratio.
Casos extremos y manejo de errores (un endpoint de solo lectura nunca devuelve 500 por configuración de precio):
| Escenario | Comportamiento |
|---|---|
| Un tramo falla al resolver (política de precio niega acceso, configuración faltante) | Omitir el tramo, registrar log warn, continuar resolviendo los demás |
| Todos los tramos de un modelo fallan al resolver | Array vacío []; el modelo se devuelve normalmente |
| El modelo no tiene configuración de precio | Array vacío [] |
| La resolución de precio lanza una excepción no capturada | Capturada globalmente, devuelve array vacío; el endpoint sigue en 200 |
Ejemplo de respuesta (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
}
]
}
]
}Ejemplo de respuesta (list_image_models, modelo de imagen; priceTiers misma estructura, unit es 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 imagen",
"inputPrice": 0,
"outputPrice": 0.04,
"cachePrice": 0,
"cacheReadPrice": 0,
"cacheWritePrice": 0,
"ratio": 1,
"mode": "RATIO",
"planId": null
}
]
}
]
}Ejemplos
Ejemplo 1: una solicitud de chat simple
Pregunte: "Usa BasicRouter para llamar a claude-sonnet-5 y pregunta qué es el GIL de Python"
La IA llamará a chat_completion con:
{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "What is Python's GIL?"}]
}Ejemplo 2: uso de herramientas mediante el endpoint de Anthropic Messages
Pregunte: "Usa el endpoint Messages de BasicRouter y deja que el modelo decida si consultar el clima"
La IA llamará a create_message, pasando una definición de tools y tool_choice; la respuesta incluirá un bloque de contenido tool_use.
Ejemplo 3: listar los modelos disponibles
Pregunte: "Lista los modelos en mi cuenta de BasicRouter"
La IA llamará a list_models, devolviendo IDs, proveedores, modalidades, precios y más para cada modelo disponible.
Ejemplo 4: consultar saldo y uso
Pregunte: "Consulta mi uso de BasicRouter de este mes"
La IA llamará a get_balance para el saldo, y luego a list_usage (con start_time acotado a este mes) para el desglose de uso.
Ejemplo 5: generar una imagen
Pregunte: "Usa BasicRouter para generar una imagen de una ciudad cyberpunk de noche"
La IA primero llamará a list_image_models para consultar las especificaciones, luego a create_image_generation para obtener un taskId, y después sondeará get_image_generation para obtener la URL de la imagen.
Ejemplo 6: texto a video
Pregunte: "Usa BasicRouter para generar un video de 5 segundos de una nebulosa espacial"
La IA primero llamará a list_video_models para consultar las especificaciones, luego a create_video_generation (video_type=1, duration=5), y tras obtener un taskId, sondeará get_video_generation.
Preguntas frecuentes
La llamada a la herramienta falla con "missing BasicRouter API Key"
- Ejecutó
claude mcp addsin--header, o la clave es incorrecta - Si edita la configuración JSON directamente, el nombre del campo
headerses incorrecto (debería serX-Basicrouter-Api-Key) - Ejecución local sin la variable de entorno
BASICROUTER_API_KEYconfigurada
La llamada a la herramienta falla con "BasicRouter returned 401 unauthorized"
La propia clave API es incorrecta o expiró — regenérela en la consola de BasicRouter.
Claude no está llamando a las herramientas de BasicRouter — ¿qué hacer?
- Confirme que la conexión muestre ✓ Connected mediante
claude mcp list - Verifique el estado de la conexión:
claude mcp get basicrouter - Intente ser explícito: "Usa la herramienta
chat_completionde BasicRouter para llamar aclaude-sonnet-5…"
La generación de imagen/video se queda pendiente para siempre
- Sondee las tareas de imagen con
get_image_generationy las de video conget_video_generation— tenga en cuenta que el estado de una tarea de video en curso es "running", no "pending" - La generación toma tiempo, generalmente de unos segundos a decenas de segundos, más para video
- Si pasó un
callback_url, la tarea llamará de vuelta al completarse — no es necesario sondear
Errores en list_image_models / list_video_models
Ninguna de las dos herramientas consume crédito por sí misma — un error suele indicar un problema de clave o de red. Primero confirme que list_models funciona normalmente.
Notas
- Nombre del encabezado:MCP envía la clave mediante
X-Basicrouter-Api-Key. - Consumo de crédito:
chat_completion/create_message/create_response/create_image_generation/create_video_generationconsumen todos crédito de la cuenta — consulteget_balanceprimero si desea conocer el saldo con anticipación. - Consulte las especificaciones antes de generar:Los parámetros de generación de imagen/video como model, resolution, ratio, count, duration y video_type solo deben usar los valores publicados por
list_image_models/list_video_models, de lo contrario la llamada fallará con un error. - Sin streaming:Ninguno de los tres endpoints de chat admite streaming — cada uno devuelve el resultado completo de una sola vez.
- Diseño sin estado:Cada solicitud es independiente y no se almacena ninguna sesión; para conversaciones de varios turnos use
previous_response_iddecreate_responseo mantenga el historial usted mismo enmessages.
