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 повертає причину з боку провайдера й підказку, що робити далі. Відмови контент-фільтра має сенс повторювати з іншим формулюванням: той самий промпт може пройти з другого разу, бо фільтр судить готові пікселі, а не лише запит.