Generare immagini in Cursor: guida al server MCP
Collega Cursor a un server MCP remoto e genera immagini direttamente nel tuo repo: config mcp.json, segreti in variabili d'ambiente, stranezze, costi da $0.03.

Un server MCP per Cursor è una cassetta degli attrezzi esterna che l'agente dell'editor può chiamare dalla chat: aggiungi un blocco JSON a mcp.json e Cursor ottiene capacità che i suoi modelli di base non hanno, compresa la generazione di immagini. L'agente di Cursor modifica file e lancia comandi da terminale tutto il giorno, ma nessuno dei modelli dietro di lui sa produrre un file immagine. Collega un server di generazione e «fammi un hero 16:9 per questa landing page» diventa una normale istruzione in chat che finisce con un file vero nel tuo repo.
Ecco tutto il setup, se sei venuto solo per questo. Crea una chiave API nel tuo profilo BananaBanana, poi aggiungi questo a ~/.cursor/mcp.json (globale) o a .cursor/mcp.json nel progetto:
{
"mcpServers": {
"bananabanana": {
"url": "https://bananabanana.pro/api/mcp",
"headers": {
"Authorization": "Bearer ${env:BB_API_KEY}"
}
}
}
}
Esporta BB_API_KEY=bb_live_YOUR_KEY nel tuo ambiente e hai finito. Nessun processo server locale, nessun account Google Cloud, nessun abbonamento. Le immagini costano da $0.03, scalate da un saldo prepagato, i video da $0.10. Entrambe le immagini demo di questa guida sono state generate proprio con questa config, su una chiave reale, mentre scrivevo il testo; le tracce e il conto media da $0.55 sono più sotto.
Perché attaccare un generatore di immagini a Cursor?
Perché il lavoro frontend ha bisogno di immagini proprio quando hai le mani nel codice. Un hero per la landing page. Segnaposto per le schede prodotto, così la griglia non va online con i riquadri grigi. Un'immagine OG per l'articolo del blog che hai appena collegato. Niente di difficile, ma ognuna voleva dire la stessa deviazione: apri un generatore in una scheda del browser, scrivi un prompt, scarichi, rinomini, trascini in public/, torni indietro, scrivi il tag <img>. Dieci minuti di lavoro di raccordo per ogni asset, e intanto hai perso il filo del componente.
Con un server MCP è l'agente a fare tutto il giro. Scrive il prompt (di solito meglio della mia prima bozza svogliata), chiama generate_image, scarica il risultato nella cartella giusta e scrive il markup con l'alt text. Tu rivedi un diff invece di sbrigare commissioni.
L'altra metà del discorso è quello che non devi installare. I server MCP locali per generare immagini esistono e funzionano, ma significano far girare un tuo processo Node o Python e portarti la tua chiave API di Google, con quote e fatturazione sul tuo account Google. Un server remoto salta tutto questo: l'endpoint gira già dalla nostra parte, sulla stessa pipeline del generatore BananaBanana, e l'unica credenziale che ti serve è una chiave bb_live_.

Come si aggiunge un server MCP a Cursor?
Tre passaggi, circa due minuti. I dettagli della config qui sotto sono verificati sulla documentazione MCP ufficiale di Cursor all'11 luglio 2026.
Primo, registrati e apri Profilo → Chiavi API MCP. Crea una chiave. Viene mostrata una sola volta, inizia con bb_live_ e da noi è salvata come hash, quindi copiala subito. I nuovi account partono con $0.20 di saldo, abbastanza per sei immagini di prova sul modello più economico.
Secondo, scegli dove tenere la config. Cursor legge due posizioni:
~/.cursor/mcp.json— globale, il server ti segue in ogni progetto;.cursor/mcp.jsonnella root del repo — limitato al progetto, e sicuro da committare se lasci la chiave fuori dal file.
Quel «se» è esattamente ciò che risolve l'interpolazione ${env:BB_API_KEY} nello snippet sopra: Cursor sostituisce le variabili d'ambiente nei valori di mcp.json al caricamento, quindi il file non contiene alcun segreto. Secondo la documentazione, la stessa sintassi supporta anche ${workspaceFolder} e qualche altra variabile.
Terzo, riavvia o ricarica Cursor e apri Cursor Settings → MCP. Il server dovrebbe comparire con l'indicatore verde e una lista di dieci tool, da list_models a list_generations. La nostra pagina del server MCP riporta lo stesso snippet più una tabella di compatibilità per tutti gli altri client che abbiamo verificato:

Se il server non compare, salta alla sezione sulle stranezze. La causa è quasi sempre la variabile d'ambiente, non la config.
Caso d'uso: hero della landing e foto prodotto senza uscire dalla chat
Lo scenario attorno a cui è costruito questo articolo: sei uno sviluppatore frontend e stai mettendo insieme la landing page di un marchio di attrezzatura outdoor, e il design prevede un hero a tutta larghezza con un campeggio all'alba. Nella chat di Cursor lo chiedi, l'agente compone un prompt in stile fotografico e chiama il tool. Questa è la traccia reale della mia sessione, job id compreso:
→ generate_image {"prompt": "A photorealistic wide hero shot for an outdoor
gear brand landing page: a lone orange tent glowing softly on the shore of
a still alpine lake at dawn, mist over the water, sharp granite peaks
catching the first pink light, generous empty sky for headline text, low
angle, 35mm lens, no text", "model": "nano-banana-pro", "aspect_ratio": "16:9"}
← {"job_id": "cmrgox3xj000s…", "status": "processing",
"cost_charged_usd": 0.11, "balance_remaining_usd": 1554.40}
→ get_result {"job_id": "cmrgox3xj000s…"}
← {"status": "completed", "files": [{"url": "https://bananabanana.pro/api/files/…"}]}
Diciotto secondi dalla chiamata al file finito. Ecco esattamente quell'output, primo tentativo, nessuna rigenerazione:

Poi l'agente scarica il file dall'URL firmato dentro public/ e scrive il componente. I link restano validi 24 ore; dopo, una nuova chiamata a get_result li rigenera.
I segnaposto prodotto sono la stessa mossa con un brief più quadrato. Per la griglia di schede ho chiesto la foto di una borraccia come la chiederesti a un fotografo: soggetto, superficie, luce, obiettivo. Una chiamata, $0.11, venti secondi:

Entrambe le demo sono girate su Nano Banana Pro perché finiscono su questa pagina. Per i riempitivi usa e getta della griglia, sinceramente userei nano-banana-2-lite a $0.03 e passerei al modello superiore solo per le immagini che sopravvivono alla revisione del design; la nostra guida a Lite spiega dove il modello economico basta. E se ti serve la stessa mascotte in una serie di immagini, la tecnica del prompt conta più del client: vedi la guida sul campo alla coerenza del personaggio.
Dalla stessa chat funzionano anche i video. generate_video non addebita mai nulla alla prima chiamata: restituisce un preventivo, e l'agente deve ripetere la chiamata con confirm_cost accettando l'importo esatto. Una clip Veo 3.1 Lite a 720p senza audio parte da $0.10; Omni Flash con audio costa $0.03–$0.30 al secondo a seconda della risoluzione, quindi $0.30 per una ripresa di tre secondi a 720p.
Stranezze di Cursor da conoscere prima di andare online
Ogni client ha i suoi spigoli. Questi sono quelli di cui avvertirei davvero un collega, raccolti mentre testavo il setup qui sopra.

1. ${env:…} funziona solo se Cursor vede la variabile. Un export nel tuo .zshrc è visibile quando avvii Cursor da un terminale, ma un'app grafica lanciata dal Dock o da un'icona sul desktop non legge il profilo della shell, quindi la stessa config lì fallisce in silenzio. Per esperienza, su macOS è la causa numero uno di «il server non si connette». Soluzioni: imposta la variabile a livello di sistema operativo (launchctl setenv su macOS, o le variabili d'ambiente di sistema su Windows), oppure avvia Cursor una volta da terminale per verificare che il resto della config sia a posto.
2. La config di progetto è una funzione per il team, con una chiave a persona. Committa .cursor/mcp.json con il segnaposto ${env:BB_API_KEY} e ogni collega ha il server appena clona, ciascuno con la propria chiave. Questa separazione conta più di quanto sembri: le chiavi sono gratis, e ognuna ha il suo log d'uso (tool, modello, costo, anteprima del prompt) e un tetto giornaliero opzionale in USD in Profilo → Chiavi API MCP. Quando qualcuno se ne va, revochi una chiave e nessun altro se ne accorge. I piani business di Cursor possono anche distribuire i server MCP dalla dashboard del team, ma il file committato funziona con qualsiasi piano.
3. Cursor chiede conferma prima di ogni chiamata a un tool, e probabilmente conviene lasciarla attiva. Di default ogni chiamata MCP aspetta la tua approvazione, con gli argomenti visibili sotto una piccola freccia accanto al nome del tool. Nelle modalità di esecuzione automatica, i tool in allowlist partono subito. Cliccare «approva» venti volte durante un batch diventa noioso, lo so, ma per tool che spendono soldi veri a ogni chiamata terrei l'approvazione attiva e lascerei in automatico solo quelli gratuiti (list_models, get_result). I video hanno comunque una seconda cintura di sicurezza dalla nostra parte: oltre il preventivo non viene addebitato nulla senza confirm_cost.
4. Il risultato lo vedi dentro la chat. Secondo la documentazione di Cursor, le immagini restituite dai tool MCP vengono allegate alla conversazione e i modelli con visione le analizzano. Il nostro get_result include una piccola anteprima webp accanto all'URL, quindi l'agente (e tu) può giudicare un render senza aprire il browser. Significa anche che l'agente può correggersi da solo: chiedigli di controllare l'immagine e di rigenerarla se, per dire, la tenda è finita in mezzo all'area del titolo.
5. Esistono i link di installazione con un clic, ma non metterci dentro le chiavi. Cursor supporta i deeplink cursor:// che installano un server MCP da una config codificata in base64, secondo la documentazione sui link di installazione. Comodi per i server aperti; sbagliati per quelli autenticati, perché la config codificata conterrebbe la tua chiave in chiaro, e chiunque riceva il link riceve il tuo saldo. Per questo il pulsante sul nostro sito è uno snippet da copiare e incollare con un segnaposto per la variabile d'ambiente, e non un deeplink Add-to-Cursor. Incolli, esporti la variabile, fatto.
Una cosa utile da sapere lato prodotto: il tool MCP generate_image ora accetta anche immagini in input (job id, URL o data URI), quindi la generazione con riferimenti funziona anche via MCP, e generate_video accetta un primo fotogramma allo stesso modo, così per il passaggio da immagine a video non serve più nemmeno il generatore web.
Quanto sono costati i media demo di questo articolo?
Prezzi standard per generazione, gli stessi numeri che list_models comunica all'agente, nessuno sconto interno:
| Asset | Modello | Prezzo |
|---|---|---|
| Hero demo della landing, via MCP da una chiave reale | Nano Banana Pro, 1K | $0.11 |
| Segnaposto prodotto demo, via MCP | Nano Banana Pro, 1K | $0.11 |
| Copertina + 2 illustrazioni editoriali | Nano Banana Pro, 1K | $0.33 |
| Screenshot della pagina di documentazione | browser, non una generazione | $0.00 |
| Totale | $0.55 |
Questa volta ogni generazione è riuscita al primo tentativo, e non succederà sempre; metti in conto una o due rigenerazioni sulle foto prodotto e fai zoom prima di pubblicare, perché la geometria degli oggetti è ancora il punto dove i modelli fotorealistici sbagliano più spesso.
Se usi già questo server in Claude, l'unica parte nuova è la config di Cursor qui sopra: stessa chiave, stesso saldo, stessa cronologia. Se parti da zero, la guida per Claude Code copre altri quattro casi d'uso che si applicano a Cursor quasi alla lettera. Pronto a provare? Crea una chiave e chiedi a Cursor il tuo primo hero.
FAQ
Cursor supporta server MCP remoti con un header Authorization?
Sì, nativamente. Da quando Cursor ha aggiunto il trasporto Streamable HTTP, un server remoto è solo un url più un oggetto headers opzionale in mcp.json, senza bisogno di un processo bridge locale, e l'interpolazione ${env:VAR} tiene il segreto fuori dal file. È la config usata in questa guida, verificata sulla documentazione MCP ufficiale di Cursor l'11 luglio 2026. Cursor supporta anche OAuth per i server remoti; il nostro endpoint ora autentica sia con chiavi Bearer sia con OAuth 2.1.
Serve una chiave API di Google per generare immagini in Cursor?
No. I server MCP per immagini che girano in locale chiamano direttamente la Gemini API, quindi richiedono una tua chiave Google con quote e fatturazione tue. Con il server remoto la generazione gira sul pool di chiavi API gestito da BananaBanana, e la tua unica credenziale è la chiave bb_live_ del profilo. Rinunci all'accesso diretto all'API grezza di Google in cambio di prezzi per generazione senza spesa minima, un unico saldo prepagato e una chiave che revochi con un clic.
La config MCP va messa globale o per progetto?
Funzionano entrambe; cambiano ambito e condivisione. ~/.cursor/mcp.json ti segue in ogni repo, ed è adatta a un setup personale. .cursor/mcp.json nella root del progetto viaggia con il repo, quindi tutto il team ha il server dopo un clone; tieni la chiave come riferimento ${env:…} e il file è sicuro da committare. Io di default la metto a livello di progetto per tutto ciò che tocca un team, perché una config committata più chiavi per sviluppatore ti dà log d'uso e revoca per singola persona.
Cursor può generare video tramite lo stesso server?
Sì, con un passaggio di conferma del costo. Il tool generate_video restituisce sempre prima un preventivo, e l'agente deve ripetere la chiamata con confirm_cost pari all'importo esatto prima che venga addebitato qualcosa. I prezzi vanno da $0.10 per una clip Veo 3.1 Lite di 4 secondi a 720p senza audio fino a $4.40 per un render Veo 3.1 di fascia alta con audio, e Omni Flash con audio costa $0.03–$0.30 al secondo a seconda della risoluzione ($0.09–$3.00 a clip). Le clip richiedono da uno a dieci minuti, quindi l'agente interroga get_result mentre continua a lavorare sul tuo codice.
Perché il mio server non compare in Cursor dopo aver modificato mcp.json?
Tre soliti sospetti, in ordine di probabilità. La variabile d'ambiente non è visibile al processo di Cursor: le app avviate dall'interfaccia grafica non leggono il profilo della shell, quindi imposta la variabile a livello di sistema operativo o avvia Cursor da un terminale. La config non si è ricaricata: riavvia Cursor del tutto o usa il comando di aggiornamento nelle impostazioni MCP. Oppure il JSON è sottilmente non valido, con la classica virgola finale di troppo. Se il server compare ma le chiamate ai tool falliscono con 401, è sbagliata la chiave stessa oppure è stata revocata; provala con una richiesta diretta partendo dallo snippet nella pagina del server MCP.