BR
Gemini CLI · MCP Server

Gemini CLI MCP Server: mensageria, e-mail e calendário

Um único comando gemini mcp add conecta o Servidor MCP da Unipile. Seu agente então cria recursos de LinkedIn, WhatsApp, e-mail e calendário no seu projeto.
Teste grátis de 7 dias, sem cartão de crédito.
Gemini CLI · booking-app
Unipile MCP conectado
Sarah
Adicione agendamento por calendário ao meu app de reservas.
Ler endpointGET /v2/{account_id}/calendarsschema carregado
Adicionei a rota de disponibilidade e a rota de reserva. Os eventos caem no calendário que o usuário conectou.
3 arquivos alterados · testado na aplicação Development
Descreva o próximo recurso…
O objetivo

O que você quer construir

Adicionar uma conexão de LinkedIn, WhatsApp, e-mail ou calendário ao seu produto. Isso significa ler uma referência de API, escolher os endpoints certos, montar o Hosted Auth e seus callbacks e depois guardar os IDs certos da busca até a mensagem. Com o servidor MCP da Unipile no Gemini CLI, o agente faz essa leitura por você e escreve o código na sua stack, direto do terminal.
Conecte o servidor MCP da Unipile ao Gemini CLIUnipile MCP conectado
Selecione os canais que quer conectardeveloper.unipile.com/mcp
Conectar todos os canais9 canais
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
↑↓navegar espaçoselecionar ↵conectaruma URL, um header
Sem isso Abas, adivinhação, código de cola
O Gemini CLI adivinha nomes de endpoints e payloads a partir dos dados de treino, e erra os IDs.
Você cola schemas da referência no chat, um endpoint de cada vez.
A primeira chamada real acontece em produção, depois do code review.
Com o servidor MCP da Unipile O resultado na sua aplicação
Uma rota de conexão e um botão nas configurações: cada usuário vincula a própria conta pelo Hosted Auth.
Um receptor de webhook e uma caixa de entrada que mostra mensagens e e-mails conforme eles chegam.
Cada requisição já executada uma vez na sua aplicação Development antes de você revisar o diff.
settings.json, de usuário ou de projeto

Adicione o servidor MCP da Unipile ao Gemini CLI

O servidor é remoto: uma URL sobre streamable HTTP e um header. Sem npx, sem processo local. Um comando escreve a entrada no settings.json, de usuário ou de projeto, e o Gemini CLI conecta na próxima inicialização.
Gemini CLI instalado (npm i -g @google/gemini-cli) e com login feito, em uma pasta que você marcou como confiável.
Uma aplicação Development no dashboard da Unipile, com um Scope e uma chave de API de conta com escopo.
Pelo menos uma conta de teste conectada a esse Scope via Hosted Auth, para que o agente possa executar requisições reais.
1
gemini mcp add, uma linhaescreve o settings.json para você
U
Settings de usuário~/.gemini/settings.json
P
Settings de projeto.gemini/settings.json (scope padrão)
E
Chave vinda de uma variável de ambiente$UNIPILE_API_KEY em headers
?
De usuário ou de projeto?O comando usa por padrão o scope de projeto, que escreve .gemini/settings.json na pasta atual. Passe --scope user para valer em todos os projetos da máquina. As settings de projeto têm prioridade sobre as de usuário, e ambas precisam de uma pasta confiável para carregar.
terminal
# Registre o servidor MCP hospedado da Unipile para todos os projetos (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) # Verifique, ou digite /mcp dentro de uma sessão 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" } } } } // Versionado com o repositório: mantenha a chave no ambiente, não no arquivo.
{ "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 antes de iniciar o gemini
Salve o arquivo e inicie o gemini em uma pasta confiável. O gemini mcp list mostra unipile como Connected, e o /mcp dentro de uma sessão lista o servidor. Verificado no gemini-cli 0.60.0.
O que cada flag faz, verificado no gemini-cli 0.60.0
--transport httpObrigatória: o padrão é stdio, um processo local. O servidor da Unipile é remoto, sobre streamable HTTP. O CLI grava como "type": "http".
--scope userEscreve em ~/.gemini/settings.json. Sem ela a entrada vai para .gemini/settings.json na pasta atual, o scope de projeto.
--header "X-API-KEY: …"Repetível. Sua chave de API de conta com escopo, nunca uma chave Service ou de conta global. Funciona em qualquer posição do comando.
unipile "https://developer.unipile.com/mcp?branch=v2.0"O nome é seu. Coloque a URL entre aspas: a interrogação é um caractere de glob no zsh.
"$UNIPILE_API_KEY"No settings.json, $VAR ou ${VAR} é lido do ambiente na inicialização, então um arquivo de projeto pode ser versionado sem segredo.
--timeout 30000Opcional, em milissegundos. Aumente só se o primeiro handshake falhar em uma rede lenta ou atrás de um proxy.
A parte específica do Gemini CLI

httpUrl, url, confiança e sua chave de API

Três coisas no settings.json que decidem se o servidor conecta, e que nenhum outro cliente tem nesta forma.
1httpUrl ou urlA documentação associa httpUrl ao streamable HTTP e url ao SSE. O comando gemini mcp add escreve url junto com "type": "http", e as duas formas conectam. Se você escrever o arquivo na mão, use httpUrl: um url sem type é lido como SSE, a causa mais citada de um status Disconnected."httpUrl": "https://developer.unipile.com/mcp?branch=v2.0"
2$VAR dentro de headersO Gemini CLI expande $NAME e ${NAME} no settings.json, inclusive em headers. O arquivo de projeto pode ser versionado sem segredo, e cada dev exporta a própria chave de API de conta com escopo."headers": { "X-API-KEY": "$UNIPILE_API_KEY" } export UNIPILE_API_KEY=your-scoped-api-key
3Uma pasta confiável, e trust sem valorEm uma pasta não confiável todos os servidores aparecem como Disabled, inclusive os de nível de usuário. Marque a pasta como confiável na primeira pergunta ou com o comando trust. Deixe a opção trust do servidor sem valor: ela pularia a confirmação antes de cada ação.gemini trust
Verificar

Verifique a conexão

Três checagens: no CLI, dentro de uma sessão e depois com um prompt que só lê a especificação. Nenhuma delas toca em uma conta conectada.
1No terminalO list imprime uma linha por servidor, com transporte e status. Um visto e Connected significam que o handshake deu certo; um círculo e Disabled significam que a pasta não é confiável.gemini mcp list # ✓ unipile: … (http) - Connected
2Dentro de uma sessãoDigite /mcp para ver cada servidor configurado com o estado dele: Connected, Disconnected ou Disabled. O servidor da Unipile aparece com as ações prontas para serem chamadas./mcp # ou /mcp desc para a descrição de cada ação
3Em um chat, sem tocar em nenhuma contaPergunte algo que só exija a leitura da especificação da API. Se o agente responder com rotas e parâmetros reais, o servidor está conectado.Usando o Unipile MCP, liste os endpoints de busca de pessoas no LinkedIn e os parâmetros obrigatórios de cada um.
Prompts, não código de cola

Entregue o prompt ao seu agente

Três tarefas de integração, cada uma com o prompt exato para colar no Gemini CLI, os endpoints Unipile que o agente lê e executa e o que chega ao seu projeto. Os paths estão completos, sobre a URL base da API https://api.unipile.com, com sua chave com escopo no X-API-KEY como header.
Gemini CLI · booking-appAplicação Development
Adicione agendamento de calendário ao meu app de reservas: leia a disponibilidade de cada usuário ao longo de uma semana e crie a reunião no calendário que ele conectou, Google ou Outlook.
Ler endpointGET /v2/{account_id}/calendars/{calendar_id}/eventsschema carregado
Executar requisiçãoPOST /v2/{account_id}/calendars/{calendar_id}/events201 Created
Adicionei GET /api/availability (eventos na janela pedida, horários ocupados calculados no servidor) e POST /api/bookings, que cria o evento com os participantes no calendário do usuário e guarda o ID de evento devolvido. Os fusos horários vêm do calendário. Criei um evento de teste na aplicação Development.4 arquivos alterados · testado na aplicação Development

Disponibilidade e criação de evento no calendário que seu usuário conectou

Google Calendar e Outlook Calendar compartilham as mesmas rotas de calendário. O Gemini CLI lê os schemas de calendário, de evento e de participante pelo servidor, escreve o cálculo de disponibilidade e a rota de reserva, e cria um evento em um calendário de teste antes de você revisar o diff.
Endpoints usados pelo agente
GET/v2/{account_id}/calendarsGET/v2/{account_id}/calendars/{calendar_id}/eventsPOST/v2/{account_id}/calendars/{calendar_id}/events
Erro comum: Calcular a disponibilidade no fuso horário do navegador. Use o fuso horário do calendário que vem na resposta da API, ou o horário fica errado por horas para um participante remoto.
Ver todos os canais no servidor MCP da Unipile
Gemini CLI · support-inboxAplicação Development
Nossa caixa de entrada já sincroniza LinkedIn e WhatsApp com a Unipile. Adicione Instagram e Telegram com o mesmo modelo de thread e o mesmo endpoint de resposta.
Buscar endpoints"chats messages attendees"3 resultados
Executar requisiçãoGET /v2/{account_id}/chats200 OK
Nenhum modelo novo: os chats de Instagram e de Telegram vêm pelas mesmas rotas de chat e de mensagem, então o job de sincronização agora percorre todas as contas conectadas, seja qual for o provedor, e o endpoint de resposta envia pela própria conta do chat. Adicionei os dois badges de provedor e rodei a sincronização na aplicação Development com uma conta de teste do Instagram e uma do Telegram.3 arquivos alterados · 4 canais em uma só lista

Mesmas rotas, dois canais a mais, nenhum modelo novo

Como todos os provedores de mensageria são expostos pelas mesmas rotas de chat, ampliar uma caixa de entrada é questão de conectar contas pelo Hosted Auth e deixar a sincronização cobri-las. O agente confere os campos específicos de cada provedor nos schemas, como os identificadores de participante, e mantém o modelo de thread intacto.
Endpoints usados pelo agente
GET/v2/accountsGET/v2/{account_id}/chatsGET/v2/{account_id}/chats/{chat_id}/messagesPOST/v2/{account_id}/chats/{chat_id}/messages/send
Erro comum: Fixar o provedor no código da sincronização. Percorra a rota de contas e deixe o campo provider de cada conta definir o badge, em vez de criar um caminho de código.
Criar uma caixa de entrada unificada com um agente
Gemini CLI · crm-appAplicação Development
Revise minha integração atual com a Unipile em busca de IDs incorretos, retentativas inseguras e chamadas que deveriam ser webhooks, e proponha as correções.
Ler endpointPOST /v2/{account_id}/chats/{chat_id}/messages/sendschema carregado
Ler endpointPOST /v2/webhooks/endpoints/schema carregado
Encontrei três problemas: a chamada de envio usava a primeira conta do workspace em vez da conta do chat; o wrapper de retentativa reenviava mensagens em caso de timeout; a caixa de entrada consultava a rota de chats a cada 30 segundos. Patches propostos: ID de conta obtido do chat, retentativas limitadas às leituras, um endpoint de webhook para eventos de mensagem. Aplicado e verificado na aplicação Development.3 achados · 3 patches · verificado na aplicação Development

Uma auditoria contra o contrato real, não contra a memória

O agente compara seu código com os schemas de requisição e de resposta que lê pelo servidor: qual campo carrega a conta, quais chamadas são idempotentes, quais loops de polling os eventos de webhook substituem. A revisão chega como um diff que você pode aplicar, testado na sua aplicação Development.
Endpoints usados pelo agente
GET/v2/accounts/{account_id}POST/v2/{account_id}/chats/{chat_id}/messages/sendPOST/v2/webhooks/endpoints/GET/v2/webhooks/conversations/
Erro comum: Aceitar uma correção que repete uma escrita. Uma mensagem ou um e-mail sai uma vez só; a retentativa segura é do lado da leitura, com o webhook como fonte de verdade.
Configurar webhooks com um agente
Do Development para a Production

Teste primeiro em uma aplicação Development

O dashboard da Unipile separa uma aplicação Development de uma de Production. Dê ao Gemini CLI uma chave com escopo da aplicação Development, com uma ou duas contas de teste conectadas via Hosted Auth. O agente executa requisições reais nessas contas, em nome do usuário autenticado que as vinculou, dentro dos limites de cada provedor, e nada toca as contas dos seus usuários até você publicar. Deixe trust sem valor na entrada do servidor enquanto desenvolve, para que o CLI pergunte antes de cada ação de escrita.
Valide o fluxo de conexão de ponta a ponta: link de autenticação criado no servidor, ID de conta guardado no usuário.
Valide uma leitura e uma escrita por recurso: listar chats, enviar uma mensagem na conta de teste.
Valide uma entrega de webhook e um estado de reconexão ou checkpoint antes de trocar a chave para a Production.
crm-app · DevelopmentUsada pelo Gemini CLI
Escopodev-tests · 2 contas
Chavescoped Account API key
ContasConta de teste LinkedIn, caixa de e-mail Gmail de teste
Webhooks1 endpoint · eventos de mensagem
crm-app · ProductionSem alterações
Escopouma por workspace
Chavescoped keys, in your backend only
Contasas próprias contas dos seus usuários, via Hosted Auth
Solução de problemas

Erros comuns e o que eles significam

O que o gemini mcp list e o /mcp mostram quando uma entrada está errada, e a correção de cada caso. Quase todos se resumem à chave de transporte, ao scope, à confiança da pasta ou à chave de API.
No MCP servers configured.
O gemini mcp list não encontra nenhuma entrada a partir da pasta atual. CorreçãoO arquivo precisa ser ~/.gemini/settings.json ou .gemini/settings.json na raiz da pasta de onde você iniciou o gemini, com mcpServers no nível superior do JSON. Uma vírgula sobrando faz o arquivo inteiro ser ignorado.
Disconnected
O servidor aparece na lista com um X e Disconnected. CorreçãoConfira primeiro a chave de transporte: httpUrl para streamable HTTP, ou url com "type": "http" como o comando grava. Um url sozinho é lido como SSE. Depois a própria URL, com ?branch=v2.0, e qualquer proxy corporativo.
Disabled, pasta não confiável
Todos os servidores, inclusive os de nível de usuário, aparecem com um círculo e Disabled, junto de um aviso sobre a pasta. CorreçãoO Gemini CLI carrega servidores MCP apenas em uma pasta confiável. Aceite a pergunta na primeira inicialização ou execute gemini trust no projeto, e liste de novo.
Adicionado no lugar errado
A entrada funciona em um projeto e some em outro. Correçãogemini mcp add usa por padrão o scope de projeto e escreve .gemini/settings.json na pasta atual. Acrescente --scope user para valer em todos os projetos, e lembre que um arquivo de projeto tem prioridade sobre o de usuário para o mesmo nome de servidor.
401 Unauthorized nas requisições
O servidor aparece como Connected, o agente lê a especificação, mas executar uma ação falha. CorreçãoO status Connected não verifica a chave. O header está faltando, a variável indicada em headers não foi exportada no shell que iniciou o gemini, há um espaço sobrando em torno do valor, ou a chave é uma chave Service ou de conta global em vez de uma chave de API de conta com escopo.
Timed out
O handshake ou uma ação ultrapassa o limite. CorreçãoO timeout padrão é 600000 ms. O servidor é remoto, não há processo para iniciar: um timeout na inicialização aponta para a rede, um proxy ou a URL. Defina timeout na entrada só depois de descartar essas três causas.
6000+ Empresas que inovam com a Unipile
Com a confiança dos líderes do setor
1 API
Simplificar as operações de todos os principais canais de comunicação
2 dias
Obtenha integração ao vivo rapidamente com o mínimo de configuração
30%
Redução dos esforços e recursos de manutenção

Segurança e conformidade incorporadas

Proteção de nível empresarial para seus dados e fluxos de trabalho Saiba mais sobre nossa segurança
SOC 2 Tipo II
SOC 2 Tipo II
Certificado
Controles de segurança auditados de forma independente, garantindo a proteção dos dados e a integridade operacional.
GDPR
GDPR
Em conformidade
Conformidade total com os regulamentos europeus de proteção de dados para a privacidade do usuário.
99.9%
Tempo de atividade da plataforma nos últimos 24 meses
24/7
Suporte global com API de alto desempenho

FAQ do servidor MCP no Gemini CLI

As perguntas que as pessoas realmente digitam: httpUrl ou url, onde fica o settings.json, um comando em vez de JSON, como manter a chave fora do arquivo, Disconnected, No MCP servers configured, a extensão do VS Code e as chaves.
A documentação define httpUrl como o endpoint streamable HTTP e url como um endpoint SSE. O comando gemini mcp add --transport http grava url junto com "type": "http", e as duas formas conectam nas versões atuais. Se você escrever o arquivo na mão, use httpUrl: um url sozinho, sem type, é lido como SSE, a causa mais citada de um servidor Disconnected.
As settings de usuário em ~/.gemini/settings.json, as de projeto em .gemini/settings.json na raiz do seu projeto, ambas sob a chave mcpServers do JSON, e as de projeto têm prioridade sobre as de usuário. Atenção ao padrão do comando: gemini mcp add grava no scope de projeto, a menos que você passe --scope user.
Sim, e é o caminho recomendado: gemini mcp add --transport http --scope user --header "X-API-KEY: your-scoped-api-key" unipile "https://developer.unipile.com/mcp?branch=v2.0". A flag --header é repetível e pode ficar em qualquer posição do comando. Verificado no gemini-cli 0.60.0.
Escreva o valor do header como "$UNIPILE_API_KEY" ou "${UNIPILE_API_KEY}". O Gemini CLI expande variáveis de ambiente no settings.json, inclusive em headers, então o arquivo de projeto pode ser versionado sem segredo e cada dev exporta a própria chave de API de conta com escopo antes de iniciar o gemini.
Nesta ordem: a chave de transporte (httpUrl para streamable HTTP, ou url com "type": "http"), um settings.json de projeto que sobrepõe o seu ou o contrário, a confiança da pasta (uma pasta não confiável desativa todos os servidores) e, por fim, um status exibido como Disconnected enquanto as ações funcionam, que vem de um ping opcional da especificação. Execute gemini mcp list, e depois /mcp dentro de uma sessão.
O Gemini CLI não encontrou nenhuma entrada mcpServers na configuração que lê a partir da pasta atual. Confira se o arquivo está em ~/.gemini/ ou em .gemini/ na raiz do projeto, se mcpServers está no nível superior do JSON e se o JSON é válido: uma vírgula sobrando já basta para o arquivo ser ignorado.
Esta página cobre o Gemini CLI no terminal, e a configuração descrita aqui é o settings.json lido pelo CLI. A extensão tem as próprias configurações de MCP no VS Code; confira a documentação dela antes de supor que o arquivo é compartilhado.
O servidor responde sem chave quando o agente só lê a especificação da API. Para executar requisições reais, crie um Scope na sua aplicação Development, associe as contas de teste e gere uma chave de API de conta com escopo para esse Scope. Nunca dê a um cliente MCP uma chave Service ou uma chave de conta global.