Gemini CLI · Server MCP
Server MCP per Gemini CLI: messaggistica, email e calendario
Un solo comando gemini mcp add collega il Server MCP Unipile. Il suo agente costruisce poi funzionalità LinkedIn, WhatsApp, email e calendario nel suo progetto.
Prova gratuita di 7 giorni, senza carta di credito.
Gemini CLI · booking-app
Unipile MCP connesso
Aggiungi la pianificazione tramite calendario alla mia app di prenotazione.
Lettura endpointGET /v2/{account_id}/calendarsschema caricato
Aggiunte la route di disponibilità e quella di prenotazione. Gli eventi finiscono nel calendario collegato dall'utente.
Descriva la prossima funzionalità…
L'obiettivo
Che cosa si vuole ottenere
Aggiungere al suo prodotto una connessione LinkedIn, WhatsApp, email o calendario. Significa leggere un riferimento API, scegliere gli endpoint giusti, collegare Hosted Auth e i suoi callback, e poi conservare gli ID corretti dalla ricerca fino al messaggio. Con il server MCP di Unipile in Gemini CLI, è l'agente a fare quella lettura per lei e a scrivere il codice nel suo stack, dal terminale.
Connettere il server MCP Unipile a Gemini CLIUnipile MCP connesso
Selezioni i canali da connettere
developer.unipile.com/mcpConnetti tutti i canali9 canali
↑↓naviga spazioseleziona ↵connettiun URL, un header
Senza
Schede aperte, tentativi, codice di collegamento
Gemini CLI indovina nomi di endpoint e payload dai dati di training, e sbaglia gli ID.
Si incollano gli schemi del riferimento nella chat, un endpoint alla volta.
La prima chiamata reale avviene in produzione, dopo la code review.
Con il server MCP di Unipile
Il risultato nella sua applicazione
Una route di connessione e un pulsante Settings: ogni utente collega il proprio account tramite Hosted Auth.
Un ricevitore di webhook e una inbox che mostra messaggi ed email man mano che arrivano.
Ogni richiesta già eseguita una volta sulla sua applicazione Development prima di rivedere il diff.
settings.json, utente o progetto
Aggiungere il server MCP Unipile a Gemini CLI
Il server è remoto: un URL su streamable HTTP e un header. Niente npx, nessun processo locale. Un solo comando scrive la voce in settings.json, utente o progetto, e Gemini CLI si connette al lancio successivo.
Gemini CLI installata (npm i -g @google/gemini-cli) e con accesso effettuato, in una cartella resa attendibile.
Un'applicazione Development nella dashboard Unipile, con uno Scope e una chiave API Account scoped.
Almeno un account di test collegato a quello Scope tramite Hosted Auth, così l'agente può eseguire richieste reali.
gemini mcp add, una rigascrive settings.json al posto suo
Impostazioni utente~/.gemini/settings.json
Impostazioni di progetto.gemini/settings.json (scope predefinito)
Chiave da una variabile d'ambiente$UNIPILE_API_KEY negli headers
?
Utente o progetto?Il comando usa per impostazione predefinita lo scope di progetto, che scrive .gemini/settings.json nella cartella corrente. Passi --scope user per tutti i progetti della macchina. Le impostazioni di progetto prevalgono su quelle utente, ed entrambe richiedono una cartella attendibile per essere caricate.
# Registri il server MCP Unipile ospitato per tutti i progetti (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)
# Verifichi, oppure digiti /mcp in una sessione
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" }
}
}
}
// Committato con il repository: tenga la chiave nell'ambiente, non nel file.
{
"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 prima di avviare gemini
Salvi il file e avvii gemini in una cartella attendibile. gemini mcp list mostra unipile come Connected, e /mcp all'interno di una sessione elenca il server. Verificato su gemini-cli 0.60.0.
Cosa fa ogni flag, verificato su gemini-cli 0.60.0
--transport httpObbligatorio: il valore predefinito è stdio, un processo locale. Il server Unipile è remoto su streamable HTTP. La CLI lo scrive come "type": "http".--scope userScrive ~/.gemini/settings.json. Senza questo flag la voce finisce in .gemini/settings.json nella cartella corrente, lo scope di progetto.--header "X-API-KEY: …"Ripetibile. La sua chiave API Account scoped, mai una chiave Service o Account globale. Funziona in qualsiasi posizione del comando.unipile "https://developer.unipile.com/mcp?branch=v2.0"Il nome lo sceglie lei. Metta l'URL tra virgolette: il punto interrogativo è un carattere glob in zsh."$UNIPILE_API_KEY"In settings.json, $VAR o ${VAR} viene letto dall'ambiente all'avvio, così un file di progetto può essere committato senza segreti.--timeout 30000Opzionale, in millisecondi. Lo aumenti solo se il primo handshake fallisce su una rete lenta o dietro un proxy.La parte specifica di Gemini CLI
httpUrl, url, attendibilità e la sua chiave API
Tre elementi di settings.json che decidono se il server si connette, e che nessun altro client ha in questa forma.
1httpUrl o urlLa documentazione associa httpUrl allo streamable HTTP e url a SSE. Il comando gemini mcp add scrive url con "type": "http", ed entrambi si connettono. Se scrive il file a mano, usi httpUrl: un url senza type viene letto come SSE, la causa più citata di uno stato Disconnected."httpUrl": "https://developer.unipile.com/mcp?branch=v2.0"
2$VAR dentro headersGemini CLI espande $NAME e ${NAME} in settings.json, headers inclusi. Il file di progetto può essere committato senza segreti, e ogni sviluppatore esporta la propria chiave API Account scoped."headers": { "X-API-KEY": "$UNIPILE_API_KEY" }
export UNIPILE_API_KEY=your-scoped-api-key
3Una cartella attendibile, e trust lasciato non impostatoIn una cartella non attendibile ogni server risulta Disabled, incluso quelli a livello utente. Renda attendibile la cartella alla prima richiesta o con il comando trust. Lasci non impostata l'opzione trust del server: salterebbe la conferma prima di ogni azione.gemini trust
Verifica
Verificare la connessione
Tre controlli: nella CLI, dentro una sessione, poi con un prompt che legge soltanto la specifica. Nessuno tocca un account collegato.
1Dal terminalelist stampa una riga per server con trasporto e stato. Un segno di spunta e Connected significano che l'handshake è riuscito; un cerchio e Disabled significano che la cartella non è attendibile.gemini mcp list
# ✓ unipile: … (http) - Connected
2Dentro una sessioneDigiti /mcp per vedere ogni server configurato con il suo stato: Connected, Disconnected o Disabled. Il server Unipile compare con le sue azioni pronte all'uso./mcp
# oppure /mcp desc per la descrizione di ogni azione
3In una chat, senza toccare un accountChieda qualcosa che legga soltanto la specifica dell'API. Se l'agente risponde con route e parametri reali, il server è collegato.Usando l'MCP di Unipile, elenca gli endpoint per la ricerca di persone su LinkedIn e i loro parametri obbligatori.
Prompt, non codice di collegamento
Dia il prompt al suo agente
Tre integrazioni, ciascuna con il prompt esatto da incollare in Gemini CLI, gli endpoint Unipile che l'agente legge ed esegue e ciò che arriva nel suo progetto. I percorsi sono completi, sull'URL di base dell'API
https://api.unipile.com, con la sua chiave scoped passata nell'header X-API-KEY della richiesta.Aggiungi la pianificazione tramite calendario alla mia app di prenotazione: leggi la disponibilità di ogni utente su una settimana e crea la riunione nel calendario che ha collegato, Google o Outlook.
Lettura endpointGET /v2/{account_id}/calendars/{calendar_id}/eventsschema caricato
Esecuzione richiestaPOST /v2/{account_id}/calendars/{calendar_id}/events201 Created
Aggiunte
GET /api/availability (eventi nella finestra richiesta, slot occupati calcolati lato server) e POST /api/bookings, che crea l'evento con i partecipanti nel calendario dell'utente e salva l'ID evento restituito. I fusi orari sono presi dal calendario. Creato un evento di test sull'app Development.Disponibilità e creazione di eventi sul calendario collegato dal suo utente
Google Calendar e Outlook Calendar condividono le stesse route di calendario. Gemini CLI legge gli schemi di calendari, eventi e partecipanti tramite il server, scrive il calcolo della disponibilità e la route di prenotazione, e crea un evento su un calendario di test prima che lei riveda il diff.
Endpoint usati dall'agente
GET/v2/{account_id}/calendarsGET/v2/{account_id}/calendars/{calendar_id}/eventsPOST/v2/{account_id}/calendars/{calendar_id}/events
Errore comune: calcolare la disponibilità nel fuso orario del browser. Usi il fuso orario del calendario presente nella risposta dell'API, altrimenti lo slot sarà sfasato di ore per un partecipante remoto.
Vedere tutti i canali del server MCP Unipile
La nostra inbox sincronizza già LinkedIn e WhatsApp con Unipile. Aggiungi Instagram e Telegram con lo stesso modello di thread e lo stesso endpoint di risposta.
Ricerca endpoint"chats messages attendees"3 risultati
Esecuzione richiestaGET /v2/{account_id}/chats200 OK
Nessun nuovo modello: le chat Instagram e Telegram passano dalle stesse route di chat e messaggi, quindi il job di sincronizzazione ora scorre tutti gli account collegati qualunque sia il provider, e l'endpoint di risposta invia dall'account della chat stessa. Aggiunti i due badge di provider ed eseguita la sync sull'app Development con un account di test Instagram e uno Telegram.
Stesse route, due canali in più, nessun nuovo modello
Poiché ogni provider di messaggistica è esposto tramite le stesse route di chat, estendere una inbox significa collegare account tramite Hosted Auth e lasciare che la sincronizzazione li copra. L'agente controlla negli schemi i campi specifici del provider, come gli identificatori dei partecipanti, e lascia invariato il modello di thread.
Endpoint usati dall'agente
GET/v2/accountsGET/v2/{account_id}/chatsGET/v2/{account_id}/chats/{chat_id}/messagesPOST/v2/{account_id}/chats/{chat_id}/messages/send
Errore comune: scrivere il provider in modo fisso nella sincronizzazione. Scorra la route degli account e lasci che il campo provider di ciascun account determini il badge, non il percorso del codice.
Costruire una inbox unificata con un agente
Revisiona la mia integrazione Unipile attuale alla ricerca di ID errati, retry non sicuri e chiamate che dovrebbero essere webhook, e proponi le correzioni.
Lettura endpointPOST /v2/{account_id}/chats/{chat_id}/messages/sendschema caricato
Lettura endpointPOST /v2/webhooks/endpoints/schema caricato
Trovati tre problemi: la chiamata di invio usava il primo account del workspace invece dell'account della chat; il wrapper di retry rinviava i messaggi dopo un timeout; la inbox interrogava la route delle chat ogni 30 secondi. Patch proposte: account ID preso dalla chat, retry limitati alle letture, un endpoint webhook per gli eventi dei messaggi. Applicate e verificate sull'app Development.
Una revisione basata sul contratto reale, non sulla memoria
L'agente confronta il suo codice con gli schemi di richiesta e risposta che legge tramite il server: quale campo porta l'account, quali chiamate sono idempotenti, quali cicli di polling vengono sostituiti dagli eventi webhook. La revisione arriva come un diff applicabile, testato sulla sua applicazione Development.
Endpoint usati dall'agente
GET/v2/accounts/{account_id}POST/v2/{account_id}/chats/{chat_id}/messages/sendPOST/v2/webhooks/endpoints/GET/v2/webhooks/conversations/
Errore comune: accettare una correzione che ritenta una scrittura. Un messaggio o un'email parte una sola volta; il retry sicuro è sul lato lettura, con il webhook come fonte di verità.
Collegare i webhook con un agente
Dallo sviluppo alla produzione
Testare prima su un'applicazione Development
La dashboard Unipile separa un' applicazione Development da una di Produzione. Dia a Gemini CLI una chiave scoped dell'applicazione Development, con uno o due account di test collegati tramite Hosted Auth. L'agente esegue richieste reali su quegli account, per conto dell'utente autenticato che li ha collegati e nei limiti di ogni provider, e nulla tocca gli account dei suoi utenti fino al rilascio. Lasci
trust non impostato nella voce del server durante lo sviluppo, così la CLI chiede conferma prima di ogni azione che scrive.Validi il flusso di connessione end to end: auth link creato lato server, account ID salvato sull'utente.
Validi una lettura e una scrittura per funzionalità: elenco delle chat, invio di un messaggio sull'account di test.
Validi una consegna webhook e uno stato di riconnessione o checkpoint prima di passare la chiave alla Produzione.
crm-app · DevelopmentUsata da Gemini CLI
Scopedev-tests · 2 account
Chiave
scoped Account API keyAccountAccount LinkedIn di test, casella Gmail di test
Webhooks1 endpoint · eventi message
crm-app · ProductionIntatta
Scopeuno per workspace
Chiave
scoped keys, in your backend onlyAccountgli account dei suoi utenti, tramite Hosted Auth
Troubleshooting
Errori frequenti e cosa significano
Che cosa mostrano gemini mcp list e /mcp quando una voce non è corretta, e come risolverla. Quasi sempre si tratta della chiave di trasporto, dello scope, dell'attendibilità della cartella o della chiave API.
No MCP servers configured.
gemini mcp list non trova alcuna voce dalla cartella corrente.
SoluzioneIl file deve essere ~/.gemini/settings.json o .gemini/settings.json nella radice della cartella da cui ha avviato gemini, con mcpServers al primo livello del JSON. Una virgola di troppo fa ignorare l'intero file.
Disconnected
Il server è elencato con una croce e lo stato Disconnected.
SoluzioneControlli prima la chiave di trasporto: httpUrl per lo streamable HTTP, oppure url con "type": "http" come lo scrive il comando. Un url da solo viene letto come SSE. Poi l'URL stesso, con ?branch=v2.0, ed eventuali proxy aziendali.
Disabled, cartella non attendibile
Ogni server, inclusi quelli a livello utente, mostra un cerchio e Disabled con un avviso sulla cartella.
SoluzioneGemini CLI carica i server MCP solo in una cartella attendibile. Accetti la richiesta al primo avvio oppure esegua gemini trust nel progetto, poi ripeta il list.
Aggiunto nel posto sbagliato
La voce funziona in un progetto e manca in un altro.
Soluzionegemini mcp add usa per impostazione predefinita lo scope di progetto e scrive .gemini/settings.json nella cartella corrente. Aggiunga --scope user per tutti i progetti, e ricordi che un file di progetto prevale sul file utente a parità di nome del server.
401 Unauthorized sulle richieste
Il server risulta Connected, l'agente legge la specifica, ma l'esecuzione di un'azione fallisce.
SoluzioneConnected non verifica la chiave. L'header manca, la variabile indicata in headers non è esportata nella shell che ha avviato gemini, c'è uno spazio di troppo attorno al valore, oppure la chiave è una chiave Service o Account globale invece di una chiave API Account scoped.
Timed out
L'handshake o un'azione supera il limite.
SoluzioneIl valore predefinito di timeout è 600000 ms. Il server è remoto e non c'è alcun processo da avviare: un timeout all'avvio indica la rete, un proxy o l'URL. Imposti timeout sulla voce solo dopo aver escluso questi tre.
6000+
Aziende che innovano con Unipile
Fiducia da parte dei leader del settore
1 API
Semplificare le operazioni per tutti i principali canali di comunicazione
2 giorni
Integrazione rapida con una configurazione minima
30%
Riduzione dell'impegno e delle risorse per la manutenzione
Sicurezza e conformità integrate
Protezione di livello aziendale per i vostri dati e flussi di lavoro Per saperne di più sulla nostra sicurezza
SOC 2 Tipo II
Certificato
Controlli di sicurezza verificati in modo indipendente che garantiscono la protezione dei dati e l'integrità operativa.
GDPR
Conforme
Piena conformità alle normative europee sulla protezione dei dati per la privacy degli utenti.
99.9%
Uptime della piattaforma negli ultimi 24 mesi
24/7
Supporto globale con API ad alte prestazioni
FAQ server MCP Gemini CLI
Le domande che si pongono davvero: httpUrl o url, dove si trova settings.json, un comando invece del JSON, come tenere la chiave fuori dal file, Disconnected, No MCP servers configured, l'estensione VS Code e le chiavi.
La documentazione definisce
httpUrl come endpoint streamable HTTP e url come endpoint SSE. Il comando gemini mcp add --transport http scrive url insieme a "type": "http", ed entrambe le forme si connettono nelle versioni attuali. Se scrive il file a mano, usi httpUrl: un url senza type viene letto come SSE, la causa più citata di un server Disconnected.Impostazioni utente in
~/.gemini/settings.json, impostazioni di progetto in .gemini/settings.json nella radice del progetto, entrambe sotto la chiave mcpServers , e le impostazioni di progetto prevalgono su quelle utente. Attenzione al valore predefinito del comando: gemini mcp add scrive nello scope di progetto, a meno che non passi --scope user.Sì, ed è il percorso consigliato:
gemini mcp add --transport http --scope user --header "X-API-KEY: your-scoped-api-key" unipile "https://developer.unipile.com/mcp?branch=v2.0". Il flag --header è ripetibile e può stare in qualsiasi punto del comando. Verificato su gemini-cli 0.60.0.Scriva il valore dell'header come
"$UNIPILE_API_KEY" o "${UNIPILE_API_KEY}". Gemini CLI espande le variabili d'ambiente in settings.json, headers inclusi, così il file di progetto può essere committato senza segreti e ogni sviluppatore esporta la propria chiave API Account scoped prima di avviare gemini.In ordine: la chiave di trasporto (
httpUrl per lo streamable HTTP, oppure url con "type": "http"), un settings.json di progetto che prevale sul suo o viceversa, l'attendibilità della cartella (una cartella non attendibile disabilita ogni server) e infine uno stato Disconnected mentre le azioni funzionano, che deriva da un ping opzionale della specifica. Esegua gemini mcp list, poi /mcp all'interno di una sessione.Gemini CLI non ha trovato alcuna voce
mcpServers nella configurazione che legge dalla cartella corrente. Verifichi che il file sia in ~/.gemini/ o in .gemini/ nella radice del progetto, che mcpServers si trovi al primo livello del JSON e che il JSON sia valido: basta una virgola di troppo perché il file venga ignorato.Questa pagina riguarda Gemini CLI nel terminale, e la configurazione descritta qui è il settings.json letto dalla CLI. L'estensione ha le proprie impostazioni MCP in VS Code; consulti la sua documentazione prima di dare per scontato che il file sia condiviso.
Il server risponde senza chiave quando l'agente si limita a leggere la specifica dell'API. Per eseguire richieste reali, crei uno Scope nella sua applicazione Development, vi assegni gli account di test e generi una chiave API Account scoped per quello Scope. Non dia mai a un client MCP una chiave Service o una chiave Account globale.