Per agenti AI e client MCP
BananaBanana MCP Server
Genera immagini e video AI direttamente da Claude Desktop, Claude Code e qualsiasi altro client MCP, con addebito a generazione sul tuo saldo BananaBanana. Senza abbonamento.
Un solo endpoint, tutti i modelli
Un server Model Context Protocol remoto che espone l'intero stack di generazione di BananaBanana come tool per agenti: immagini Google Nano Banana 2 Lite / 2 / Pro (da $0.03), video Veo 3.1 / Fast / Lite e Gemini Omni Flash, Wan 3.0 con audio ($0.09–1.00). Il tuo agente vede i prezzi aggiornati, conferma i costi prima delle generazioni costose e ogni risultato finisce nella stessa cronologia e sullo stesso saldo del sito.
- Endpoint:
https://bananabanana.pro/api/mcp(Streamable HTTP) - Autenticazione: accesso con OAuth 2.1 (claude.ai e altri client a connettore) oppure chiave API Bearer dal tuo profilo
- Limite di frequenza: 20 chiamate ai tool al minuto per chiave; tetto di spesa giornaliero per chiave facoltativo
- Niente client MCP? Lo stesso endpoint è semplice JSON-RPC su HTTPS: chiamalo da curl, Python o TypeScript senza alcun SDK
- Le generazioni fallite o bloccate dal filtro vengono rimborsate automaticamente
- Documentazione aperta,
server.jsoned esempi per i client da copiare e incollare nel repository GitHub bananabanana-mcp
Collegato in tre passaggi
1. Crea un account e ricarica il saldo. 2. In Profilo → Chiavi API MCP crea una chiave (viene mostrata una sola volta). 3. Aggiungi il server al tuo client:
claude.ai, Claude Desktop, mobile (OAuth, niente da copiare)
Settings → Connectors → Add custom connector, incolla https://bananabanana.pro/api/mcp e premi Connect. Claude si registra da solo, tu approvi l'accesso in una schermata di BananaBanana e le generazioni vengono addebitate all'account con cui hai effettuato l'accesso.
Settings → Connectors → Add custom connector
URL: https://bananabanana.pro/api/mcp
→ Add → Connect → approve access on bananabanana.proLo stesso flusso funziona in qualsiasi client che implementa l'autorizzazione MCP: MCP Inspector, i connettori web di ChatGPT e Grok, Claude Code. Le app collegate sono elencate nel tuo profilo e puoi scollegarle da lì in qualsiasi momento.
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
Aggiungi a claude_desktop_config.json (Settings → Developer → Edit Config); serve Node.js per il bridge mcp-remote:
{
"mcpServers": {
"bananabanana": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://bananabanana.pro/api/mcp",
"--header", "Authorization: Bearer bb_live_YOUR_KEY"
]
}
}
}Cursor
Aggiungi a ~/.cursor/mcp.json (globale) oppure a .cursor/mcp.json nel progetto; per non lasciare la chiave nel file, usa ${env:BB_API_KEY} al posto del valore letterale:
{
"mcpServers": {
"bananabanana": {
"url": "https://bananabanana.pro/api/mcp",
"headers": {
"Authorization": "Bearer bb_live_YOUR_KEY"
}
}
}
}Guida completa per Cursor, con le sue stranezze e una demo con chiave reale: Generare immagini in Cursor.
VS Code / GitHub Copilot
Aggiungi a .vscode/mcp.json nel workspace (o nel tuo settings.json utente); VS Code chiede la chiave una volta e la conserva cifrata:
{
"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
}
]
}Guida completa per VS Code / Copilot, con le sue stranezze e una demo con chiave reale: Generare immagini in VS Code: guida alla configurazione MCP di Copilot.
Windsurf
Aggiungi 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
Qualsiasi altro client MCP (JSON-RPC diretto)
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"}Ogni metodo tranne ping e le liste di discovery (tools/list, prompts/list, resources/list) richiede una credenziale, initialize compreso: un handshake non autenticato risponde 401 con una challenge WWW-Authenticate. L'asimmetria è voluta, non è un bug: è proprio con quella challenge che un client a connettore scopre che questo server usa OAuth. Leggere il catalogo dei tool senza chiave funziona comunque.
Preferisci una guida passo passo? Il tutorial Generare immagini in Claude Code copre la configurazione di Claude dall'inizio alla fine, con quattro casi d'uso reali e i loro costi effettivi.
Compatibilità dei client
MCP è un protocollo aperto: si collega qualsiasi client che parli Streamable HTTP e sappia allegare un header Authorization. Situazione attuale, verificata sulla documentazione ufficiale di ciascun produttore (ultimo controllo: agosto 2026):
| Client | Funziona oggi? | Come |
|---|---|---|
| Claude Code | sì | claude mcp add --transport http … --header |
| Claude Desktop / claude.ai | sì | connettore personalizzato: incolla l'URL e accedi con OAuth (funziona anche una chiave nell'header della richiesta, in beta) |
| Cursor | sì | .cursor/mcp.json: url + headers, segreti tramite ${env:…}; vedi lo snippet sopra |
| VS Code / GitHub Copilot | sì | .vscode/mcp.json: type: "http" + url + headers; salva la chiave come input promptString: VS Code la chiede una volta e la conserva cifrata |
| ChatGPT desktop / Codex CLI / IDE | sì | ~/.codex/config.toml condiviso: url + bearer_token_env_var (metti la chiave nella variabile d'ambiente). I connettori web di ChatGPT accedono invece con OAuth, senza incollare una chiave |
| Gemini CLI | sì | url + type: "http" + headers in settings.json (funziona anche httpUrl). Guida alla configurazione |
| 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ì | tool MCP con server_url e un valore authorization inviato al server Setup guide |
| grok.com (web) | in parte | i connettori personalizzati accettano l'URL di un server (Connectors → New Connector → Custom); l'accesso passa dal nostro flusso OAuth 2.1 |
| ZCode (GLM-5.2) | sì | Settings → MCP Servers → tipo HTTP + header Authorization; GLM-5.2 dentro Claude Code eredita la configurazione di Claude Code |
| Tutto il resto | sì | JSON-RPC diretto su HTTPS: vedi Chiamalo dal codice più sotto |
Esempio per Codex: aggiungi a ~/.codex/config.toml ed esporta BB_API_KEY=bb_live_…:
[mcp_servers.bananabanana]
url = "https://bananabanana.pro/api/mcp"
bearer_token_env_var = "BB_API_KEY"Guida completa per Codex (CLI, estensione IDE e ChatGPT desktop da un'unica configurazione), con le sue stranezze e una demo con chiave reale: Configurare Codex MCP: immagini e video da un solo config.toml.
Chiamalo dal codice
Non usi un client MCP? Non ti serve, e non ti serve nemmeno un SDK. Il server è semplice JSON-RPC 2.0 su HTTPS: un endpoint POST, un header Bearer, una sola risposta JSON. È stateless, quindi non c'è nessun handshake di sessione da gestire: tools/call funziona già come prima richiesta da curl, Python, TypeScript o qualsiasi altra cosa sappia inviare 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, nessuna libreria 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
Zero dipendenze, il fetch integrato (Node 18+, Deno, Bun, browser):
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);Dettagli che contano quando lo usi da script:
- Ogni risposta di un tool contiene lo stesso JSON due volte:
result.structuredContentleggibile dalle macchine e un blocco di testo inresult.content; usa quello che ti è più comodo. - Video (e lotti di più immagini) richiedono due chiamate: la prima
generate_videorestituisce un preventivo e non addebita nulla; ripetila conconfirm_costimpostato sull'importo del preventivo per avviare la generazione. - Passa un
idempotency_keynelle chiamate di generazione: i tentativi ripetuti per errori di rete non addebiteranno mai due volte. tools/listfunziona senza chiave, così puoi esplorare tutti gli schemi prima di creare un account. Le chiamate ai tool sono limitate a 20 al minuto per chiave.
Dieci tool, uno per ogni compito
| Tool | Costo | Cosa fa |
|---|---|---|
| list_models | gratis | Tutti i modelli con prezzi per unità aggiornati, risoluzioni e vincoli. |
| get_account | gratis | Saldo, tetto di spesa della chiave e utilizzo di oggi. |
| top_up | gratis | Crea un link sicuro per ricaricare il saldo. OAuth ha accesso solo ai depositi; le chiavi API usano il profilo. |
| generate_image | $0.03–$0.20 | Da testo a immagine con Nano Banana 2 Lite / 2 / Pro, fino a 4K. Restituisce un job_id. |
| edit_image | prezzo di un'immagine | Rifinisce un'immagine finita con un'istruzione testuale (modifica in più turni). |
| generate_video | $0.10–$6.00 | Famiglia Veo 3.1 o Omni Flash (sempre con audio), Wan 3.0, anche partendo da un fotogramma iniziale e da immagini di riferimento. Mostra sempre prima il costo esatto. |
| edit_video | $0.09–1.00 | Modifica video-to-video con Omni Flash: una tua clip o un URL pubblico; cambia stile, sostituisci oggetti, modifica la luce. Primi 10 s, 720p con audio. |
| generate_speech | $0.01 / 200 caratteri | Genera parlato WAV con una o due voci. Addebito per ogni blocco di 200 caratteri iniziato. |
| get_result | gratis | Controlla un job: URL dei file ospitati (link validi 24 h), costo addebitato, saldo residuo, anteprima dell'immagine inline. |
| list_generations | gratis | Cronologia delle generazioni recenti, condivisa con il sito. |
Quanto costa una generazione tramite MCP nel 2026?
- I prezzi arrivano in tempo reale da
list_models, la stessa fonte usata dal sito. - Ogni chiamata video (e ogni lotto di più immagini) restituisce prima un preventivo senza addebitare nulla; l'agente ripete la chiamata con
confirm_costper avviarla. - Ogni risultato include
cost_charged_usdebalance_remaining_usd. - Gli errori del provider e i rifiuti del filtro dei contenuti vengono rimborsati automaticamente, con la stessa regola dell'app web.
- Il parametro facoltativo
idempotency_keygarantisce che i tentativi ripetuti non addebitino mai due volte.
Una conversazione reale
→ 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}URL dei file e sicurezza
- Gli URL dei risultati sono firmati e validi 24 ore; i file restano nel tuo account: richiama
get_resultper avere link nuovi oppure scaricali dal sito. - Le chiavi API sono salvate come hash e mostrate una sola volta alla creazione; puoi revocarle in qualsiasi momento dal profilo.
- Le connessioni OAuth usano access token da un'ora con refresh token a rotazione, salvati come hash e validi solo per questo server; scollegando un'app dal profilo i suoi token vengono invalidati all'istante.
- Il registro d'uso per chiave (tool, modello, costo, anteprima del prompt) è visibile in Profilo → Chiavi API MCP.
- Le generazioni via MCP compaiono nella stessa cronologia e nelle stesse statistiche delle generazioni fatte sul web.
x402: paghi ogni chiamata in USDC, senza account
x402 è un protocollo aperto che permette a un agente di pagare una singola richiesta con una stablecoin. È un endpoint separato dal server MCP: POST /api/x402. Non servono account, chiave API né ricarica.
- Invia il nome del tool e i suoi argomenti. Il server risponde
402con il prezzo esatto di quella chiamata. - Firma il pagamento in USDC sulla rete Base e ripeti la richiesta con l'header
X-PAYMENT. - Immagini e parlato tornano nella stessa risposta. Il video restituisce un
job_id; controlla lo stato conGET /api/x402/result/{jobId}gratis.
Tool disponibili: generate_image, generate_speech, generate_video. I prezzi sono gli stessi dello Studio web e di MCP; una chiamata costa quanto la generazione, senza ricarica minima.
Se un video pagato fallisce, chi ha pagato riceve un token di credito dello stesso importo, valido 90 giorni. Passalo come refund_token in una chiamata successiva. I pagamenti non vengono rimborsati on-chain. Il catalogo leggibile dalle macchine con i prezzi attuali è su GET /api/x402.
Pronto a collegare il tuo agente?
Crea una chiave, aggiungi una riga di configurazione: in pochi minuti il tuo agente genera contenuti di qualità da studio.
Ottieni la tua chiave API