Grok MCP: картинки и видео из API xAI
Как подключить удалённый MCP-сервер к Grok через API xAI или пользовательский коннектор grok.com, чтобы модель генерировала изображения, видео и речь. Живые конфиги и цены от $0.03.

Удалённые MCP-тулы в Grok — это серверная возможность API xAI: вы указываете адрес MCP-сервера в массиве tools, и рантайм самого 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, но с авторизацией там всё менее однозначно (об этом отдельный раздел ниже).

Всё, что ниже сказано про нашу сторону провода, измерено живыми запросами 1 сентября 2026 года. Всё, что про сторону xAI, взято из их документации в том виде, в каком она была в тот же день, и я цитирую её, а не пересказываю: эта часть их API меняется.
Две поверхности, один сервер
Вопрос «поддерживает ли Grok MCP» на самом деле распадается на два, и ответы у них разные.
| Поверхность | Что документирует xAI | Где живёт MCP-клиент |
|---|---|---|
| API xAI | Удалённые 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 |
| Grok внутри IDE | ни на одной из этих страниц не описан | неизвестно |
Два ограничения с той же страницы стоит перечитать дважды. Транспорты: «Only Streaming HTTP and SSE transports are supported». И OpenAI-совместимый путь теряет два параметра, require_approval и connector_id, то есть попросить xAI показать подтверждение перед платным вызовом там не получится. Либо делаете это сами, либо аккуратно выбираете набор тулов.
Наш эндпоинт — stateless Streamable HTTP, тот самый транспорт, который проходит по требованиям. Ни сессионного заголовка, ни SSE-потока, за которым надо следить: один JSON-ответ на один JSON-RPC-запрос.
Подключаем BananaBanana к API xAI
Минимальное рабочее — обычный 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"]
}
]
}'
То же самое в Python-SDK от xAI, где два параметра называются иначе:
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_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
Всё, что действительно что-то делает, до предъявления токена отвечает 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 лежит документ protected resource metadata из спецификации авторизации MCP — так OAuth-клиенты сами находят наш authorization server. На пути через API xAI вы этот 401 не увидите никогда: ключ едет с каждым вызовом. А вот для истории с коннектором это важно.

Ещё одна заметка про совместимость, потому что она регулярно кусает самописных клиентов: мы не требуем заголовок Accept: application/json, text/event-stream и отвечаем обычным JSON. Загадочно падают у шлюзов как раз те серверы, которые на SSE-варианте Accept настаивают.
Котировка, задача, опрос: то, на чём спотыкаются агенты
Картинка — это один вызов и ожидание. Видео устроено иначе, и здесь агентский цикл в духе «вызвал тул, прочитал ответ» застревает.
Видео и пачка картинок возвращают не задачу, а котировку цены. Модель обязана вызвать тул второй раз, передав в confirm_cost ровно эту сумму, до цента, и только тогда деньги списываются. Это намеренная «лежачая полицейская»: агент не должен потратить $4.40 на 4K-ролик Veo из-за того, что кто-то написал «сделай покинематографичнее».
Дальше генерация асинхронная. 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», и есть вся спецификация; обновлялась страница 17 июля 2026 года.
Как обстоит дело у нас. Мы держим полноценный authorization server OAuth 2.1: динамическая регистрация клиентов, PKCE с S256, 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 ($0.30 за минимальные 3 сек) |
| Речь | Gemini 3.1 Flash TTS | $0.01 за 200 символов |

Эта чашка — тот самый промпт из примера с cURL выше, прогнанный по-настоящему прямо во время написания статьи: Nano Banana Pro в 2K, списано $0.11, готово через 32 секунды после вызова тула.
Новый аккаунт стартует с $0.20 — это шесть картинок на Lite или один короткий ролик Veo Lite. Хватает проверить проводку и не хватает, чтобы судить о старших моделях; лучше сказать это прямо, чем делать вид, что всё иначе.
У пополнений есть объёмный бонус: 5% от $50, 10% от $100. Активный промокод добавляет ещё 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 и веб-студии, а все результаты падают в одну историю.
- Возвраты при отказе — это важнее, чем звучит, когда в схеме участвует контент-фильтр.
Честная цена такого маршрута: лишний сетевой хоп и цикл опроса, подтверждение цены у видео, потолок 720p у Omni Flash и кэш схем тулов на стороне клиента — новый параметр с нашей стороны требует переподключения, иначе Grok его просто не передаст. Ничто из этого не смертельно. И всё это правда.
FAQ
Поддерживает ли Grok MCP-серверы?
Да, со стороны API. Remote MCP Tools у xAI работают в нативном 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-ключа?
Для API xAI ключа bb_live_… достаточно, и так проще: передайте его в authorization вместе с префиксом Bearer. OAuth важен для клиентов-коннекторов, которые сами логинят пользователя. Наш сервер поддерживает оба способа на одном и том же адресе.
Какую модель Grok выбрать?
В примерах xAI по MCP стоит grok-4.6, их текущая рекомендация по умолчанию. Подойдёт любая модель с поддержкой серверных тулов: контракт самих тулов от модели не зависит.
Можно ли так сгенерировать видео со звуком?
Да — через Veo 3.1 со звуком или через Gemini Omni Flash, у которого звук есть всегда. Учитывайте двухшаговое подтверждение и опрос длиной от минуты. У Omni потолок 720p, так что для полноэкранного заглавного ролика это не тот выбор.
Что происходит, когда генерация падает?
Списание автоматически отменяется, а get_result возвращает причину со стороны провайдера и подсказку, что делать дальше. Отказы контент-фильтра имеет смысл повторять с другой формулировкой: тот же промпт может пройти со второго раза, потому что фильтр судит готовые пиксели, а не только запрос.