Servidor MCP de WhatsApp

Conecte seu agente. Ele opera o WhatsApp falando.

A Shiftz expõe um servidor MCP (Model Context Protocol) nativo de WhatsApp. Plugue Claude Code, Claude Desktop, Claude.ai, Cursor ou qualquer cliente MCP e o agente cria instâncias, envia mensagens e lê status em linguagem natural. Mesma apikey da API REST, mesmo escopo.

Por que MCP

O WhatsApp vira ferramenta nativa do agente.

MCP é o padrão que conecta agentes de IA a ferramentas externas. O da Shiftz entrega o WhatsApp inteiro, sem você escrever uma linha de integração.

Function calling de verdade

O cliente MCP transforma cada tool shiftz_* numa função que o modelo chama sozinho. Sem glue code, sem você escrever as chamadas REST na mão.

Mesma chave, mesmo escopo

A autenticação usa a sua apikey no header Authorization: Bearer. Chave org-wide enxerga tudo; chave escopada por instância enxerga só uma.

Streamable HTTP, stateless

O endpoint é remoto e sem estado. Roda em Claude.ai, Cursor e agentes em produção, sem instalar nada no seu servidor.

Setup

Instale o servidor em um comando.

A conexão é a mesma pra todo cliente: aponte pro endpoint, mande a apikey no header Authorization e fale Streamable HTTP. Ache o seu abaixo e copie o comando.

Endpoint
https://api.shiftz.com.br/mcp
Autenticação
Authorization: Bearer <apikey>
Transport
Streamable HTTP, stateless

Claude Code

HTTP nativoVer na doc

O CLI do Claude conecta direto no endpoint, sem ponte. O escopo user deixa o Shiftz disponível em qualquer projeto seu.

bash
claude mcp add --transport http --scope user shiftz \  https://api.shiftz.com.br/mcp \  --header "Authorization: Bearer shz_xxx.yyy"

Versionável: no projeto, um .mcp.json aponta pra mesma URL e lê a chave de uma env (SHIFTZ_API_KEY), sem commitar o segredo. Na sessão, o comando /mcp mostra o status e as tools.

Claude Desktop

Ponte mcp-remoteVer na doc

Os conectores nativos só fazem login OAuth, sem campo pra apikey fixa. Use a ponte mcp-remote (precisa de Node.js) no claude_desktop_config.json.

json
{  "mcpServers": {    "shiftz": {      "command": "npx",      "args": [        "-y",        "mcp-remote",        "https://api.shiftz.com.br/mcp",        "--header",        "Authorization:Bearer shz_xxx.yyy"      ]    }  }}

Config em ~/Library/Application Support/Claude/ (macOS) ou %APPDATA%\Claude\ (Windows). Salve e reinicie o app. Se o npx no Windows cortar o espaço do header, mova o valor pra uma env AUTH.

Claude.ai (web)

OAuth (em breve)Ver na doc

Os conectores customizados do claude.ai usam OAuth, sem campo pra colar apikey. Como o /mcp autentica por Bearer hoje, ainda não dá pra adicionar direto no web: use Claude Code ou Claude Desktop por enquanto.

Codex CLI

HTTP nativo (flag)Ver na doc

O Codex lê os MCP servers de ~/.codex/config.toml. O HTTP remoto é nativo atrás da flag experimental_use_rmcp_client.

toml
experimental_use_rmcp_client = true [mcp_servers.shiftz]url = "https://api.shiftz.com.br/mcp"bearer_token_env_var = "SHIFTZ_API_KEY"

Exporte SHIFTZ_API_KEY antes de abrir o Codex. Sem a flag (ou em versões antigas), use a ponte mcp-remote, igual ao Claude Desktop.

Gemini CLI

HTTP nativoVer na doc

O Gemini CLI do Google conecta direto via HTTP. O jeito mais rápido é o comando gemini mcp add.

bash
gemini mcp add --transport http --scope user \  --header "Authorization: Bearer shz_xxx.yyy" \  shiftz https://api.shiftz.com.br/mcp

Editando o ~/.gemini/settings.json na mão, use o campo httpUrl. O campo url (sem http) seleciona o transport SSE, que é outro.

OpenCode

HTTP nativoVer na doc

O OpenCode usa a chave mcp no opencode.json (na raiz do projeto ou em ~/.config/opencode/). Servidores remotos têm type: remote.

json
{  "$schema": "https://opencode.ai/config.json",  "mcp": {    "shiftz": {      "type": "remote",      "url": "https://api.shiftz.com.br/mcp",      "enabled": true,      "headers": {        "Authorization": "Bearer {env:SHIFTZ_API_KEY}"      }    }  }}

A interpolação de env no OpenCode é {env:VAR}, não a sintaxe com cifrão. Se ele abrir OAuth ao tomar um 401, adicione "oauth": false no bloco do server.

OpenClaw

HTTP nativoVer na doc

O OpenClaw guarda os servers em ~/.openclaw/openclaw.json, sob mcp.servers. Dá pra adicionar pela CLI ou editando o arquivo.

bash
openclaw mcp add shiftz \  --url https://api.shiftz.com.br/mcp \  --transport streamable-http \  --header "Authorization=Bearer shz_xxx.yyy"

No --header do OpenClaw o separador é = (e não :). Rode openclaw mcp status pra confirmar o registro.

Hermes

HTTP nativoVer na doc

O Hermes Agent (Nous Research) lê os servers do bloco mcp_servers da config em YAML. Servidores remotos usam url + headers.

yaml
mcp_servers:  shiftz:    url: "https://api.shiftz.com.br/mcp"    headers:      Authorization: "Bearer shz_xxx.yyy"

Depois de editar, recarregue com /reload-mcp dentro do Hermes. Campos opcionais por server: timeout e connect_timeout.

Conexão manual

JSON-RPCVer na doc

Construindo um cliente próprio ou só testando na unha? O handshake do MCP é um POST JSON-RPC initialize com a apikey no header.

bash
curl -X POST https://api.shiftz.com.br/mcp \  -H "Authorization: Bearer shz_xxx.yyy" \  -H "Content-Type: application/json" \  -H "Accept: application/json, text/event-stream" \  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'

A resposta vem como event-stream com o serverInfo (name: shiftz). A partir daí, tools/list e tools/call seguem o mesmo POST.

Conectou? Aí é linguagem natural: "cria a instância marketing-01 e me dá o QR", "manda 'Olá' pro 5511999998888", "lista minhas instâncias e o estado de cada uma".

O que seu agente ganha

A WhatsApp API inteira, como tools.

São mais de 40 tools shiftz_*, cobrindo toda a API /v2 como function calling. O agente chama em linguagem natural; o escopo da apikey decide o que ele enxerga.

Mensagens

Texto, mídia, áudio de voz, enquete, localização, contato, lista e reação.

shiftz_send_text, shiftz_send_media, shiftz_send_whatsapp_audio, shiftz_send_location, shiftz_send_poll, shiftz_send_reaction

Instâncias

Cria, conecta (QR ou pairing code), checa o estado e lista os seus números.

shiftz_create_instance, shiftz_connect_instance, shiftz_get_connection_state, shiftz_list_instances

Grupos

Cria grupos, gerencia participantes e admins, e gera link de convite.

shiftz_create_group, shiftz_add_group_participants, shiftz_promote_group_admins, shiftz_group_invite_code

Chats e contatos

Lista chats, lê a agenda, valida números no WhatsApp e marca como lido.

shiftz_find_chats, shiftz_find_contacts, shiftz_check_whatsapp_numbers, shiftz_mark_message_as_read

Perfil

Lê e atualiza nome, foto e status do número conectado.

shiftz_fetch_profile, shiftz_update_profile_name, shiftz_update_profile_picture, shiftz_update_profile_status

Webhooks e chaves

Configura webhooks e administra as chaves de API por escopo.

shiftz_set_webhook, shiftz_find_webhook, shiftz_create_apikey, shiftz_revoke_apikey

Perguntas frequentes

O que é o servidor MCP da Shiftz?
É um servidor Model Context Protocol que expõe toda a WhatsApp API da Shiftz como tools para agentes de IA. Qualquer cliente MCP conecta no endpoint https://api.shiftz.com.br/mcp e opera o WhatsApp em linguagem natural.
Como conectar o MCP da Shiftz ao Claude?
No Claude Code, rode claude mcp add com transporte http apontando para o endpoint e sua apikey no header Authorization. No Claude Desktop, use a ponte mcp-remote no claude_desktop_config.json. Claude.ai e Cursor apontam direto pro endpoint.
Preciso instalar algum pacote?
Não para clientes que falam Streamable HTTP (Claude Code, Claude.ai, Cursor). O Claude Desktop ainda usa a ponte mcp-remote via npx, porque não tem suporte nativo a HTTP streaming.
Qual é a autenticação do MCP?
A mesma apikey da API REST, no header Authorization: Bearer <apikey>. O escopo é respeitado: chave org-wide vê todas as instâncias, chave escopada vê só a dela.
Quais tools o agente ganha?
Mais de 40 tools shiftz_*: enviar texto, mídia, áudio, enquete e localização; criar e conectar instâncias; gerenciar grupos, perfil, contatos, webhooks e chaves. É a API /v2 inteira como function calling.
Funciona com Cursor e outros agentes?
Sim. Qualquer cliente que fale o Model Context Protocol via Streamable HTTP conecta direto. Em produção, seus agentes usam o mesmo endpoint com uma apikey escopada por instância.

Dá o WhatsApp pro seu agente operar.

Cria a conta, pega a apikey e conecta seu cliente MCP em um comando. Trial de 7 dias, sem cartão.