ブログに戻る
BananaBanana Teamtutorialmcpapi

Grok MCP:xAI API から画像と動画を生成する

リモート MCP サーバーを xAI API または grok.com のカスタムコネクタで Grok につなぎ、画像・動画・音声を生成する方法。実測の設定と 401 応答、料金は $0.03 から。

Grok MCP:xAI API から画像と動画を生成する

Grok のリモート MCP ツールは xAI API のサーバー側機能です。リクエストの tools 配列に MCP サーバーの URL を書くと、接続を開いてツール一覧を読み、Grok が回答を書いている間にツールを呼ぶのは xAI 側のランタイムです。手元のマシンでは何も動きません。ここが 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 につなぐ

動く最小構成、Responses API への素の cURL:

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 で包んでくれるのかどうかは書かれていません。こちらのサーバーは推測しません。裸のトークンを送ると、具体的な苦情が返ります:

{"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

実際に何かをするものは、トークンを提示するまですべて 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 の URL は 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_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 ページの互換性表はその日のうちに更新します。

料金

料金は生成ごと、前払い残高からの引き落とし、サブスクリプションはありません。

対象モデル料金
画像、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
音声付き動画、1 秒あたりGemini Omni Flash$0.10(最短 3 秒で $0.30)
音声Gemini 3.1 Flash TTS200 文字ごとに $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 止まり。さらにツールのスキーマはクライアントが接続時にキャッシュするため、こちらで新しい引数が増えたら、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