FR
Gemini CLI · Serveur MCP

Serveur MCP Gemini CLI : messagerie, email et agenda

Une seule commande gemini mcp add connecte le serveur MCP Unipile. Votre agent intègre ensuite des fonctionnalités LinkedIn, WhatsApp, email et agenda dans votre projet.
Essai gratuit de 7 jours, sans carte bancaire.
Gemini CLI · booking-app
Unipile MCP connecté
Sarah
Ajoute la prise de rendez-vous par agenda à mon app de réservation.
Endpoint de lectureGET /v2/{account_id}/calendarsschéma chargé
Ajout de la route de disponibilités et de la route de réservation. Les événements arrivent dans l'agenda connecté par l'utilisateur.
3 fichiers modifiés · testé sur l'application Development
Décrivez la prochaine fonctionnalité…
Le besoin

Ce que vous cherchez à faire

Ajouter une connexion LinkedIn, WhatsApp, email ou agenda à votre produit, c'est lire une référence API, choisir les bons endpoints, brancher Hosted Auth et ses callbacks, puis conserver les bons ID de la recherche jusqu'au message. Avec le serveur MCP Unipile dans Gemini CLI, l'agent fait cette lecture pour vous et écrit le code dans votre stack, depuis le terminal.
Connecter le serveur MCP Unipile à Gemini CLIUnipile MCP connecté
Sélectionnez les canaux à connecterdeveloper.unipile.com/mcp
Connecter tous les canaux9 canaux
LinkedInLinkedIn/v2/{account_id}/chats
WhatsAppWhatsApp/v2/{account_id}/chats
InstagramInstagram/v2/{account_id}/chats
TelegramTelegram/v2/{account_id}/chats
GmailGmail/v2/{account_id}/emails
OutlookOutlook/v2/{account_id}/emails
IMAPIMAP/v2/{account_id}/emails
Google CalendarGoogle Calendar/v2/{account_id}/calendars
Outlook CalendarOutlook Calendar/v2/{account_id}/calendars
↑↓naviguer espacesélectionner ↵connecterune URL, un en-tête
Sans le serveur Onglets, suppositions, code de liaison
Gemini CLI devine les noms d'endpoints et les payloads à partir de ses données d'entraînement, et se trompe d'ID.
Vous collez dans le chat les schémas de la référence, un endpoint à la fois.
Le premier vrai appel a lieu en production, après la revue de code.
Avec le serveur MCP Unipile Le résultat dans votre application
Une route de connexion et un bouton dans Settings : chaque utilisateur relie son propre compte via Hosted Auth.
Un récepteur de webhooks et une inbox qui affiche les messages et les emails dès leur arrivée.
Chaque requête déjà exécutée une fois sur votre application Development avant que vous relisiez le diff.
settings.json, user ou projet

Ajouter le serveur MCP Unipile à Gemini CLI

Le serveur est distant : une URL en HTTP streamable et un en-tête. Pas de npx, pas de processus local. Une commande écrit l'entrée dans settings.json, user ou projet, et Gemini CLI se connecte au lancement suivant.
Gemini CLI installé (npm i -g @google/gemini-cli) et connecté, dans un dossier approuvé.
Une application Development dans le dashboard Unipile, avec un Scope et une clé Account API scopée.
Au moins un compte de test connecté à ce Scope via Hosted Auth, pour que l'agent puisse exécuter de vraies requêtes.
1
gemini mcp add, une ligneécrit settings.json pour vous
U
Paramètres user~/.gemini/settings.json
P
Paramètres de projet.gemini/settings.json (scope par défaut)
E
Clé issue d'une variable d'environnement$UNIPILE_API_KEY dans headers
?
User ou projet ?La commande utilise par défaut le scope project, qui écrit .gemini/settings.json dans le dossier courant. Passez --scope user pour tous les projets de la machine. Les paramètres de projet priment sur les paramètres user, et les deux nécessitent un dossier approuvé pour se charger.
terminal
# Enregistrer le serveur MCP Unipile hébergé pour tous les projets (scope user) gemini mcp add --transport http --scope user \ --header "X-API-KEY: your-scoped-api-key" \ unipile "https://developer.unipile.com/mcp?branch=v2.0" # MCP server "unipile" added to user settings. (http) # Vérifier, ou taper /mcp dans une session gemini mcp list # ✓ unipile: https://developer.unipile.com/mcp?branch=v2.0 (http) - Connected
{ "mcpServers": { "unipile": { "url": "https://developer.unipile.com/mcp?branch=v2.0", "type": "http", "headers": { "X-API-KEY": "your-scoped-api-key" } } } }
{ "mcpServers": { "unipile": { "url": "https://developer.unipile.com/mcp?branch=v2.0", "type": "http", "headers": { "X-API-KEY": "$UNIPILE_API_KEY" } } } } // Commité avec le dépôt : gardez la clé dans l'environnement, pas dans le fichier.
{ "mcpServers": { "unipile": { "url": "https://developer.unipile.com/mcp?branch=v2.0", "type": "http", "headers": { "X-API-KEY": "${{UNIPILE_API_KEY}}" } } } } // export UNIPILE_API_KEY=your-scoped-api-key avant de lancer gemini
Enregistrez le fichier et lancez gemini dans un dossier approuvé. gemini mcp list affiche unipile comme Connected, et /mcp dans une session liste le serveur. Vérifié sur gemini-cli 0.60.0.
Le rôle de chaque flag, vérifié sur gemini-cli 0.60.0
--transport httpObligatoire : la valeur par défaut est stdio, un processus local. Le serveur Unipile est distant, en HTTP streamable. La CLI l'écrit sous la forme "type": "http".
--scope userÉcrit ~/.gemini/settings.json. Sans lui, l'entrée va dans .gemini/settings.json du dossier courant, le scope project.
--header "X-API-KEY: …"Répétable. Votre clé Account API scopée, jamais une clé Service ou Account globale. N'importe quelle position dans la commande fonctionne.
unipile "https://developer.unipile.com/mcp?branch=v2.0"Le nom est libre. Mettez l'URL entre guillemets : le point d'interrogation est un caractère glob dans zsh.
"$UNIPILE_API_KEY"Dans settings.json, $VAR ou ${VAR} est lu dans l'environnement au lancement : un fichier de projet peut donc être commité sans secret.
--timeout 30000Facultatif, en millisecondes. Augmentez-le seulement si le premier handshake échoue sur un réseau lent ou derrière un proxy.
La partie propre à Gemini CLI

httpUrl, url, trust et votre clé API

Trois éléments de settings.json qui décident si le serveur se connecte, et qu'aucun autre client n'a sous cette forme.
1httpUrl ou urlLa documentation associe httpUrl au HTTP streamable et url à SSE. La commande gemini mcp add écrit url avec "type": "http", et les deux se connectent. Si vous écrivez le fichier à la main, utilisez httpUrl : un url seul sans type est lu comme SSE, la cause la plus citée d'un état Disconnected."httpUrl": "https://developer.unipile.com/mcp?branch=v2.0"
2$VAR dans headersGemini CLI développe $NAME et ${NAME} dans settings.json, headers compris. Le fichier de projet peut être commité sans secret, et chaque développeur exporte sa propre clé Account API scopée."headers": { "X-API-KEY": "$UNIPILE_API_KEY" } export UNIPILE_API_KEY=your-scoped-api-key
3Un dossier approuvé, et trust laissé videDans un dossier non approuvé, tous les serveurs sont listés comme Disabled, y compris au niveau user. Approuvez le dossier à la première invite ou avec la commande trust. Laissez l'option trust du serveur vide : elle sauterait la confirmation avant chaque action.gemini trust
Vérifier

Vérifier la connexion

Trois vérifications : dans la CLI, dans une session, puis avec un prompt qui ne lit que la spécification. Aucune ne touche à un compte connecté.
1Depuis le terminallist affiche une ligne par serveur avec son transport et son état. Une coche et Connected signifient que le handshake a réussi ; un cercle et Disabled signifient que le dossier n'est pas approuvé.gemini mcp list # ✓ unipile: … (http) - Connected
2Dans une sessionTapez /mcp pour voir chaque serveur configuré avec son état : Connected, Disconnected ou Disabled. Le serveur Unipile apparaît avec ses actions prêtes à être appelées./mcp # ou /mcp desc pour la description de chaque action
3Dans un chat, sans toucher à un comptePosez une question qui ne lit que la spécification de l'API. Si l'agent répond avec de vraies routes et de vrais paramètres, le serveur est branché.Avec le MCP Unipile, liste les endpoints de recherche de personnes LinkedIn et leurs paramètres obligatoires.
Des prompts, pas du code de liaison

Donnez le prompt à votre agent

Trois tâches d'intégration, chacune avec le prompt exact à coller dans Gemini CLI, les endpoints Unipile que l'agent lit et exécute, et ce qui arrive dans votre projet. Les chemins sont complets, sur l'URL de base de l'API https://api.unipile.com, avec votre clé scopée dans l'en-tête X-API-KEY .
Gemini CLI · booking-appApplication Development
Ajoute la prise de rendez-vous à mon app de réservation : lis les disponibilités de chaque utilisateur sur une semaine et crée la réunion dans l'agenda qu'il a connecté, Google ou Outlook.
Endpoint de lectureGET /v2/{account_id}/calendars/{calendar_id}/eventsschéma chargé
Exécuter la requêtePOST /v2/{account_id}/calendars/{calendar_id}/events201 Created
Ajout de GET /api/availability (événements sur la fenêtre demandée, créneaux occupés calculés côté serveur) et POST /api/bookings, qui crée l'événement avec ses participants dans l'agenda de l'utilisateur et stocke l'ID d'événement renvoyé. Les fuseaux horaires sont repris de l'agenda. Événement de test créé sur l'application Development.4 fichiers modifiés · testé sur l'application Development

Disponibilités et création d'événements dans l'agenda connecté par votre utilisateur

Google Calendar et Outlook Calendar partagent les mêmes routes d'agenda. Gemini CLI lit les schémas d'agenda, d'événement et de participant via le serveur, écrit le calcul des disponibilités et la route de réservation, et crée un événement dans un agenda de test avant que vous relisiez le diff.
Endpoints utilisés par l'agent
GET/v2/{account_id}/calendarsGET/v2/{account_id}/calendars/{calendar_id}/eventsPOST/v2/{account_id}/calendars/{calendar_id}/events
Erreur fréquente : Calculer les disponibilités dans le fuseau horaire du navigateur. Utilisez le fuseau de l'agenda renvoyé par l'API, sinon le créneau est décalé de plusieurs heures pour un participant à distance.
Voir tous les canaux du serveur MCP Unipile
Gemini CLI · support-inboxApplication Development
Notre inbox synchronise déjà LinkedIn et WhatsApp avec Unipile. Ajoute Instagram et Telegram avec le même modèle de fil et le même endpoint de réponse.
Rechercher des endpoints"chats messages attendees"3 résultats
Exécuter la requêteGET /v2/{account_id}/chats200 OK
Pas de nouveau modèle : les chats Instagram et Telegram passent par les mêmes routes de chat et de message. Le job de synchro parcourt donc désormais chaque compte connecté, quel que soit le fournisseur, et l'endpoint de réponse envoie depuis le compte propriétaire du chat. Ajout des deux badges fournisseur et synchro exécutée sur l'application Development avec un compte de test Instagram et un Telegram.3 fichiers modifiés · 4 canaux dans une seule liste

Mêmes routes, deux canaux de plus, aucun nouveau modèle

Comme chaque fournisseur de messagerie est exposé via les mêmes routes de chat, étendre une inbox revient à connecter des comptes via Hosted Auth et à laisser la synchro les couvrir. L'agent vérifie les champs propres à chaque fournisseur dans les schémas, comme les identifiants de participants, et garde le modèle de fil inchangé.
Endpoints utilisés par l'agent
GET/v2/accountsGET/v2/{account_id}/chatsGET/v2/{account_id}/chats/{chat_id}/messagesPOST/v2/{account_id}/chats/{chat_id}/messages/send
Erreur fréquente : Coder le fournisseur en dur dans la synchro. Parcourez la route des comptes et laissez le champ provider de chaque compte piloter le badge, pas le chemin d'exécution.
Créer une inbox unifiée avec un agent
Gemini CLI · crm-appApplication Development
Relis mon intégration Unipile actuelle pour repérer les ID incorrects, les retries risqués et les appels qui devraient être des webhooks, et propose les corrections.
Endpoint de lecturePOST /v2/{account_id}/chats/{chat_id}/messages/sendschéma chargé
Endpoint de lecturePOST /v2/webhooks/endpoints/schéma chargé
Trois problèmes trouvés : l'envoi utilisait le premier compte du workspace au lieu du compte du chat ; le wrapper de retry renvoyait les messages après un timeout ; l'inbox interrogeait la route des chats toutes les 30 secondes. Correctifs proposés : ID du compte repris du chat, retries limités aux lectures, endpoint webhook pour les événements de message. Appliqués et vérifiés sur l'application Development.3 constats · 3 correctifs · vérifiés sur l'application Development

Un audit face au vrai contrat, pas de mémoire

L'agent compare votre code aux schémas de requête et de réponse qu'il lit via le serveur : quel champ porte le compte, quels appels sont idempotents, quelles boucles de polling les événements webhook remplacent. La revue arrive sous forme de diff applicable, testé sur votre application Development.
Endpoints utilisés par l'agent
GET/v2/accounts/{account_id}POST/v2/{account_id}/chats/{chat_id}/messages/sendPOST/v2/webhooks/endpoints/GET/v2/webhooks/conversations/
Erreur fréquente : Accepter un correctif qui relance une écriture. Un message ou un email part une seule fois ; le retry sûr se fait côté lecture, avec le webhook comme source de vérité.
Brancher les webhooks avec un agent
Du développement à la production

Testez d'abord sur une application Development

Le dashboard Unipile sépare une application Development d'une application Production. Donnez à Gemini CLI une clé scopée de l'application Development, avec un ou deux comptes de test connectés via Hosted Auth. L'agent exécute de vraies requêtes sur ces comptes, pour le compte de l'utilisateur authentifié qui les a reliés, dans les limites de chaque fournisseur, et rien ne touche aux comptes de vos utilisateurs avant la mise en production. Laissez trust vide sur l'entrée du serveur pendant le développement, pour que la CLI demande confirmation avant chaque action d'écriture.
Validez le flux de connexion de bout en bout : lien d'authentification créé côté serveur, ID du compte stocké sur l'utilisateur.
Validez une lecture et une écriture par fonctionnalité : lister les chats, envoyer un message sur le compte de test.
Validez une livraison de webhook et un état de reconnexion ou de checkpoint avant de passer la clé en Production.
crm-app · DevelopmentUtilisé par Gemini CLI
Scopedev-tests · 2 comptes
Cléclé Account API scopée
ComptesCompte de test LinkedIn, boîte mail de test Gmail
Webhooks1 endpoint · événements de message
crm-app · ProductionIntacte
Scopeune par workspace
Cléclés scopées, uniquement dans votre backend
Comptesles comptes de vos utilisateurs, via Hosted Auth
Dépannage

Erreurs fréquentes et leur signification

Ce qu'affichent gemini mcp list et /mcp quand une entrée est incorrecte, et la correction de chaque cas. La plupart tiennent à la clé de transport, au scope, à l'approbation du dossier ou à la clé API.
No MCP servers configured.
gemini mcp list ne trouve aucune entrée depuis le dossier courant. CorrectionLe fichier doit être ~/.gemini/settings.json ou .gemini/settings.json à la racine du dossier depuis lequel vous avez lancé gemini, avec mcpServers au premier niveau du JSON. Une virgule finale fait ignorer tout le fichier.
Disconnected
Le serveur est listé avec une croix et Disconnected. CorrectionVérifiez d'abord la clé de transport : httpUrl pour le HTTP streamable, ou url avec "type": "http" tel que la commande l'écrit. Un url seul est lu comme SSE. Ensuite l'URL elle-même, avec ?branch=v2.0, et un éventuel proxy d'entreprise.
Disabled, dossier non approuvé
Tous les serveurs, niveau user compris, affichent un cercle et Disabled avec un avertissement sur le dossier. CorrectionGemini CLI ne charge les serveurs MCP que dans un dossier approuvé. Acceptez l'invite au premier lancement ou lancez gemini trust dans le projet, puis listez à nouveau.
Ajouté au mauvais endroit
L'entrée fonctionne dans un projet et manque dans un autre. Correctiongemini mcp add utilise par défaut le scope project et écrit .gemini/settings.json dans le dossier courant. Ajoutez --scope user pour tous les projets, et n'oubliez pas qu'un fichier de projet prime sur le fichier user pour un même nom de serveur.
401 Unauthorized sur les requêtes
Le serveur affiche Connected, l'agent lit la spécification, mais l'exécution d'une action échoue. CorrectionConnected ne vérifie pas la clé. L'en-tête manque, la variable nommée dans headers n'est pas exportée dans le shell qui a lancé gemini, un espace parasite entoure la valeur, ou la clé est une clé Service ou Account globale au lieu d'une clé Account API scopée.
Timed out
Le handshake ou une action dépasse la limite. CorrectionLe timeout par défaut est de 600000 ms. Le serveur est distant, il n'y a aucun processus à démarrer : un timeout au démarrage pointe vers le réseau, un proxy ou l'URL. Définissez timeout sur l'entrée seulement après avoir écarté ces trois causes.
6000+ Les entreprises qui innovent avec Unipile
Des entreprises leaders nous font confiance
1 API
Toutes les plateformes centralisées en une API
2 jours
Intégration très rapide
30%
Réduction des efforts et des ressources de maintenance

Sécurité et conformité

Une protection de niveau entreprise pour vos données et workflows En savoir plus sur notre sécurité
SOC 2 Type II
SOC 2 Type II
Certifié
Contrôles de sécurité vérifiés de manière indépendante garantissant la protection des données et l'intégrité opérationnelle.
GDPR
GDPR
Conforme à la loi
Conformité totale avec les réglementations européennes en matière de protection des données pour le respect de la vie privée des utilisateurs.
99.9%
Temps de disponibilité de la plateforme au cours des 24 derniers mois
24/7
Support mondial avec API performante

FAQ serveur MCP Gemini CLI

Les questions réellement posées : httpUrl ou url, emplacement de settings.json, une commande au lieu du JSON, la clé hors du fichier, Disconnected, No MCP servers configured, l'extension VS Code et les clés.
La documentation définit httpUrl comme l'endpoint HTTP streamable et url comme un endpoint SSE. La commande gemini mcp add --transport http écrit url accompagné de "type": "http", et les deux formes se connectent sur les versions actuelles. Si vous écrivez le fichier à la main, utilisez httpUrl : un url sans type est lu comme SSE, la cause la plus citée d'un serveur Disconnected.
Les paramètres user dans ~/.gemini/settings.json, les paramètres de projet dans .gemini/settings.json à la racine de votre projet, tous deux sous la clé mcpServers , et les paramètres de projet priment sur les paramètres user. Attention au comportement par défaut de la commande : gemini mcp add écrit dans le scope project sauf si vous passez --scope user.
Oui, et c'est la voie recommandée : gemini mcp add --transport http --scope user --header "X-API-KEY: your-scoped-api-key" unipile "https://developer.unipile.com/mcp?branch=v2.0". Le flag --header est répétable et peut se placer n'importe où dans la commande. Vérifié sur gemini-cli 0.60.0.
Écrivez la valeur de l'en-tête sous la forme "$UNIPILE_API_KEY" ou "${UNIPILE_API_KEY}". Gemini CLI développe les variables d'environnement dans settings.json, headers compris : le fichier de projet peut donc être commité sans secret, et chaque développeur exporte sa propre clé Account API scopée avant de lancer gemini.
Dans l'ordre : la clé de transport (httpUrl pour le HTTP streamable, ou url avec "type": "http"), un settings.json de projet qui écrase le vôtre ou l'inverse, l'approbation du dossier (un dossier non approuvé désactive tous les serveurs), et enfin un état Disconnected alors que les actions fonctionnent, qui vient d'un ping facultatif de la spécification. Lancez gemini mcp list, puis /mcp dans une session.
Gemini CLI n'a trouvé aucune entrée mcpServers dans la configuration qu'il lit depuis le dossier courant. Vérifiez que le fichier se trouve dans ~/.gemini/ ou dans .gemini/ à la racine du projet, que mcpServers est au premier niveau du JSON, et que le JSON est valide : une virgule finale suffit à faire ignorer le fichier.
Cette page couvre Gemini CLI dans le terminal, et la configuration décrite ici est le settings.json lu par la CLI. L'extension a ses propres paramètres MCP dans VS Code ; consultez sa documentation avant de supposer que le fichier est partagé.
Le serveur répond sans clé quand l'agent se contente de lire la spécification de l'API. Pour exécuter de vraies requêtes, créez un Scope dans votre application Development, rattachez-y les comptes de test et générez une clé Account API scopée pour ce Scope. Ne donnez jamais à un client MCP une clé Service ou une clé Account globale.