Pour les agents IA & clients MCP
BananaBanana MCP Server
Générez des images et vidéos IA directement depuis Claude Desktop, Claude Code et tout autre client MCP — facturation par génération depuis votre solde BananaBanana. Sans abonnement.
Un seul endpoint, tous les modèles
Un serveur distant Model Context Protocol qui expose l'ensemble des capacités de génération de BananaBanana sous forme d'outils pour vos agents : images Google Nano Banana 2 Lite / 2 / Pro (dès $0.03), vidéos Veo 3.1 / Fast / Lite et Gemini Omni Flash, Wan 3.0, MiniMax H3 avec son ($0.09–1.00). Votre agent consulte les prix en temps réel, valide les coûts avant les opérations onéreuses, et chaque génération est enregistrée dans le même historique et déduite du même solde que sur le site web.
- Endpoint :
https://bananabanana.pro/api/mcp(Streamable HTTP) - Authentification : connexion via OAuth 2.1 (claude.ai et autres clients à connecteurs) ou clé API Bearer depuis votre profil
- Limite d'appels : 20 requêtes d'outils par minute par clé ; plafond de dépenses quotidien optionnel par clé
- Pas de client MCP ? Le même endpoint fonctionne en JSON-RPC classique sur HTTPS — appelez-le via curl, Python ou TypeScript sans aucun SDK
- Les générations ayant échoué ou bloquées par les filtres sont automatiquement remboursées
- Consultez la documentation, le fichier
server.jsonet copiez-collez les exemples de clients depuis le dépôt GitHub bananabanana-mcp
Connecté en trois étapes
1. Créez un compte et approvisionnez votre solde. 2. Dans Profil → MCP API Keys, créez une clé (affichée une seule fois). 3. Ajoutez le serveur à votre client :
claude.ai, Claude Desktop, mobile (OAuth — rien à copier)
Settings → Connectors → Add custom connector, collez https://bananabanana.pro/api/mcp puis cliquez sur Connect. Claude s'enregistre tout seul, vous approuvez l'accès sur un écran BananaBanana, et les générations sont débitées du compte avec lequel vous vous êtes connecté.
Settings → Connectors → Add custom connector
URL: https://bananabanana.pro/api/mcp
→ Add → Connect → approve access on bananabanana.proLe même flux fonctionne dans tout client implémentant l'autorisation MCP : MCP Inspector, connecteurs web ChatGPT et Grok, Claude Code. Les applications connectées figurent dans votre profil, où vous pouvez les déconnecter à tout moment.
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
Ajoutez au fichier claude_desktop_config.json (Settings → Developer → Edit Config) ; requiert Node.js pour le pont mcp-remote :
{
"mcpServers": {
"bananabanana": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://bananabanana.pro/api/mcp",
"--header", "Authorization: Bearer bb_live_YOUR_KEY"
]
}
}
}Cursor
Ajoutez au fichier ~/.cursor/mcp.json (global) ou .cursor/mcp.json dans le projet ; pour ne pas laisser la clé en clair dans le fichier, utilisez ${env:BB_API_KEY} au lieu de la valeur littérale :
{
"mcpServers": {
"bananabanana": {
"url": "https://bananabanana.pro/api/mcp",
"headers": {
"Authorization": "Bearer bb_live_YOUR_KEY"
}
}
}
}Guide complet pour Cursor, incluant les particularités et une démo avec clé active : Générer des images dans Cursor.
VS Code / GitHub Copilot
Ajoutez au fichier .vscode/mcp.json dans l'espace de travail (ou à votre fichier utilisateur settings.json) ; VS Code demande la clé une fois et la stocke de manière chiffrée :
{
"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
}
]
}Guide complet pour VS Code / Copilot, incluant les particularités et une démo avec clé active : Générer des images dans VS Code : Guide d'installation de Copilot MCP.
Windsurf
Ajoutez au fichier ~/.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
Tout autre client MCP (JSON-RPC brut)
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"}Toutes les méthodes sauf ping et les listes de découverte (tools/list, prompts/list, resources/list) exigent des identifiants, initialize compris : une poignée de main non authentifiée répond 401 avec un défi WWW-Authenticate. Cette asymétrie est délibérée, pas un bug : c'est par ce défi qu'un client connecteur découvre que ce serveur utilise OAuth. Lire le catalogue d'outils sans clé fonctionne toujours.
Vous préférez un guide pas à pas ? Le tutoriel Générer des images dans Claude Code couvre la configuration de Claude de bout en bout, with quatre cas d'usage réels et leurs coûts réels.
Compatibilité des clients
Le protocole MCP est ouvert : tout client compatible Streamable HTTP capable de transmettre un en-tête Authorization peut s'y connecter. État actuel, vérifié par rapport aux documentations officielles de chaque éditeur (dernière vérification en août 2026) :
| Client | Fonctionne aujourd'hui ? | Méthode |
|---|---|---|
| Claude Code | oui | claude mcp add --transport http … --header |
| Claude Desktop / claude.ai | oui | connecteur personnalisé : collez l'URL et connectez-vous via OAuth (une clé en en-tête fonctionne aussi, en bêta) |
| Cursor | oui | .cursor/mcp.json : url + headers, secrets via ${env:…} — voir l'extrait ci-dessus |
| VS Code / GitHub Copilot | oui | .vscode/mcp.json : type: "http" + url + headers ; stockez la clé comme une entrée promptString — VS Code la demande une fois et la conserve chiffrée |
| ChatGPT desktop / Codex CLI / IDE | oui | ~/.codex/config.toml partagé : url + bearer_token_env_var (la clé dans la variable d'environnement). Les connecteurs ChatGPT web se connectent via OAuth plutôt qu'avec une clé collée |
| Gemini CLI | oui | httpUrl + headers dans settings.json |
| Windsurf | oui | serverUrl + headers in mcp_config.json (Devin Local agent: url + transport: "http"). Setup guide |
| Cline | oui | type: "streamableHttp" + url + headers in the MCP settings JSON. Setup guide |
| xAI API (Grok) | oui | outil MCP avec server_url et une valeur authorization envoyée au serveur Setup guide |
| grok.com (web) | partiellement | les connecteurs personnalisés acceptent une URL de serveur (Connectors → New Connector → Custom) ; la connexion passe par notre flux OAuth 2.1 |
| ZCode (GLM-5.2) | oui | Settings → MCP Servers → type HTTP + en-tête Authorization ; GLM-5.2 au sein de Claude Code hérite de la configuration de Claude Code |
| Tout autre client | oui | JSON-RPC brut sur HTTPS — voir Appeler depuis votre code ci-dessous |
Exemple pour Codex — ajoutez au fichier ~/.codex/config.toml et exportez BB_API_KEY=bb_live_… :
[mcp_servers.bananabanana]
url = "https://bananabanana.pro/api/mcp"
bearer_token_env_var = "BB_API_KEY"Guide complet pour Codex — CLI, extension d'IDE et ChatGPT desktop depuis une seule configuration, avec particularités et démo avec clé active : Configuration MCP de Codex : Images et vidéos depuis un seul config.toml.
Appeler depuis votre code
Vous n'utilisez pas de client MCP ? Aucun problème, vous n'avez pas non plus besoin de SDK. Le serveur fonctionne en simple JSON-RPC 2.0 sur HTTPS : un seul endpoint POST, un en-tête Bearer et une réponse JSON unique. Il est sans état (stateless), il n'y a donc pas de négociation de session à gérer — tools/call fonctionne dès la toute première requête depuis curl, Python, TypeScript ou n'importe quel outil capable d'envoyer du 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
Uniquement requests — pas de bibliothèque 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
Zéro dépendance — fetch natif (Node 18+, Deno, Bun, navigateurs) :
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);Quelques détails utiles pour vos scripts :
- Chaque réponse d'outil contient deux fois le même JSON :
result.structuredContentpour une lecture par machine, et un bloc de texte dansresult.content— analysez celui qui vous arrange. - La génération de vidéos (et les lots multi-images) s'effectue en deux étapes : le premier appel
generate_videorenvoie un devis sans rien débiter ; répétez l'appel avec le paramètreconfirm_costréglé sur le montant indiqué pour lancer la tâche. - Transmettez une clé d'idempotence
idempotency_keylors des appels de génération — les tentatives réseau ne seront jamais facturées deux fois. tools/listfonctionne sans clé, vous permettant d'explorer la structure complète des schémas avant de créer un compte. Les appels d'outils sont limités à 20 par minute et par clé.
Dix outils orientés tâches
| Outil | Coût | Description |
|---|---|---|
| list_models | gratuit | Tous les modèles avec leurs prix unitaires en temps réel, résolutions et contraintes. |
| get_account | gratuit | Solde, plafond de dépenses de la clé et utilisation du jour. |
| top_up | gratuit | Crée un lien sécurisé pour recharger le solde. OAuth reçoit un accès limité au dépôt ; les clés API utilisent le profil. |
| generate_image | $0.03–$0.20 | Génération texte-vers-image sur Nano Banana 2 Lite / 2 / Pro, jusqu'à 4K. Renvoie un job_id. |
| edit_image | prix d'une image | Affinez une image générée avec une consigne textuelle (édition conversationnelle multi-étapes). |
| generate_video | $0.10–$6.00 | Gamme Veo 3.1 ou Omni Flash (toujours avec son), Wan 3.0, MiniMax H3, au besoin à partir d'une image de départ et d'images de référence. Renvoie toujours d'abord un devis avec le coût exact. |
| edit_video | $0.09–1.00 | Édition vidéo-à-vidéo avec Omni Flash : votre clip ou une URL publique — restylage, remplacement d'objets, ré-éclairage. 10 premières secondes, 720p avec son. |
| generate_speech | $0.01 / 200 caractères | Génère une voix WAV à un ou deux locuteurs. Facturé par tranche entamée de 200 caractères. |
| get_result | gratuit | Suivi d'une tâche : URL des médias hébergés (liens valables 24 h), coût débité, solde restant, prévisualisation de l'image intégrée. |
| list_generations | gratuit | Historique des générations récentes — partagé avec le site web. |
La transparence des coûts, par défaut
- Les tarifs sont fournis en temps réel par
list_models— la même source que celle du site web. - Chaque appel pour de la vidéo (ou des lots d'images) renvoie d'abord un devis et ne débite rien ; l'agent réitère l'appel avec le paramètre
confirm_costpour démarrer. - Chaque résultat comprend les champs
cost_charged_usdetbalance_remaining_usd. - Les échecs serveurs amont et les rejets dus aux filtres de contenu sont remboursés automatiquement — la même politique que sur l'application web.
- Une clé d'idempotence optionnelle
idempotency_keygarantit que les tentatives réseau ne provoquent jamais de double facturation.
Une vraie conversation
→ 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 des médias & sécurité
- Les URL de résultats sont signées et valides pendant 24 heures ; les médias eux-mêmes restent stockés sur votre compte — appelez à nouveau
get_resultpour obtenir de nouveaux liens, ou téléchargez-les depuis le site web. - Les clés API sont stockées sous forme de hachage et affichées une seule fois lors de leur création ; révoquez-les à tout moment depuis votre profil.
- Les connexions OAuth utilisent des jetons d'accès d'une heure avec rotation du refresh, stockés hachés et valables uniquement pour ce serveur ; déconnecter une application dans votre profil invalide ses jetons immédiatement.
- Le journal d'utilisation par clé (outil, modèle, coût, aperçu de la consigne) est visible dans Profil → MCP API Keys.
- Les générations effectuées via MCP apparaissent dans le même historique et les mêmes analyses que les générations web.
Prêt à connecter votre agent ?
Créez une clé, ajoutez une seule ligne de configuration — votre agent génère des médias de qualité studio en quelques minutes.
Obtenir votre clé API