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 avec son (1.00 forfaitaire). 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 : clé API Bearer depuis votre profil (le support d'OAuth 2.1 est prévu)
- 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 Code
claude mcp add --transport http bananabanana https://bananabanana.pro/api/mcp \
--header "Authorization: Bearer bb_live_YOUR_KEY"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"
}
}
}
}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"}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 juillet 2026) :
| Client | Fonctionne aujourd'hui ? | Méthode |
|---|---|---|
| Claude Code | oui | claude mcp add --transport http … --header |
| Claude Desktop / claude.ai | oui | connecteur personnalisé avec un en-tête de requête (bêta, déploiement progressif) ou le pont mcp-remote |
| 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 | fichier partagé ~/.codex/config.toml : url + bearer_token_env_var (déclarez la clé dans la variable d'environnement). Les connecteurs web de ChatGPT font exception — ils s'authentifient via OAuth, et non par des clés copiées-collées |
| Gemini CLI | oui | httpUrl + headers dans settings.json |
| xAI API (Grok) | oui | outil MCP avec server_url et une valeur authorization envoyée au serveur |
| grok.com (web) | partiellement | les connecteurs personnalisés acceptent l'URL d'un serveur (Connecteurs → Nouveau connecteur → Personnalisé) ; la documentation ne précise pas si un en-tête de clé API collé est pris en charge, cette méthode pourrait donc nécessiter notre futur 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.06 on the default 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é.
Sept 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. |
| 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–$4.40 | Gamme Veo 3.1 ou Omni Flash (toujours avec son). Renvoie toujours d'abord un devis avec le coût exact. |
| 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.
- 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