适用于 AI 代理与 MCP 客户端
BananaBanana MCP Server
直接在 Claude Desktop、Claude Code 及任何其他 MCP 客户端中生成 AI 图像和视频 —— 费用从您的 BananaBanana 余额中按生成扣除。无需订阅。
单一接口,聚合所有模型
一个远程 Model Context Protocol 服务器,将完整的 BananaBanana 生成技术栈作为代理工具开放:Google Nano Banana 2 Lite / 2 / Pro 图像(低至 $0.03)、Veo 3.1 / Fast / Lite 视频以及带声音的 Gemini Omni Flash(统一 $1.00)。您的代理可查看实时价格,在执行高成本任务前确认费用,且每次生成都会记录在与网站相同的历史记录和余额中。
- 接口地址:
https://bananabanana.pro/api/mcp(Streamable HTTP) - 身份验证:来自您个人资料的 Bearer API 密钥(计划支持 OAuth 2.1)
- 速率限制:每个密钥每分钟 20 次工具调用;可选择为每个密钥设置每日消费上限
- 没有 MCP 客户端?该接口是基于 HTTPS 的纯 JSON-RPC —— 无需任何 SDK,即可直接通过 curl、Python 或 TypeScript 进行调用
- 生成失败或因过滤被拒的任务将自动退款
- 打开文档、
server.json,并在 bananabanana-mcp GitHub 仓库中复制粘贴客户端示例
只需三步,即刻连接
1. 注册账户并充值余额。2. 在个人资料 → MCP API Keys中创建密钥(仅显示一次)。3. 将服务器添加至您的客户端:
Claude Code
claude mcp add --transport http bananabanana https://bananabanana.pro/api/mcp \
--header "Authorization: Bearer bb_live_YOUR_KEY"Claude Desktop
添加至 claude_desktop_config.json (Settings → Developer → Edit Config);运行 mcp-remote 桥接需要 Node.js:
{
"mcpServers": {
"bananabanana": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://bananabanana.pro/api/mcp",
"--header", "Authorization: Bearer bb_live_YOUR_KEY"
]
}
}
}Cursor
添加至项目中的 ~/.cursor/mcp.json(全局)或 .cursor/mcp.json;如需避免在文件中明文保存密钥,请使用 ${env:BB_API_KEY} 代替字面值:
{
"mcpServers": {
"bananabanana": {
"url": "https://bananabanana.pro/api/mcp",
"headers": {
"Authorization": "Bearer bb_live_YOUR_KEY"
}
}
}
}完整的 Cursor 教程,包含一些注意事项和实时密钥演示:在 Cursor 中生成图像。
VS Code / GitHub Copilot
添加至工作区中的 .vscode/mcp.json(或您的用户 settings.json);VS Code 会提示您输入一次密钥并加密存储:
{
"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
}
]
}完整的 VS Code / Copilot 教程,包含一些注意事项和实时密钥演示:在 VS Code 中生成图像:Copilot MCP 配置指南。
Windsurf
添加至 ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"bananabanana": {
"serverUrl": "https://bananabanana.pro/api/mcp",
"headers": {
"Authorization": "Bearer bb_live_YOUR_KEY"
}
}
}
}任何其他 MCP 客户端(原生 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"}更喜欢看图文教程?该指南 在 Claude Code 中生成图像 完整涵盖了 Claude 的端到端配置,并包含四个真实用例及其实际成本。
客户端兼容性
MCP 是一种开放协议:any 任何支持 Streamable HTTP 且能够附加 Authorization 请求头的客户端均可连接。当前支持状态(已对照各厂商官方文档验证,最近一次检查于 2026 年 7 月):
| 客户端 | 当前可用? | 连接方式 |
|---|---|---|
| Claude Code | 是 | claude mcp add --transport http … --header |
| Claude Desktop / claude.ai | 是 | 带请求头的自定义连接器(测试版,正逐步推出)或 mcp-remote 桥接 |
| Cursor | 是 | .cursor/mcp.json:url + headers,通过 ${env:…} 传入敏感信息 —— 参见上方代码片段 |
| VS Code / GitHub Copilot | 是 | .vscode/mcp.json:type: "http" + url + headers;将密钥存为 promptString 输入 —— VS Code 将提示输入一次并保持加密 |
| ChatGPT desktop / Codex CLI / IDE | 是 | 共享 ~/.codex/config.toml:url + bearer_token_env_var(将密钥置于环境变量中)。ChatGPT 网页端连接器除外 —— 它们通过 OAuth 进行身份验证,而不是粘贴密钥 |
| Gemini CLI | 是 | 在 settings.json 中配置 httpUrl + headers |
| xAI API (Grok) | 是 | 使用带有 server_url 和向服务器发送的 authorization 值的 MCP 工具 |
| grok.com (web) | 部分支持 | 自定义连接器需要服务器 URL (Connectors → New Connector → Custom);文档未说明是否支持粘贴 API 密钥请求头,因此该路径可能需要我们即将推出的 OAuth 2.1 |
| ZCode (GLM-5.2) | 是 | Settings → MCP Servers → 选择 HTTP + Authorization 请求头;Claude Code 内的 GLM-5.2 继承 Claude Code 的配置 |
| 其他客户端 | 是 | 基于 HTTPS 的原生 JSON-RPC —— 参见下文通过代码调用 |
Codex 示例 —— 添加至 ~/.codex/config.toml 并导出 BB_API_KEY=bb_live_…:
[mcp_servers.bananabanana]
url = "https://bananabanana.pro/api/mcp"
bearer_token_env_var = "BB_API_KEY"完整的 Codex 教程 —— 通过同一个配置关联 CLI、IDE 扩展和 ChatGPT 桌面版,包含注意事项 and 实时密钥演示:Codex MCP 配置:通过同一个 config.toml 生成图像与视频。
通过代码调用
不使用 MCP 客户端?您不需要它,同样也不需要 SDK。服务器是基于 HTTPS 的纯 JSON-RPC 2.0:一个 POST 接口、一个 Bearer 请求头和单次 JSON 响应。它是无状态的,因此无需管理会话握手 —— tools/call 可以作为来自 curl、Python、TypeScript 或任何其他能发送 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
仅使用 requests —— 无需 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
零依赖 —— 内置 fetch(Node 18+、Deno、Bun 及浏览器):
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);编写脚本时需要注意的细节:
- 每个工具响应都会包含两次相同的 JSON:机器可读的
result.structuredContent和result.content中的文本块 —— 解析您认为更简便的格式即可。 - 视频(和多图批量生成)是两步调用:第一次调用
generate_video会返回报价且不扣费;再次调用并将confirm_cost设置为报价金额即可开始生成。 - 在生成调用中传入
idempotency_key—— 网络重试绝不会导致重复扣费。 tools/list无需密钥即可运行,因此您可以在注册账户前探索完整的 Schema。每个密钥每分钟的工具调用限制为 20 次。
七个专用工具
| 工具 | 费用 | 功能描述 |
|---|---|---|
| list_models | 免费 | 所有模型及其最新单价、分辨率和限制。 |
| get_account | 免费 | 余额、密钥消费上限和今日用量。 |
| generate_image | $0.03–$0.20 | 在 Nano Banana 2 Lite / 2 / Pro 上进行文本生成图像,最高支持 4K。返回一个 job_id。 |
| edit_image | 单张图像的价格 | 通过文本指令修改已完成的图像(多轮编辑)。 |
| generate_video | $0.10–$4.40 | Veo 3.1 系列或 Omni Flash(均带声音)。始终在开始前先提供精确报价。 |
| get_result | 免费 | 轮询任务结果:托管媒体 URL(24 小时有效链接)、扣除费用、剩余余额及内联图像预览。 |
| list_generations | 免费 | 最近的生成历史记录 —— 与网站端同步共享。 |
资费完全透明
- 价格由
list_models实时提供 —— 与网站端使用相同的数据源。 - 每次视频(和多图批量生成)调用首先返回报价且不扣费;代理通过
confirm_cost再次发起调用即可开始生成。 - 每个结果中均包含
cost_charged_usd和balance_remaining_usd。 - 上游失败以及内容过滤拦截将自动退款 —— 与网页端政策完全一致。
- 可选的
idempotency_key保证了因网络重试绝不会导致重复扣费。
真实对话场景
→ 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 与安全性
- 生成的 URL 带有签名且在 24 小时内有效;媒体文件本身保存在您的账户中 —— 再次调用
get_result即可获取最新链接,或直接从网站下载。 - API 密钥经哈希后存储,且仅在创建时显示一次;您可以随时在个人资料中将其撤销。
- 每个密钥的使用日志(包括工具、模型、费用和提示词预览)均可在 个人资料 → MCP API Keys 中查看。
- 通过 MCP 生成的记录与网页端生成的记录共享相同的历史记录和分析数据。