Retour au blog
BananaBanana Teamtutorialmcpapi

Grok MCP : images et vidéo via l'API xAI

Comment brancher un serveur MCP distant sur Grok, via l'API xAI ou un connecteur personnalisé grok.com, pour générer images, vidéo et voix. Config réelle et tarifs dès $0.03.

Grok MCP : images et vidéo via l'API xAI

Les outils MCP distants dans Grok sont une fonction côté serveur de l'API xAI : vous indiquez un serveur MCP dans le tableau tools de la requête, et c'est le runtime de xAI qui ouvre la connexion, lit la liste des outils et les appelle pendant que Grok rédige sa réponse. Rien ne tourne sur votre machine. Toute la différence est là par rapport à Cursor ou Claude Code, où le client MCP vit dans l'éditeur devant vous et où c'est votre poste qui dialogue.

Réponse rapide : ajoutez un objet à tools{"type": "mcp", "server_url": "https://bananabanana.pro/api/mcp", "server_label": "bananabanana", "authorization": "Bearer bb_live_…"} — et Grok gagne dix outils de génération : images avec la famille Nano Banana, vidéo avec Veo 3.1 et Gemini Omni Flash, voix avec Gemini TTS. Images à partir de $0.03, vidéo à partir de $0.10, et un compte neuf démarre avec $0.20 pour essayer. Sur grok.com, la même URL se colle dans Connectors → New Connector → Custom, même si la partie connexion reste floue (une section y est consacrée plus bas).

Illustration éditoriale d'une bulle de dialogue tendant un pinceau vers une baie de serveurs distante

Tout ce qui est dit ici sur notre côté du fil a été mesuré par des requêtes réelles le 1er septembre 2026. Tout ce qui concerne le côté xAI vient de leur documentation telle qu'elle se lisait le même jour, et je la cite plutôt que de la reformuler, car cette partie de leur API bouge.

Deux surfaces, un seul serveur

« Grok gère-t-il MCP ? » recouvre en réalité deux questions, avec deux réponses différentes.

SurfaceCe que documente xAIOù tourne le client MCP
API xAILes outils MCP distants fonctionnent dans « the xAI native SDK, the OpenAI compatible Responses API, and the Speech to Speech API »sur les serveurs de xAI
grok.comConnectors → New Connector → Custom : « Enter the MCP server URL and complete any required authentication »sur les serveurs de xAI
Grok dans un IDEabsent des deux pages de docinconnu

Deux contraintes de la même page méritent une seconde lecture. Les transports : « Only Streaming HTTP and SSE transports are supported ». Et la voie compatible OpenAI perd deux paramètres, require_approval et connector_id : demander à xAI une confirmation avant un appel payant n'y est donc pas possible. Soit vous la construisez, soit vous choisissez vos outils avec soin.

Notre endpoint est un Streamable HTTP sans état, exactement le transport qui passe cette barre. Pas d'en-tête de session à maintenir, pas de flux SSE à surveiller : une réponse JSON par requête JSON-RPC.

Brancher BananaBanana sur l'API xAI

Le minimum qui marche, en cURL direct sur la 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"]
      }
    ]
  }'

La même chose avec le SDK Python de xAI, où deux paramètres changent de nom :

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

La clé bb_live_… se crée dans votre profil, section API Keys. Elle ne s'affiche qu'une fois.

Deux détails coûtent une soirée chacun.

Le préfixe Bearer. xAI décrit authorization comme « a token that will be set in the Authorization header on requests to the MCP server », ce qui laisse ouverte la question de savoir s'ils ajoutent Bearer à votre place. Notre serveur ne devine pas. Envoyez un jeton nu et vous récupérez une plainte très précise :

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

Écrivez donc le schéma vous-même : "authorization": "Bearer bb_live_…". Si un jour cela se double côté xAI, passez à la forme sans ambiguïté et posez l'en-tête directement avec headers: {"Authorization": "Bearer bb_live_…"}.

allowed_tools n'est facultatif que sur le papier. La doc de xAI est nette : sans lui, toutes les définitions d'outils du serveur atterrissent dans le contexte du modèle, « if an MCP server exposes 10 different tools and you don't specify allowed_tools, all 10 tool definitions will be available ». Nous en exposons exactement dix. La moitié dépense de l'argent. Pour un bot d'images, j'autoriserais list_models, generate_image et get_result, rien d'autre, quitte à élargir quand la vidéo devient un vrai besoin.

Illustration éditoriale d'une carte perforée glissant dans la fente d'un serveur, des clés suspendues à côté

Ce que voit Grok quand il frappe à la porte

Voici notre poignée de main, exécutée pour cet article. La découverte des outils ne demande aucune authentification :

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

Tout ce qui fait réellement quelque chose répond 401 tant qu'aucun jeton n'est présenté, et la réponse porte le pointeur dont un client bien élevé a besoin :

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"

L'URL de resource_metadata renvoie le document protected resource metadata de la spécification d'autorisation MCP : c'est ainsi que les clients OAuth trouvent seuls notre serveur d'autorisation. Par la voie de l'API xAI, vous ne croiserez jamais ce 401, puisque votre clé accompagne chaque appel. Pour l'histoire du connecteur ci-dessous, en revanche, cela compte.

Illustration éditoriale d'un portier vérifiant un jeton en papier devant une armoire à outils ouverte

Encore une note de compatibilité, parce qu'elle mord ceux qui écrivent leur propre client : nous n'exigeons pas l'en-tête Accept: application/json, text/event-stream et nous répondons en JSON simple. Ceux qui échouent mystérieusement derrière une passerelle sont justement les serveurs qui imposent l'Accept version SSE.

Devis, tâche, sondage : le flux qui surprend les agents

Générer une image, c'est un appel et une attente. La vidéo, non, et c'est là qu'une boucle d'agent écrite selon « j'appelle l'outil, je lis la réponse » se bloque.

Les demandes de vidéo et de plusieurs images renvoient un devis plutôt qu'une tâche. Le modèle doit rappeler l'outil une seconde fois avec confirm_cost réglé exactement sur ce montant, au centime près, avant que quoi que ce soit soit débité. C'est un ralentisseur volontaire : un agent ne devrait pas pouvoir dépenser $4.40 sur un clip Veo en 4K parce que quelqu'un a tapé « rends ça plus cinématographique ».

Ensuite, la génération est asynchrone. generate_image et generate_video renvoient immédiatement un job_id ; get_result fait du long-polling jusqu'à 30 secondes par appel et vous rappelez tant que le statut n'est pas stabilisé. Les images arrivent en général en 10 à 60 secondes. La vidéo prend de 1 à 10 minutes selon le modèle et la durée.

Conséquence pratique pour la Responses API : un seul tour d'utilisateur peut réclamer quatre ou cinq appels d'outils côté serveur, et si votre intégration plafonne à deux étapes, Grok annoncera un job_id puis s'arrêtera comme un serveur qui prend la commande et rentre chez lui. Laissez-lui de la marge. Passez aussi idempotency_key sur les générations, pour qu'une requête rejouée ne produise pas un second débit.

Les échecs se remboursent tout seuls. Si le filtre de contenu de Google refuse un prompt ou si l'appel meurt en amont, le solde revient automatiquement et get_result explique quelle étape a refusé. Vous ne payez jamais une vidéo que vous n'avez pas reçue.

Illustration éditoriale d'un ticket en papier échangé contre une photographie terminée au-dessus d'un comptoir

Et grok.com, il sait faire ?

En partie, et la réponse honnête a un trou.

xAI documente le chemin clairement : allez sur grok.com/connectors, cliquez New Connector, choisissez Custom, puis « Enter the MCP server URL and complete any required authentication ». Le serveur doit être joignable depuis l'internet public, ce que le nôtre est évidemment. Les connecteurs intégrés, dit la même page, s'authentifient chacun via OAuth.

Illustration éditoriale d'une fiche tendue vers une prise à demi cachée derrière un rideau

Ce que la page ne dit pas, c'est quelles méthodes d'authentification accepte un connecteur personnalisé. Cette seule phrase, « complete any required authentication », constitue toute la spécification, et la page a été mise à jour le 17 juillet 2026.

Voici où nous en sommes. Nous exploitons un serveur d'autorisation OAuth 2.1 complet : enregistrement dynamique des clients, PKCE en S256, protected resource metadata, resource indicators, toute la spécification d'autorisation MCP. N'importe quel client qui la respecte se connecte sans une ligne de travail de notre côté, exactement comme le font les connecteurs Claude et ChatGPT. Si le connecteur personnalisé de Grok emprunte le même flux, cela marchera tout seul et vous verrez une page de connexion normale à votre compte.

S'il se contente de stocker une URL sans envoyer d'identifiants, vous verrez les dix outils apparaître dans la liste du connecteur et chaque appel reviendra en 401. La découverte des outils est anonyme chez nous : un connecteur peut donc paraître en bonne santé tout en étant incapable de générer quoi que ce soit.

J'aimerais être plus catégorique ici. Si vous avez essayé, le résultat mérite un courriel à [email protected] : le tableau de compatibilité de notre page MCP est mis à jour le jour même.

Combien ça coûte

Les tarifs sont à la génération, prélevés sur un solde prépayé, sans abonnement.

QuoiModèlePrix
Image, 1KNano Banana 2 Lite$0.03
Image, 512–4KNano Banana 2$0.03–$0.13
Image, 1K–4KNano Banana Pro$0.11–$0.20
Vidéo, 4 s 720p sans sonVeo 3.1 Lite$0.10
Vidéo, à partir deVeo 3.1 Fast$0.35
Vidéo, à partir deVeo 3.1$0.70
Vidéo avec audio, la secondeGemini Omni Flash$0.10 ($0.30 pour le minimum de 3 s)
VoixGemini 3.1 Flash TTS$0.01 par tranche de 200 caractères

Photo produit d'une tasse en céramique mate posée sur du lin froissé dans une lumière douce de fenêtre, générée par Nano Banana Pro

Cette tasse, c'est le prompt de l'exemple cURL plus haut, exécuté pour de vrai pendant la rédaction : Nano Banana Pro en 2K, $0.11 débités, terminé 32 secondes après l'appel d'outil.

Un compte neuf démarre avec $0.20, soit six images Lite ou un court clip Veo Lite. De quoi vérifier le câblage, pas de quoi juger les bons modèles, et je préfère le dire franchement.

Les recharges ajoutent un bonus de volume : 5 % dès $50, 10 % dès $100. Un code promo actif ajoute encore 10 % du dépôt, calculés sur la même base : $100 avec un code créditent donc $120. Les chiffres à jour vivent toujours dans la section tarifs.

Grok fabrique déjà des images. Pourquoi passer ailleurs ?

Question légitime, et la liste de modèles de xAI y répond à moitié : ils proposent grok-imagine-image-2.0 et grok-imagine-video-1.5. Pour une image rapide dans le chat, prenez-les. Personne n'a besoin d'un serveur MCP pour ça.

Illustration éditoriale de deux portes, l'une ouvrant sur un appareil photo instantané, l'autre sur un atelier de cinéma lointain

Les raisons d'envoyer la génération chez nous sont plus étroites, et tiennent surtout aux modèles et à la façon dont la facture se lit :

  • Des modèles Google précis. Nano Banana Pro pour le texte dans l'image et le packshot, Veo 3.1 pour la vidéo avec audio natif, Omni Flash quand il faut du son et une retouche conversationnelle du même clip.
  • Un prix avant le débit. list_models renvoie les tarifs unitaires en direct, et la vidéo chiffre avant de dépenser. On peut fixer un budget à un agent et le voir vraiment le tenir.
  • Un solde pour tous les clients. La même clé fonctionne depuis Grok, Gemini CLI, Codex et le studio web, et tous les résultats atterrissent dans un seul historique.
  • Le remboursement en cas d'échec, qui compte davantage qu'il n'y paraît dès qu'un filtre de contenu entre dans la boucle.

Le coût honnête de ce trajet : un saut réseau supplémentaire et une boucle de sondage, une vidéo qui exige une confirmation, Omni Flash plafonné à 720p, et des schémas d'outils que les clients mettent en cache à la connexion, si bien qu'un nouveau paramètre chez nous impose une reconnexion avant que Grok puisse le transmettre. Rien de fatal là-dedans. Tout est réel.

FAQ

Grok prend-il en charge les serveurs MCP ?

Oui, côté API. Les Remote MCP Tools de xAI fonctionnent dans le SDK natif, dans la Responses API compatible OpenAI et dans la Speech to Speech API, avec server_url et server_label obligatoires, authorization, headers et allowed_tools facultatifs. Sur grok.com, les connecteurs MCP personnalisés se trouvent dans Connectors → New Connector → Custom.

Faut-il OAuth ou une clé API suffit-elle ?

Pour l'API xAI, une clé bb_live_… suffit et c'est plus simple : passez-la dans authorization avec le préfixe Bearer. OAuth compte pour les clients de type connecteur qui connectent l'utilisateur eux-mêmes. Notre serveur accepte les deux sur le même endpoint.

Quel modèle Grok choisir ?

Les exemples MCP de xAI utilisent grok-4.6, leur recommandation par défaut du moment. N'importe quel modèle gérant les outils côté serveur fera l'affaire ; le contrat des outils ne change pas d'un modèle à l'autre.

Peut-on générer de la vidéo sonore par ce biais ?

Oui, avec Veo 3.1 audio ou avec Gemini Omni Flash, qui produit toujours du son. Prévoyez la confirmation en deux temps et un sondage d'une minute ou plus. Omni plafonne à 720p : ce n'est pas le choix pour un clip d'accueil plein écran.

Que se passe-t-il quand une génération échoue ?

Le débit s'annule automatiquement et get_result renvoie le motif venu du fournisseur ainsi qu'une étape suivante suggérée. Les refus du filtre de contenu méritent une nouvelle tentative reformulée : le même prompt peut passer au second essai, car le filtre juge les pixels produits, pas seulement la demande.

tutorialmcpapi