BR
Claude Code · MCP Server

Claude Code MCP Server: mensageria e e-mail no seu app

Um único comando claude mcp add conecta o Servidor MCP da Unipile. O Claude Code então cria recursos de LinkedIn, WhatsApp e e-mail no seu projeto.
Teste grátis de 7 dias, sem cartão de crédito.
Claude Code · crm-app
Unipile MCP conectado
Sarah
Adicione a conexão de contas do LinkedIn ao meu CRM.
Ler endpointPOST /v2/auth/linkschema carregado
Adicionei a rota de conexão e o botão em Configurações. O ID da conta fica salvo no usuário.
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 Claude Code, o agente faz essa leitura por você e escreve o código na sua stack, pelo terminal ou pela extensão da IDE.
Conecte o servidor MCP da Unipile ao Claude CodeUnipile 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 Claude Code 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.
claude mcp add, três scopes

Adicione o servidor MCP da Unipile ao Claude Code

O servidor é remoto: uma URL sobre streamable HTTP e um header. Sem npx, sem processo local. Um comando faz o registro; o scope escolhido define onde ele carrega e se o seu time também recebe. Comando e JSON verificados na documentação oficial do Claude Code.
Claude Code instalado (CLI ou extensão da IDE), com login feito e executado a partir da pasta do projeto.
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.
U
Scope user--scope user · todos os projetos, privado para você
P
Scope project.mcp.json na raiz do repositório, compartilhado
L
Scope local (padrão)só este projeto, privado, em ~/.claude.json
?
Qual scope escolher?User quando você constrói várias integrações Unipile em uma mesma máquina. Project quando o time inteiro deve receber o servidor pelo repositório, com a chave de cada dev em uma variável de ambiente. Local para um teste pontual. Quando um nome existe em vários scopes, local vence project, que vence user.
terminal
# Scope user: todos os projetos desta máquina, privado para você claude mcp add --transport http --scope user \ unipile "https://developer.unipile.com/mcp?branch=v2.0" \ --header "X-API-KEY: your-scoped-api-key" # O Claude Code imprime "Added …", depois: claude mcp list
// Scope project: versionado na raiz do repositório, compartilhado com o time { "mcpServers": { "unipile": { "type": "http", "url": "https://developer.unipile.com/mcp?branch=v2.0", "headers": { "X-API-KEY": "${UNIPILE_API_KEY}" } } } } // "type": "http" é obrigatório; cada dev exporta UNIPILE_API_KEY
# Scope local (padrão): só este projeto, privado, salvo em ~/.claude.json claude mcp add --transport http \ unipile "https://developer.unipile.com/mcp?branch=v2.0" \ --header "X-API-KEY: your-scoped-api-key"
Verificado no Claude Code 2.1: "Added …" e depois ✔ Connected em claude mcp list. Mantenha a URL entre aspas (o zsh trata o ? como padrão) e coloque --header depois da URL, já que ele aceita vários valores.
claude mcp addRegistra um servidor no scope escolhido e imprime "Added …" assim que grava.
--transport httpO servidor da Unipile é um servidor HTTP remoto e streamable. Sem command, sem npx, sem processo local.
--scope userTodos os projetos desta máquina, privado para você. Omita para local (só este projeto), ou use --scope project para gravar o .mcp.json.
unipileO nome que você vai ver em claude mcp list, claude mcp get e /mcp.
"https://developer.unipile.com/mcp?branch=v2.0"A URL única do servidor, entre aspas. O parâmetro ?branch=v2.0 seleciona a API v2.
--header "X-API-KEY: …"Sua chave de API de conta com escopo. Fica por último porque a flag aceita vários headers.
Verificar

Verifique a conexão

Três checagens: no terminal, dentro de uma sessão e depois em um chat. Nenhuma delas toca em uma conta conectada.
1No terminalA lista mostra um status de saúde ao lado de cada servidor: ✔ Connected é o que você quer; ✘ Failed to connect aponta para a URL, ! Needs authentication para o header e ⏸ Pending approval para um servidor de projeto ainda não aprovado.claude mcp list claude mcp get unipile
2Dentro de uma sessãoDigite o slash command no Claude Code para ver o status do servidor e, no caso de um .mcp.json com scope project, aprová-lo na primeira vez que abrir a pasta./mcp
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 Claude Code, 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.
Claude Code · support-consoleAplicação Development
Adicione mensageria do WhatsApp ao nosso console de suporte: sincronize as conversas de cada atendente e deixe que respondam a partir do ticket.
Buscar endpoints"chats messages send"3 resultados
Executar requisiçãoGET /v2/{account_id}/chats9 chats
Criei whatsapp/chat-sync.ts (chats e mensagens salvos no ticket, paginação por cursor) e POST /tickets/:id/reply que chama a rota de envio pela própria conta do chat. Rodei a sincronização na aplicação Development: 9 chats, 41 mensagens.3 arquivos alterados · testado na aplicação Development

Uma caixa de entrada do WhatsApp dentro do seu produto, a partir de um prompt

O Claude Code lê os contratos de chat e de mensagem pelo servidor, escreve o job de sincronização e o endpoint de resposta na sua stack, e executa as primeiras requisições na sua aplicação Development. LinkedIn, Instagram e Telegram usam as mesmas rotas de chat, então o segundo canal exige um prompt menor que o primeiro.
Endpoints usados pelo agente
GET/v2/{account_id}/chatsGET/v2/{account_id}/chats/{chat_id}/messagesPOST/v2/{account_id}/chats/{chat_id}/messages/send
Erro comum: Misturar os IDs. Uma mensagem sempre sai pela conta dona do chat; mantenha account_id e chat_id juntos, da chamada de listagem até a de envio.
API do WhatsApp
Claude Code · crm-appAplicação Development
Permita que os usuários enviem e-mails da página do contato pela própria caixa Gmail ou Outlook, e encadeie as respostas no contato.
Ler endpointPOST /v2/{account_id}/emails/sendschema carregado
Executar requisiçãoGET /v2/{account_id}/emails200 OK
Adicionei POST /contacts/:id/email que chama a rota de envio pela conta de e-mail do usuário, a opção de responder na thread usando o ID da thread, e a sincronização de entrada que anexa as respostas ao contato. Enviei um e-mail de teste da caixa da aplicação Development e vi a resposta encadeada.4 arquivos alterados · envio e encadeamento testados de ponta a ponta

E-mail pela própria caixa do usuário, encadeado no seu CRM

Gmail, Outlook e IMAP compartilham um único schema de e-mail. O agente lê os contratos de envio e de listagem, liga a ação de envio à caixa que o usuário conectou pelo Hosted Auth e guarda o ID da thread para que as respostas caiam no contato certo.
Endpoints usados pelo agente
POST/v2/{account_id}/emails/sendGET/v2/{account_id}/emailsGET/v2/{account_id}/threads/{thread_id}
Erro comum: Enviar de uma caixa técnica compartilhada. Cada e-mail sai da conta do usuário que a conectou, então a resposta chega à caixa dele.
API de e-mail
Claude Code · saas-backendAplicação Development
Cada workspace do meu SaaS tem vários usuários com contas próprias de LinkedIn e de e-mail. Isole tudo: um Scope e uma chave com escopo por workspace.
Buscar endpoints"scopes api-keys"4 resultados
Executar requisiçãoPOST /v2/scopes/201 · scope
Na criação de um workspace o backend agora cria um Scope, uma chave de API de conta com escopo guardada criptografada no workspace, e toda conta que um membro conecta é associada a esse Scope. Todas as chamadas de conta usam a chave do workspace. Testado com dois workspaces na aplicação Development.5 arquivos alterados · isolamento verificado

Muitos usuários, muitas contas, uma fronteira por tenant

Os Scopes são a fronteira de acesso da API da Unipile: uma chave com escopo só enxerga as contas associadas ao seu Scope. O agente transforma isso no seu modelo de tenant, de modo que a lógica multiconta vive na API, e não no seu código.
Endpoints usados pelo agente
POST/v2/scopes/POST/v2/api-keys/GET/v2/accounts/
Erro comum: Usar uma única chave de conta global para todos os tenants. A chave global fica no seu backend, para administração; cada tenant recebe a própria chave com escopo.
Contas, Scopes e chaves
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 Claude Code 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.
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 Claude Code
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

Os status e avisos que o Claude Code mostra quando uma entrada MCP está errada, como aparecem em claude mcp list e /mcp, e a correção de cada um.
✘ Failed to connect
O claude mcp list exibe o servidor, mas a verificação de saúde falha. CorreçãoA url precisa ser exatamente https://developer.unipile.com/mcp?branch=v2.0 com --transport http. O Claude Code repete um erro transitório três vezes, mas nunca um not found ou um erro de autenticação: corrija a URL ou o header e execute claude mcp get unipile.
⏸ Pending approval
Um servidor de scope project vindo do .mcp.json aparece na lista, mas não conecta. CorreçãoExecute claude na pasta, aceite a caixa de diálogo de confiança do workspace e depois aprove o servidor em /mcp. Um repositório clonado não pode aprovar os próprios servidores a partir de configurações versionadas.
401 nas requisições
O servidor está conectado, mas executar uma requisição falha. CorreçãoA chave está faltando no header, o nome do header não é X-API-KEY, ou você usou uma chave Service ou uma chave de conta global em vez de uma chave de API de conta com escopo da sua aplicação Development.
Aviso de variável ausente
O claude mcp list avisa que ${UNIPILE_API_KEY} não está definida. CorreçãoExporte a variável no shell que inicia o Claude Code, ou defina um padrão com a sintaxe ${UNIPILE_API_KEY:-} na configuração. Variáveis não definidas em url ou headers podem ser lidas como vazias, o que termina em 401.
Espaços invisíveis em headers.X-API-KEY
Um token colado com uma quebra de linha no final. CorreçãoO Claude Code indica o campo em claude mcp list e /mcp sem exibir o valor. Adicione o servidor de novo com a chave sem espaços; o Claude Code usa os valores exatamente como estão escritos.
Mesmo nome em mais de um scope
unipile existe nos scopes user e project com configurações diferentes. CorreçãoO Claude Code conecta uma vez só, usando a definição de maior precedência (local, depois project, depois user) e avisa sobre o conflito. Remova a duplicata com claude mcp remove unipile --scope user ou mantenha um scope por máquina.
MCP endpoint not found at
Um 404 na URL: o path está errado. CorreçãoA URL completa é https://developer.unipile.com/mcp?branch=v2.0, com o parâmetro branch incluído. Verifique com curl -I a partir da sua máquina e depois claude mcp get unipile.
/mcp mostra No MCP servers configured
O arquivo que você editou não é um dos que o Claude Code lê. CorreçãoO Claude Code lê ~/.claude.json e .mcp.json apenas na raiz do projeto, nunca ~/.claude/mcp.json, ~/.claude/.mcp.json ou ~/.claude/config/mcp.json. Reinicie também a sessão: .mcp.json é lido na inicialização.
O shell rejeita a URL, ou o branch some
O zsh trata o ? de ?branch=v2.0 como um padrão. CorreçãoSempre coloque a URL entre aspas em claude mcp add. Sem aspas, o zsh responde "no matches found" e o bash pode descartar o parâmetro, o que conecta você à versão errada da API.
Início lento ou timeout
O servidor demora mais que os 30 s padrão na inicialização. CorreçãoAumente o limite para aquela sessão: MCP_TIMEOUT=60000 claude. Se você recusou um servidor de projeto na pergunta de aprovação, claude mcp reset-project-choices traz a pergunta de volta.
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 Claude Code

As perguntas que as pessoas realmente digitam: scopes, onde fica a configuração, chaves fora do repositório, headers personalizados, Failed to connect, aspas na URL, mudanças no .mcp.json e chaves de API.
Local é o padrão: guardado em ~/.claude.json sob o projeto atual, privado e limitado a esse projeto. Project grava .mcp.json na raiz do repositório e é compartilhado pelo controle de versão. User grava ~/.claude.json sob a chave raiz mcpServers e vale para todos os seus projetos. A precedência é local, depois project, depois user. Para a Unipile: --scope user para sua chave pessoal de desenvolvimento, --scope project quando o time inteiro trabalha na mesma integração.
Em ~/.claude.json (no Windows %USERPROFILE%\.claude.json) para os scopes local e user, e em .mcp.json na raiz do projeto para o scope project. O Claude Code não lê ~/.claude/.mcp.json, ~/.claude/config/mcp.json, ~/.claude/mcp.json ou %APPDATA%\Claude\mcp.json. claude mcp get unipile informa em qual scope uma entrada está.
O Claude Code expande ${VAR} e ${VAR:-default} em command, args, env, url e headers. Escreva "X-API-KEY": "${UNIPILE_API_KEY}" em .mcp.json, versione o arquivo, e cada dev fornece a própria chave com escopo pelo ambiente. Se a variável não estiver definida e não houver padrão, a configuração ainda carrega e claude mcp list mostra um aviso.
Sim: --header "X-API-KEY: your-scoped-api-key", repetível para vários headers, na forma curta -H. Coloque depois da URL, porque a flag aceita vários valores. O servidor da Unipile é um servidor HTTP remoto: nada para instalar localmente, sem npx, sem Node para gerenciar.
Execute claude mcp get unipile para ver o detalhe (status HTTP e texto do erro), confira os avisos de espaço no começo ou no fim que o claude mcp list imprime depois de uma chave colada, e confirme que a URL responde da sua máquina com curl -I. Um 404 imprime MCP endpoint not found at <origin>: o path está errado, a URL completa é https://developer.unipile.com/mcp?branch=v2.0, com o parâmetro branch incluído.
A URL contém um ?, que o zsh lê como caractere de padrão. Sempre coloque a URL entre aspas em claude mcp add. Sem aspas, o zsh responde "no matches found" e o bash pode descartar o parâmetro branch da URL, o que conecta você à versão errada do servidor.
O Claude Code lê .mcp.json no início da sessão: saia e reabra. Uma entrada malformada é ignorada em silêncio, e claude mcp list imprime o aviso de parsing com o campo defeituoso. Se você recusou o servidor na pergunta de aprovação do projeto, execute claude mcp reset-project-choices.
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 apenas as contas envolvidas 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.