Servidor MCP

Conecte um número de WhatsApp ao Claude, ChatGPT, Cursor ou outro assistente e pergunte em português.

Cada instância da OnZap tem um servidor MCP (Model Context Protocol) próprio. Conectado a ele, o seu assistente de IA consulta aquele número de WhatsApp com ferramentas prontas: métricas do atendimento, quem está sem resposta, status da conexão, conversas, a documentação da API e, se você permitir, o envio de mensagens com a sua confirmação.

Endereço   https://mcp.onzap.io/{instanceId}/mcp
Acesso     login na OnZap pelo navegador (OAuth), ou o token da instância

O endereço de cada número está no painel, em Instâncias → (a instância) → Credenciais → Usar com IA (MCP).

Perguntas que funcionam bem:

  • "Quantas conversas ficaram sem resposta ontem no número de vendas?"
  • "Quem está esperando resposta há mais de uma hora?"
  • "Qual foi o tempo médio da primeira resposta nesta semana, separando robô e atendente?"
  • "O número caiu nos últimos 7 dias?"
  • "Gere o código em PHP para enviar uma imagem por esta instância."

Só a documentação, sem login

Para consultar esta documentação no assistente de programação, sem conta e sem instância, use o servidor MCP público da documentação:

claude mcp add --transport http onzap-docs https://mcp.onzap.io/docs
{
  "mcpServers": {
    "onzap-docs": { "url": "https://mcp.onzap.io/docs" }
  }
}

Ele tem buscar_documentacao, ler_pagina (uma página inteira em Markdown) e gerar_codigo (com SUA_INSTANCIA no lugar do ID). Não acessa nenhuma conta nem número; o limite é de 60 chamadas por minuto por IP.

Conectar um número

Na primeira chamada, o app abre o navegador: você entra na OnZap, vê o app e o número, escolhe as permissões e clica em Permitir acesso. Não é preciso colar token em arquivo nenhum.

Claude Code

claude mcp add --transport http onzap-vendas https://mcp.onzap.io/SUA_INSTANCIA/mcp

Use um nome por número (onzap-vendas, onzap-suporte...) se for conectar mais de um.

Claude (site e app)

No painel, o botão Adicionar ao Claude abre o Claude com o conector já preenchido. Ou adicione um conector personalizado com o endereço do servidor MCP da instância e siga o login pelo navegador.

ChatGPT

Adicione um conector personalizado (modo desenvolvedor) com o endereço do servidor MCP da instância e escolha autenticação OAuth.

Cursor

No painel, o botão Adicionar ao Cursor já instala com o endereço da instância. Ou, em .cursor/mcp.json:

{
  "mcpServers": {
    "onzap-vendas": { "url": "https://mcp.onzap.io/SUA_INSTANCIA/mcp" }
  }
}

VS Code (GitHub Copilot)

No painel, o botão Adicionar ao VS Code. Ou, em .vscode/mcp.json:

{
  "servers": {
    "onzap-vendas": { "type": "http", "url": "https://mcp.onzap.io/SUA_INSTANCIA/mcp" }
  }
}

Windsurf (Devin Desktop)

No mcp_config.json das configurações de MCP do app:

{
  "mcpServers": {
    "onzap-vendas": { "serverUrl": "https://mcp.onzap.io/SUA_INSTANCIA/mcp" }
  }
}

Sem navegador (scripts e CI)

O token da instância também abre o servidor MCP, no header Authorization: Bearer (ou X-Instance-Token), mais o Client-Token se a conta exigir. Quem tiver essa configuração lê as conversas do número: trate como senha.

claude mcp add --transport http onzap-vendas https://mcp.onzap.io/SUA_INSTANCIA/mcp \
  --header "Authorization: Bearer SEU_TOKEN"

Para testar, use o MCP Inspector (npx @modelcontextprotocol/inspector), com o transporte Streamable HTTP e o endereço da instância.

Permissões

Cada autorização vale para um número. O app só enxerga o número do endereço em que foi conectado.

PermissãoEscopoLibera
Status do númeroinstances:readstatus_instancia
Métricas do atendimentometrics:readmetricas, conversas_sem_resposta
Conversas e mensagensmessages:readlistar_conversas, ler_mensagens, verificar_numero, eventos_recentes
Enviar mensagensmessages:sendenviar_mensagem, enviar_template
Configurar webhookswebhooks:writecriar_webhook_de_teste, reenviar_evento
  • As três de leitura são pedidas na primeira conexão. As de escrita só aparecem quando o app tenta usar uma ferramenta que precisa delas; nessa hora o navegador abre de novo e a permissão vem desligada, para você ligar se quiser.
  • buscar_documentacao e gerar_codigo funcionam com qualquer permissão.
  • Com o token da instância, todas as ferramentas ficam liberadas (é o mesmo acesso da API).

Apps conectados. Em Configurações, e nas Credenciais de cada instância, aparecem os apps autorizados, com quem autorizou, o último uso e as últimas ações. Desconectar corta o acesso na hora.

Ferramentas

FerramentaO que faz
status_instanciaSe o número está conectado e desde quando, quedas dos últimos 7 dias e o próximo passo se não estiver
metricasOs números do guia de métricas num período em texto ("ontem", "semana passada", "01/09 a 15/09")
conversas_sem_respostaQuem está esperando resposta agora, com nome, número e há quanto tempo
listar_conversasConversas mais recentes, com prévia da última mensagem
ler_mensagensÚltimas mensagens de uma conversa, em ordem cronológica (só API OnZap)
verificar_numeroSe um telefone tem WhatsApp (só API OnZap)
eventos_recentesOs últimos eventos de webhook, no mesmo formato que chegam no seu servidor
buscar_documentacaoBusca nesta documentação, com o link da seção
gerar_codigoCódigo de uma rota em curl, Node, Python, PHP, Laravel ou Go, a partir da referência (nunca inventa rota)
enviar_mensagemTexto, imagem, vídeo, áudio ou documento por URL, com a fila opcional (delayTyping, delayMessage)
enviar_templateTemplate aprovado da Meta, com as variáveis preenchidas (só API oficial)
criar_webhook_de_testeCadastra um webhook para uma URL e manda um evento de teste
reenviar_eventoEntrega de novo um evento dos últimos 7 dias aos webhooks da instância

As ferramentas de leitura são marcadas como só leitura; as de envio, como ações que não se desfazem. Os números vêm calculados e com uma frase-resumo pronta, para o assistente não refazer contas.

Envio com confirmação

Nenhuma mensagem sai sem você confirmar:

  • Apps que perguntam no meio da chamada (protocolo 2026-07-28 com elicitation): o app mostra a prévia ("Enviar pela instância Vendas para +55 (11) 99999-0001 a mensagem «...»") e o envio só sai se você marcar Confirmo.
  • Os demais: a primeira chamada devolve a prévia e um codigoConfirmacao. O assistente mostra a prévia e só repete a chamada com confirmar: true e o código se você disser que sim.

A confirmação vale 5 minutos, uma vez só e só para aqueles dados: mudar o texto ou o destino exige outra prévia. Criar um webhook novo também pede confirmação, porque os eventos (com o texto das mensagens) passam a ir para a URL.

Modo teste

Todo app autorizado começa em modo teste: só envia para os números de teste da conta, que são os telefones verificados dos usuários e os que você cadastrar em Configurações → Números de teste. A comparação ignora o 9º dígito. Grupos ficam de fora.

Para enviar para qualquer número, desligue o modo teste do app em Apps conectados. Cada envio continua pedindo confirmação.

Limites

O quêLimite
Chamadas ao servidor MCP5 por segundo por instância (rajada de 20)
Envios (enviar_mensagem, enviar_template)1 por segundo por app (rajada de 3)
Webhooks (criar_webhook_de_teste, reenviar_evento)10 por minuto por app (rajada de 5)
verificar_numero20 por minuto por instância

Os envios também passam pelos limites, pela fila e pela cobrança da instância, como qualquer chamada da API.

Segurança e privacidade

  • O token da instância nunca sai da OnZap: as ferramentas chamam a API por dentro, com a credencial montada no servidor.
  • A OnZap não roda IA: quem lê e responde é o assistente que você conectou, na conta que você usa com ele.
  • As métricas usam só metadados dos eventos. As ações de escrita ficam registradas sem o conteúdo das mensagens, e as chamadas que o app faz à API aparecem em Atividade da API como "via" o app.

Para quem implementa um cliente MCP

ItemValor
ProtocoloMCP 2026-07-28 (aceita 2025-11-25), Streamable HTTP sem sessão, resposta JSON
Metadados do recurso (RFC 9728)https://mcp.onzap.io/.well-known/oauth-protected-resource/{instanceId}/mcp
Servidor de autorização (RFC 8414)https://app.onzap.io/.well-known/oauth-authorization-server
Registro do clienteDocumento de metadados (client_id é a URL https do documento) ou registro dinâmico (RFC 7591)
FluxoAuthorization code com PKCE S256, cliente público; resource (RFC 8707) obrigatório e igual ao endereço da instância; iss na resposta (RFC 9207)
TokensAcesso de 1 hora; renovação de 30 dias, trocada a cada uso (reusar um token já trocado encerra a conexão)
Redirecionamentohttps, http://localhost (qualquer porta) ou esquema de app (cursor://, vscode://...)
Sem credencial401 com WWW-Authenticate: Bearer resource_metadata="…", scope="instances:read metrics:read messages:read"
Permissão faltando403 com error="insufficient_scope" e os escopos necessários