Skip to main content
O MCP tem 3 camadas: tools (ações que o agente executa), resources (dados que o cliente lê sem tool call) e prompts (fluxos prontos). Instalação e autenticação: MCP Server. A versão atual é o pacote @ararahq/mcp 6.x; mudanças em relação às versões antigas estão no changelog. São 9 tools de propósito. Agente com painel de controle inteiro erra mais do que agente com poucas ações que aceitam o que uma pessoa sabe de cabeça (um nome, um número em qualquer formato) e resolvem o resto.

Como um destinatário é resolvido

send_whatsapp, broadcast, check_status e read_conversation aceitam em to um número em qualquer grafia ou o nome de um contato salvo.
  • Número: o MCP remove pontuação e espaços. Número com + ou com 12 dígitos ou mais é tratado como já tendo DDI; se for brasileiro (55) com 10 dígitos depois do DDI, ganha o nono dígito. Número sem DDI com 10 ou 11 dígitos ganha +55. O resultado precisa ser E.164 válido, senão a tool falha com INVALID_PHONE.
  • Nome: o MCP busca nos seus contatos salvos. Nenhum resultado dá CONTACT_NOT_FOUND; mais de um dá CONTACT_AMBIGUOUS com os candidatos, em vez de chutar.
Busca por nome, save_contacts e read_conversation usam a base de contatos da Arara, que depende do plano. Em plano sem contatos, a API recusa com PLAN_FEATURE_LOCKED; passe o número direto nas tools de envio.

Falar com a base

send_whatsapp

Manda uma mensagem pra uma pessoa. Texto livre dentro da janela de 24h, ou template aprovado a qualquer hora. Passe exatamente um entre message e templateName. O retorno traz o id da mensagem, o status de aceite e o destinatário resolvido. Aceite quer dizer na fila, não entregue: confira a entrega com check_status. Se você mandou texto livre e a janela estava fechada, o erro CONVERSATION_WINDOW_CLOSED já vem com até 10 templates aprovados pra escolher, ou sugere criar um com create_template se não houver nenhum.

broadcast

Manda um template aprovado pra várias pessoas de uma vez, como campanha. Disparo em massa é quase sempre fora da janela de 24h, então só aceita template. Teste A/B e agendamento são opções da mesma chamada. Por padrão é uma prévia. Com dryRun omitido ou true, o MCP resolve a audiência, renderiza o corpo do template com as variáveis do primeiro destinatário, lista os botões e chama o estimador de custo da Arara. Nada é enviado. A resposta traz a mensagem renderizada, quantos destinatários resolveram, quais não resolveram, custo unitário e total, a configuração de A/B e o agendamento. Com dryRun: false, a campanha é criada e a resposta traz o ID, o status, o total de mensagens e o custo total. Pra disparar, a organização precisa ter um número dedicado conectado. Números ou nomes que não resolverem vêm listados na resposta, sem derrubar o disparo. Se nenhum resolver, a tool falha com NO_VALID_RECIPIENTS. abTest: a Arara manda as duas variantes pra uma fatia da base, meio a meio, mede a melhor na janela de decisão e dispara o resto pela vencedora.

Ver o que voltou

campaign_report

Sem campaignId, lista as campanhas recentes, mais novas primeiro, com status, template, enviados, entregues, lidos, falhas e custo. Com campaignId, devolve o relatório completo: enviados, entregues, lidos, cliques, respostas, conversões (com valor), contatos segurados pelo A/B, bloqueados (com o motivo de cada grupo), estornos (quantidade e valor) e custo. A mensagem de texto já traz cada etapa em percentual da base.

check_status

Responde “chegou?”, “posso falar agora?” e “o template aprovou?”. Passe exatamente um dos três.

read_conversation

Lê o conteúdo das mensagens trocadas com uma pessoa, direto da timeline: direção (cliente ou você), status, template usado, texto e data de cada uma. É como você separa interesse real de resposta automática antes de responder com send_whatsapp.

Preparar

create_template

Submete um template novo pra aprovação da Meta. Você precisa de um pra qualquer broadcast e pra falar com quem está fora da janela de 24h. A aprovação costuma levar minutos; acompanhe com check_status passando o templateId que volta na resposta.
A Meta reprova template que é só variável ({{1}} sem texto fixo). Escreva o texto real da mensagem; variável é pra nome, número de pedido, valor, não pro corpo inteiro.
Botão SMART_LINK: passe em url o destino real (ex: https://wa.me/5511999999999?text=Quero%20saber%20mais). A Arara encurta e conta cada clique, que aparece como cliques no campaign_report. É assim que você descobre qual copy converteu num teste A/B.

save_contacts

Salva (cria ou atualiza) contatos pra você mandar mensagem por nome em vez de decorar número. De 1 a 1.000 por chamada. Devolve quantos foram criados, atualizados e ignorados, com a lista de erros por índice quando alguma linha não passa.

opt_out

Registra que uma pessoa não quer mais receber mensagens da sua organização, na lista de opt-out da organização. Idempotente: registrar duas vezes é seguro.
Pela LGPD, pedido de saída precisa ser respeitado. Registre sempre que a pessoa responder PARAR/STOP, pedir no suporte ou por escrito.

Conta

whoami

Sem parâmetros. Mostra quem está autenticado (nome e e-mail), o plano atual e o saldo da carteira. Chame antes do primeiro disparo da sessão pra conferir em qual conta o agente vai operar.

Formato de resposta e erros

Toda tool devolve um texto curto pro modelo e um structuredContent estável:
Em erro de limite (429) ou de servidor, retryable vem true e, quando a API manda Retry-After, o campo retryAfterSeconds vem junto. Os códigos do próprio MCP: Os demais códigos vêm da própria API da Arara e passam sem alteração. Veja Erros.

Painéis interativos

Em clientes com suporte a MCP Apps, quatro tools abrem um painel dentro do chat em vez de só texto. O texto continua vindo junto, então clientes sem painel não perdem nada. Os botões que não executam direto viram uma mensagem no chat pro agente continuar (por exemplo, “Reenviar aos não lidos” pede um reenvio com outro template). Os painéis são servidos como resources ui://arara/campaign.html, ui://arara/broadcast.html, ui://arara/status.html e ui://arara/conversation.html, e nunca recebem credencial.

Resources

Dados que o agente lê sem gastar tool call. Todos voltam em JSON; se a leitura falhar, o conteúdo traz RESOURCE_UNAVAILABLE.
Cada cliente expõe resources de um jeito. Se o seu não mostrar, peça ao agente pra ler a URI, por exemplo arara://templates/approved.

Prompts

Fluxos prontos que o cliente MCP expõe como atalhos. Nenhum recebe argumento, e todos param pra pedir aprovação antes de enviar.

Automações (em preparação)

Esta seção descreve tools que ainda não estão no pacote publicado. Elas chegam numa próxima versão do @ararahq/mcp; os nomes abaixo podem mudar até o lançamento.
Sete tools para montar e acompanhar automações em linguagem natural, sobre a mesma API de automações: Vale a mesma nota de permissão da API: escrita exige AUTOMATIONS_MANAGE, leitura exige READ. Sem a permissão, a tool falha com o error.code que a API devolveu.
create_automation e update_automation nunca ligam a automação sozinhos: ela sai desligada ou do jeito que já estava. Ligar uma automação com set_automation_active manda mensagens reais para clientes reais a partir daquele momento; confirme com a pessoa antes de chamar. O link de uma automação com gatilho webhook é uma credencial: nunca cole nem repita esse link na conversa.

Próximos passos

Instalar o MCP

Login, configuração em cada cliente e primeiro uso.

Erros

Códigos que a API devolve e passam sem alteração pelo MCP.