Para agentes de IA y clientes MCP
Nano Banana MCP Server para Claude, Cursor y Gemini CLI
Genera imágenes y videos con IA directamente desde Claude Desktop, Claude Code y cualquier otro cliente MCP, con cobro por generación desde tu saldo de BananaBanana. Sin suscripción.
Un único endpoint, todos los modelos
Un servidor remoto de Model Context Protocol que expone toda la infraestructura de generación de BananaBanana como herramientas para agentes: imágenes de Google Nano Banana 2 Lite / 2 / 2.1 / Pro (desde $0.03), videos de Veo 3.1 / Fast / Lite y Gemini Omni Flash, Wan 3.0 con sonido ($0.09–1.00). Tu agente ve los precios en tiempo real, confirma los costos antes de ejecuciones costosas y cada generación se registra en el mismo historial y saldo del sitio web.
- Endpoint:
https://bananabanana.pro/api/mcp(HTTP compatible con streaming) - Autenticación: inicia sesión con OAuth 2.1 (claude.ai y otros clientes con conectores) o una clave API Bearer de tu perfil
- Límite de velocidad: 20 llamadas a herramientas por minuto por clave; límite de gasto diario opcional por clave
- ¿No tienes un cliente MCP? El mismo endpoint es JSON-RPC puro sobre HTTPS: llámalo desde curl, Python o TypeScript sin necesidad de ningún SDK
- Las generaciones fallidas o filtradas se reembolsan automáticamente
- Consulta la documentación,
server.jsony copia ejemplos de clientes listos para usar en el repositorio de GitHub bananabanana-mcp
Conectado en tres pasos
1. Crea una cuenta y recarga el saldo. 2. En Perfil → Claves API de MCP crea una clave (se muestra solo una vez). 3. Añade el servidor a tu cliente:
claude.ai, Claude Desktop, móvil (OAuth: nada que copiar)
Settings → Connectors → Add custom connector, pega https://bananabanana.pro/api/mcp y pulsa Connect. Claude se registra solo, tú apruebas el acceso en una pantalla de BananaBanana y las generaciones se cobran a la cuenta con la que iniciaste sesión.
Settings → Connectors → Add custom connector
URL: https://bananabanana.pro/api/mcp
→ Add → Connect → approve access on bananabanana.proEl mismo flujo funciona en cualquier cliente que implemente la autorización MCP: MCP Inspector, conectores web de ChatGPT y Grok, Claude Code. Las apps conectadas aparecen en tu perfil y puedes desconectarlas cuando quieras.
Claude Code
# with an API key
claude mcp add --transport http bananabanana https://bananabanana.pro/api/mcp \
--header "Authorization: Bearer bb_live_YOUR_KEY"
# or with OAuth — no key, sign in in the browser
claude mcp add --transport http bananabanana https://bananabanana.pro/api/mcp
# then run /mcp inside Claude Code and pick "Authenticate"Claude Desktop
Añádelo a claude_desktop_config.json (Settings → Developer → Edit Config); requiere Node.js para el puente mcp-remote:
{
"mcpServers": {
"bananabanana": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://bananabanana.pro/api/mcp",
"--header", "Authorization: Bearer bb_live_YOUR_KEY"
]
}
}
}Cursor
Añádelo a ~/.cursor/mcp.json (global) o .cursor/mcp.json en el proyecto; para evitar guardar la clave en el archivo, usa ${env:BB_API_KEY} en lugar de escribir el valor literal:
{
"mcpServers": {
"bananabanana": {
"url": "https://bananabanana.pro/api/mcp",
"headers": {
"Authorization": "Bearer bb_live_YOUR_KEY"
}
}
}
}Guía completa para Cursor, incluyendo peculiaridades y una demostración con clave en vivo: Generar imágenes en Cursor.
VS Code / GitHub Copilot
Añádelo a .vscode/mcp.json en el espacio de trabajo (o en tu settings.json de usuario); VS Code te solicitará la clave una vez y la guardará encriptada:
{
"servers": {
"bananabanana": {
"type": "http",
"url": "https://bananabanana.pro/api/mcp",
"headers": {
"Authorization": "Bearer ${input:bb-api-key}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "bb-api-key",
"description": "BananaBanana API key (bb_live_…)",
"password": true
}
]
}Guía completa para VS Code / Copilot, incluyendo peculiaridades y una demostración con clave en vivo: Generar imágenes en VS Code: Guía de configuración de Copilot MCP.
Windsurf
Añádelo a ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"bananabanana": {
"serverUrl": "https://bananabanana.pro/api/mcp",
"headers": {
"Authorization": "Bearer bb_live_YOUR_KEY"
}
}
}
}Windsurf MCP Setup: Generate Images in Cascade
Cline
{
"mcpServers": {
"bananabanana": {
"type": "streamableHttp",
"url": "https://bananabanana.pro/api/mcp",
"headers": {
"Authorization": "Bearer bb_live_YOUR_KEY"
},
"disabled": false,
"autoApprove": ["list_models", "get_account", "get_result"]
}
}
}Cline MCP Server: Generate Images From Your Editor
Cualquier otro cliente MCP (JSON-RPC puro)
POST https://bananabanana.pro/api/mcp
Authorization: Bearer bb_live_YOUR_KEY
Content-Type: application/json
Accept: application/json, text/event-stream
{"jsonrpc":"2.0","id":1,"method":"tools/list"}Todos los métodos salvo ping y las listas de discovery (tools/list, prompts/list, resources/list) exigen credenciales, incluido initialize: un handshake sin autenticar responde 401 con un desafío WWW-Authenticate. La asimetría es deliberada, no un fallo: ese desafío es lo que permite a un cliente conector descubrir que este servidor usa OAuth. Leer el catálogo de herramientas sin clave sigue funcionando.
¿Prefieres un tutorial? El tutorial Generar imágenes en Claude Code cubre la configuración de Claude de extremo a extremo, con cuatro casos de uso reales и sus costos reales.
Compatibilidad de clientes
MCP es un protocolo abierto: cualquier cliente que admita HTTP compatible con streaming y pueda adjuntar un encabezado Authorization se conecta. Estado actual, verificado con la documentación oficial de cada proveedor (última revisión en agosto de 2026):
| Cliente | ¿Funciona hoy? | Cómo |
|---|---|---|
| Claude Code | sí | claude mcp add --transport http … --header |
| Claude Desktop / claude.ai | sí | conector personalizado: pega la URL e inicia sesión con OAuth (también funciona una clave en cabecera, en beta) |
| Cursor | sí | .cursor/mcp.json: url + headers, secretos mediante ${env:…}; consulta el fragmento de arriba |
| VS Code / GitHub Copilot | sí | .vscode/mcp.json: type: "http" + url + headers; guarda la clave como una entrada de promptString: VS Code la solicitará una vez y la mantendrá encriptada |
| ChatGPT desktop / Codex CLI / IDE | sí | ~/.codex/config.toml compartido: url + bearer_token_env_var (la clave en la variable de entorno). Los conectores web de ChatGPT inician sesión con OAuth en vez de pegar una clave |
| Gemini CLI | sí | httpUrl + headers en settings.json |
| Windsurf | sí | serverUrl + headers in mcp_config.json (Devin Local agent: url + transport: "http"). Setup guide |
| Cline | sí | type: "streamableHttp" + url + headers in the MCP settings JSON. Setup guide |
| xAI API (Grok) | sí | herramienta MCP con server_url and un valor de authorization enviado al servidor Setup guide |
| grok.com (web) | parcialmente | los conectores personalizados aceptan una URL de servidor (Connectors → New Connector → Custom); el inicio de sesión usa nuestro flujo OAuth 2.1 |
| ZCode (GLM-5.2) | sí | Settings → MCP Servers → tipo HTTP + encabezado Authorization; GLM-5.2 dentro de Claude Code hereda la configuración de Claude Code |
| Cualquier otra cosa | sí | JSON-RPC puro sobre HTTPS: consulta Llámalo desde el código abajo |
Ejemplo de Codex: añádelo a ~/.codex/config.toml y exporta BB_API_KEY=bb_live_…:
[mcp_servers.bananabanana]
url = "https://bananabanana.pro/api/mcp"
bearer_token_env_var = "BB_API_KEY"Guía detallada de Codex: CLI, extensión de IDE y ChatGPT Desktop desde una sola configuración, con peculiaridades y una demostración con clave en vivo: Configuración de Codex MCP: imágenes y videos desde un solo config.toml.
Llámalo desde tu código
¿No usas un cliente MCP? No lo necesitas, y tampoco te hace falta un SDK. El servidor es JSON-RPC 2.0 puro sobre HTTPS: un único endpoint POST, un encabezado Bearer y una sola respuesta JSON. Al no tener estado, no hay un protocolo de enlace de sesión que gestionar: tools/call funciona como la primera solicitud desde curl, Python, TypeScript o cualquier otra herramienta que pueda enviar peticiones HTTP.
curl
# start an image generation (charges one image, $0.03 on the default Lite model)
curl -s https://bananabanana.pro/api/mcp \
-H "Authorization: Bearer bb_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{
"name":"generate_image",
"arguments":{"prompt":"studio photo of a ceramic mug on linen, soft daylight"}}}'
# → result.structuredContent.job_id = "cmxy…"
# fetch the result (long-polls server-side up to 30 s; free)
curl -s https://bananabanana.pro/api/mcp \
-H "Authorization: Bearer bb_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
"name":"get_result",
"arguments":{"job_id":"cmxy…","wait_seconds":30}}}'Python
Solo requests, sin librería MCP:
import requests
MCP = "https://bananabanana.pro/api/mcp"
HEADERS = {"Authorization": "Bearer bb_live_YOUR_KEY"}
def call(tool, **args):
r = requests.post(MCP, headers=HEADERS, json={
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {"name": tool, "arguments": args},
})
r.raise_for_status()
return r.json()["result"]["structuredContent"]
job = call("generate_image", prompt="watercolor painting of a lighthouse at dawn")
result = call("get_result", job_id=job["job_id"], wait_seconds=30)
while result["status"] == "processing":
result = call("get_result", job_id=job["job_id"], wait_seconds=30)
print(result["files"][0]["url"], "cost:", result["cost_charged_usd"])TypeScript / Node.js
Cero dependencias: fetch nativo (Node 18+, Deno, Bun, navegadores):
const MCP = "https://bananabanana.pro/api/mcp";
async function call(tool: string, args: Record<string, unknown>) {
const res = await fetch(MCP, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BB_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0", id: 1, method: "tools/call",
params: { name: tool, arguments: args },
}),
});
const { result } = await res.json();
return result.structuredContent;
}
const job = await call("generate_image", {
prompt: "isometric 3D render of a tiny greenhouse at golden hour",
});
let out = await call("get_result", { job_id: job.job_id, wait_seconds: 30 });
while (out.status === "processing") {
out = await call("get_result", { job_id: job.job_id, wait_seconds: 30 });
}
console.log(out.files[0].url, "cost:", out.cost_charged_usd);Detalles importantes al escribir tus scripts:
- Cada respuesta de la herramienta incluye el mismo JSON dos veces:
result.structuredContentlegible por máquina y un bloque de texto enresult.content; procesa el que te resulte más fácil. - Los videos (y los lotes de varias imágenes) requieren una llamada en dos pasos: el primer
generate_videodevuelve una cotización y no realiza cargos; repite la llamada conconfirm_costconfigurado con el monto cotizado para comenzar. - Pasa una
idempotency_keyen las llamadas de generación: los reintentos de red nunca generarán cargos duplicados. tools/listfunciona sin clave, lo que te permite explorar los esquemas completos antes de crear una cuenta. Las llamadas a herramientas están limitadas a 20 por minuto por clave.
Diez herramientas orientadas a tareas
| Herramienta | Costo | Qué hace |
|---|---|---|
| list_models | gratis | Todos los modelos con precios por unidad en vivo, resoluciones y restricciones. |
| get_account | gratis | Saldo, límite de gasto de la clave y uso del día de hoy. |
| top_up | gratis | Crea un enlace seguro para recargar saldo. OAuth obtiene acceso solo para depósitos; las claves API usan el perfil. |
| generate_image | $0.03–$0.20 | Texto a imagen en Nano Banana 2 Lite / 2 / 2.1 / Pro, hasta 4K. Devuelve un job_id. |
| edit_image | precio de una imagen | Perfecciona una imagen terminada mediante instrucciones de texto (edición multiturno). |
| generate_video | $0.10–$6.00 | Familia Veo 3.1 u Omni Flash (siempre con sonido), Wan 3.0, opcionalmente a partir de un fotograma inicial e imágenes de referencia. Siempre proporciona una cotización con el costo exacto primero. |
| edit_video | $0.09–1.00 | Edición vídeo a vídeo con Omni Flash: tu propio clip o una URL pública — cambia el estilo, sustituye objetos, reilumina. Primeros 10 s, 720p con sonido. |
| generate_speech | $0.01 / 200 caracteres | Genera voz WAV de uno o dos hablantes. Se cobra por cada bloque iniciado de 200 caracteres. |
| get_result | gratis | Consulta el estado de una tarea: URL de archivos multimedia alojados (enlaces válidos por 24 horas), costo cobrado, saldo restante y vista previa de imagen integrada. |
| list_generations | gratis | Historial de generaciones recientes, compartido con el sitio web. |
¿Cuánto cuesta generar a través de MCP en 2026?
- Los precios son proporcionados en tiempo real por
list_models, la misma fuente que utiliza el sitio web. - Cada llamada de video (y de lotes de varias imágenes) devuelve primero una cotización y no realiza cargos; el agente repite la llamada con
confirm_costpara comenzar. - Cada resultado incluye
cost_charged_usdybalance_remaining_usd. - Los fallos del proveedor y los rechazos por filtros de contenido se reembolsan automáticamente, aplicando la misma política que la aplicación web.
- La clave
idempotency_keyopcional garantiza que los reintentos nunca generen cobros duplicados.
Una conversación real
→ generate_video {"prompt": "drone shot over a misty pine forest", "model": "veo-3.1-fast"}
← {"status": "confirmation_required", "quoted_cost_usd": 0.70, ...}
→ generate_video {..., "confirm_cost": 0.70}
← {"job_id": "cmxy…", "status": "processing", "cost_charged_usd": 0.70, "balance_remaining_usd": 12.40}
→ get_result {"job_id": "cmxy…"}
← {"status": "completed", "files": [{"url": "https://…"}], "cost_charged_usd": 0.70}→ generate_speech {"text": "Hi, I'm Mia — today we test three budget tripods.", "voice": "Kore"}
← {"job_id": "cmsp…", "status": "completed", "url": "https://…/voice.wav"}
→ generate_video {"model": "wan-3.0", "duration": 6, "resolution": "720p", "aspect_ratio": "9:16",
"reference_images": ["cmimg…"], "reference_audios": ["cmsp…"],
"prompt": "The presenter from Image 1 looks into the camera and says: "First up — the lightest one.""}
← {"status": "confirmation_required", "quoted_cost_usd": 0.60, "input_audio_seconds": 3.4,
"voice_reference_note": "Voice samples are not billed. The character will speak with the timbre of Audio 1; …"}
→ generate_video {..., "confirm_cost": 0.60}
← {"job_id": "cmxy…", "status": "processing"} // repeat with new lines — same voice, same faceURL de archivos multimedia y seguridad
- Las URL de los resultados están firmadas и son válidas por 24 horas; el archivo multimedia permanece en tu cuenta (vuelve a llamar a
get_resultpara obtener enlaces nuevos o descárgalo desde el sitio web). - Las claves API se almacenan de forma encriptada (con hash) y solo se muestran una vez al crearlas; puedes revocarlas en cualquier momento desde tu perfil.
- Las conexiones OAuth usan tokens de acceso de una hora con refresh rotativo, guardados como hash y válidos solo para este servidor; desconectar una app en tu perfil invalida sus tokens al instante.
- El registro de uso por clave (herramienta, modelo, costo, vista previa de la instrucción) es visible en Perfil → Claves API de MCP.
- Las generaciones de MCP aparecen en el mismo historial de generación y analíticas que las generaciones web.
x402: pago por llamada en USDC, sin cuenta
x402 es un protocolo abierto que permite a un agente pagar una sola solicitud con una stablecoin. Es un endpoint distinto del servidor MCP: POST /api/x402. No hace falta cuenta, clave de API ni recarga.
- Envía el nombre de la herramienta y sus argumentos. El servidor responde
402con el precio exacto de esa llamada. - Firma el pago en USDC en la red Base y repite la solicitud con la cabecera
X-PAYMENT. - Las imágenes y la voz llegan en la misma respuesta. El vídeo devuelve un
job_id; consulta gratisGET /api/x402/result/{jobId}.
Herramientas disponibles: generate_image, generate_speech, generate_video. Los precios son los mismos que en el estudio web y por MCP; la llamada cuesta lo que cuesta la generación, sin recarga mínima.
Si un vídeo pagado falla, el pagador recibe un token de crédito por el mismo importe, válido durante 90 días. Pásalo como refund_token en una llamada posterior. Los pagos no se reembolsan on-chain. El catálogo legible por máquinas con los precios actuales está en GET /api/x402.
Preguntas sobre el servidor MCP de Nano Banana
¿Qué es el servidor MCP de Nano Banana?
Es un servidor MCP remoto que pone los modelos de imagen Nano Banana, junto con modelos de vídeo y voz, a disposición de tu agente de IA como herramientas. El agente llama a generate_image, el servidor hace la generación y devuelve un enlace al archivo terminado. Lo aloja BananaBanana en https://bananabanana.pro/api/mcp, así que no hay nada que instalar ni ejecutar en local, y cada generación se cobra de tu saldo de BananaBanana a los mismos precios que en el estudio web.
¿Cómo lo añado a Gemini CLI?
Gemini CLI se conecta a servidores MCP remotos por HTTP, así que toda la configuración de Gemini CLI MCP cabe en un comando: gemini mcp add --transport http --scope user bananabanana https://bananabanana.pro/api/mcp -H "Authorization: Bearer YOUR_KEY". Cuando la CLI te pregunte si confías en la carpeta, acepta; después ejecuta gemini mcp list y comprueba que el servidor aparece como Connected. Con --scope user la clave se guarda en ~/.gemini/settings.json y no en el .gemini/settings.json del proyecto, así que nunca acaba en el repositorio.
¿Cómo lo conecto a Claude Desktop, Claude Code o Cursor?
En claude.ai y Claude Desktop, abre Settings → Connectors → Add custom connector, pega https://bananabanana.pro/api/mcp e inicia sesión con OAuth: no hay ninguna clave que copiar. En Claude Code, ejecuta claude mcp add --transport http bananabanana https://bananabanana.pro/api/mcp, luego escribe /mcp y elige Authenticate, o pasa una clave de API con --header. En Cursor, añade la URL y una cabecera Authorization a .cursor/mcp.json. Tienes configuraciones listas para pegar para estos y otros clientes en el inicio rápido de arriba.
¿Cuánto cuesta una llamada?
Pagas por generación, no por la conexión: las imágenes cuestan $0.03–$0.20, el vídeo $0.10–$6.00 según modelo, duración, resolución y sonido, y la voz $0.01 por cada 200 caracteres empezados. Las herramientas auxiliares como list_models, get_result y get_account son gratis. Las llamadas de vídeo y de varias imágenes devuelven primero un presupuesto exacto y no cobran nada hasta que el agente lo confirma, y las generaciones fallidas o filtradas se reembolsan al saldo automáticamente.
¿Necesito una cuenta de Google o una suscripción?
No. No necesitas cuenta de Google ni clave de ningún proveedor de modelos, solo una cuenta de BananaBanana (basta con un correo electrónico) con saldo prepago. No hay suscripción y el saldo no caduca. Los clientes con clave usan una clave de API de BananaBanana de tu perfil; los clientes tipo conector inician sesión con OAuth. Los agentes que pagan con x402 pueden prescindir incluso de la cuenta: cada llamada se paga en USDC en Base.
¿Qué modelos puede usar mi agente?
Imágenes: Nano Banana 2 Lite (el predeterminado), Nano Banana 2 y Nano Banana Pro hasta 4K, además de GPT Image 2.5 y Qwen Image 3.0 Pro. Nano Banana 2.1 añade formatos panorámicos hasta 8:1. Vídeo: Veo 3.1, Veo 3.1 Fast y Veo 3.1 Lite, Gemini Omni Flash, Wan 3.0 y Grok Imagine Video 1.5. Voz: Gemini 3.1 Flash TTS con 30 voces. La herramienta list_models devuelve la lista en vivo con precios, resoluciones y límites, así que el agente siempre trabaja con el catálogo actual.
¿Es un servidor MCP de generación de imágenes que también hace vídeo?
Sí. Es un servidor MCP de generación de imágenes (generate_image, edit_image) y de vídeo en la misma conexión: generate_video crea clips a partir de texto, un fotograma inicial o imágenes de referencia, y edit_video cambia el estilo de un clip existente o lo alarga. También está generate_speech para locuciones con una o dos voces. Todo se paga desde un único saldo, y las imágenes y vídeos quedan en el mismo historial que en el estudio web.
¿Listo para conectar a tu agente?
Crea una clave, añade una línea de configuración y tu agente generará contenido multimedia de calidad de estudio en cuestión de minutos.
Obtén tu clave API