Nexxa Nexxa MCP · WhatsApp https://mcp.connexa-api.com/mcp

Nexxa WhatsApp MCP

Um servidor Model Context Protocol que permite a agentes de IA (Claude, ChatGPT, n8n, agentes próprios) enviar mensagens de WhatsApp e consultar dados da sua conta Nexxa — com segurança e isolados por tenant.

Visão geral

O MCP da Nexxa expõe um conjunto de tools que um agente pode chamar para operar o WhatsApp em nome da sua conta. Toda chamada é autenticada e restrita ao seu tenant: um token só enxerga e opera instâncias, chats, campanhas e clientes da própria conta.

📤 Enviar

Texto, mídia (imagem, áudio, vídeo, documento), links com preview e templates oficiais da Meta.

🔎 Consultar

Instâncias, chats e mensagens, templates aprovados na Meta, campanhas, listas, clientes e apps.

🔒 Isolado por tenant

Credenciais ficam presas ao usuário/tenant que as emitiu. Nada vaza entre contas.

Endpoint

O servidor usa o transporte Streamable HTTP do MCP. Aponte seu client para:

https://mcp.connexa-api.com/mcp

Conectar um client

Qualquer client compatível com MCP via HTTP funciona. Você precisa de uma credencial (veja Autenticação): use uma API Key para integrações simples por header ou um Client MCP OAuth para conectores remotos como Claude.

Claude Desktop / Claude.ai (conector remoto)

Adicione um conector remoto apontando para o endpoint acima. O Claude descobre o fluxo de login automaticamente pelos metadados /.well-known/oauth-protected-resource servidos por este host e conduz você pelo OAuth.

Client genérico via header (API key ou token)

Se o seu client permite definir headers, basta enviar o Authorization em cada requisição:

{
  "mcpServers": {
    "nexxa-whatsapp": {
      "url": "https://mcp.connexa-api.com/mcp",
      "headers": {
        "Authorization": "ApiKey SUA_API_KEY"
      }
    }
  }
}
Troque ApiKey SUA_API_KEY por Bearer SEU_TOKEN se estiver usando um JWT ou um access token OAuth.

Autenticação

Toda requisição ao endpoint /mcp exige um header Authorization. Três formatos são aceitos:

FormatoQuando usar
ApiKey <api_key>Integrações server-to-server e agentes próprios. Forma mais simples.
Bearer <jwt>Quando você já tem um JWT de sessão da plataforma.
Bearer <access_token>Token emitido pelo OAuth do MCP — usado por clients remotos como o Claude.
As credenciais são gerenciadas no painel da Nexxa em https://app.nexxa.one/settings/credentials.

Sem header válido o servidor responde 401 Unauthorized e anuncia o servidor de autorização no header WWW-Authenticate, permitindo que clients compatíveis iniciem o login sozinhos.

Gerar credenciais no painel

Acesse diretamente https://app.nexxa.one/settings/credentials ou siga o caminho abaixo no painel:

Menu lateralConfiguraçõesCredenciais (API & MCP)

Na tela de credenciais, escolha a aba conforme o tipo de integração:

Para criar um Client MCP OAuth, abra a aba Clients MCP (OAuth), clique em Novo Client, escolha o tipo do client, preencha as informações solicitadas e salve. O client_secret é exibido apenas uma vez; guarde-o antes de fechar a tela.

Credenciais

Crie e gerencie suas API Keys de uso geral e os Clients OAuth usados pelo MCP.

API Keys Clients MCP (OAuth)

Clients OAuth do MCP

Usados para conectar agentes ao servidor MCP.

Novo Client
NomeClient IDScopesStatusAções
Claude mcp_client_... mcp:read mcp:message:send Ativo Desativar

Scopes

As permissões de um token são controladas por scopes:

ScopePermite
mcp:readTools de consulta (listar_*, obter_*) e o guia de templates.
mcp:message:sendTools de envio (send_*) e criação de WhatsApp Flows.

Um token só com mcp:read consegue consultar dados, mas não enviar mensagens. Para um agente que apenas dispara mensagens, conceda ambos.

Fluxo recomendado

Um agente normalmente segue esta sequência. As tools são desenhadas para serem encadeadas:

1. listar_instancias            → descobrir o instance_id da conexão WhatsApp
2. listar_templates_meta        → (envio oficial) ver templates aprovados na Meta
3. get_meta_template_message_guide → (opcional) aprender a montar "components"
4. send_text_message | send_template_message | ... → enviar
O instance_id é a chave de quase tudo. Comece sempre por listar_instancias se você não souber qual conexão usar.

Tools disponíveis

Envio de mensagens mcp:message:send

ToolDescriçãoCampos principais
send_text_messageMensagem de texto.instance_id, phone_to, text
send_link_messageLink com preview.url, title?, description?, image?
send_image_messageImagem por URL.url, caption?
send_audio_messageÁudio por URL.url
send_video_messageVídeo por URL.url, caption?
send_document_messageDocumento por URL.url, filename?, caption?
send_template_messageTemplate oficial aprovado (Cloud API).template_name, language_code?, components?

Todas as tools de envio aceitam ainda delay (segundos antes do envio) e campaign_id (rastreamento) opcionais.

WhatsApp Flows mcp:message:send

ToolDescriçãoCampos principais
criar_waba_flowCria um Flow diretamente na WABA de uma instância oficial.instance_id, name, categories, flow_json, publish?

Use publish=false para criar como rascunho. A tool respeita a allowlist de instâncias configurada na API Key ou no Client OAuth.

Consultas mcp:read

ToolDescrição
listar_instanciasConexões de WhatsApp disponíveis (origem do instance_id).
listar_templates_metaTemplates aprovados/cadastrados na Meta para uma instância oficial.
listar_chatsConversas de uma instância.
obter_mensagens_chatHistórico de mensagens de um chat.
listar_campanhasCampanhas de marketing cadastradas.
listar_listas_contatoListas/bases de contatos.
listar_contatos_campanhaContatos (leads) dentro de uma lista.
listar_clientesClientes cadastrados.
listar_appsApps e integrações externas.
listar_configs_cobrancaConfigurações/réguas de cobrança.

Guia para agentes mcp:read

get_meta_template_message_guide não envia nada e não altera dados — retorna exemplos de como montar o payload de send_template_message. Aceita o argumento opcional topic: overview, body, media_header, buttons ou examples.

Exemplo — enviar texto

{
  "name": "send_text_message",
  "arguments": {
    "instance_id": "inst_123",
    "phone_to": "5511999999999",
    "text": "Olá, tudo bem?"
  }
}

Resposta de sucesso (texto JSON):

{ "success": true, "message_id": "...", "message": "Message sent successfully" }

Templates oficiais (Meta Cloud API)

Para contas oficiais (Cloud API), mensagens fora da janela de 24h exigem um template aprovado pela Meta. Use send_template_message. Requisitos:

Não sabe montar components? Chame get_meta_template_message_guide primeiro. A validação final de nome, idioma e variáveis acontece na Meta.

Exemplo — template com variáveis no body

{
  "name": "send_template_message",
  "arguments": {
    "instance_id": "inst_123",
    "phone_to": "5511999999999",
    "template_name": "aviso_pagamento",
    "language_code": "pt_BR",
    "components": [
      {
        "type": "body",
        "parameters": [
          { "type": "text", "text": "Maria" },
          { "type": "text", "text": "R$ 199,90" }
        ]
      }
    ]
  }
}

Exemplo — header com documento (PDF)

{
  "name": "send_template_message",
  "arguments": {
    "instance_id": "inst_123",
    "phone_to": "5511999999999",
    "template_name": "fatura_pdf",
    "language_code": "pt_BR",
    "components": [
      {
        "type": "header",
        "parameters": [
          { "type": "document", "document": { "link": "https://exemplo.com/fatura.pdf", "filename": "Fatura.pdf" } }
        ]
      },
      { "type": "body", "parameters": [ { "type": "text", "text": "Maria" } ] }
    ]
  }
}

Erros comuns

MensagemCausa
unauthorized: user not found in contextCredencial ausente ou inválida no header Authorization.
insufficient MCP scope: ...O token não tem o scope necessário (mcp:read ou mcp:message:send).
instance not foundinstance_id não existe. Use listar_instancias.
access denied to this instanceA instância pertence a outro tenant.
template messages are only supported for official Cloud API instancessend_template_message exige instância oficial.
Failed to send message: ...Erro na camada de envio ou retorno da API da Meta.

OAuth para clients remotos

Clients como o Claude usam OAuth automaticamente. O servidor publica os metadados padrão neste host:

GET  https://mcp.connexa-api.com/.well-known/oauth-protected-resource
GET  https://mcp.connexa-api.com/.well-known/oauth-authorization-server
GET  https://mcp.connexa-api.com/authorize        (alias: /oauth/authorize)
POST https://mcp.connexa-api.com/token            (alias: /oauth/token)

Suporta authorization_code com PKCE (plain e S256) e client_credentials para agentes headless. O token emitido fica preso ao tenant do client OAuth.

Agente headless — client_credentials

POST https://mcp.connexa-api.com/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic base64(client_id:client_secret)

grant_type=client_credentials&scope=mcp:read mcp:message:send&resource=https://mcp.connexa-api.com/mcp

A resposta traz um access_token (válido por 1h) que você usa como Authorization: Bearer <access_token> nas chamadas ao /mcp.

Gere o client_id e o client_secret em https://app.nexxa.one/settings/credentials, na aba Clients MCP (OAuth).

Limites e escopo

Além da criação de WhatsApp Flows, o MCP não cria nem altera outros recursos estruturais. As seguintes operações não são expostas como tools:

A instância oficial precisa existir e estar conectada antes de qualquer envio. Para descobrir o que está disponível na sua conta, use as tools listar_*.