DevZap · Guias de integração Voltar ao painel

Assistentes de IA (MCP)

O DevZap tem um servidor MCP (Model Context Protocol) em /api/v1/mcp. Um assistente de IA que fala MCP, como o Claude Code, o claude.ai, o Cursor e o Codex, consulta a conta em português: quais números estão conectados, quem tem cada etiqueta, o que saiu para um cliente ontem. Quando o plano inclui o envio pelo assistente, ele também manda mensagem, põe na fila e põe ou tira etiqueta.

Cada ferramenta chama a mesma rota da API que o seu sistema usaria, com a mesma chave. Os escopos, o plano, o dono da instância e os limites valem igual.

Há dois jeitos de conectar:

Pelo login

Na página de autorização, confira o endereço do aplicativo e para onde o acesso vai antes de autorizar. Só administradores do workspace autorizam. Ao autorizar, o DevZap cria uma chave só para aquele assistente:

Quando a chave só consulta e o assistente tenta enviar, o DevZap responde HTTP 403 insufficient_scope pedindo mcp:envio.

Claude Code e Codex, com um comando

npx devzap

O comando adiciona o DevZap ao Claude Code e ao Codex que estiverem instalados e já abre o login no navegador. Para o assistente também enviar, rode npx devzap --envio. Num DevZap em outro endereço, npx devzap --url SEU_HOST. As outras opções estão em npx devzap --ajuda.

Os comandos abaixo fazem o mesmo à mão.

Claude Code

claude mcp add --transport http --scope user devzap https://SEU_HOST/api/v1/mcp

Depois, dentro do Claude Code, rode /mcp, escolha devzap e faça o login no navegador que abrir. Do terminal, claude mcp login devzap faz o mesmo.

O Claude Code pede só os escopos fixados na configuração. Para o assistente enviar, fixe mcp:envio e faça o login de novo pelo /mcp:

claude mcp remove devzap --scope user
claude mcp add-json --scope user devzap \
  '{"type":"http","url":"https://SEU_HOST/api/v1/mcp","oauth":{"scopes":"mcp:envio"}}'

Se o envio falhar com needs additional permissions, a configuração ainda está sem mcp:envio.

Codex

codex mcp add devzap --url https://SEU_HOST/api/v1/mcp

O comando já abre o login no navegador. Para entrar de novo depois, rode codex mcp login devzap. Use uma versão recente do Codex (testado com a 0.156.1): versões antigas, como a 0.134, tentam o registro automático de cliente e param em Dynamic client registration not supported.

O Codex começa com a consulta. Para o assistente também enviar, faça o login pedindo a permissão de envio:

codex mcp login devzap --scopes mcp:envio

Para o Codex pedir a sua confirmação antes de enviar, acrescente default_tools_approval_mode = "writes" em [mcp_servers.devzap], no ~/.codex/config.toml.

claude.ai e Claude Desktop

  1. Abra Customize > Connectors, clique em + Add e depois em Add custom connector. Nos planos Team e Enterprise do Claude, quem adiciona é o Owner.
  2. Dê um nome (por exemplo DevZap), informe https://SEU_HOST/api/v1/mcp e clique em Continue.
  3. Em Authentication, escolha Sign in when needed ou Sign in now.
  4. Em OAuth client, escolha Use Claude's published identity (Recommended). A opção Register automatically não funciona com o DevZap.
  5. Clique em Add e faça o login na página do DevZap.

O claude.ai começa com a consulta. Ainda não confirmamos como ele pede a permissão de envio.

Com a chave no cabeçalho

Nos exemplos, troque https://SEU_HOST pelo endereço da API e ten_sua_chave pela chave.

Claude Code

claude mcp add --transport http devzap https://SEU_HOST/api/v1/mcp \
  --header "Authorization: Bearer ten_sua_chave"

Acrescente --scope user para usar o DevZap em todos os projetos. Evite --scope project: ele grava a chave no .mcp.json do repositório.

Cursor

No arquivo ~/.cursor/mcp.json:

{
  "mcpServers": {
    "devzap": {
      "url": "https://SEU_HOST/api/v1/mcp",
      "headers": { "Authorization": "Bearer ${env:DEVZAP_CHAVE}" }
    }
  }
}

O Cursor lê a chave da variável de ambiente do seu terminal, então ela não fica no arquivo. O arquivo do projeto (.cursor/mcp.json) também funciona, mas só se estiver no .gitignore.

Codex

Com a chave na variável de ambiente DEVZAP_CHAVE do seu terminal:

codex mcp add devzap --url https://SEU_HOST/api/v1/mcp --bearer-token-env-var DEVZAP_CHAVE

O comando grava o servidor no ~/.codex/config.toml. Acrescente a linha de aprovação para o Codex pedir a sua confirmação antes de toda ferramenta que não seja de consulta:

[mcp_servers.devzap]
url = "https://SEU_HOST/api/v1/mcp"
bearer_token_env_var = "DEVZAP_CHAVE"
default_tools_approval_mode = "writes"

claude.ai e Claude Desktop

Siga os passos 1 e 2 do login. Em Authentication, escolha No sign-in. Em Request headers, escolha authorization e informe Bearer ten_sua_chave, com a palavra Bearer e o espaço. Se a seção Request headers não aparecer, conecte pelo login.

Depois de salvo, o cabeçalho não muda: para trocar a chave, remova o conector e adicione de novo. Nos planos Team e Enterprise do Claude, a chave cadastrada pelo Owner vale para todos os membros da organização.

ChatGPT

Ainda não conecta. O ChatGPT só aceita servidor MCP com login, e o login do DevZap ainda não aceita a forma como o ChatGPT se identifica. Use o Claude Code, o claude.ai, o Cursor ou o Codex.

Conferir

Peça ao assistente para usar o conta_status do DevZap. A resposta traz a conta, o plano, o que o assistente pode fazer nela e, quando não pode, o motivo.

Ferramentas

Consulta

Ferramenta O que faz
conta_status Conta, chave, números, plano, o que o assistente pode fazer e o teto diário
listar_numeros Números da conta e o estado de cada um; com um número, o motivo da última queda
limites_do_numero Restrição e teto de conversas novas que o WhatsApp impõe ao número
listar_grupos Grupos do número e se dá para enviar em cada um; busca por nome, paginado
listar_etiquetas Etiquetas do WhatsApp Business e quantos contatos têm cada uma
contatos_da_etiqueta Quem tem uma etiqueta, paginado
etiquetas_do_contato As etiquetas de um contato ou grupo
historico_de_envios As mensagens que a conta enviou, dentro da janela do plano
conversas_recentes Os contatos com a última mensagem de cada um, nos números que guardam as recebidas
ler_conversa A conversa com um contato, recebidas e enviadas, nos números que guardam as recebidas
status_da_mensagem Situação de uma mensagem na fila (só com a fila ligada)
listar_agendamentos Os agendamentos da conta
previa_da_mensagem Como a mensagem vai sair (número, destino, texto), sem enviar; no cartão, com o botão Enviar

Envio

Ferramenta O que faz
enviar_mensagem Envia agora texto, imagem ou documento (mídia por link https)
enfileirar_mensagem Põe a mensagem na fila, com novas tentativas (só com a fila ligada)
por_tirar_etiqueta Põe ou tira uma etiqueta de um contato ou grupo

Do jeito que você fala

Nenhuma ferramenta pede id técnico. O assistente passa o que você disse, e o DevZap resolve:

A resposta diz qual número foi usado (numeroUsado) e, no envio, para quem foi (destino). Toda resposta abre com um resumo em português ("2 números: Suporte (final 4321) conectado; Vendas (final 3344) desconectado."), com as situações traduzidas (situacao), e o assistente costuma repetir esse resumo na conversa. Os dados completos vêm logo depois.

As ferramentas que escrevem chegam ao cliente marcadas como destrutivas (destructiveHint). enviar_mensagem, enfileirar_mensagem e por_tirar_etiqueta também pedem aprovação a cada chamada: o Claude Code mostra a confirmação em todo envio e em toda etiqueta posta ou tirada, mesmo no modo automático, sem a opção de não perguntar de novo, e recusa a chamada no modo que nunca pergunta. A etiqueta entrou na lista porque o seu sistema pode reagir a ela pelo webhook label.*. Nos outros clientes, confira na configuração se ele pede confirmação antes de usá-las.

O envio pelo assistente é para quando uma pessoa acompanha. Para mandar mensagem sem ninguém aprovando, como um lembrete do seu sistema, use a API (Envio de mensagens).

Cartões na conversa

No claude.ai, no Claude Desktop, no app do celular, no ChatGPT e no VS Code, algumas respostas aparecem como um cartão dentro da conversa, no tema claro ou escuro do próprio assistente:

Quando há mais de um número e o pedido não diz qual, o cartão mostra as opções. O cartão não faz nenhuma conexão de rede: tudo que ele mostra veio na resposta da ferramenta. No Claude Code, que roda no terminal, a resposta continua em texto.

Atalhos

O DevZap publica pedidos prontos. No Claude Code, digite /devzap: e escolha; no VS Code, /mcp.devzap.. O claude.ai e o Claude Desktop ainda não mostram atalhos de conector: lá, escreva o pedido normalmente.

Atalho O que pede
resumo Os números e a situação de cada um, o plano e quantos envios restam hoje
numeros_caidos Se algum número caiu, por quê e o que fazer
limites Se o WhatsApp está restringindo o número e quantas conversas novas ele ainda abre
ultimos_envios O que saiu, destacando o que falhou (pode filtrar por telefone)
quem_tem_a_etiqueta Quem tem uma etiqueta do WhatsApp Business
mandar_mensagem Prepara a mensagem e só envia depois que você confirma (só com envio no plano)

O que pedir

Exemplos de pedidos, em português mesmo:

Para enviar, peça o texto antes e confira:

O que o plano libera

A consulta e o envio pelo assistente são duas funcionalidades do plano, mcp e mcp_escrita. Sem a funcionalidade, a ferramenta recusa com PLAN_FEATURE_NOT_ALLOWED e o nome dela em feature. Pelo mesmo motivo do guia de limites, a relação de plano × funcionalidade não fica aqui: ela está na página de planos do painel. O conta_status diz, para a sua conta, se o assistente pode consultar e enviar.

Com o plano vencido, as ferramentas recusam com o código do plano, e o conta_status continua respondendo para explicar o motivo.

Limites

Erros

A ferramenta que falha devolve isError com code e message, e quando houver, retryAfter, upgradeUrl ou renewUrl. Os códigos são os mesmos da API (veja Erros e retry), mais estes, que são só do assistente:

Código Repetir? Por quê
MCP_DISABLED ❌ Não O servidor MCP está desligado ou ainda não foi liberado para a conta (resposta HTTP 404)
MCP_DAILY_CAP_REACHED ✅ Depois do retryAfter O teto diário de envios pelo assistente acabou; ele volta à meia-noite de Brasília
MCP_DUPLICATE_SEND ❌ Não A mesma mensagem foi para o mesmo destino, pelo mesmo número, há menos de 2 minutos
MCP_CONVERSAS_NAO_GUARDADAS ❌ Não O número não guarda as mensagens recebidas; um administrador liga a gravação no painel
MCP_NUMERO_AMBIGUO ❌ Não A conta tem mais de um número e o pedido não diz qual; opcoes lista os números para escolher
MCP_NUMERO_NAO_ENCONTRADO ❌ Não Nenhum número da conta combina com o pedido, ou a conta ainda não tem número; opcoes lista os que existem
MCP_TELEFONE_INVALIDO ❌ Não O telefone está sem DDD ou não parece telefone (ou é grupo onde só cabe telefone, como na fila)
MCP_GRUPO_AMBIGUO ❌ Não Mais de um grupo combina com o nome; opcoes lista os candidatos
MCP_GRUPO_NAO_ENCONTRADO ❌ Não Nenhum grupo com esse nome (no envio, só o nome exato); opcoes lista os parecidos
MCP_ETIQUETA_AMBIGUA ❌ Não Mais de uma etiqueta combina com o nome; opcoes lista as candidatas
MCP_ETIQUETA_NAO_ENCONTRADA ❌ Não Nenhuma etiqueta com esse nome (para pôr ou tirar, só o nome exato); opcoes lista as parecidas

Envio que deu erro de tempo ou SEND_UNCONFIRMED pode ter saído. Antes de mandar de novo, confira no historico_de_envios.

Conversas recebidas (opcional)

Por padrão, o DevZap não guarda o que os números recebem, e o assistente não lê conversas. Um administrador pode ligar a gravação das recebidas num número, no painel, em Números, depois de ler os avisos. conversas_recentes e ler_conversa só aparecem quando essa opção está disponível no DevZap, e só leem os números em que ela está ligada:

O que o assistente não faz

Segurança


← Todos os guias