Kembali ke blog
BananaBanana Teamtutorialmcpapi

Grok MCP: gambar dan video lewat API xAI

Cara menghubungkan server MCP jarak jauh ke Grok, lewat API xAI atau konektor kustom grok.com, agar Grok membuat gambar, video, dan suara. Konfigurasi nyata, harga mulai $0.03.

Grok MCP: gambar dan video lewat API xAI

Remote MCP tools di Grok adalah fitur sisi server dari API xAI: Anda menyebut sebuah server MCP di dalam array tools pada permintaan, lalu runtime milik xAI sendiri yang membuka koneksi, membaca daftar tool, dan memanggilnya sementara Grok menulis jawabannya. Tidak ada yang berjalan di laptop Anda. Itulah bedanya dengan Cursor atau Claude Code, di mana klien MCP tinggal di editor di depan Anda dan mesin Andalah yang berbicara di jaringan.

Jawaban singkat: tambahkan satu objek ke tools{"type": "mcp", "server_url": "https://bananabanana.pro/api/mcp", "server_label": "bananabanana", "authorization": "Bearer bb_live_…"} — dan Grok mendapat sepuluh tool generasi: gambar dengan keluarga Nano Banana, video dengan Veo 3.1 dan Gemini Omni Flash, suara dengan Gemini TTS. Gambar mulai $0.03, video mulai $0.10, dan akun baru membawa saldo $0.20 untuk mencoba. Di grok.com, URL yang sama ditempel di Connectors → New Connector → Custom, meski bagian autentikasinya belum jelas benar (ada bagian khusus di bawah).

Ilustrasi editorial balon percakapan mengulurkan kuas ke rak server yang jauh

Semua yang dikatakan di sini tentang sisi kami diukur dengan permintaan sungguhan pada 1 September 2026. Semua tentang sisi xAI diambil dari dokumentasi mereka sebagaimana terbaca pada hari yang sama, dan saya mengutipnya alih-alih memparafrase, karena bagian API ini bergerak.

Dua permukaan, satu server

"Apakah Grok mendukung MCP" sebenarnya dua pertanyaan, dan jawabannya berbeda.

PermukaanYang didokumentasikan xAIDi mana klien MCP berjalan
API xAIRemote MCP tools bekerja di "the xAI native SDK, the OpenAI compatible Responses API, and the Speech to Speech API"di server xAI
grok.comConnectors → New Connector → Custom: "Enter the MCP server URL and complete any required authentication"di server xAI
Grok di dalam IDEtidak dibahas di kedua halaman dokumentasitidak diketahui

Dua batasan dari halaman yang sama layak dibaca dua kali. Transport: "Only Streaming HTTP and SSE transports are supported". Jalur yang kompatibel dengan OpenAI kehilangan dua parameter, require_approval dan connector_id, jadi meminta xAI menampilkan konfirmasi sebelum panggilan berbayar bukan pilihan di sana. Anda membangunnya sendiri, atau memilih tool dengan hati-hati.

Endpoint kami adalah Streamable HTTP tanpa status, persis transport yang lolos syarat itu. Tidak ada header sesi yang harus dijaga, tidak ada aliran SSE yang harus diawasi: satu respons JSON untuk satu permintaan JSON-RPC.

Menyambungkan BananaBanana ke API xAI

Bentuk terkecil yang bekerja, cURL langsung ke 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"]
      }
    ]
  }'

Hal yang sama dengan SDK Python milik xAI, di mana dua nama parameter berubah:

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."))

Kunci bb_live_… dibuat di profil Anda, bagian API Keys. Kunci itu hanya ditampilkan sekali.

Ada dua detail yang masing-masing bisa memakan satu malam.

Awalan Bearer. xAI menjelaskan authorization sebagai "a token that will be set in the Authorization header on requests to the MCP server", sehingga tidak jelas apakah mereka membungkus nilainya dengan Bearer untuk Anda. Server kami tidak menebak. Kirim token telanjang dan Anda mendapat keluhan yang sangat spesifik:

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

Jadi tulis skemanya sendiri: "authorization": "Bearer bb_live_…". Kalau suatu saat itu terbungkus dua kali di sisi xAI, pakai bentuk yang tidak ambigu dan set header langsung dengan headers: {"Authorization": "Bearer bb_live_…"}.

allowed_tools hanya opsional di atas kertas. Dokumentasi xAI tegas: tanpa itu, semua definisi tool dari server masuk ke konteks model, "if an MCP server exposes 10 different tools and you don't specify allowed_tools, all 10 tool definitions will be available". Kami memaparkan tepat sepuluh. Setengahnya membelanjakan uang. Untuk bot gambar, saya akan mengizinkan list_models, generate_image, dan get_result saja, lalu memperluas ketika video benar-benar dibutuhkan.

Ilustrasi editorial kartu berlubang masuk ke slot server dengan sejumlah kunci tergantung di sampingnya

Apa yang dilihat Grok saat mengetuk

Ini jabat tangan kami, dijalankan untuk artikel ini. Penemuan daftar tool sama sekali tidak butuh kredensial:

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

Apa pun yang benar-benar melakukan sesuatu menjawab 401 sampai Anda menunjukkan token, dan responsnya membawa penunjuk yang dibutuhkan klien yang tertib:

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"

URL resource_metadata itu mengembalikan dokumen protected resource metadata dari spesifikasi otorisasi MCP; begitulah klien ber-OAuth menemukan sendiri authorization server kami. Lewat jalur API xAI Anda tidak akan pernah menemui 401 itu, karena kunci Anda ikut di setiap panggilan. Untuk cerita konektor di bawah, hal ini justru penting.

Ilustrasi editorial penjaga pintu memeriksa kupon kertas di depan lemari perkakas yang terbuka

Satu catatan kompatibilitas lagi, karena ini sering menggigit orang yang menulis klien sendiri: kami tidak menuntut header Accept: application/json, text/event-stream dan kami menjawab dengan JSON biasa. Yang gagal secara misterius di balik gateway justru server yang bersikeras pada Accept bergaya SSE.

Kutipan harga, job, polling: alur yang mengejutkan agen

Membuat gambar berarti satu panggilan dan sedikit menunggu. Video tidak begitu, dan di sinilah loop agen yang ditulis dengan pola "panggil tool, baca jawaban" macet.

Permintaan video dan banyak gambar kembali dengan kutipan harga, bukan job. Model harus memanggil tool untuk kedua kalinya dengan confirm_cost berisi angka persis itu, sampai sennya, sebelum ada biaya yang ditarik. Ini polisi tidur yang disengaja: agen seharusnya tidak bisa menghabiskan $4.40 untuk klip Veo 4K hanya karena seseorang mengetik "buat lebih sinematik".

Setelah itu prosesnya asinkron. generate_image dan generate_video langsung mengembalikan job_id; get_result melakukan long-polling hingga 30 detik per panggilan dan Anda memanggilnya lagi sampai statusnya tetap. Gambar biasanya datang dalam 10 sampai 60 detik. Video berjalan 1 sampai 10 menit tergantung model dan durasi.

Konsekuensi praktis untuk Responses API: satu giliran pengguna bisa butuh empat atau lima panggilan tool di sisi server, dan kalau integrasi Anda membatasi langkah tool jadi dua, Grok akan melaporkan job_id lalu berhenti seperti pelayan yang mencatat pesanan lalu pulang. Beri ruang. Kirim juga idempotency_key pada panggilan generasi, supaya percobaan ulang tidak menghasilkan tagihan kedua.

Kegagalan mengembalikan dana sendiri. Kalau filter konten Google menolak prompt atau panggilan mati di hulu, saldo kembali otomatis dan get_result menjelaskan tahap mana yang menolak. Anda tidak pernah membayar video yang tidak Anda terima.

Ilustrasi editorial kupon kertas ditukar dengan foto jadi di atas meja layanan

Bisakah grok.com melakukan ini juga?

Sebagian, dan jawaban jujurnya berlubang.

xAI mendokumentasikan jalurnya dengan jelas: buka grok.com/connectors, klik New Connector, pilih Custom, lalu "Enter the MCP server URL and complete any required authentication". Servernya harus bisa dijangkau dari internet publik, dan milik kami jelas begitu. Konektor bawaan, kata halaman yang sama, masing-masing memakai OAuth.

Ilustrasi editorial steker disodorkan ke stopkontak yang setengah tersembunyi di balik tirai

Yang tidak dikatakan halaman itu adalah metode autentikasi apa yang diterima konektor kustom. Satu kalimat, "complete any required authentication", itulah seluruh spesifikasinya, dan halaman tersebut terakhir diperbarui pada 17 Juli 2026.

Posisi kami begini. Kami menjalankan authorization server OAuth 2.1 lengkap: registrasi klien dinamis, PKCE dengan S256, protected resource metadata, resource indicators, seluruh spesifikasi otorisasi MCP. Klien mana pun yang mengikutinya tersambung tanpa satu baris pekerjaan pun dari sisi kami, persis seperti yang dilakukan konektor Claude dan ChatGPT. Kalau konektor kustom Grok menempuh alur yang sama, semuanya akan langsung jalan dan Anda akan melihat halaman masuk biasa dengan nama akun Anda.

Kalau ia hanya menyimpan URL dan tidak mengirim kredensial, Anda akan melihat sepuluh tool muncul di daftar konektor dan setiap panggilan kembali dengan 401. Penemuan tool di server kami bersifat anonim, jadi sebuah konektor bisa terlihat sehat padahal tidak mampu menghasilkan apa pun.

Saya ingin bisa lebih pasti di sini. Kalau Anda sudah mencobanya, hasilnya layak dikirim ke [email protected], dan tabel kompatibilitas di halaman MCP kami diperbarui pada hari yang sama.

Berapa biayanya

Harga dihitung per generasi, dipotong dari saldo prabayar, tanpa langganan.

ApaModelHarga
Gambar, 1KNano Banana 2 Lite$0.03
Gambar, 512–4KNano Banana 2$0.03–$0.13
Gambar, 1K–4KNano Banana Pro$0.11–$0.20
Video, 4 detik 720p tanpa suaraVeo 3.1 Lite$0.10
Video, mulaiVeo 3.1 Fast$0.35
Video, mulaiVeo 3.1$0.70
Video bersuara, per detikGemini Omni Flash$0.10 ($0.30 untuk minimum 3 detik)
SuaraGemini 3.1 Flash TTS$0.01 per 200 karakter

Foto produk cangkir keramik matte di atas linen kusut dengan cahaya jendela lembut, dibuat dengan Nano Banana Pro

Cangkir itu adalah prompt dari contoh cURL di atas, dijalankan sungguhan saat tulisan ini dibuat: Nano Banana Pro pada 2K, ditagih $0.11, selesai 32 detik setelah panggilan tool.

Akun baru mulai dengan $0.20, cukup untuk enam gambar Lite atau satu klip pendek Veo Lite. Cukup untuk memeriksa sambungannya, tidak cukup untuk menilai model-model yang bagus, dan saya lebih suka mengatakannya terang-terangan.

Top-up menambah bonus volume: 5% dari $50, 10% dari $100. Kode promo aktif menambah lagi 10% dari setoran, dihitung dari basis yang sama, jadi $100 dengan kode masuk sebagai $120. Angka terkini selalu ada di bagian harga.

Grok sudah bisa bikin gambar. Kenapa memutar jalan?

Pertanyaan yang wajar, dan setengahnya dijawab oleh daftar model xAI sendiri: mereka punya grok-imagine-image-2.0 dan grok-imagine-video-1.5. Untuk gambar cepat di dalam obrolan, pakai itu. Tidak ada yang perlu server MCP untuk hal semacam itu.

Ilustrasi editorial dua pintu, satu menuju kamera instan, satu lagi menuju bengkel film di kejauhan

Alasan mengirim generasi ke luar lebih sempit, dan sebagian besar soal model mana dan bagaimana tagihannya terbaca:

  • Model Google tertentu. Nano Banana Pro untuk teks di dalam gambar dan foto produk, Veo 3.1 untuk video dengan audio asli, Omni Flash saat Anda ingin suara sekaligus penyuntingan percakapan pada klip yang sama.
  • Harga sebelum penagihan. list_models mengembalikan harga per unit secara langsung, dan video memberi kutipan sebelum membelanjakan. Sebuah agen bisa diberi batas anggaran dan benar-benar mematuhinya.
  • Satu saldo untuk semua klien. Kunci yang sama bekerja dari Grok, Gemini CLI, Codex, dan studio web, dan semua hasil jatuh ke satu riwayat.
  • Pengembalian dana saat gagal, yang lebih berarti daripada kedengarannya begitu ada filter konten di dalam alur.

Biaya jujur dari rute ini: satu lompatan jaringan tambahan dan loop polling, video yang butuh langkah konfirmasi, Omni Flash yang mentok di 720p, dan skema tool yang di-cache klien saat menyambung, sehingga parameter baru di sisi kami menuntut Anda menyambung ulang sebelum Grok bisa mengirimkannya. Tidak ada yang fatal. Semuanya nyata.

FAQ

Apakah Grok mendukung server MCP?

Ya, di sisi API. Remote MCP Tools milik xAI bekerja di SDK asli, di Responses API yang kompatibel dengan OpenAI, dan di Speech to Speech API, dengan server_url dan server_label wajib serta authorization, headers, dan allowed_tools opsional. Di grok.com, konektor MCP kustom ada di Connectors → New Connector → Custom.

Apakah saya butuh OAuth atau cukup kunci API?

Untuk API xAI, kunci bb_live_… sudah cukup dan lebih sederhana: kirimkan lewat authorization beserta awalan Bearer. OAuth penting untuk klien bergaya konektor yang memasukkan pengguna sendiri. Server kami mendukung keduanya di endpoint yang sama.

Model Grok mana yang sebaiknya dipakai?

Contoh MCP dari xAI memakai grok-4.6, rekomendasi bawaan mereka saat ini. Model apa pun yang mendukung tool sisi server bisa dipakai; kontrak tool-nya tidak berubah antar model.

Bisakah membuat video bersuara lewat jalur ini?

Bisa, lewat Veo 3.1 dengan audio atau Gemini Omni Flash yang selalu bersuara. Siapkan diri untuk konfirmasi dua langkah dan polling satu menit atau lebih. Omni mentok di 720p, jadi bukan pilihan untuk klip utama layar penuh.

Apa yang terjadi kalau sebuah generasi gagal?

Tagihan dibatalkan otomatis dan get_result mengembalikan alasan dari sisi penyedia beserta saran langkah berikutnya. Penolakan filter konten layak dicoba ulang dengan susunan kata berbeda: prompt yang sama bisa lolos di percobaan kedua, karena filter menilai piksel yang dihasilkan, bukan hanya permintaannya.

tutorialmcpapi