返回博客
BananaBanana Teamtutorialmcpapi

Grok MCP:用 xAI API 生成图片和视频

如何通过 xAI API 或 grok.com 自定义连接器把远程 MCP 服务器接到 Grok,让它生成图片、视频和语音。真实配置、实测 401 响应,价格从 $0.03 起。

Grok MCP:用 xAI API 生成图片和视频

Grok 里的远程 MCP 工具是 xAI API 的服务端能力:你在请求的 tools 数组里写上一个 MCP 服务器地址,由 xAI 自己的运行时去建立连接、读取工具列表并在 Grok 组织回答时调用这些工具。你的电脑上什么都不用跑。这正是它和 Cursor、Claude Code 的区别:那边的 MCP 客户端住在你面前的编辑器里,联网说话的是你的机器。

快速答案:tools 里加一个对象 —— {"type": "mcp", "server_url": "https://bananabanana.pro/api/mcp", "server_label": "bananabanana", "authorization": "Bearer bb_live_…"} —— Grok 就多出十个生成工具:Nano Banana 系列出图,Veo 3.1 和 Gemini Omni Flash 出视频,Gemini TTS 出语音。图片 $0.03 起,视频 $0.10 起,新账号自带 $0.20 供试用。在 grok.com 上,同一个 URL 填进 Connectors → New Connector → Custom,只是登录那一半没那么确定(下面有专门一节)。

编辑风格插画:对话气泡把画笔递向远处的服务器机柜

下文关于我们这一侧的所有说法,都是 2026 年 9 月 1 日用真实请求实测的。关于 xAI 那一侧的内容取自他们同一天的官方文档,而且我选择原文引用而非转述,因为这块 API 一直在变。

两个入口,一台服务器

“Grok 支持 MCP 吗”其实是两个问题,答案并不相同。

入口xAI 文档怎么写MCP 客户端在哪里运行
xAI API远程 MCP 工具可用于 "the xAI native SDK, the OpenAI compatible Responses API, and the Speech to Speech API"在 xAI 的服务器上
grok.comConnectors → New Connector → Custom:"Enter the MCP server URL and complete any required authentication"在 xAI 的服务器上
IDE 里的 Grok两个文档页都没提未知

同一页里有两条限制值得读两遍。传输层:"Only Streaming HTTP and SSE transports are supported"。而 OpenAI 兼容路径少了两个参数,require_approvalconnector_id,也就是说在那边没法让 xAI 在付费调用前先弹一次确认。要么你自己做一层,要么把工具挑清楚。

我们的端点是无状态 Streamable HTTP,正好是符合这条要求的传输方式。没有需要维持的会话头,也没有需要盯着的 SSE 流:一个 JSON-RPC 请求对应一个 JSON 响应。

把 BananaBanana 接到 xAI API

能跑起来的最小形态,直接用 cURL 打 Responses API:

curl https://api.x.ai/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $XAI_API_KEY" \
  -d '{
    "model": "grok-4.6",
    "input": [
      { "role": "user",
        "content": "Generate a 16:9 product photo of a ceramic cup on linen, soft morning light. Use nano-banana-pro, then give me the URL." }
    ],
    "tools": [
      {
        "type": "mcp",
        "server_url": "https://bananabanana.pro/api/mcp",
        "server_label": "bananabanana",
        "server_description": "Image, video and speech generation on Google models",
        "authorization": "Bearer bb_live_your_key_here",
        "allowed_tools": ["list_models", "generate_image", "get_result"]
      }
    ]
  }'

同样的事情用 xAI 的 Python SDK 写,有两个参数名不一样:

from xai_sdk import Client
from xai_sdk.chat import user
from xai_sdk.tools import mcp
 
client = Client(api_key=os.environ["XAI_API_KEY"])
 
chat = client.chat.create(
    model="grok-4.6",
    tools=[
        mcp(
            server_url="https://bananabanana.pro/api/mcp",
            server_label="bananabanana",
            authorization=os.environ["BB_KEY"],          # extra_headers=… also works
            allowed_tool_names=["list_models", "generate_image", "get_result"],
        )
    ],
)
chat.append(user("Make me a 16:9 hero image of a ceramic cup on linen."))

bb_live_… 密钥在个人页面的 API Keys 一栏创建,只显示一次。

有两个细节,各能让人耗掉一个晚上。

Bearer 前缀。 xAI 把 authorization 描述为 "a token that will be set in the Authorization header on requests to the MCP server",至于他们会不会替你补上 Bearer,文档没说。我们的服务器不猜。直接发裸 token,回来的抱怨很具体:

{"error":{"code":-32001,"message":"Unsupported Authorization scheme. Use 'Authorization: Bearer <token>'."}}

所以请自己写上方案名:"authorization": "Bearer bb_live_…"。万一哪天在 xAI 那侧被包了两层,就换成没有歧义的写法,直接设置请求头 headers: {"Authorization": "Bearer bb_live_…"}

allowed_tools 只是名义上可选。 xAI 的文档说得很直白:不写它,服务器暴露的所有工具定义都会进入模型上下文,"if an MCP server exposes 10 different tools and you don't specify allowed_tools, all 10 tool definitions will be available"。我们正好暴露十个,其中一半会花钱。如果只是做一个出图机器人,我会只放开 list_modelsgenerate_imageget_result,等真要做视频再放宽。

编辑风格插画:打孔卡插入服务器卡槽,旁边挂着一串钥匙

Grok 敲门时看到什么

这是为这篇文章实跑的一次握手。读取工具列表完全不需要凭据:

curl -s -X POST https://bananabanana.pro/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
list_models, get_account, top_up, generate_image, edit_image,
generate_video, edit_video, generate_speech, get_result, list_generations

真正会干活的接口在你出示 token 之前一律返回 401,响应里带着规矩的客户端所需要的指针:

HTTP/2 401
www-authenticate: Bearer realm="bananabanana",
  error_description="Authentication required. Connect this server with OAuth,
  or create an API key at https://bananabanana.pro/profile",
  resource_metadata="https://bananabanana.pro/.well-known/oauth-protected-resource/api/mcp",
  scope="mcp"

resource_metadata 指向的地址返回的是 MCP 授权规范里的 protected resource metadata 文档,支持 OAuth 的客户端就是靠它自己找到我们的授权服务器。走 xAI API 这条路你永远碰不到这个 401,因为密钥跟着每一次调用一起过来。但对下面那节连接器的故事来说,它很关键。

编辑风格插画:门房在敞开的工具柜前查验纸质凭证

再补一条兼容性说明,因为它常常咬到自己写客户端的人:我们不要求 Accept: application/json, text/event-stream 请求头,返回的是普通 JSON。在网关后面莫名其妙失败的,恰恰是那些坚持要 SSE 风格 Accept 头的服务器。

报价、任务、轮询:让智能体翻车的流程

生成图片就是一次调用加一次等待。视频不是,按“调用工具、读取结果”写的智能体循环就卡在这里。

视频和多图请求返回的不是任务,而是一份报价。模型必须第二次调用工具,把 confirm_cost 填成分毫不差的那个数字,之后才会扣费。这是故意设的减速带:不该因为有人打了一句“再电影感一点”,智能体就能在 4K Veo 片子上花掉 $4.40。

接下来生成是异步的。generate_imagegenerate_video 立刻返回 job_idget_result 每次调用最多长轮询 30 秒,你要一直调到状态稳定为止。图片通常 10 到 60 秒到手。视频按模型和时长要 1 到 10 分钟。

对 Responses API 的现实影响是:用户的一轮请求可能需要四五次服务端工具调用,如果你的集成把工具步数卡在两步,Grok 会报出一个 job_id 然后停下,像点完单就回家的服务员。给它留出余量。生成类调用也请带上 idempotency_key,让重试不会变成第二次扣费。

失败会自己退款。如果 Google 的内容过滤拒绝了提示词,或者上游调用挂掉,余额会自动退回,get_result 会说明是哪一个阶段拒绝的。你不会为没拿到的视频付钱。

编辑风格插画:柜台上用纸质凭证换回一张成品照片

grok.com 也能这么做吗?

部分能,而诚实的答案里有个窟窿。

xAI 把路径写得很清楚:打开 grok.com/connectors,点 New Connector,选 Custom,然后 "Enter the MCP server URL and complete any required authentication"。服务器必须能从公网访问,我们的当然可以。同一页还写着,内置连接器各自通过 OAuth 认证。

编辑风格插画:插头伸向半掩在帘幕后的插座

这一页没说的是:自定义连接器接受哪些认证方式。就 "complete any required authentication" 一句话,这就是全部规范,而该页最后更新于 2026 年 7 月 17 日。

我们这边的情况是这样。我们运行着完整的 OAuth 2.1 授权服务器:动态客户端注册、S256 的 PKCE、protected resource metadata、resource indicators,整套 MCP 授权规范。任何遵循该规范的客户端连过来,我们这边一行代码都不用改,Claude 和 ChatGPT 的连接器正是这么工作的。如果 Grok 的自定义连接器走的是同一套流程,那它就会直接可用,你会看到一个带着你账号名的普通登录页。

如果它只是存下一个 URL、不发任何凭据,你会看到十个工具都出现在连接器的列表里,而每一次调用都返回 401。我们这边的工具发现是匿名的,所以连接器可能看着很健康,实际上什么都生成不了。

这里我也希望能说得更肯定。如果你试过,结果值得发一封邮件到 [email protected],我们 MCP 页面上的兼容性表格当天就会更新。

花多少钱

价格按每次生成计算,从预付余额里扣,没有订阅。

项目模型价格
图片,1KNano Banana 2 Lite$0.03
图片,512–4KNano Banana 2$0.03–$0.13
图片,1K–4KNano Banana Pro$0.11–$0.20
视频,4 秒 720p 无声Veo 3.1 Lite$0.10
视频,起价Veo 3.1 Fast$0.35
视频,起价Veo 3.1$0.70
带声视频,每秒Gemini Omni Flash$0.10(3 秒起步为 $0.30)
语音Gemini 3.1 Flash TTS每 200 字符 $0.01

产品照:柔和窗光下皱亚麻布上的哑光陶瓷杯,由 Nano Banana Pro 生成

这只杯子就是上面 cURL 示例里的提示词,写稿时真跑了一次:Nano Banana Pro 2K,扣费 $0.11,工具调用后 32 秒完成。

新账号从 $0.20 起步,够六张 Lite 图,或者一条很短的 Veo Lite 片子。够验证链路,不够评判好模型,我更愿意把这话说明白。

充值有阶梯赠送:满 $50 送 5%,满 $100 送 10%。有效的优惠码还会按同一基数再加 10%,所以带码充 $100 到账 $120。最新数字始终以价格区块为准。

Grok 自己就能出图,为什么还要绕出去?

问得公道,xAI 自家的模型列表已经回答了一半:他们有 grok-imagine-image-2.0grok-imagine-video-1.5。在聊天里随手要一张图,就用它们,这种事谁也不需要 MCP 服务器。

编辑风格插画:两道门,一道通向拍立得相机,另一道通向远处的电影工坊

把生成派到我们这边的理由更窄,主要关乎用哪些模型、以及账单怎么读:

  • 特定的 Google 模型。 画面内文字和产品图用 Nano Banana Pro,带原生声音的视频用 Veo 3.1,既要声音又要对同一条片子做对话式修改时用 Omni Flash。
  • 扣费前先知道价格。 list_models 返回实时单价,视频先报价再花钱。可以给智能体设预算,而它真的守得住。
  • 所有客户端共用一份余额。 同一把密钥在 Grok、Gemini CLICodex网页工作室里都能用,所有结果落在同一份历史里。
  • 失败退款,一旦流程里有内容过滤,这一条比听起来重要得多。

这条路真实的代价:多一跳网络和一个轮询循环、视频要多一步确认、Omni Flash 封顶 720p,还有客户端会在连接时缓存工具 schema —— 我们这边新增参数后,你得重新连接一次 Grok 才能把它传过来。这些都不致命,但都是真的。

FAQ

Grok 支持 MCP 服务器吗?

支持,在 API 这一侧。xAI 的 Remote MCP Tools 可用于原生 SDK、OpenAI 兼容的 Responses API 以及 Speech to Speech API,server_urlserver_label 必填,authorizationheadersallowed_tools 选填。在 grok.com 上,自定义 MCP 连接器位于 Connectors → New Connector → Custom。

必须用 OAuth 吗,还是 API 密钥就够?

对 xAI API 来说,一把 bb_live_… 密钥就够,而且更简单:连同 Bearer 前缀一起放进 authorization。OAuth 更适合那些自己给用户做登录的连接器类客户端。我们的服务器在同一个端点上同时支持两种方式。

该用哪个 Grok 模型?

xAI 的 MCP 示例用的是 grok-4.6,也是他们目前的默认推荐。任何支持服务端工具的模型都行;工具本身的约定不随模型改变。

这样能生成带声音的视频吗?

可以,用带音频的 Veo 3.1,或者始终有声的 Gemini Omni Flash。要预留两步确认和一分钟以上的轮询。Omni 封顶 720p,所以不适合做全屏主视觉片。

生成失败了会怎样?

扣费会自动撤销,get_result 会返回上游给出的原因以及建议的下一步。被内容过滤挡下时,换个说法重试是值得的:同一个提示词第二次可能就过了,因为过滤判断的是生成出来的像素,而不只是这条请求。

tutorialmcpapi