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

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.com | Connectors → 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_approval 和 connector_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_models、generate_image 和 get_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_image 和 generate_video 立刻返回 job_id;get_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 页面上的兼容性表格当天就会更新。
花多少钱
价格按每次生成计算,从预付余额里扣,没有订阅。
| 项目 | 模型 | 价格 |
|---|---|---|
| 图片,1K | Nano Banana 2 Lite | $0.03 |
| 图片,512–4K | Nano Banana 2 | $0.03–$0.13 |
| 图片,1K–4K | Nano 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 |

这只杯子就是上面 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.0 和 grok-imagine-video-1.5。在聊天里随手要一张图,就用它们,这种事谁也不需要 MCP 服务器。

把生成派到我们这边的理由更窄,主要关乎用哪些模型、以及账单怎么读:
- 特定的 Google 模型。 画面内文字和产品图用 Nano Banana Pro,带原生声音的视频用 Veo 3.1,既要声音又要对同一条片子做对话式修改时用 Omni Flash。
- 扣费前先知道价格。
list_models返回实时单价,视频先报价再花钱。可以给智能体设预算,而它真的守得住。 - 所有客户端共用一份余额。 同一把密钥在 Grok、Gemini CLI、Codex 和网页工作室里都能用,所有结果落在同一份历史里。
- 失败退款,一旦流程里有内容过滤,这一条比听起来重要得多。
这条路真实的代价:多一跳网络和一个轮询循环、视频要多一步确认、Omni Flash 封顶 720p,还有客户端会在连接时缓存工具 schema —— 我们这边新增参数后,你得重新连接一次 Grok 才能把它传过来。这些都不致命,但都是真的。
FAQ
Grok 支持 MCP 服务器吗?
支持,在 API 这一侧。xAI 的 Remote MCP Tools 可用于原生 SDK、OpenAI 兼容的 Responses API 以及 Speech to Speech API,server_url 和 server_label 必填,authorization、headers 和 allowed_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 会返回上游给出的原因以及建议的下一步。被内容过滤挡下时,换个说法重试是值得的:同一个提示词第二次可能就过了,因为过滤判断的是生成出来的像素,而不只是这条请求。