Für KI-Agenten & MCP-Clients
BananaBanana MCP Server
Generiere KI-Bilder und -Videos direkt aus Claude Desktop, Claude Code und jedem anderen MCP-Client – abgerechnet pro Generierung aus deinem BananaBanana-Guthaben. Ohne Abo.
Ein Endpunkt, alle Modelle
Ein Remote-Server für das Model Context Protocol, der den kompletten Generierungs-Stack von BananaBanana als Agenten-Tools bereitstellt: Bilder mit Google Nano Banana 2 Lite / 2 / Pro (ab $0.03), Videos mit Veo 3.1 / Fast / Lite sowie Gemini Omni Flash und Wan 3.0 mit Ton ($0.09–1.00). Dein Agent sieht die aktuellen Preise, bestätigt die Kosten vor teuren Läufen, und jede Generierung landet im selben Verlauf und Guthaben wie auf der Website.
- Endpunkt:
https://bananabanana.pro/api/mcp(Streamable HTTP) - Authentifizierung: Anmeldung per OAuth 2.1 (claude.ai und andere Connector-Clients) oder ein Bearer-API-Schlüssel aus deinem Profil
- Rate-Limit: 20 Tool-Aufrufe pro Minute und Schlüssel; optional ein Tageslimit für Ausgaben pro Schlüssel
- Kein MCP-Client? Derselbe Endpunkt spricht schlichtes JSON-RPC über HTTPS – ruf ihn aus curl, Python oder TypeScript auf, ganz ohne SDK
- Fehlgeschlagene oder vom Filter blockierte Generierungen werden automatisch erstattet
- Offene Doku,
server.jsonund Client-Beispiele zum Kopieren im GitHub-Repository bananabanana-mcp
In drei Schritten verbunden
1. Konto erstellen und Guthaben aufladen. 2. Unter Profil → MCP-API-Schlüssel einen Schlüssel erstellen (wird nur einmal angezeigt). 3. Den Server im Client hinzufügen:
claude.ai, Claude Desktop, mobil (OAuth – nichts zu kopieren)
Settings → Connectors → Add custom connector, https://bananabanana.pro/api/mcp einfügen, dann auf Connect klicken. Claude registriert sich selbst, du bestätigst den Zugriff auf einer BananaBanana-Seite, und die Generierungen werden dem Konto belastet, mit dem du dich angemeldet hast.
Settings → Connectors → Add custom connector
URL: https://bananabanana.pro/api/mcp
→ Add → Connect → approve access on bananabanana.proDerselbe Ablauf funktioniert in jedem Client, der MCP-Autorisierung unterstützt – MCP Inspector, die Web-Connectoren von ChatGPT und Grok, Claude Code. Verbundene Apps stehen in deinem Profil und lassen sich dort jederzeit trennen.
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
In claude_desktop_config.json eintragen (Settings → Developer → Edit Config); für die mcp-remote-Brücke wird Node.js benötigt:
{
"mcpServers": {
"bananabanana": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://bananabanana.pro/api/mcp",
"--header", "Authorization: Bearer bb_live_YOUR_KEY"
]
}
}
}Cursor
In ~/.cursor/mcp.json (global) oder .cursor/mcp.json im Projekt eintragen; damit der Schlüssel nicht in der Datei steht, nutze ${env:BB_API_KEY} statt des Klartextwerts:
{
"mcpServers": {
"bananabanana": {
"url": "https://bananabanana.pro/api/mcp",
"headers": {
"Authorization": "Bearer bb_live_YOUR_KEY"
}
}
}
}Die komplette Anleitung für Cursor, inklusive Eigenheiten und Demo mit echtem Schlüssel: Generate Images in Cursor.
VS Code / GitHub Copilot
In .vscode/mcp.json im Workspace eintragen (oder in deiner Benutzer-settings.json); VS Code fragt den Schlüssel einmal ab und speichert ihn verschlüsselt:
{
"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
}
]
}Die komplette Anleitung für VS Code / Copilot, inklusive Eigenheiten und Demo mit echtem Schlüssel: Generate Images in VS Code: Copilot MCP Setup Guide.
Windsurf
In ~/.codeium/windsurf/mcp_config.json eintragen:
{
"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
Jeder andere MCP-Client (reines JSON-RPC)
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"}Jede Methode außer ping und den Discovery-Listen (tools/list, prompts/list, resources/list) braucht Zugangsdaten – initialize eingeschlossen: Ein Handshake ohne Authentifizierung wird mit 401 und einer WWW-Authenticate-Challenge beantwortet. Diese Asymmetrie ist Absicht, kein Bug: Über genau diese Challenge erkennt ein Connector-Client, dass der Server OAuth nutzt. Den Tool-Katalog kannst du auch ohne Schlüssel lesen.
Lieber Schritt für Schritt? Das Tutorial Generate Images in Claude Code deckt die Einrichtung in Claude komplett ab, mit vier echten Anwendungsfällen und ihren tatsächlichen Kosten.
Kompatible Clients
MCP ist ein offenes Protokoll: Jeder Client, der Streamable HTTP spricht und einen Authorization-Header mitsenden kann, verbindet sich. Aktueller Stand, geprüft anhand der offiziellen Doku jedes Anbieters (zuletzt im August 2026):
| Client | Funktioniert? | Wie |
|---|---|---|
| Claude Code | ja | claude mcp add --transport http … --header |
| Claude Desktop / claude.ai | ja | Custom Connector: URL einfügen und per OAuth anmelden (ein Schlüssel im Request-Header geht auch, Beta) |
| Cursor | ja | .cursor/mcp.json: url + headers, Secrets über ${env:…} – siehe Snippet oben |
| VS Code / GitHub Copilot | ja | .vscode/mcp.json: type: "http" + url + headers; den Schlüssel als promptString-Input ablegen – VS Code fragt einmal und speichert ihn verschlüsselt |
| ChatGPT desktop / Codex CLI / IDE | ja | gemeinsame ~/.codex/config.toml: url + bearer_token_env_var (Schlüssel in die Umgebungsvariable). Die Web-Connectoren von ChatGPT melden sich stattdessen per OAuth an, ohne eingefügten Schlüssel |
| Gemini CLI | ja | url + type: "http" + headers in settings.json (httpUrl geht auch). Einrichtungsanleitung |
| Windsurf | ja | serverUrl + headers in mcp_config.json (Devin Local agent: url + transport: "http"). Setup guide |
| Cline | ja | type: "streamableHttp" + url + headers in the MCP settings JSON. Setup guide |
| xAI API (Grok) | ja | MCP-Tool mit server_url und einem authorization-Wert, der an den Server gesendet wird Setup guide |
| grok.com (web) | teilweise | Custom Connectors nehmen eine Server-URL (Connectors → New Connector → Custom); die Anmeldung läuft über unseren OAuth-2.1-Flow |
| ZCode (GLM-5.2) | ja | Settings → MCP Servers → Typ HTTP + Authorization-Header; GLM-5.2 innerhalb von Claude Code übernimmt die Claude-Code-Konfiguration |
| Alles andere | ja | reines JSON-RPC über HTTPS – siehe Aufruf aus dem Code weiter unten |
Beispiel für Codex – in ~/.codex/config.toml eintragen und BB_API_KEY=bb_live_… exportieren:
[mcp_servers.bananabanana]
url = "https://bananabanana.pro/api/mcp"
bearer_token_env_var = "BB_API_KEY"Die komplette Anleitung für Codex – CLI, IDE-Erweiterung und ChatGPT Desktop aus einer Konfiguration, mit Eigenheiten und Demo mit echtem Schlüssel: Codex MCP Setup: Images and Video from One config.toml.
Aufruf aus dem Code
Du nutzt keinen MCP-Client? Brauchst du auch nicht – und ein SDK ebenso wenig. Der Server spricht schlichtes JSON-RPC 2.0 über HTTPS: ein POST-Endpunkt, ein Bearer-Header, eine einzige JSON-Antwort. Er ist zustandslos, es gibt also keinen Session-Handshake zu verwalten – tools/call funktioniert schon als allererste Anfrage, aus curl, Python, TypeScript oder allem anderen, das HTTP senden kann.
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
Nur requests – keine MCP-Bibliothek:
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
Null Abhängigkeiten – eingebautes fetch (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);Worauf es beim Skripten ankommt:
- Jede Tool-Antwort enthält dasselbe JSON zweimal: maschinenlesbar in
result.structuredContentund als Textblock inresult.content– parse, was dir leichter fällt. - Video (und Bild-Batches) laufen zweistufig: Der erste Aufruf von
generate_videoliefert einen Kostenvoranschlag und berechnet nichts; zum Starten wiederholst du ihn mitconfirm_cost, gesetzt auf den genannten Betrag. - Gib bei Generierungsaufrufen einen
idempotency_keymit – dann führen Netzwerk-Wiederholungen nie zu doppelter Abbuchung. tools/listfunktioniert ohne Schlüssel, du kannst dir also alle Schemas ansehen, bevor du ein Konto anlegst. Tool-Aufrufe sind auf 20 pro Minute und Schlüssel begrenzt.
Zehn Tools, zugeschnitten auf Aufgaben
| Tool | Kosten | Was es macht |
|---|---|---|
| list_models | kostenlos | Alle Modelle mit aktuellen Preisen pro Einheit, Auflösungen und Einschränkungen. |
| get_account | kostenlos | Guthaben, Ausgabenlimit des Schlüssels und heutiger Verbrauch. |
| top_up | kostenlos | Sicheren Link zum Aufladen des Guthabens erstellen. OAuth erhält nur Zugriff zum Einzahlen; API-Schlüssel nutzen das Profil. |
| generate_image | $0.03–$0.20 | Text-zu-Bild mit Nano Banana 2 Lite / 2 / Pro, bis 4K. Liefert eine job_id. |
| edit_image | Preis eines Bildes | Ein fertiges Bild per Textanweisung verfeinern (Bearbeitung über mehrere Runden). |
| generate_video | $0.10–$6.00 | Veo-3.1-Familie oder Omni Flash (immer mit Ton), Wan 3.0, optional mit Startbild und Referenzbildern. Nennt immer zuerst die exakten Kosten. |
| edit_video | $0.09–1.00 | Video-zu-Video-Bearbeitung mit Omni Flash: dein eigener Clip oder eine öffentliche URL – neuer Stil, Objekte ersetzen, neues Licht. Die ersten 10 s, 720p mit Ton. |
| generate_speech | $0.01 / 200 Zeichen | Sprache mit einer oder zwei Stimmen als WAV generieren. Abgerechnet pro angefangenen 200 Zeichen. |
| get_result | kostenlos | Job abfragen: gehostete Medien-URLs (24-h-Links), berechnete Kosten, Restguthaben, Inline-Vorschau des Bildes. |
| list_generations | kostenlos | Letzte Generierungen – derselbe Verlauf wie auf der Website. |
Was kostet eine Generierung über MCP 2026?
- Die Preise liefert
list_modelslive – dieselbe Quelle, die auch die Website nutzt. - Jeder Video-Aufruf (und jeder Bild-Batch) liefert zuerst einen Kostenvoranschlag und berechnet nichts; der Agent wiederholt den Aufruf mit
confirm_cost, um zu starten. - Jedes Ergebnis enthält
cost_charged_usdundbalance_remaining_usd. - Fehler beim Anbieter und Ablehnungen durch den Inhaltsfilter werden automatisch erstattet – dieselbe Regel wie in der Web-App.
- Ein optionaler
idempotency_keygarantiert, dass Wiederholungen nie doppelt abbuchen.
Ein echter Dialog
→ 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}Medien-URLs & Sicherheit
- Ergebnis-URLs sind signiert und 24 Stunden gültig; die Medien selbst bleiben in deinem Konto – ruf
get_resulterneut auf, um frische Links zu bekommen, oder lade sie auf der Website herunter. - API-Schlüssel werden gehasht gespeichert und nur einmal beim Erstellen angezeigt; widerrufen kannst du sie jederzeit in deinem Profil.
- OAuth-Verbindungen nutzen Access-Tokens mit einer Stunde Laufzeit und rotierende Refresh-Tokens, gehasht gespeichert und nur für diesen Server gültig; trennst du eine App in deinem Profil, sind ihre Tokens sofort ungültig.
- Das Nutzungsprotokoll pro Schlüssel (Tool, Modell, Kosten, Prompt-Vorschau) siehst du unter Profil → MCP-API-Schlüssel.
- MCP-Generierungen erscheinen im selben Verlauf und in derselben Statistik wie Generierungen im Web.
x402: Zahlung pro Aufruf in USDC, ohne Konto
x402 ist ein offenes Protokoll, mit dem ein Agent eine einzelne Anfrage mit einem Stablecoin bezahlt. Es ist ein vom MCP-Server getrennter Endpunkt: POST /api/x402. Kein Konto, kein API-Schlüssel und keine Aufladung nötig.
- Schick den Tool-Namen und seine Argumente. Der Server antwortet mit
402und dem exakten Preis für diesen Aufruf. - Signiere die Zahlung in USDC im Base-Netzwerk und wiederhole die Anfrage mit dem Header
X-PAYMENT. - Bilder und Sprache kommen in derselben Antwort zurück. Video liefert eine
job_id; fragGET /api/x402/result/{jobId}kostenlos ab.
Verfügbare Tools: generate_image, generate_speech, generate_video. Die Preise sind dieselben wie im Web-Studio und über MCP; ein Aufruf kostet, was die Generierung kostet, ohne Mindestaufladung.
Schlägt ein bezahltes Video fehl, erhält der Zahlende einen Gutschrift-Token über denselben Betrag, 90 Tage gültig. Gib ihn in einem späteren Aufruf als refund_token mit. Zahlungen werden nicht on-chain zurückerstattet. Den maschinenlesbaren Katalog mit aktuellen Preisen findest du unter GET /api/x402.
Bereit, deinen Agenten anzuschließen?
Schlüssel erstellen, eine Zeile Konfiguration ergänzen – dein Agent generiert Medien in Studioqualität in wenigen Minuten.
API-Schlüssel holen