Radar MCP Tools
O Radar expõe um servidor MCP que permite que agentes de IA como o Claude acessem seus dados e executem ações diretamente na plataforma — sem precisar copiar e colar informações manualmente.
116
ferramentas disponíveis
24
domínios cobertos
2025-03-26
versão do protocolo
Endpoint
https://radar.noeixodigital.com/api/mcpComo conectar
O jeito de conectar muda por cliente: Claude.AI faz login via OAuth (nenhuma chave pra copiar); Claude Desktop e outros clientes/API direta usam a chave fixa da sua conta. Veja os exemplos abaixo.
- 1. Settings → Connectors → Add custom connector
- 2. Cole a URL:
https://radar.noeixodigital.com/api/mcp - 3. O Claude.AI detecta o suporte a OAuth do Radar automaticamente e te leva pra uma tela de login/autorização — entre com sua conta do Radar e clique em Autorizar.
- 4. Pronto — o Radar aparece como conector ativo. Não precisa gerar nem colar nenhuma chave manualmente.
Claude Desktop usa a chave fixa da sua conta (Bearer), não o login OAuth. Gere/copie a sua em Minha Conta → MCP (IA), depois edite o arquivo claude_desktop_config.json e adicione:
{
"mcpServers": {
"pluga": {
"url": "https://radar.noeixodigital.com/api/mcp",
"headers": {
"Authorization": "Bearer SUA_CHAVE_AQUI"
}
}
}
}Substitua SUA_CHAVE_AQUI pela chave obtida em Minha Conta → MCP (IA). Reinicie o Claude Desktop após salvar. Essa mesma chave/header serve pra qualquer outro cliente MCP ou chamada de API direta que não faça OAuth.
Sincronizar uma base de conhecimento externa
Se sua empresa já mantém um conteúdo vetorizado ou uma base de documentos em outro sistema, dá pra manter o Radar sempre atualizado sem sair da sua ferramenta atual — bastam essas 3 tools de KB.
Por que funciona
A base de conhecimento do Radar já é 100% vetorizada — cada pergunta do cliente dispara uma busca semântica nova, não existe cache do conteúdo em memória. O conteúdo enviado por create_kb_document / update_kb_document é dividido em parágrafos, cada parágrafo vira um embedding (OpenAI text-embedding-3-small) e é gravado em dois lugares — Postgres (pgvector) e Qdrant — para busca rápida. No momento da resposta, o agente busca os trechos mais relevantes ali e injeta no contexto antes de chamar o modelo. Ou seja: qualquer conteúdo enviado por essas tools já fica imediatamente pesquisável pelo agente, sem re-deploy e sem re-treinar nada.
Escrevendo para a busca encontrar
A busca é por semelhança de texto, não por intenção. Um documento vence pelo jeito como está escrito, não por ser o mais adequado. Três consequências práticas:
- Comece pela pergunta que o cliente faz, não pelo dado. Uma foto de cardápio descrita como "01 Alho e Óleo, 02 Atum…" não casa com "quer ver o cardápio?" — a pergunta não cita sabor nenhum. Descrita como "esta é a foto para mandar quando o cliente pede o cardápio", casa.
- Diga também o que o documento NÃO é quando houver risco de confusão. A foto de uma promoção estava sendo enviada no lugar do cardápio até a descrição passar a dizer "isto não é o cardápio e não lista sabores".
- Texto longo expulsa o resto. O agente recebe um número limitado de trechos por mensagem (
kb_search_limit, padrão 5). Um documento verboso pode ocupar metade das vagas sozinho. Quando a mesma informação existe em texto e em imagem, os dois competem: descreva a imagem com o conteúdo dela e reduza o texto a um ponteiro, em vez de manter os dois completos.
Para diagnosticar: quando o agente responde com a coisa errada, a pergunta não é "por que ele errou" e sim o que a busca entregou a ele. Cada resposta guarda o contexto exato que recebeu no campo kbContext da mensagem — é lá que a causa aparece, e quase nunca é o prompt.
Não existe consulta ao vivo a um vector database de terceiro — o Radar só busca na própria base. O padrão certo é sincronização por push: toda vez que o conteúdo mudar na fonte de origem, seu sistema chama uma dessas tools pra refletir a mudança aqui.
Guarde um mapeamento id-externo → document_id
Na primeira sincronização de cada documento, create_kb_document retorna um document_id — guarde essa relação do seu lado (id do seu sistema → document_id do Radar) para saber o que atualizar depois.
Conteúdo novo → create_kb_document
Envie name, content (texto plano) e tags opcionais. Separe tópicos por linha em branco — cada bloco separado vira um chunk vetorizado independente, o que melhora a precisão da busca.
Conteúdo alterado → update_kb_document
Passe o document_id salvo no passo 1. Os chunks antigos são apagados e o documento é reindexado do zero automaticamente — pode chamar isso toda vez que a fonte original mudar.
(Opcional) Audite com list_kb_documents
Lista tudo que já está indexado — útil para verificar se a sincronização está completa ou detectar documentos órfãos.
1. Listar o que já existe (list_kb_documents)
POST https://radar.noeixodigital.com/api/mcp
Authorization: Bearer SUA_CHAVE
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_kb_documents",
"arguments": {}
}
}2. Criar documento novo (create_kb_document)
POST https://radar.noeixodigital.com/api/mcp
Authorization: Bearer SUA_CHAVE
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "create_kb_document",
"arguments": {
"name": "Política de Entregas",
"content": "Parágrafo 1 — vira um chunk vetorizado.\n\nParágrafo 2 — outro chunk, buscado separadamente.",
"tags": "faq,entrega"
}
}
}3. Atualizar documento existente (update_kb_document)
POST https://radar.noeixodigital.com/api/mcp
Authorization: Bearer SUA_CHAVE
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "update_kb_document",
"arguments": {
"document_id": "<document_id guardado na 1ª sincronização>",
"content": "Conteúdo atualizado, reindexado do zero automaticamente."
}
}
}Sem target_user_id nas chamadas, tudo opera na conta dona da chave usada — não precisa passar nenhum identificador de conta a mais.
Empresas
5 ferramentasCadastro de Empresas (modelo conta, 1 empresa → N contatos): listar, criar, detalhar, enriquecer via Receita e vincular contatos.
list_companies#Lista/busca empresas do cadastro. Filtra por texto (nome, CNPJ, cidade, setor) e status. Retorna nome, CNPJ, cidade/UF, setor, status e nº de contatos.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
query | string | opcional | Texto a buscar (nome, CNPJ, cidade, setor) |
status | string | opcional | lead | prospect | client | inactive |
limit | number | opcional | Máx de resultados (padrão 20, máx 100) |
Exemplo de chamada
tools/call
{
"name": "list_companies",
"arguments": { "query": "castanheiras", "status": "lead" }
}get_company#Detalha uma empresa pelo id — dados fiscais, sócios (QSA) e contatos vinculados.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
company_id | string | obrigatório | ID da empresa (via list_companies) |
Exemplo de chamada
tools/call
{
"name": "get_company",
"arguments": { "company_id": "cmr..." }
}create_company#Cria uma empresa. Informe ao menos o nome (razão social). Se informar CNPJ, use enrich_company depois. Evita duplicar por CNPJ.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
name | string | obrigatório | Razão social / nome |
cnpj | string | opcional | CNPJ |
tradeName | string | opcional | Nome fantasia |
website | string | opcional | Site |
email | string | opcional | |
phone | string | opcional | Telefone |
status | string | opcional | lead | prospect | client | inactive |
Exemplo de chamada
tools/call
{
"name": "create_company",
"arguments": { "name": "Padaria Pão Quente LTDA", "cnpj": "12345678000199" }
}enrich_company#Enriquece a empresa pela Receita Federal (BrasilAPI) pelo CNPJ: razão social, fantasia, CNAE/setor, situação, porte, natureza jurídica, capital, endereço e sócios (QSA). Propaga razão social/CNPJ aos contatos vinculados.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
company_id | string | obrigatório | ID da empresa |
cnpj | string | opcional | CNPJ (opcional; usa o cadastrado se omitido) |
Exemplo de chamada
tools/call
{
"name": "enrich_company",
"arguments": { "company_id": "cmr..." }
}link_contact_company#Vincula um contato a uma empresa (ou desvincula se company_id vazio). Sincroniza nome/CNPJ da empresa no contato.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
contact_id | string | obrigatório | ID do contato |
company_id | string | opcional | ID da empresa (vazio = desvincular) |
Exemplo de chamada
tools/call
{
"name": "link_contact_company",
"arguments": { "contact_id": "cmq...", "company_id": "cmr..." }
}Base de Conhecimento
8 ferramentasBusca semântica e gerenciamento de documentos indexados na KB do usuário. Todas as tools aceitam target_user_id (APENAS admin da plataforma) para operar na conta de um cliente em vez da própria.
search_knowledge_base#Realiza busca semântica na base de conhecimento. Retorna os trechos mais relevantes para a query, com score de relevância e nome do documento de origem.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
query | string | obrigatório | Texto ou pergunta a buscar |
limit | number | opcional | Máximo de resultados — padrão 5, máx 20 |
tag | string | opcional | Filtrar por tag do documento, ex: "marketing" |
Exemplo de chamada
tools/call
{
"name": "search_knowledge_base",
"arguments": { "query": "qual é o prazo de entrega?", "limit": 3 }
}list_kb_documents#Lista todos os documentos indexados na KB do usuário com nome, tipo (text, url, image, pdf), status de indexação e tags.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
tag | string | opcional | Filtrar documentos que contenham esta tag |
Exemplo de chamada
tools/call
{
"name": "list_kb_documents",
"arguments": { "tag": "marketing" }
}create_kb_document#Cria e indexa um novo documento de texto na base de conhecimento. O conteúdo é dividido em parágrafos, vetorizado com embeddings OpenAI e armazenado para busca semântica. Requer chave OpenAI configurada na conta.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
name | string | obrigatório | Título do documento |
content | string | obrigatório | Conteúdo em texto plano. Separe tópicos com linhas em branco para melhor indexação. |
tags | string | opcional | Tags separadas por vírgula, ex: "marketing,faq,produto" |
Exemplo de chamada
tools/call
{
"name": "create_kb_document",
"arguments": { "name": "Política de Entregas", "content": "Entregas em até 5 dias úteis para todo o Brasil...", "tags": "faq,entrega" }
}create_kb_image#Cria e indexa uma IMAGEM na KB a partir de uma URL pública OU de base64 (arquivo local, sem URL). A imagem é descrita automaticamente por IA (GPT-4o Vision) e indexada para busca semântica. Fica disponível em /api/kb/image/[id] (URL pública — útil como header_image_url de create_whatsapp_template) e pode ser enviada pelo agente no WhatsApp. Requer chave OpenAI configurada na conta.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
name | string | obrigatório | Título da imagem |
image_url | string | opcional | URL pública (http/https) da imagem a baixar e indexar. Ignorado se image_base64 vier junto. |
image_base64 | string | opcional | Alternativa quando a imagem não está hospedada em URL nenhuma — data URL base64 completa. Tem prioridade sobre image_url. |
tags | string | opcional | Tags separadas por vírgula, ex: "marca,logo" |
Exemplo de chamada
tools/call
{
"name": "create_kb_image",
"arguments": { "name": "Logo principal claro", "image_url": "https://exemplo.com/logo.png", "tags": "marca,logo" }
}create_kb_video#Cria e indexa um VÍDEO na KB a partir de uma URL pública OU de base64. Diferente de imagem, não existe descrição automática por IA — description é obrigatório (é o texto usado na busca semântica pra saber quando enviar o vídeo). Limite de 16MB (mesmo teto que o WhatsApp impõe). Fica disponível em /api/kb/video/[id] — o agente pode enviar em conversa ativa, e também serve como header_video_url de create_whatsapp_template para cadências.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
name | string | obrigatório | Título do vídeo |
description | string | obrigatório | Descrição detalhada do conteúdo — não há geração automática por IA |
video_url | string | opcional | URL pública (http/https, mp4) do vídeo a baixar e indexar. Ignorado se video_base64 vier junto. |
video_base64 | string | opcional | Alternativa quando o vídeo não está hospedado em URL nenhuma — data URL base64 completa. Tem prioridade sobre video_url. |
tags | string | opcional | Tags separadas por vírgula |
Exemplo de chamada
tools/call
{
"name": "create_kb_video",
"arguments": { "name": "Vídeo institucional 40s", "description": "Vídeo mostrando o escritório e a equipe, usado quando o lead pergunta como funciona o atendimento", "video_url": "https://exemplo.com/institucional.mp4" }
}create_kb_audio#Cria e indexa um ÁUDIO na KB a partir de uma URL pública OU de base64. Não há descrição automática por IA — description é obrigatório. Limite de 16MB. Fica disponível em /api/kb/audio/[id] — o agente pode enviar em conversa ativa. ⚠️ Áudio NÃO pode ser usado em cadência de prospecção (a Meta não suporta cabeçalho de áudio em templates aprovados).
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
name | string | obrigatório | Título do áudio |
description | string | obrigatório | Descrição detalhada do conteúdo — não há geração automática por IA |
audio_url | string | opcional | URL pública (http/https) do áudio a baixar e indexar. Ignorado se audio_base64 vier junto. |
audio_base64 | string | opcional | Alternativa quando o áudio não está hospedado em URL nenhuma — data URL base64 completa. Tem prioridade sobre audio_url. |
tags | string | opcional | Tags separadas por vírgula |
Exemplo de chamada
tools/call
{
"name": "create_kb_audio",
"arguments": { "name": "Áudio de boas-vindas", "description": "Mensagem de voz de 15s explicando o próximo passo do atendimento", "audio_url": "https://exemplo.com/boas-vindas.ogg" }
}update_kb_document#Atualiza o conteúdo ou as tags de um documento existente. Os chunks antigos são removidos e o documento é re-indexado automaticamente.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
document_id | string | obrigatório | ID do documento (obtido via list_kb_documents) |
name | string | opcional | Novo título do documento |
content | string | opcional | Novo conteúdo completo (se omitido, mantém o atual) |
tags | string | opcional | Novas tags separadas por vírgula — substitui as existentes |
Exemplo de chamada
tools/call
{
"name": "update_kb_document",
"arguments": { "document_id": "clxxx", "tags": "faq,produto,atualizado" }
}delete_kb_document#Apaga um documento da base (texto, imagem, vídeo ou áudio) e o índice de busca dele — o mesmo caminho do botão de excluir em /kb. Não tem volta. Para trocar uma imagem: crie a nova com create_kb_image e apague a antiga.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
document_id | string | obrigatório | ID do documento (obtido via list_kb_documents) |
confirm_name | string | obrigatório | Nome atual exato do documento. Se não bater, nada é apagado |
Exemplo de chamada
tools/call
{
"name": "delete_kb_document",
"arguments": { "document_id": "clxxx", "confirm_name": "Foto - Bolo de Laranja 220g" }
}Insights de Atendimento
3 ferramentasPerguntas/respostas problemáticas do agente, registradas automaticamente por 3 fontes (campo source): "tool" (flag_knowledge_gap, o agente sinaliza que não sabia), "heuristic" (frase-gatilho de evasiva) e "async_qa" (revisão assíncrona por cron: resposta dada COM CONFIANÇA que não é sustentada pela KB — alucinação silenciosa). "tool"/"heuristic" exigem AgentConfig.knowledgeGapTrackingEnabled; "async_qa" exige AgentConfig.asyncQaEnabled (ambos via update_agent_config). Perguntas semanticamente parecidas são agrupadas (occurrences).
list_knowledge_gaps#Lista as lacunas de conhecimento registradas para a conta, ordenadas por frequência (occurrences) e recência. Sem target_user_id, consulta a PRÓPRIA conta autenticada; admin da plataforma pode passar target_user_id.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
status | string | opcional | pending (padrão) | resolved | dismissed | all |
limit | string | opcional | Padrão 50, máx 200 |
Exemplo de chamada
tools/call
{
"name": "list_knowledge_gaps",
"arguments": { "status": "pending" }
}resolve_knowledge_gap#Resolve, descarta ou adiciona à KB uma lacuna obtida via list_knowledge_gaps. "add_to_kb" cria automaticamente um novo documento na base de conhecimento (pergunta + resposta) já indexado. Sem target_user_id, opera na PRÓPRIA conta autenticada; admin da plataforma pode passar target_user_id.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
gap_id | string | obrigatório | ID da lacuna (via list_knowledge_gaps) |
action | string | obrigatório | resolve | dismiss | add_to_kb |
resolution | string | opcional | Resposta correta para a pergunta (obrigatório para "resolve" e "add_to_kb") |
Exemplo de chamada
tools/call
{
"name": "resolve_knowledge_gap",
"arguments": { "gap_id": "clxxx", "action": "add_to_kb", "resolution": "O prazo de entrega padrão é de 5 dias úteis." }
}list_help_unanswered#Central de ajuda do Radar: perguntas que o "Pergunte ao Radar" não soube responder, de TODAS as contas, agrupadas (acento/caixa/pontuação não separam) e ordenadas por quantas contas perguntaram. É a fila do que falta escrever. Traz variações, telas, cargos e o artigo mais próximo encontrado. Não confundir com list_knowledge_gaps (dúvidas dos clientes finais ao agente de uma conta). APENAS admin da plataforma.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
days | string | opcional | Janela em dias. Padrão 30, máx 365 |
limit | string | opcional | Máximo de grupos. Padrão 30, máx 200 |
Exemplo de chamada
tools/call
{
"name": "list_help_unanswered",
"arguments": { "days": "30" }
}Contatos (CRM)
8 ferramentasLeitura e escrita de contatos no CRM, incluindo tags e estágios do pipeline de vendas.
list_contacts#Lista contatos do CRM com paginação. Suporta busca por nome, telefone ou e-mail, e filtro por status.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
search | string | opcional | Busca por nome, telefone ou e-mail |
status | string | opcional | lead | prospect | client | inactive |
email_status | string | opcional | "bounced" retorna só contatos com hard bounce confirmado no e-mail |
limit | number | opcional | Padrão 20, máx 100 |
Exemplo de chamada
tools/call
{
"name": "list_contacts",
"arguments": { "search": "João", "status": "prospect", "limit": 10 }
}get_contact#Retorna detalhes completos de um contato, incluindo as 10 notas mais recentes, estágio do pipeline, valor do negócio e a conversa mais recente (conversationId/conversationStatus/conversationChannel) — use o conversationId em get_conversation_messages, ou get_conversations com contact_id se precisar de TODAS as conversas do contato, não só a mais recente.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
id | string | opcional | ID do contato (use id ou phone) |
phone | string | opcional | Telefone do contato (alternativa ao id) |
Exemplo de chamada
tools/call
{
"name": "get_contact",
"arguments": { "phone": "5511999999999" }
}create_contact#Cria um novo contato no CRM. Retorna erro se já existir um contato com o mesmo número de telefone.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
name | string | obrigatório | Nome completo do contato |
phone | string | obrigatório | Telefone no formato internacional, ex: 5511999999999 |
email | string | opcional | Endereço de e-mail |
company | string | opcional | Empresa do contato |
document | string | opcional | CPF (pessoa física) ou CNPJ (empresa), com ou sem pontuação. Entra no cadastro que o agente mostra ao cliente no WhatsApp para confirmar, em vez de perguntar |
status | string | opcional | lead | prospect | client | inactive — padrão: lead |
source | string | opcional | Origem do contato, ex: whatsapp, manual |
dealValue | number | opcional | Valor estimado do negócio (R$) |
notes | string | opcional | Anotação inicial |
Exemplo de chamada
tools/call
{
"name": "create_contact",
"arguments": { "name": "Maria Silva", "phone": "5521988887777", "status": "prospect", "dealValue": 3500 }
}add_contact_tag#Adiciona uma tag a um contato. Se a tag estiver mapeada a uma automação com trigger tag:<nome>, o fluxo é disparado automaticamente.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
contact_id | string | obrigatório | ID do contato |
tag | string | obrigatório | Tag a adicionar, ex: VIP, Hot, Interessado |
Exemplo de chamada
tools/call
{
"name": "add_contact_tag",
"arguments": { "contact_id": "clxxx", "tag": "VIP" }
}remove_contact_tag#Remove uma tag de um contato (o inverso de add_contact_tag). Não dispara nenhuma automação.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
contact_id | string | obrigatório | ID do contato |
tag | string | obrigatório | Tag a remover, exatamente como aparece em get_contact/list_contacts |
Exemplo de chamada
tools/call
{
"name": "remove_contact_tag",
"arguments": { "contact_id": "clxxx", "tag": "VIP" }
}get_contact_360#Visão completa de um contato numa chamada só: cadastro, estágio no funil, últimas mensagens, processo em andamento com as etapas, ordens de serviço em campo e cadências. Use quando a pergunta for "o que está acontecendo com esse cliente?" — evita encadear get_contact + get_conversations + list_processes + list_field_orders.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
contact_id | string | opcional | ID do contato (ou use phone) |
phone | string | opcional | Telefone, se não tiver o id |
messages_limit | number | opcional | Mensagens recentes a trazer (padrão 10, máx 50) |
Exemplo de chamada
tools/call
{
"name": "get_contact_360",
"arguments": { "phone": "5548988066728" } → { "contato": {...}, "conversa": { "mensagens": [...] }, "projetos": [{ "progresso": "1/4", "etapa_atual": {...} }], "ordens_de_campo": [...], "cadencias": [...] }
}update_contact#Atualiza os dados cadastrais de um contato: nome, e-mail, empresa, CPF/CNPJ, telefone, origem ou observações.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
contact_id | string | obrigatório | ID do contato a atualizar |
name | string | opcional | Novo nome completo |
email | string | opcional | Novo e-mail |
company | string | opcional | Empresa do contato |
document | string | opcional | CPF (pessoa física) ou CNPJ (empresa), com ou sem pontuação. Entra no cadastro que o agente mostra ao cliente no WhatsApp para confirmar, em vez de perguntar |
phone | string | opcional | Novo telefone com código do país |
source | string | opcional | Origem do contato, ex: linkedin, evento |
notes | string | opcional | Observações internas (substitui o campo notes, não o histórico) |
Exemplo de chamada
tools/call
{
"name": "update_contact",
"arguments": { "contact_id": "clxxx", "company": "Empresa Ltda", "email": "novo@email.com" }
}update_contact_status#Atualiza o status, estágio do pipeline, valor do negócio ou adiciona uma nota a um contato.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
contact_id | string | obrigatório | ID do contato |
status | string | opcional | lead | prospect | client | inactive |
pipeline_stage_name | string | opcional | Nome exato da etapa do pipeline |
deal_value | number | opcional | Novo valor estimado do negócio (R$) |
notes | string | opcional | Anotação a registrar na linha do tempo |
Exemplo de chamada
tools/call
{
"name": "update_contact_status",
"arguments": { "contact_id": "clxxx", "status": "client", "pipeline_stage_name": "Fechado", "deal_value": 4800 }
}Conversas
3 ferramentasAcesso ao histórico de atendimentos em todos os canais: WhatsApp, e-mail, Instagram, Facebook e web.
get_conversations#Lista as conversas mais recentes com status, canal e última mensagem. Por padrão retorna as conversas ativas. Informe contact_id ou contact_phone pra achar a(s) conversa(s) de UM contato específico (nesse caso também traz arquivadas, a menos que status seja informado) — evita ter que casar por nome/telefone na mão.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
status | string | opcional | active | archived — padrão: active (ignorado como padrão se contact_id/contact_phone for informado) |
channel | string | opcional | whatsapp | email | instagram | facebook | web |
contact_id | string | opcional | Filtrar pelas conversas de um contato específico (ID do Contact — obtido via get_contact/list_contacts) |
contact_phone | string | opcional | Filtrar por telefone específico (alternativa a contact_id) |
limit | number | opcional | Padrão 10, máx 50 |
Exemplo de chamada
tools/call
{
"name": "get_conversations",
"arguments": { "contact_id": "clxxx" } → todas as conversas (ativas e arquivadas) desse contato
}get_conversation_messages#Retorna o histórico completo de mensagens de uma conversa específica, ordenado do mais antigo ao mais recente.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
conversation_id | string | obrigatório | ID da conversa |
limit | number | opcional | Mensagens mais recentes — padrão 20, máx 100 |
Exemplo de chamada
tools/call
{
"name": "get_conversation_messages",
"arguments": { "conversation_id": "clxxx", "limit": 30 }
}archive_conversation#Arquiva uma conversa ativa, encerrando o atendimento. A conversa pode ser consultada com status "archived".
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
conversation_id | string | obrigatório | ID da conversa ativa a arquivar |
Exemplo de chamada
tools/call
{
"name": "archive_conversation",
"arguments": { "conversation_id": "clxxx" }
}Pedidos de Serviço
3 ferramentasVisualização dos pedidos de serviço criados pelo agente conversacional.
list_service_orders#Lista pedidos de serviço com dados do cliente, status atual, tentativas de envio ao sistema externo e timestamps.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
status | string | opcional | pending | processing | sent | completed | failed |
limit | number | opcional | Padrão 20, máx 100 |
Exemplo de chamada
tools/call
{
"name": "list_service_orders",
"arguments": { "status": "pending", "limit": 20 }
}get_service_order#Retorna detalhes completos de um pedido, incluindo lista de anexos, ID do ticket externo e histórico de erros.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
order_id | string | obrigatório | ID do pedido de serviço |
Exemplo de chamada
tools/call
{
"name": "get_service_order",
"arguments": { "order_id": "clxxx" }
}set_order_stage#Move um pedido de estágio de produção (recebido → preparo → pronto → entregue → cancelado), como no Kanban de Pedidos. Se a conta tiver avisos ativados, o cliente é notificado automaticamente por WhatsApp/SMS. Ideal para integrar o PDV/cozinha do cliente com o Radar.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
order_id | string | obrigatório | ID do pedido (via list_service_orders) |
stage | string | obrigatório | recebido | preparo | pronto | entregue | cancelado |
Exemplo de chamada
tools/call
{
"name": "set_order_stage",
"arguments": { "order_id": "clxxx", "stage": "pronto" }
}Envio de mensagens WhatsApp via o provedor ativo da conta (Evolution API, Stevo ou Meta Cloud API).
send_whatsapp_message#Envia uma mensagem de texto para um número WhatsApp. Usa automaticamente o provedor ativo configurado na conta. A mensagem fica registrada na conversa do contato (cria o Contact e a Conversa automaticamente se ainda não existirem, com status "lead") — aparece no painel do Radar e no histórico que o agente de IA usa pra responder com contexto. Não funciona para contatos de widget (sessões de chat web).
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
phone | string | obrigatório | Número com código do país, somente dígitos — ex: 5511999999999 |
message | string | obrigatório | Texto da mensagem a enviar |
Exemplo de chamada
tools/call
{
"name": "send_whatsapp_message",
"arguments": { "phone": "5511999999999", "message": "Olá! Seu pedido foi confirmado." }
}send_whatsapp_template#Envia um template WhatsApp Business (WABA) já aprovado pela Meta — necessário para contato FRIO, quando não há janela de atendimento de 24h aberta (send_whatsapp_message é rejeitado nesse caso). Use list_whatsapp_templates antes para confirmar o nome exato e o número de variáveis {{1}}, {{2}}... do corpo — a contagem enviada em "params" precisa bater exatamente com a do template aprovado. A mensagem (corpo já interpolado com os params) fica registrada na conversa do contato, criando Contact e Conversa automaticamente se ainda não existirem.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
phone | string | obrigatório | Número com código do país — ex: 5511999999999. Números BR sem o 9º dígito são normalizados automaticamente. |
template_name | string | obrigatório | Nome exato do template aprovado (ver list_whatsapp_templates) |
language | string | opcional | Idioma do template — padrão "pt_BR" |
params | string | opcional | Valores das variáveis {{1}}, {{2}}... do corpo, separados por vírgula, na ordem (ex: "José,eKyte"). Omitir se o template não tem variáveis. |
header_image_url | string | opcional | URL pública de imagem — só se o template tiver cabeçalho de IMAGEM |
header_video_url | string | opcional | URL pública de vídeo — só se o template tiver cabeçalho de VÍDEO |
Exemplo de chamada
tools/call
{
"name": "send_whatsapp_template",
"arguments": { "phone": "5511999999999", "template_name": "formulario_recebido_conta_criada", "params": "José" }
}SMS
1 ferramentaEnvio de SMS pelo gateway do próprio celular Android do usuário (configurado em Conta → Gateway SMS).
send_sms#Enfileira um SMS que será enviado pelo celular gateway do usuário. Só chega em número de celular. Recomendado: texto curto (≤160 caracteres = 1 SMS), sem acento e no máximo 1 link.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
phone | string | obrigatório | Número de celular com código do país, somente dígitos — ex: 5548999998888 |
message | string | obrigatório | Texto do SMS (curto, ideal ≤160 caracteres) |
Exemplo de chamada
tools/call
{
"name": "send_sms",
"arguments": { "phone": "5548999998888", "message": "Oi Joao, aqui e a noEixo. Posso te chamar no WhatsApp?" }
}E-mail (Gmail)
2 ferramentasEnvio de e-mails e leitura da caixa de entrada via a conta Gmail conectada.
send_email#Envia um e-mail pela conta Gmail conectada. A mensagem é registrada automaticamente como mensagem da conversa com o destinatário no CRM.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
to | string | obrigatório | Endereço de e-mail do destinatário |
subject | string | obrigatório | Assunto do e-mail |
body | string | obrigatório | Corpo em texto plano ou HTML |
cc | string | opcional | Endereço em cópia (opcional) |
Exemplo de chamada
tools/call
{
"name": "send_email",
"arguments": { "to": "cliente@empresa.com", "subject": "Proposta comercial", "body": "Segue nossa proposta..." }
}list_inbox#Lista e-mails não lidos da caixa de entrada com remetente, assunto, data e trecho do corpo.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
limit | number | opcional | Padrão 10, máx 30 |
Exemplo de chamada
tools/call
{
"name": "list_inbox",
"arguments": { "limit": 5 }
}Automações
5 ferramentasListagem e disparo manual de fluxos de automação configurados no Radar.
list_automations#Lista os fluxos de automação com nome, trigger e status. Use para descobrir os IDs disponíveis antes de chamar trigger_automation.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
active_only | string | opcional | "true" retorna apenas automações ativas (padrão: "true") |
Exemplo de chamada
tools/call
{
"name": "list_automations",
"arguments": { "active_only": "true" }
}get_automation#Retorna o detalhe completo de UMA automação, incluindo o array "actions" já parseado (list_automations não traz actions, só resumo). Use SEMPRE antes de update_automation quando for alterar só parte das ações — update_automation substitui o array inteiro, então sem ler o estado atual primeiro é fácil apagar sem querer uma ação existente.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
automation_id | string | obrigatório | ID do fluxo (obtido via list_automations) |
Exemplo de chamada
tools/call
{
"name": "get_automation",
"arguments": { "automation_id": "clxxx" }
}trigger_automation#Dispara um fluxo de automação para um contato específico. Útil para follow-ups, mensagens programadas ou ações em resposta a eventos externos. O fluxo respeita o cooldown configurado.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
automation_id | string | obrigatório | ID do fluxo (obtido via list_automations) |
contact_phone | string | obrigatório | Telefone do contato no formato internacional |
contact_name | string | opcional | Nome do contato (usado em mensagens com {{order.customerName}}) |
context | string | opcional | JSON com variáveis extras para interpolação, ex: {"serviceName":"Consultoria"} |
Exemplo de chamada
tools/call
{
"name": "trigger_automation",
"arguments": { "automation_id": "clxxx", "contact_phone": "5511999999999", "contact_name": "João", "context": "{\"serviceName\": \"Consultoria\"}" }
}create_automation#Cria um novo fluxo de automação com nome, trigger e lista de ações em JSON. Triggers: order_created, order_submitted, tag:<nome>, booking_created/booking_cancelled/booking_rescheduled, flow_completed:<flowId>, ou nome de evento customizado de um webhook externo (ver parâmetro trigger). Tipos de ação: send_whatsapp, send_email, send_webhook, add_contact_tag, move_to_stage, check_tag, condition, delay, trigger_flow, send_to_ekyte, ekyte_add_tag, ekyte_add_comment, notify_team. Cada ação precisa de "id", "type" e "config" (objeto) — nunca campos soltos fora de "config". Dica: durante a conversa, o agente pode chamar a tool interna add_contact_tag pra marcar o contato (ex: "SQL" quando qualificar um lead) — isso já dispara automações com trigger "tag:<nome>", então dá pra encadear qualificação → send_webhook pra enviar o lead a um CRM externo (ex: RD Station via n8n). Os triggers booking_created/booking_cancelled/booking_rescheduled disparam quando o agente confirma/cancela/reagenda um compromisso (schedule_appointment/cancel_appointment/reschedule_appointment) — incluem {{order.hostName}}/{{order.hostEmail}} (quem ficou responsável, útil pra sincronizar com CRM externo quando o provedor de agenda faz round-robin, ex: NeetoCal) e {{order.appointmentDate}}/{{order.appointmentTime}}/{{order.meetingUrl}} (data/horário formatados em pt-BR + link real da reunião, ex: Google Meet) — úteis pra montar um send_email de confirmação. send_whatsapp funciona com qualquer provedor WhatsApp ativo (Evolution, Stevo ou Meta Direct) — usa sempre a conexão marcada como ativa na conta.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
name | string | obrigatório | Nome do fluxo |
trigger | string | obrigatório | Gatilho: "order_created" | "order_submitted" | "tag:VIP" | "booking_created" | "booking_cancelled" | "booking_rescheduled" | "flow_completed:<id>" | nome customizado vindo de webhook externo (MinhaGrana usa o nome do evento recebido, ex: "mg_pagou"; RD Station Marketing usa o parâmetro ?event= configurado na URL do webhook /api/webhooks/rdstation-marketing?userId=<id>&event=<nome> — útil pra um fluxo de marketing automation disparar o SDR a fazer o primeiro toque via WhatsApp num lead que virou MQL) |
actions | string | obrigatório | Array JSON de ações no formato [{id, type, config}]. send_whatsapp config: {whatsappMessage} (texto livre) ou {whatsappMessageType:"template", whatsappTemplateName, whatsappTemplateLanguage, whatsappTemplateParams (JSON array), whatsappTemplateBody (corpo com {{1}},{{2}}... — necessário pro histórico e como fallback em conexões sem conceito de template aprovado)} — use template pra contato "frio" (lead que nunca mandou mensagem, sem janela de atendimento aberta). send_email config: {emailSubject, emailBody (suportam {{order.*}}), emailIncludeHost:"true"|"false" (manda cópia também pro {{order.hostEmail}}, padrão false), emailSenderConnectionId (opcional — sem isso usa o "Padrão para envio" de Settings → Gmail, ou a 1ª conta Gmail conectada)} — requer Gmail conectado. send_webhook config: {webhookUrl, webhookMethod ("POST" padrão), webhookPayload (JSON com {{order.*}}/{{user.*}}), webhookHeaders (JSON opcional)}. add_contact_tag config: {contactTag}. move_to_stage config: {pipelineStageId}. check_tag config: {checkTag, checkTagMode:"has"|"missing"} — para o fluxo inteiro se a condição não bater (use pra "só continua se..."). condition config: {conditionTag, conditionType:"has_tag"|"missing_tag"|"has_booking"|"missing_booking"} — RAMIFICA em vez de parar: nunca interrompe o fluxo, só decide qual caminho seguir via os campos opcionais "next"/"branches" de cada ação ({"branches":{"onTrue":"<id>","onFalse":"<id>"}} só na própria ação condition; "next":"<id>" em qualquer ação, pra pular a ordem padrão do array). has_tag/missing_tag exigem conditionTag; has_booking/missing_booking IGNORAM conditionTag e em vez disso checam se order.customerEmail tem reserva CONFIRMADA na agenda conectada (hoje só contas com NeetoCal suportam essa checagem) — útil pra confirmar um "já agendou" vindo de webhook externo antes de assumir que é verdade, evitando mandar uma mensagem de confirmação pra quem na real não tem reunião marcada. delay config: {delayAmount, delayUnit}. notify_team config: {notifyTitle, notifyMessage (suportam {{order.*}})} — avisa o dono da conta por push + e-mail (e-mail só com Gmail conectado), sem pausar o agente nem enviar nada ao contato; cooldown de 1h por contato. send_to_ekyte config: {ekytePhaseId (obrigatório — fase destino no pipeline "[CRM] Venda"; IDs de fase já mudaram uma vez numa migração do eKyte sem aviso, confirme os IDs atuais antes de usar valores antigos), ekyteSummaryPrompt (opcional, instrução pra IA gerar o resumo SPICED — Situação/Dor/Impacto/Evento Crítico/Decisão/Objeção — que vira comentário na tarefa), ekyteLeadNameTemplate (opcional, suporta {{order.*}} incl. {{order.company}}/{{order.teamSize}} — define o "name" enviado ao eKyte; o eKyte SEMPRE prefixa "Lead: " no título final, não tem como evitar via webhook; sem esse campo usa {{order.customerName}} como padrão)} — cria ou move uma tarefa no CRM do eKyte, requer Conexão eKyte configurada. ekyte_add_tag config: {ekyteTagId (obrigatório — id numérico da tag no eKyte)} — adiciona uma tag numa tarefa eKyte JÁ vinculada ao contato (não muda de fase); se o contato ainda não tem tarefa vinculada, a ação não faz nada (não é erro). ekyte_add_comment config: {ekyteCommentText (obrigatório, suporta {{order.*}})} — posta um comentário na tarefa eKyte já vinculada ao contato, assinado automaticamente "🤖 [Radar]" (mesmo padrão dos comentários automáticos de tentativa de contato); se o contato ainda não tem tarefa vinculada no momento em que este nó roda, não faz nada (não é erro) — atenção: se colocado logo após um send_to_ekyte que está CRIANDO a tarefa pela primeira vez (lead novo), a criação no eKyte é assíncrona (fila), então o vínculo pode ainda não existir nesse instante exato e o comentário silenciosamente não sai. |
is_active | string | opcional | "true" ou "false" — padrão: "true" |
Exemplo de chamada
tools/call
{
"name": "create_automation",
"arguments": { "name": "Lead qualificado -> RD Station", "trigger": "tag:SQL", "actions": "[{\"id\":\"1\",\"type\":\"send_webhook\",\"config\":{\"webhookUrl\":\"https://n8n.exemplo.com/webhook/sql\",\"webhookPayload\":\"{\\\"nome\\\":\\\"{{order.customerName}}\\\",\\\"telefone\\\":\\\"{{order.customerPhone}}\\\"}\"}}]" }
}update_automation#Atualiza um fluxo de automação existente: nome, trigger, ações ou estado ativo/inativo.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
automation_id | string | obrigatório | ID do fluxo a atualizar |
name | string | opcional | Novo nome |
trigger | string | opcional | Novo trigger |
actions | string | opcional | Novo array JSON de ações (substitui completamente) |
is_active | string | opcional | "true" para ativar, "false" para desativar |
Exemplo de chamada
tools/call
{
"name": "update_automation",
"arguments": { "automation_id": "clxxx", "is_active": "false" }
}Negociações (Pipeline)
3 ferramentasGerenciamento do pipeline de vendas: criação e atualização de negociações com valor estimado, etapa e histórico de notas.
list_deals#Lista negociações ativas no pipeline com valor do negócio, etapa e status. Use para monitorar o funil comercial.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
sem_resposta_ha_dias | number | opcional | Só contatos em que a empresa falou por último e o cliente não respondeu há mais de N dias. Cada item traz ultima_mensagem_cliente_em e ultima_mensagem_empresa_em. |
pipeline_stage | string | opcional | Filtrar por nome exato da etapa do pipeline |
status | string | opcional | lead | prospect | client | inactive |
min_value | number | opcional | Filtrar por valor mínimo do negócio (R$) |
limit | number | opcional | Padrão 20, máx 100 |
Exemplo de chamada
tools/call
{
"name": "list_deals",
"arguments": { "status": "prospect", "min_value": 1000, "limit": 20 }
}create_deal#Cria uma nova negociação no CRM com valor e etapa do pipeline. Use para registrar oportunidades comerciais recebidas externamente.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
name | string | obrigatório | Nome do contato / cliente |
phone | string | obrigatório | Telefone com código do país, ex: 5511999999999 |
email | string | opcional | E-mail do contato |
company | string | opcional | Empresa |
deal_value | number | opcional | Valor estimado do negócio em R$ |
pipeline_stage_name | string | opcional | Nome exato da etapa inicial do pipeline |
status | string | opcional | lead | prospect | client | inactive — padrão: prospect |
source | string | opcional | Origem: indicacao, evento, linkedin, etc. |
notes | string | opcional | Anotação inicial sobre a oportunidade |
Exemplo de chamada
tools/call
{
"name": "create_deal",
"arguments": { "name": "Carlos Souza", "phone": "5511988880001", "deal_value": 12000, "pipeline_stage_name": "Proposta Enviada", "source": "linkedin" }
}update_deal#Atualiza uma negociação: valor, etapa do pipeline, status ou registra uma anotação na linha do tempo.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
contact_id | string | obrigatório | ID do contato/negociação |
deal_value | number | opcional | Novo valor estimado em R$ |
pipeline_stage_name | string | opcional | Nome exato da nova etapa do pipeline |
status | string | opcional | lead | prospect | client | inactive |
company | string | opcional | Empresa do contato |
notes | string | opcional | Anotação sobre a atualização (registrada na linha do tempo) |
note_type | string | opcional | note | call | email | meeting | task — padrão: note |
Exemplo de chamada
tools/call
{
"name": "update_deal",
"arguments": { "contact_id": "clxxx", "deal_value": 15000, "pipeline_stage_name": "Fechado Ganho", "notes": "Cliente aceitou proposta via e-mail", "note_type": "email" }
}Produtos e Serviços
3 ferramentasCatálogo de produtos e serviços. Itens ativos são incluídos automaticamente no contexto do agente conversacional.
list_products#Lista produtos e serviços do catálogo com descrição, preço e status. Produtos ativos alimentam o contexto do agente automaticamente.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
active_only | string | opcional | "false" inclui produtos inativos — padrão: "true" |
type | string | opcional | physical | recurring | service |
Exemplo de chamada
tools/call
{
"name": "list_products",
"arguments": { "type": "service", "active_only": "true" }
}create_product#Cria um novo produto ou serviço no catálogo. O item ficará ativo imediatamente e passará a integrar o contexto do agente em toda resposta. É aqui que mora o preço (campo price, ex.: "A partir de R$ 32.900") — não no system_prompt nem na base de conhecimento. Informação que o agente deve perguntar ao cliente vai em order_fields (update_agent_config).
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
name | string | obrigatório | Nome do produto ou serviço |
type | string | obrigatório | physical | recurring | service |
description | string | obrigatório | Descrição detalhada — usada no contexto do agente |
price | string | opcional | Preço em formato livre, ex: "R$ 99,90" ou "A partir de R$ 200" |
features | string | opcional | Características adicionais, benefícios ou observações |
Exemplo de chamada
tools/call
{
"name": "create_product",
"arguments": { "name": "Consultoria Estratégica", "type": "service", "description": "Sessão de 2h para diagnóstico empresarial", "price": "R$ 800" }
}update_product#Atualiza dados de um produto: nome, descrição, preço, características ou ativa/desativa do catálogo.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
product_id | string | obrigatório | ID do produto (obtido via list_products) |
name | string | opcional | Novo nome |
type | string | opcional | physical | recurring | service |
description | string | opcional | Nova descrição |
price | string | opcional | Novo preço |
features | string | opcional | Novas características |
is_active | string | opcional | "true" para ativar, "false" para desativar |
Exemplo de chamada
tools/call
{
"name": "update_product",
"arguments": { "product_id": "clxxx", "price": "R$ 950", "is_active": "true" }
}Garimpo Leads
14 ferramentasProspecção B2B: importar, listar, enriquecer e encaminhar leads ao Pipeline, ver listas, funil e ICP, e buscar no Google Maps. Todas aceitam target_user_id (só o admin da plataforma) para operar a conta de um cliente. Apagar leads fica de fora de propósito — use arquivar.
add_domain_checker_leads#Importa leads em lote para o Garimpo Leads (/domain-checker). Aceita até 100 leads por chamada — faça múltiplas chamadas para listas maiores. Cada lead precisa de ao menos website OU email. Leads com website ficam com status "novo" (aguardando verificação); leads sem site ficam como SUSPEITO. Todo lead novo entra numa lista (list_name, ou "MCP — data de hoje"); chamadas com o mesmo list_name caem na mesma lista. Duplicatas não são duplicadas: continuam na lista de origem e ganham a etiqueta lista:<nome>. Após importar, acesse /domain-checker → "Analisar Todos" para enriquecer com CNPJ, score e mensagem via IA.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
list_name | string | opcional | Nome da lista de onde os leads vieram (ex.: "Feira Saúde SP — out/2026"). Achada pelo nome ou criada. Sem ele: "MCP — data de hoje". |
leads | string | obrigatório | Array JSON de leads (até 100 por chamada). Campos aceitos: website, email, name, phone, cnpj, cnae, cnae_descricao, uf, nome_fantasia, endereco. Campos extras são salvos como extraData e usados pela IA na análise. |
Exemplo de chamada
tools/call
{
"name": "add_domain_checker_leads",
"arguments": { "list_name": "Clínicas SP — out/2026", "leads": "[{\"name\":\"Clínica São Lucas\",\"website\":\"clinicasaolucas.com.br\",\"email\":\"contato@clinicasaolucas.com.br\",\"phone\":\"11999990001\",\"cnpj\":\"00.000.000/0001-00\",\"uf\":\"SP\"},{\"name\":\"Dra. Ana Souza\",\"email\":\"dra.ana@gmail.com\",\"phone\":\"11988880002\"}]" }
}list_domain_checker_leads#Lista e CONTA leads com filtros. Retorna estatísticas (total, analisados, com e-mail, com telefone/WhatsApp, com ambos, sem contato) + uma amostra de leads. "Analisado" = já teve score/perfil/mensagem gerados pela IA. Ex.: para "quantos leads analisados têm e-mail e telefone", chame com analyzed="true" e leia stats. Use limit=0 para só as estatísticas.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
query | string | opcional | Busca por domínio, nome, e-mail ou CNPJ |
status | string | opcional | QUEBRADO | SUSPEITO | OK | ERRO | novo |
uf | string | opcional | Filtra por UF, ex: SP, AM |
tag | string | opcional | Filtra por tag |
analyzed | string | opcional | "true" = só analisados (com score); "false" = só não analisados |
qualified | string | opcional | "true" = só qualificados (score >= 50) |
has_email | string | opcional | "true"/"false" = com/sem e-mail |
has_phone | string | opcional | "true"/"false" = com/sem telefone/WhatsApp |
archived | string | opcional | "true" = arquivados; padrão só ativos |
list_name | string | opcional | Filtra pela lista de origem (nome ou parte dele; ver list_lead_lists) |
faixa | string | opcional | A | B | C — faixa do score único (ainda em modo sombra) |
phone_tipo | string | opcional | celular | fixo | fixo_ou_celular | invalido |
trabalhado | string | opcional | "true"/"false" = já abordado ou não |
limit | number | opcional | Máx de leads na amostra (padrão 20, máx 100). 0 = só estatísticas. |
Exemplo de chamada
tools/call
{
"name": "list_domain_checker_leads",
"arguments": { "list_name": "Clínicas médicas", "faixa": "B", "limit": 10 }
}list_lead_lists#Lista as listas de origem dos leads (uma por importação ou busca), com o total de leads ativos e quantos estão em cada faixa A/B/C do score único.
Exemplo de chamada
tools/call
{
"name": "list_lead_lists",
"arguments": {}
}get_lead_funnel#Funil de peneira de uma lista ou de todas: lista bruta → canal → enriquecimento → validação → LGPD → em cadência, mais o split de canais e os KPIs. Mesmo cálculo da aba "Funil / Listas".
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
list_name | string | opcional | Nome (ou parte) da lista; sem ele, todas |
list_id | string | opcional | Id da lista (alternativa ao nome) |
Exemplo de chamada
tools/call
{
"name": "get_lead_funnel",
"arguments": { "list_name": "Clínicas médicas" }
}get_icp_config#Mostra o Perfil de Cliente Ideal (ICP) da conta: setores-alvo, UFs, pesos e exigências. Com list_name, mostra também o público próprio da lista e o ICP que vale para ela. É o que decide as faixas A/B/C e quais leads novos entram.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
list_name | string | opcional | Nome (ou parte) de uma lista, para ver o público dela |
Exemplo de chamada
tools/call
{
"name": "get_icp_config",
"arguments": { "list_name": "CNPJ SC — jurídico" }
}update_icp_config#Altera o ICP. Sem list_name, o da conta (só os campos enviados mudam). Com list_name, o público próprio da lista: só setores, UFs e "sem site é sinal" — pesos e exigências seguem os da conta; herdar_da_conta="true" apaga o público da lista. As faixas são recalculadas na rodada diária (06:40). Devolve o antes e o depois.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
list_name | string | opcional | Lista cujo público vai mudar. Sem ele: o ICP da conta. |
herdar_da_conta | string | opcional | "true" = a lista volta a usar o ICP da conta (só com list_name) |
target_sectors | string | opcional | Palavras de setor/CNAE, por vírgula ou array JSON. Substitui a lista. "" = qualquer setor. |
target_ufs | string | opcional | UFs alvo, por vírgula ou array JSON. "" = todas. |
require_ativa | string | opcional | "true"/"false" — CNPJ precisa estar ativo |
exige_whatsapp | string | opcional | "true"/"false" — recusa lead novo sem celular |
sem_site_eh_sinal | string | opcional | "true"/"false" — empresa sem site conta como sinal (para quem vende site) |
weights | string | opcional | JSON de pesos {"canal":50,"setor":15,"porte":35,"oportunidade":0,"regiao":0}; só as chaves enviadas mudam |
Exemplo de chamada
tools/call
{
"name": "update_icp_config",
"arguments": { "target_sectors": "advoc, contab, condomin" }
}update_domain_checker_lead#Arquiva/restaura, marca como abordado e corrige CNPJ ou mensagem. Vários leads de uma vez (lead_ids, até 100) só para archived e trabalhado; CNPJ e mensagem um por vez. Não apaga nada.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
lead_id | string | opcional | Id de um lead |
lead_ids | string | opcional | Vários ids, por vírgula ou array JSON (até 100) |
archived | string | opcional | "true" = arquivar; "false" = restaurar |
trabalhado | string | opcional | "true" = marcar como abordado; "false" = desmarcar |
cnpj | string | opcional | CNPJ corrigido (só com lead_id) |
mensagem | string | opcional | Mensagem de abordagem corrigida (só com lead_id) |
Exemplo de chamada
tools/call
{
"name": "update_domain_checker_lead",
"arguments": { "lead_ids": "clxxx,clyyy", "trabalhado": "true" }
}send_domain_checker_to_pipeline#Manda leads para o Pipeline, como o botão "Pipeline" da tela: cria ou atualiza o contato no CRM na etapa escolhida. Depois o contato pode entrar em cadência com enroll_contacts (contact_id devolvido). Exige lead já enriquecido (score >= 50). Até 20 por chamada. Etapa marcada como ganho dispara o gatilho de negócio ganho.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
lead_ids | string | obrigatório | Ids dos leads, por vírgula ou array JSON (até 20) |
stage_id | string | opcional | Id da etapa (list_pipeline_stages) |
stage_name | string | opcional | Nome da etapa (alternativa ao id) |
Exemplo de chamada
tools/call
{
"name": "send_domain_checker_to_pipeline",
"arguments": { "lead_ids": "clxxx", "stage_name": "Novo lead" }
}enrich_domain_checker_leads#Enriquece leads como o botão "Enriquecer": CNPJ, registrante do domínio, redes sociais, score e briefing por IA; com with_message="true" gera também a mensagem. Usa a chave de IA da conta (gera custo) e é lento: até 10 leads por chamada.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
lead_ids | string | obrigatório | Ids dos leads, por vírgula ou array JSON (até 10) |
with_message | string | opcional | "true" = gerar a mensagem de abordagem |
Exemplo de chamada
tools/call
{
"name": "enrich_domain_checker_leads",
"arguments": { "lead_ids": "clxxx,clyyy", "with_message": "true" }
}search_google_places#Busca estabelecimentos no Google Maps e devolve uma prévia (nome, telefone, site, endereço, avaliação). Não grava nada: para salvar, mande os escolhidos em add_domain_checker_leads com list_name. Usa a chave Google Places da conta (gera custo): até 5 cidades × 5 tipos por chamada.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
cidades | string | obrigatório | Cidades por vírgula ou array JSON, ex.: "Florianópolis SC, Joinville SC" |
tipos | string | obrigatório | Tipos de negócio, ex.: "clínica odontológica, consultório" |
min_rating | number | opcional | Nota mínima (padrão 4.0) |
min_reviews | number | opcional | Mínimo de avaliações (padrão 5) |
Exemplo de chamada
tools/call
{
"name": "search_google_places",
"arguments": { "cidades": "Florianópolis SC", "tipos": "clínica odontológica" }
}tag_domain_checker_leads#Adiciona uma ou mais tags a leads específicos por ID ou domínio. As tags existentes são preservadas (merge). Use para organizar leads por segmento, campanha, prioridade ou data de importação.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
tags | string | obrigatório | Tags a adicionar, separadas por vírgula, ex: "clinicas-sp,vip,jun-2026" |
ids | string | opcional | IDs dos leads separados por vírgula (alternativo a domains) |
domains | string | opcional | Domínios separados por vírgula, ex: "clinicax.com.br,clinicay.com.br" (alternativo a ids) |
Exemplo de chamada
tools/call
{
"name": "tag_domain_checker_leads",
"arguments": { "tags": "clinicas-sp,jun-2026", "domains": "clinicax.com.br,clinicay.com.br" }
}untag_domain_checker_leads#Remove uma ou mais tags de leads específicos. As outras tags do lead são preservadas.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
tags | string | obrigatório | Tags a remover, separadas por vírgula, ex: "descartado,jun-2026" |
ids | string | opcional | IDs dos leads separados por vírgula (alternativo a domains) |
domains | string | opcional | Domínios separados por vírgula (alternativo a ids) |
Exemplo de chamada
tools/call
{
"name": "untag_domain_checker_leads",
"arguments": { "tags": "jun-2026", "ids": "clxxx,clyyy" }
}rename_domain_checker_tag#Renomeia uma tag em todos os leads que a possuem. Útil para corrigir erros de digitação ou padronizar nomes de segmentos após importações.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
old_tag | string | obrigatório | Nome atual da tag |
new_tag | string | obrigatório | Novo nome da tag |
Exemplo de chamada
tools/call
{
"name": "rename_domain_checker_tag",
"arguments": { "old_tag": "clinicas-sao-paulo", "new_tag": "clinicas-sp" }
}Agendamentos
2 ferramentasConsulta de agendamentos registrados no sistema e conexão de provedores de agenda (Google Calendar via painel OAuth, ou NeetoCal via esta tool). Com múltiplas conexões: se uma delas tiver is_default=true, o agente usa essa automaticamente e SEM perguntar ao cliente quem prefere — as demais só entram em jogo se o cliente pedir uma pessoa específica por nome. Sem nenhuma marcada como padrão, o comportamento é o antigo: com 2+ conexões, o agente pergunta qual profissional o cliente prefere antes de checar disponibilidade.
connect_neetocal#Conecta a conta a um scheduling link do NeetoCal (provedor alternativo ao Google Calendar). Fluxo em 2 passos: chame sem meeting_slug para validar a chave e listar os scheduling links disponíveis (com hosts/duração); chame de novo com o meeting_slug escolhido para salvar. Cada meeting_slug vira UMA conexão própria — chame de novo com um slug diferente para adicionar outro profissional/link sem apagar os anteriores (ex: um round-robin geral + um link individual por closer). Depois, ative calendar_booking_mode via update_agent_config.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
api_key | string | obrigatório | Chave de API do NeetoCal (Painel de administração > Chaves da API), começa com "NCAL-" |
subdomain | string | obrigatório | Subdomínio do workspace, ex: "ekyte" (de https://ekyte.neetocal.com) |
meeting_slug | string | opcional | Slug do scheduling link a usar (omitir na 1ª chamada para descobrir os disponíveis). Cada slug distinto vira uma conexão própria. |
label | string | opcional | Nome de exibição do profissional/link (opcional; padrão = nome do meeting no NeetoCal), ex: "Pablo Costa" |
is_default | string | opcional | "true" marca esta conexão como a PADRÃO — usada automaticamente pelo agente sem perguntar ao cliente quem prefere; desmarca as demais conexões de agenda da conta. Com 2+ conexões, as não-padrão viram "alternativas nominais" (só usadas se o cliente pedir uma pessoa específica por nome). |
Exemplo de chamada
tools/call
{
"name": "connect_neetocal",
"arguments": { "api_key": "NCAL-xxxx", "subdomain": "ekyte" } → depois: { "api_key": "NCAL-xxxx", "subdomain": "ekyte", "meeting_slug": "demo-30", "label": "Especialista eKyte", "is_default": "true" } → e mais: { "api_key": "NCAL-xxxx", "subdomain": "ekyte", "meeting_slug": "reunio-com-pablo-costa", "label": "Pablo Costa" }
}list_bookings#Lista agendamentos com título do evento, contato, horários de início/fim e status. Use para consultar a agenda de atendimentos ou filtrar por período.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
status | string | opcional | confirmed | cancelled | rescheduled |
contact_phone | string | opcional | Filtrar por telefone do contato |
from | string | opcional | Data inicial em ISO 8601, ex: "2025-01-01T00:00:00Z" |
to | string | opcional | Data final em ISO 8601 |
limit | number | opcional | Padrão 20, máx 100 |
Exemplo de chamada
tools/call
{
"name": "list_bookings",
"arguments": { "status": "confirmed", "from": "2025-07-01T00:00:00Z", "to": "2025-07-31T23:59:59Z" }
}Cadências de Prospecção
9 ferramentasGerenciamento completo de cadências de prospecção multi-touch: criação de sequências com steps em múltiplos canais, matrícula de contatos e controle individual de matrículas. Todas as tools aceitam target_user_id (admin da plataforma) para provisionar/gerenciar cadências na conta de um cliente, mesmo padrão da categoria Provisionamento.
list_sequences#Lista as cadências de prospecção ativas. Retorna nome, número de steps, limite diário e total de matrículas ativas. Use para descobrir os IDs antes de matricular contatos.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
active_only | string | opcional | "false" inclui cadências inativas — padrão: "true" |
Exemplo de chamada
tools/call
{
"name": "list_sequences",
"arguments": { "active_only": "true" }
}create_sequence#Cria uma nova cadência de prospecção com steps programados em múltiplos canais. Tipos de step: send_whatsapp, send_email, send_sms, send_linkedin, send_facebook, send_webhook, add_tag, move_stage. send_webhook faz POST/GET/PUT genérico pra um sistema externo (ex: RD Station Marketing) — use dois steps em sequência (delay 0) pra popular campos e depois disparar, como no padrão descrito em create_automation. Variáveis nos templates: {{contact.name}}, {{contact.firstName}}, {{contact.company}}, {{contact.phone}}, {{contact.email}}. Em steps send_email também disponível {{unsubscribe_url}} (opcional — o link de descadastro one-click já sai automático no header do e-mail; use no corpo só se quiser deixar visível também, ex: rodapé "não quer mais receber?").
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
name | string | obrigatório | Nome da cadência, ex: "Prospecção Agências SC — 14 dias" |
description | string | opcional | Descrição opcional |
daily_limit | string | opcional | Máx. de disparos por dia — padrão: 50. Reduza para evitar bloqueio no WhatsApp. |
steps | string | obrigatório | Array JSON com os steps. Cada step: { id, delayDays, delayHours, type, template?, emailSubject?, tag?, stageId?, waTemplateName?, waTemplateLang?, waTemplateParams?, waTemplateHeaderImageUrl?, waTemplateHeaderVideoUrl?, webhookUrl?, webhookMethod?, webhookPayload?, webhookHeaders? }. O delay é relativo ao step anterior. ⚠️ 1º toque FRIO no WhatsApp (sem janela de atendimento aberta): a Meta só aceita template WABA já aprovado — use waTemplateName (nome exato do template aprovado) + waTemplateLang (ex: "pt_BR") + waTemplateParams (array na ordem das variáveis {{1}},{{2}}... do template); "template" nesse step vira só texto de exibição no histórico, não é o que é enviado. Se o template tiver cabeçalho de IMAGEM ou VÍDEO (ver list_whatsapp_templates), informe a URL pública correspondente em waTemplateHeaderImageUrl ou waTemplateHeaderVideoUrl (ex: a URL retornada por create_kb_image/create_kb_video) — NÃO existe cabeçalho de ÁUDIO em template, então áudio nunca entra aqui. Steps de follow-up após o contato responder (janela de 24h aberta) podem usar só "template" (texto livre). type "send_webhook": webhookUrl (obrigatório), webhookMethod ("POST"|"GET"|"PUT", padrão POST), webhookPayload (JSON com {{contact.*}}), webhookHeaders (JSON opcional, ex: {"Authorization":"Bearer ..."}). |
Exemplo de chamada
tools/call
{
"name": "create_sequence",
"arguments": { "name": "Prospecção Sites Quebrados", "daily_limit": "20", "steps": "[{\"id\":\"s1\",\"delayDays\":0,\"delayHours\":0,\"type\":\"send_whatsapp\",\"waTemplateName\":\"primeiro_toque_aprovado_v1\",\"waTemplateLang\":\"pt_BR\",\"waTemplateParams\":[\"{{contact.firstName}}\"],\"waTemplateHeaderVideoUrl\":\"https://radar.noeixodigital.com/api/kb/video/clxxx\",\"template\":\"Oi {{contact.firstName}}! [texto do template aprovado]\"},{\"id\":\"s2\",\"delayDays\":3,\"delayHours\":0,\"type\":\"send_whatsapp\",\"template\":\"{{contact.firstName}}, tudo bem? Conseguiu verificar o site?\"},{\"id\":\"s3\",\"delayDays\":5,\"delayHours\":0,\"type\":\"send_linkedin\",\"template\":\"Oi {{contact.name}}, te mandei mensagem no WhatsApp sobre o site da {{contact.company}}...\"}]" }
}update_sequence#Edita uma cadência existente — todos os campos opcionais, só altera o que for enviado. is_active=false pausa a cadência inteira e pausa automaticamente as matrículas ativas dela (o dispatcher para de rodar); is_active=true retoma as matrículas pausadas que nunca responderam (quem respondeu fica pausado, preservado). steps substitui o array INTEIRO — busque os steps atuais via list_sequences antes de editar parcialmente.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
sequence_id | string | obrigatório | ID da cadência (obtido via list_sequences) |
name | string | opcional | Novo nome |
description | string | opcional | Nova descrição |
daily_limit | string | opcional | Novo limite diário de disparos |
is_active | string | opcional | "true"/"false" — liga/desliga a cadência inteira e sincroniza as matrículas |
steps | string | opcional | Array JSON com os steps NOVOS, substituindo os atuais por completo (mesmo formato de create_sequence) |
Exemplo de chamada
tools/call
{
"name": "update_sequence",
"arguments": { "sequence_id": "clxxx", "is_active": "false" } → pausa a cadência inteira e todas as matrículas ativas dela
}delete_sequence#Apaga permanentemente uma cadência e TODAS as suas matrículas (cascade). Irreversível — use com cuidado, sobretudo em cadências de teste que ficaram órfãs. Não afeta os contatos em si.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
sequence_id | string | obrigatório | ID da cadência a apagar |
Exemplo de chamada
tools/call
{
"name": "delete_sequence",
"arguments": { "sequence_id": "clxxx" }
}enroll_contacts#Matricula contatos em uma cadência de prospecção pelo número de telefone. Cria o contato no CRM automaticamente se não existir. Contatos já matriculados (ativos ou pausados), ou descadastrados (lista de supressão), são ignorados.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
sequence_id | string | obrigatório | ID da cadência (obtido via list_sequences) |
phones | string | obrigatório | Telefones separados por vírgula no formato internacional, ex: "5548999990001,5548999990002" |
contact_names | string | opcional | Nomes correspondentes aos telefones, separados por vírgula (mesma ordem). Ex: "João Silva,Maria Santos" |
start_at | string | opcional | Sobrescreve o horário do 1º step (ISO 8601) — útil pra testar sem esperar o delay/janela comercial padrão |
Exemplo de chamada
tools/call
{
"name": "enroll_contacts",
"arguments": { "sequence_id": "clxxx", "phones": "5548999990001,5548999990002", "contact_names": "João Silva,Maria Santos" }
}list_enrollments#Lista matrículas de contatos em cadências, paginado. Status: active (ativa), paused (respondeu — pausada automaticamente), completed (concluída), waiting_manual (tarefa LinkedIn/Facebook pendente), unsubscribed (cancelada). Pra cadências grandes (milhares de matrículas), use count_enrollments primeiro pra saber o tamanho antes de paginar tudo.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
sequence_id | string | opcional | Filtrar por cadência específica (opcional) |
status | string | opcional | active | paused | completed | unsubscribed | waiting_manual |
current_step | string | opcional | Filtrar por índice do step ATUAL (0-based) — ex: "1" pega quem já concluiu o step 0 |
min_steps_done | string | opcional | Filtrar por progresso mínimo — ex: "1" retorna só quem já recebeu pelo menos 1 toque |
replied | string | opcional | "true" só quem já respondeu; "false" só quem nunca respondeu |
limit | string | opcional | Padrão 20, máx 500 |
offset | string | opcional | Quantos resultados pular — incremente pelo `limit` a cada chamada pra paginar |
Exemplo de chamada
tools/call
{
"name": "list_enrollments",
"arguments": { "sequence_id": "clxxx", "min_steps_done": "1", "limit": "300", "offset": "0" }
}count_enrollments#Conta matrículas agregadas por status e por step atual, sem baixar a lista inteira. Use ANTES de uma ação em lote (manage_enrollment com sequence_id) pra saber quantas matrículas seriam afetadas, ou pra montar um relatório rápido de uma cadência com milhares de matrículas.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
sequence_id | string | opcional | Filtrar por cadência específica (opcional) |
Exemplo de chamada
tools/call
{
"name": "count_enrollments",
"arguments": { "sequence_id": "clxxx" } → { "total": 18228, "byStatus": {"active": 18081, "paused": 140, ...}, "byCurrentStep": {"0": 18081, "1": 147} }
}sequence_stats#Métricas de performance de UMA cadência: enviados por step, aberturas de e-mail, bounces confirmados (hard bounce), descadastros, respostas e conclusões. Use antes de soltar um lote maior, ou pra medir o resultado real de uma cadência já rodando. ⚠️ Cliques em links ainda NÃO são rastreados — só abertura de e-mail (pixel).
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
sequence_id | string | obrigatório | ID da cadência (obtido via list_sequences) |
Exemplo de chamada
tools/call
{
"name": "sequence_stats",
"arguments": { "sequence_id": "clxxx" } → { "totalSent": 203, "byStep": [{"stepIndex":0,"type":"send_email","sent":203}, ...], "emailOpens": 46, "bouncedContacts": 3, "unsubscribed": 5, "replied": 12, "completed": 8 }
}manage_enrollment#Gerencia matrícula(s) em uma cadência. Ações: pause (pausa), resume (retoma), cancel (cancela/remove), advance (executa step atual imediatamente sem esperar o delay), repeat (re-executa o último step), restart (volta ao step 0), done_manual (marca tarefa manual LinkedIn/Facebook como feita e avança para o próximo step). MODO INDIVIDUAL: enrollment_id. MODO EM LOTE: enrollment_ids (vários separados por vírgula) OU sequence_id (+ status/current_step/min_steps_done como filtro do alvo) — aplica em todas que baterem, até 2000 por chamada; quem não está no estado certo pra ação é só pulado, não trava o lote.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
enrollment_id | string | opcional | Modo individual: ID de UMA matrícula (obtido via list_enrollments) |
enrollment_ids | string | opcional | Modo em lote: vários IDs separados por vírgula |
sequence_id | string | opcional | Modo em lote: aplica em todas as matrículas dessa cadência que baterem com status/current_step/min_steps_done |
status | string | opcional | Modo em lote (com sequence_id): filtro de status |
current_step | string | opcional | Modo em lote (com sequence_id): filtro por step atual |
min_steps_done | string | opcional | Modo em lote (com sequence_id): filtro por progresso mínimo |
action | string | obrigatório | pause | resume | cancel | advance | repeat | restart | done_manual |
Exemplo de chamada
tools/call
{
"name": "manage_enrollment",
"arguments": { "sequence_id": "clxxx", "status": "active", "min_steps_done": "0", "action": "pause" } → pausa em lote todos os ativos que ainda não receberam nenhum toque
}Templates WABA
3 ferramentasTemplates de mensagem do WhatsApp Business (WABA) — obrigatórios pra envio FRIO (sem janela de atendimento aberta), exigem aprovação da Meta. Suporta cabeçalho de texto ou imagem (ex: banner de promoção) e botões de resposta rápida (QUICK_REPLY, ex: "Sim"/"Não").
list_whatsapp_templates#Lista os templates WABA da conta com status de aprovação (APPROVED, PENDING, REJECTED, PAUSED). Confira antes de referenciar um template em create_sequence/create_automation.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
Exemplo de chamada
tools/call
{
"name": "list_whatsapp_templates",
"arguments": {}
}create_whatsapp_template#Cria um template WABA (texto, imagem, vídeo ou +botões) e submete pra aprovação da Meta (minutos a ~1 dia). header_image_url/header_video_url baixa o arquivo e faz o upload pra Meta automaticamente (não precisa base64). Não existe cabeçalho de ÁUDIO nos templates da Meta. buttons vira QUICK_REPLY — cada tap do lead chega como mensagem de texto normal com o texto do botão.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
name | string | obrigatório | Nome único (minúsculas/números/underscore), ex: "promo_agosto_v1" |
category | string | obrigatório | MARKETING | UTILITY | AUTHENTICATION |
language | string | opcional | Padrão "pt_BR" |
body | string | obrigatório | Corpo, com {{1}},{{2}}... pra variáveis (nunca no início/fim do texto) |
header_text | string | opcional | Cabeçalho de texto (ignorado se algum header de imagem/vídeo vier junto) |
header_image_url | string | opcional | URL PÚBLICA de imagem JPEG/PNG (até 5MB) pro cabeçalho — ex: banner da promoção do mês. Prioridade sobre header_video_url se ambos vierem. |
header_image_base64 | string | opcional | Alternativa quando a imagem não está hospedada em URL nenhuma (ex: arquivo local) — data URL base64 completa ("data:image/png;base64,...."). Tem prioridade sobre header_image_url. |
header_video_url | string | opcional | URL PÚBLICA de vídeo MP4 (até 16MB) pro cabeçalho — ex: vídeo institucional curto |
header_video_base64 | string | opcional | Alternativa quando o vídeo não está hospedado em URL nenhuma — data URL base64 completa ("data:video/mp4;base64,...."). Tem prioridade sobre header_video_url. |
footer | string | opcional | Rodapé, ex: "Responda PARAR para cancelar" |
buttons | string | opcional | Botões separados por vírgula, até 3, até 25 caracteres cada. Ex: "Sim,Não" |
Exemplo de chamada
tools/call
{
"name": "create_whatsapp_template",
"arguments": { "name": "promo_agosto_v1", "category": "MARKETING", "body": "Oi {{1}}! A promoção do mês está no ar: 20% off em todo o catálogo até dia 31.", "header_image_url": "https://exemplo.com/banner-promo.jpg", "buttons": "Sim,Não" }
}delete_whatsapp_template#Deleta um template WABA pelo nome. A Meta não permite editar o texto de um template já criado — pra corrigir algo (erro de digitação, acento corrompido), a única forma é deletar e criar de novo.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
name | string | obrigatório | Nome exato do template (via list_whatsapp_templates) |
Exemplo de chamada
tools/call
{
"name": "delete_whatsapp_template",
"arguments": { "name": "promo_agosto_v1" }
}Templates de E-mail
4 ferramentasBiblioteca de templates de e-mail (aba "E-mail" de /templates) — catálogo reutilizável pra montar steps send_email de cadências. ⚠️ É só um catálogo: o StepEditor COPIA body/subject pro step no momento em que você escolhe um template — não existe referência viva. Editar ou apagar um template aqui NUNCA afeta uma cadência que já usou ele antes (use update_sequence pra corrigir uma cadência já em produção); só afeta quem escolher esse template DEPOIS da edição.
list_email_templates#Lista os templates de e-mail salvos, com corpo completo. Use pra achar o template certo (ou ler o conteúdo de um antigo) antes de montar/corrigir um step send_email.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
search | string | opcional | Filtro por nome ou assunto (case-insensitive) |
Exemplo de chamada
tools/call
{
"name": "list_email_templates",
"arguments": { "search": "jurídico" }
}create_email_template#Cria um novo template de e-mail na biblioteca. Fica disponível pra copiar em qualquer cadência futura via "📧 Template" no StepEditor.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
name | string | obrigatório | Nome do template (só identifica na biblioteca, não aparece pro lead) |
subject | string | obrigatório | Assunto do e-mail. Suporta {{contact.firstName}} e demais variáveis de interpolação usadas nas cadências. |
body | string | obrigatório | Corpo do e-mail (HTML se is_html=true) |
is_html | string | opcional | "true" (padrão) ou "false" |
Exemplo de chamada
tools/call
{
"name": "create_email_template",
"arguments": { "name": "Jurídico D+7 v2", "subject": "Oi {{contact.firstName}}, ainda dá tempo", "body": "<p>...</p>" }
}update_email_template#Atualiza nome, assunto, corpo ou formato de um template existente na biblioteca.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
template_id | string | obrigatório | ID do template (via list_email_templates) |
name | string | opcional | Novo nome |
subject | string | opcional | Novo assunto |
body | string | opcional | Novo corpo |
is_html | string | opcional | "true"/"false" |
Exemplo de chamada
tools/call
{
"name": "update_email_template",
"arguments": { "template_id": "clxxx", "body": "<p>Texto corrigido...</p>" }
}delete_email_template#Apaga um template da biblioteca. Não afeta cadências já configuradas.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
template_id | string | obrigatório | ID do template (via list_email_templates) |
Exemplo de chamada
tools/call
{
"name": "delete_email_template",
"arguments": { "template_id": "clxxx" }
}Mensagens rápidas
4 ferramentasMensagens rápidas do Chat: o operador digita "/" no campo de mensagem e escolhe uma. Texto livre, sem aprovação da Meta — só podem ser enviadas com a janela de 24h aberta (para janela fechada use os templates do WhatsApp). Podem ser pessoais (só quem criou vê) ou da equipe (toda a conta vê; alteram o autor, o gerente e o dono). Grupo e posição organizam a lista; no texto, {nome} vira o primeiro nome do cliente e {empresa} o nome do negócio na hora de usar.
list_quick_replies#Lista as mensagens rápidas pessoais da conta autenticada + as da equipe, na ordem do menu, com id, título, texto, grupo, ordem, da_equipe e minha.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
Exemplo de chamada
tools/call
{
"name": "list_quick_replies",
"arguments": {}
}create_quick_reply#Cria uma mensagem rápida. Por padrão é da equipe.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
title | string | obrigatório | Rótulo curto exibido na lista (até 60 caracteres) |
content | string | obrigatório | Texto inserido no campo de mensagem (até 4000 caracteres) |
da_equipe | string | opcional | "true" (padrão) toda a conta vê; "false" pessoal |
grupo | string | opcional | Grupo no menu do "/" (até 30 caracteres), ex.: "Objeções". "" tira do grupo. |
ordem | number | opcional | Posição dentro do grupo (1 a 999). Sem posição, vai para o fim do grupo, em ordem alfabética. |
Exemplo de chamada
tools/call
{
"name": "create_quick_reply",
"arguments": { "title": "Pedir cidade", "content": "{nome}, em qual cidade fica o terreno de vocês?", "grupo": "Qualificação", "ordem": 1 }
}update_quick_reply#Altera título, texto ou o tipo (da equipe/pessoal). Pessoal só o autor altera; da equipe, autor, gerente ou dono.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
id | string | obrigatório | ID da mensagem rápida (via list_quick_replies) |
title | string | opcional | Novo título |
content | string | opcional | Novo texto |
da_equipe | string | opcional | "true" ou "false" |
grupo | string | opcional | Grupo no menu do "/" (até 30 caracteres), ex.: "Objeções". "" tira do grupo. |
ordem | number | opcional | Posição dentro do grupo (1 a 999). Sem posição, vai para o fim do grupo, em ordem alfabética. |
Exemplo de chamada
tools/call
{
"name": "update_quick_reply",
"arguments": { "id": "clxxx", "content": "Texto novo" }
}delete_quick_reply#Apaga uma mensagem rápida. Exige confirm_title igual ao título atual.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
id | string | obrigatório | ID da mensagem rápida |
confirm_title | string | obrigatório | Título atual, exatamente como em list_quick_replies |
Exemplo de chamada
tools/call
{
"name": "delete_quick_reply",
"arguments": { "id": "clxxx", "confirm_title": "Pedir cidade" }
}Provisionamento (White-label)
11 ferramentasCriação de contas de cliente (multi-tenant) e configuração do agente conversacional. Uso restrito ao administrador da plataforma — ideal para entregar soluções white-label (ex: um agente de atendimento por cliente). Requer conta com papel admin da plataforma; contas comuns só conseguem configurar o próprio agente.
create_client_account#Provisiona uma conta nova (white-label) para um cliente: cria o tenant isolado, o usuário administrador da conta e uma configuração de agente vazia. SOMENTE o administrador da plataforma pode usar. Retorna o userId da conta e a senha temporária. Depois use update_agent_config (target_user_id = este userId) para a persona, e as tools de KB/produtos/automação para o restante. O WhatsApp é conectado à parte, pelo painel Settings da conta (OAuth Meta — não disponível por MCP).
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
business_name | string | obrigatório | Nome do negócio/empresa do cliente, ex: "Confeitaria Doce Mel". Vira o nome do tenant. |
admin_email | string | obrigatório | E-mail de login do administrador da conta do cliente (único no sistema). |
admin_name | string | opcional | Nome da pessoa administradora (padrão = business_name) |
temp_password | string | opcional | Senha temporária (se omitida, uma aleatória é gerada e retornada) |
plan | string | opcional | Faixas de venda: essencial (R$ 197, 300 atendimentos) | crescimento (R$ 397, 1.000) | operacao (R$ 697, 2.000) | escala (R$ 1.197, 4.000) — a conta nasce com os recursos da faixa e o agente no gpt-4o-mini. Legado: starter | pro | enterprise. Padrão: enterprise (starter com mcp_profile desafio). |
mcp_profile | string | opcional | completo (padrão, todas as ações) | desafio (aluno do Desafio noEixo: o Claude da conta vê e usa só as ações do curso; a única que apaga é delete_quick_reply; erros saem em português simples). A conta do Desafio já nasce com o funil Novo contato › Em atendimento › Orçamento enviado › Follow-up › Cliente (ganho) › Perdido e com o nome do negócio no título do widget, plano starter e menu só com o que o curso usa (Chat, Pipeline, Cadências, Pedidos, Produtos, Base, Insights, Templates, Widget). |
Exemplo de chamada
tools/call
{
"name": "create_client_account",
"arguments": { "business_name": "Confeitaria Doce Mel", "admin_email": "contato@docemel.com.br", "mcp_profile": "desafio" }
}set_mcp_profile#Define o perfil de ações MCP de uma conta já criada: "desafio" (só as ações do curso, bloqueadas também na chamada; trigger_automation só dispara a automação de publicar a landing page) ou "completo". SOMENTE o administrador da plataforma. Vale em até 1 minuto.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | obrigatório | userId do dono da conta |
profile | string | obrigatório | desafio | completo |
Exemplo de chamada
tools/call
{
"name": "set_mcp_profile",
"arguments": { "target_user_id": "cm...", "profile": "desafio" }
}get_landing_page#Lê a landing page da conta: publicada ou não, endereço (<subdominio>.noeixo.tech), status (publicada | retirada) e todos os campos atuais. Use antes de alterar a página, para mudar só o que o aluno pediu.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma) |
Exemplo de chamada
tools/call
{
"name": "get_landing_page",
"arguments": {}
}publish_landing_page#Publica ou atualiza a landing page em <subdominio>.noeixo.tech com o modelo do Desafio noEixo. Primeira vez: subdominio + nome_do_negocio, ramo, cidade, frase_principal, descricao, whatsapp, beneficios (lista JSON, 1–3) e servicos (lista JSON, 1–6). Para alterar, mande só o que muda; "" apaga um campo opcional. Opcionais: cor (#RRGGBB), tempo_resposta, depoimentos (só reais, até 3), perguntas (até 6), endereco, horario, email, chamada_final, foto_url (https), cnpj. Todo texto é escapado; colchete de exemplo do modelo é recusado; bloco sem dado some. O endereço é de uma conta só; trocar o subdomínio tira o antigo do ar.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
subdominio | string | opcional | Obrigatório na primeira publicação. Ex.: clinicasorriso |
nome_do_negocio | string | opcional | Até 60 caracteres |
frase_principal | string | opcional | Até 90 caracteres |
servicos | string | opcional | Lista JSON [{"nome","descricao","preco"}]. O preço aparece como enviado ("R$ 180" ou "A partir de R$ 890"). |
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma) |
Exemplo de chamada
tools/call
{
"name": "publish_landing_page",
"arguments": { "subdominio": "clinicasorriso", "nome_do_negocio": "Clínica Sorriso", "ramo": "Odontologia", "cidade": "Joinville", "frase_principal": "Seu sorriso cuidado sem pressa", "descricao": "Clínica para a família toda.", "whatsapp": "(47) 99999-0000", "beneficios": "[\"Resposta em até 15 min\"]", "servicos": "[{\"nome\":\"Limpeza\",\"descricao\":\"Profilaxia completa\",\"preco\":\"R$ 150\"}]" }
}unpublish_landing_page#Tira do ar a landing page de uma conta (abuso, conteúdo proibido): apaga a página e marca como retirada; o aluno não republica pela ferramenta. SOMENTE o administrador da plataforma. Fica em /logs (landing_page_retirada).
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | obrigatório | userId do dono da conta |
motivo | string | obrigatório | Motivo da retirada |
Exemplo de chamada
tools/call
{
"name": "unpublish_landing_page",
"arguments": { "target_user_id": "cm...", "motivo": "Página com promessa enganosa" }
}get_account_info#Lê os dados básicos da conta: nome do negócio, plano, data de criação, responsável, e-mail de acesso e perfil de ações (completo | desafio). Responde "qual o nome da minha conta".
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma) |
Exemplo de chamada
tools/call
{
"name": "get_account_info",
"arguments": {}
}get_whatsapp_status#Confere se o WhatsApp está ligado ao Radar: { conectado, numero, nome_exibicao, provedor (meta | gupshup), pode_enviar_modelos }. Sem conexão, devolve conectado: false e onde ligar (Minha Conta › WhatsApp › Continuar com Facebook). O número é lido na Meta na hora.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma) |
Exemplo de chamada
tools/call
{
"name": "get_whatsapp_status",
"arguments": {}
}get_business_summary#Lê o Resumo do negócio da conta (escrito pelo Claude no Desafio noEixo: dados do negócio, nota do diagnóstico, pontos a melhorar). Uso INTERNO: o atendente virtual nunca recebe este texto, e ele não está na base de conhecimento. Devolve { business_name, summary, updated_at }; sem resumo, summary vem vazio (o nome do negócio vem sempre).
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma) |
Exemplo de chamada
tools/call
{
"name": "get_business_summary",
"arguments": {}
}set_business_summary#Grava o Resumo do negócio da conta: substitui (mode "replace", padrão) ou acrescenta ao final (mode "append"). Até 8.000 caracteres no total — acima disso, erro com o tamanho. Fica registrado quem alterou e quando (sem o texto). Não é enviado ao atendente virtual nem a clientes.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
summary | string | obrigatório | Texto do resumo |
mode | string | opcional | replace (padrão) | append |
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma) |
Exemplo de chamada
tools/call
{
"name": "set_business_summary",
"arguments": { "summary": "Nome: Doce Mel. Vende: bolos sob encomenda. Nota do diagnóstico: 4/10.", "mode": "replace" }
}update_agent_config#Configura o agente conversacional de uma conta: persona (system_prompt), mensagem de boas-vindas, tom, modelo, chave OpenAI e ativação. Sem target_user_id, configura o agente da PRÓPRIA conta autenticada. O administrador da plataforma pode passar target_user_id para configurar a conta de um cliente (ex: recém-criada com create_client_account). Cria a configuração se ainda não existir.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
system_prompt | string | opcional | Persona/instruções do agente (ex: atendente da confeitaria: tira dúvidas, informa preços, monta o pedido) |
welcome_message | string | opcional | Mensagem de boas-vindas / saudação inicial |
tone | string | opcional | professional | friendly |
model | string | opcional | gpt-4o | gpt-4o-mini | gpt-4-turbo | gpt-3.5-turbo |
openai_api_key | string | opcional | Chave OpenAI da conta (começa com "sk-"). Criptografada ao salvar. Necessária para responder e indexar KB. |
is_active | string | opcional | "true" ativa, "false" desativa o agente |
customer_memory | string | opcional | "true"/"false" — agente lembra pedidos anteriores do cliente (padrão true) |
orders_enabled | string | opcional | "true"/"false" — permite o agente registrar pedidos |
order_fields | string | opcional | Campos personalizados da solicitação (os mesmos de Minha Conta › Agente IA › Campos personalizados). JSON [{"label":"Cidade e estado","required":true,"id":"cidade_estado"}] — id opcional (gerado pelo rótulo). Obrigatórios travam o registro até serem preenchidos; opcionais entram se o cliente informar. Nome, telefone e e-mail são fixos (só a obrigatoriedade muda, ex.: {"id":"email","required":false}). A lista enviada substitui a atual inteira; máx. 20; "[]" volta aos três padrão. Consulte o que está salvo em get_agent_config (orderFields). |
contact_tagging_enabled | string | opcional | "true" (padrão) ou "false" — permite o agente marcar tags no contato durante a conversa (tool add_contact_tag), disparando automações "tag:<nome>" |
calendar_booking_mode | string | opcional | "true"/"false" — ativa o fluxo de agendamento guiado quando há Google Calendar ou NeetoCal conectado na conta |
auto_tag_rules | string | opcional | JSON [{"matchText":"...","tag":"..."}] — fallback determinístico: se a resposta do agente contiver matchText, aplica a tag via código mesmo sem tool call (rede de segurança contra o LLM esquecer de chamar add_contact_tag) |
order_notify_channel | string | opcional | Avisar o cliente ao mudar estágio: off | auto (WhatsApp→SMS) | whatsapp | sms |
order_stage_messages | string | opcional | JSON {"preparo":"","pronto":"..."} — chave presente = estágio avisa (vazio = padrão). Variáveis: {nome},{produto} |
prospect_reply_mode | string | opcional | Como o agente trata resposta de contato em cadência de prospecção: off (agente não responde, operador trata na mão — padrão) | draft (agente gera a resposta mas NÃO envia, grava como nota interna) | auto (agente responde sozinho, com travas de opt-out/pausa do operador) |
knowledge_gap_tracking_enabled | string | opcional | "true"/"false" (padrão false) — agente registra perguntas que não soube responder (tool flag_knowledge_gap + fallback heurístico) para revisão em /insights e evolução da KB. Ver categoria "Insights de Atendimento". |
async_qa_enabled | string | opcional | "true"/"false" (padrão false) — revisão ASSÍNCRONA (cron, não em tempo real): audita periodicamente respostas recentes contra a KB com um modelo de IA como juiz, pra pegar alucinação confiante (fato inventado/errado dito sem hedge) — complementa knowledge_gap_tracking_enabled, que só pega quando o agente ADMITE não saber. Achados entram em /insights com source "async_qa". Ver categoria "Insights de Atendimento". |
business_hours | string | opcional | Horário de atendimento HUMANO. É AQUI que mora o horário da equipe (mesmo cartão "Horário de atendimento humano" de Minha Conta): o agente consulta em toda resposta — nunca escreva horário no system_prompt nem na base, para não ter dois horários divergindo. Recomendado: JSON estruturado {"dias":{"1":{"inicio":"09:00","fim":"18:00","intervalo":{"inicio":"12:00","fim":"13:00"}},"6":{"inicio":"09:00","fim":"13:00"}},"observacao":"fechado em feriados"} — chave do dia: 0=domingo … 6=sábado; dia ausente = fechado. Texto livre ainda é aceito, mas é interpretado por regex que só entende UMA faixa e o mesmo horário a semana toda (sábado com horário próprio sai errado). Diferente de calendar_instructions (janela de AGENDAMENTO): é o que o agente usa quando o cliente pede pra falar com um humano — sabe se está dentro/fora do expediente (America/Sao_Paulo) e avisa quando o time volta. Vazio/omitido = desativado. |
voice_reply_mode | string | opcional | Resposta em ÁUDIO: "mirror" = quando o cliente manda áudio, o agente responde com mensagem de voz do WhatsApp (gpt-4o-mini-tts, gasta da chave OpenAI da conta, ~R$ 0,08 por minuto de fala); "off" = nunca (padrão). Link, e-mail, telefone e preço vão também por escrito; lista ou resposta longa vai só por texto. Só em número conectado direto pela Meta. Mesmo card "Resposta em áudio" de Minha Conta › Agente IA. |
voice_name | string | opcional | Voz: coral (feminina, calorosa — padrão) | nova | shimmer | sage (femininas) | ash | ballad | echo | verse (masculinas). Vazio = padrão. |
voice_instructions | string | opcional | Jeito de falar, em linguagem natural (até 600 caracteres). Ex.: "fale como um consultor de construção, seguro e direto". Vazio = padrão (português do Brasil, simpático, ritmo calmo). |
reminder_timeout_minutes | string | opcional | Timeout de inatividade — Estágio 1 (lembrete): minutos sem resposta pra disparar "você ainda está aí?". Só dispara pra quem já respondeu ao menos 1 vez (WABA compliance) e nunca em contato de cadência. Vazio/omitido = desativado. |
reminder_message | string | opcional | Texto do lembrete do Estágio 1 — fallback quando ai_reminder_enabled="false" ou a geração por IA falha. Padrão: "Oi! Você ainda está aí? 😊". |
typing_indicator_enabled | string | opcional | Mostra "digitando…" ao cliente no WhatsApp enquanto o agente prepara a resposta (só números Meta Direct). Marca a mensagem do cliente como lida nesse momento. "true"/"false" (padrão: ligado). |
handoff_max_replies | string | opcional | Passagem para a equipe: limite de respostas do agente por conversa (1 a 500). Ao bater, o agente para nessa conversa, manda a mensagem de passagem e avisa a equipe com o resumo. "Liberar" zera a contagem. Vazio = sem limite (padrão). |
handoff_max_cost_usd | string | opcional | Passagem para a equipe: limite de gasto de IA por conversa em dólares (ex.: "0.50", até 100). Vazio = sem limite (padrão). |
handoff_notify | string | opcional | Quem é avisado na passagem: "equipe" (padrão, todos com notificação ligada), "dono_conversa" (sem dono, avisa a equipe toda) ou "escolhidos". |
handoff_notify_user_ids | string | opcional | Ids de usuário da conta, separados por vírgula, para handoff_notify="escolhidos". |
handoff_channels | string | opcional | Por onde sai o aviso de passagem: "push", "whatsapp" (números de Alertas de Mensagens), "email", separados por vírgula. Padrão: "push,whatsapp". |
operator_signature_enabled | string | opcional | Põe o primeiro nome de quem respondeu, em negrito, no topo de cada mensagem que a equipe envia pelo chat do WhatsApp ("*Vinicius:*" e o texto embaixo). Vale para texto e legenda de mídia; não para template, SMS nem Instagram. O histórico guarda a mensagem sem o nome. "true"/"false" (padrão: desligado). |
ai_reminder_enabled | string | opcional | Gera o lembrete do Estágio 1 por IA, referenciando o que estava sendo discutido nas últimas mensagens, em vez do texto fixo. "true"/"false" (padrão false). |
conversation_timeout_minutes | string | opcional | Timeout de inatividade — Estágio 2 (encerramento): minutos sem resposta pra encerrar e arquivar a conversa. Deixe folga da janela de 24h do WABA. Vazio/omitido = desativado. |
timeout_message | string | opcional | Texto da mensagem de encerramento do Estágio 2. Padrão: "Olá! Como não recebemos sua resposta, encerramos o atendimento. Se precisar de ajuda, é só chamar novamente. 😊". |
second_touch_enabled | string | opcional | Segundo toque — contato que NUNCA respondeu (oposto do Estágio 1/2, que exigem resposta prévia). Dispara um TEMPLATE aprovado (compliant fora da janela de 24h), não texto livre. Requer second_touch_template_name. Só WhatsApp, nunca cadência de prospecção. "true"/"false" (padrão false). |
second_touch_delay_minutes | string | opcional | Minutos sem resposta (desde a última msg do agente) pra disparar o segundo toque. Mínimo recomendado 1440 (24h). Vazio/omitido = 1440. |
second_touch_template_name | string | opcional | Nome do template WABA APROVADO (ver list_whatsapp_templates), ex: "segundo_toque_sdr_ekyte_v2". PRECISA ter exatamente uma variável {{1}} no corpo pro primeiro nome (ex: "Oi {{1}}! ..."), nem mais nem menos — o cron sempre envia o primeiro nome como esse parâmetro. |
second_touch_template_lang | string | opcional | Idioma do template (padrão "pt_BR" se omitido). |
availability_max_options | string | opcional | Lista de horários: quantos mostrar no máximo (1 a 26), sempre os mais cedo do dia. Vazio = todos (padrão). Só as letras mostradas valem para a escolha. |
availability_intro | string | opcional | Frase antes da lista. {quando} vira "Ainda hoje", "Amanhã" ou "Terça, 13/10". Ex.: "{quando} temos estes horários disponíveis:". Dia pedido cheio: o sistema põe antes "Hoje já não tenho horário livre." e mostra o próximo dia com vaga. |
availability_closing | string | opcional | Frase depois da lista. Vazio = "Qual desses horários prefere?". Sem nenhum dos três campos, a lista sai no formato de sempre. |
Exemplo de chamada
tools/call
{
"name": "update_agent_config",
"arguments": { "target_user_id": "clxxx", "system_prompt": "Você é a atendente da Confeitaria Doce Mel...", "tone": "friendly", "is_active": "true", "order_notify_channel": "auto" }
}get_agent_config#Consulta a configuração atual do agente de uma conta (persona, tom, modelo, ativação, memória do cliente, pedidos, notificação de estágio, modo de resposta de prospecção). Sem target_user_id, consulta a PRÓPRIA conta autenticada. O administrador da plataforma pode passar target_user_id. Não retorna a chave OpenAI em texto puro, só se está configurada (hasOpenAIKey).
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | ID da conta-alvo (APENAS admin da plataforma). Padrão: a conta autenticada. |
Exemplo de chamada
tools/call
{
"name": "get_agent_config",
"arguments": { "target_user_id": "clxxx" }
}Equipe e permissões
5 ferramentasQuem da equipe pode o quê, recurso a recurso. O cargo é só o ponto de partida: cada pessoa pode ser ajustada por recurso, e o que se grava é apenas a diferença em relação ao padrão do cargo — por isso trocar o cargo depois continua surtindo efeito no resto. Os níveis são none (não vê), read (abre e consulta) e write (cria, altera e apaga). Domínio sensível (agente, integrações, equipe, admin) NÃO é liberado por omissão. Só quem administra a conta pode alterar, ninguém altera as próprias permissões, e a mudança passa a valer no PRÓXIMO LOGIN da pessoa — a sessão atual dela dura até 7 dias.
list_team_permissions#Lista os membros da equipe com cargo, o ajuste individual (só o que difere do padrão do cargo) e a permissão efetiva resultante. Traz também a lista de recursos existentes e se a sua chave pode editar.
Exemplo de chamada
tools/call
{
"name": "list_team_permissions",
"arguments": {}
}update_team_member_permissions#Altera o que um membro pode fazer. Passe só os recursos que quer mudar — é incremental, o resto do ajuste anterior é preservado e o que nunca foi tocado segue o padrão do cargo. Use reset para devolver a pessoa inteiramente ao padrão.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
member_id | string | obrigatório | ID do membro (via list_team_permissions) |
permissions | object | opcional | Mapa recurso → nível, ex: {"automacoes":"write","integracoes":"none"}. Níveis: none | read | write |
reset | boolean | opcional | true devolve ao padrão do cargo e ignora permissions |
Exemplo de chamada
tools/call
{
"name": "update_team_member_permissions",
"arguments": { "member_id": "cmrz...", "permissions": { "cadencias": "write", "garimpo": "read" } }
}invite_team_member#Cria um membro na equipe com senha temporária, que volta uma única vez na resposta. Dono e gerente podem convidar; o gerente só atribui cargo abaixo do seu. E-mail único na plataforma inteira.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
email | string | obrigatório | E-mail de login |
name | string | obrigatório | Nome exibido na equipe e no chat |
role | string | obrigatório | operator | manager | specialist | technician |
temp_password | string | opcional | Senha temporária; sem ela, uma é gerada |
Exemplo de chamada
tools/call
{
"name": "invite_team_member",
"arguments": { "email": "ana@empresa.com", "name": "Ana", "role": "operator" }
}update_team_member#Muda o cargo de um membro ou gera senha temporária nova. O gerente só age sobre quem está abaixo dele e não promove ninguém a gerente; ninguém altera a própria conta. Cargo novo vale no próximo login da pessoa.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
member_id | string | obrigatório | ID do membro (via list_team_permissions) |
role | string | opcional | Cargo novo: operator | manager | specialist | technician |
reset_password | boolean | opcional | true gera senha nova, devolvida uma única vez |
Exemplo de chamada
tools/call
{
"name": "update_team_member",
"arguments": { "member_id": "cmrz...", "role": "specialist" }
}remove_team_member#Remove um membro (apaga o login). Só o dono da conta. Não remove administradores nem a própria conta. Irreversível — para só tirar acesso, use update_team_member_permissions.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
member_id | string | obrigatório | ID do membro (via list_team_permissions) |
Exemplo de chamada
tools/call
{
"name": "remove_team_member",
"arguments": { "member_id": "cmrz..." }
}Funil de vendas (estágios)
3 ferramentasOs estágios do Kanban do CRM. É aqui que se liga a venda ao trabalho que vem depois dela: marque o estágio de fechamento com is_won e aponte um template de processo — quando um contato entrar nesse estágio, o Radar abre o processo com as etapas já instanciadas e dispara o trigger de automação "deal_won". Sem marcar, nada muda.
list_pipeline_stages#Lista os estágios do funil na ordem, com quantos contatos há em cada um, qual está marcado como ganho (is_won) e qual processo ele abre.
Exemplo de chamada
tools/call
{
"name": "list_pipeline_stages",
"arguments": {}
}create_pipeline_stage#Cria um estágio no funil. Marque is_won="true" no estágio de fechamento e aponte process_template_id para o processo que deve ser aberto automaticamente.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
is_lost | string | opcional | "true" marca como etapa de perda: ao entrar, as cadências ativas do contato são pausadas. Não pode ser ganho e perda ao mesmo tempo. |
name | string | obrigatório | Nome do estágio (ex: "Ganho") |
color | string | opcional | Cor em hex (padrão #6366f1) |
order | number | opcional | Posição no funil (omitido = vai para o fim) |
is_won | string | opcional | "true" marca como estágio de negócio ganho |
process_template_id | string | opcional | Template aberto ao ganhar (via list_process_templates). Só tem efeito com is_won="true" |
Exemplo de chamada
tools/call
{
"name": "create_pipeline_stage",
"arguments": { "name": "Ganho", "color": "#059669", "is_won": "true", "process_template_id": "onb_2b4e..." }
}update_pipeline_stage#Atualiza um estágio. Só os campos enviados mudam. Envie process_template_id como string vazia para desvincular o processo.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
is_lost | string | opcional | "true" marca como etapa de perda: ao entrar, as cadências ativas do contato são pausadas. Não pode ser ganho e perda ao mesmo tempo. |
stage_id | string | obrigatório | ID do estágio (via list_pipeline_stages) |
name | string | opcional | Novo nome |
color | string | opcional | Nova cor em hex |
order | number | opcional | Nova posição |
is_won | string | opcional | "true" ou "false" |
process_template_id | string | opcional | Template aberto ao ganhar; string vazia desvincula |
Exemplo de chamada
tools/call
{
"name": "update_pipeline_stage",
"arguments": { "stage_id": "cmpck...", "is_won": "true", "process_template_id": "onb_2b4e..." }
}Ordens de campo (visitas/OS)
3 ferramentasOrdens de serviço executadas em campo — medição, instalação, manutenção. Podem ser avulsas (chamado solto) ou ser uma ETAPA de um processo: passando process_id + process_step_id, concluir a OS marca aquela etapa como feita e o processo anda sozinho. Fecha o ciclo CRM → processo → campo → processo.
list_field_orders#Lista as ordens de campo com status, prazo, técnico e — quando houver — o processo e a etapa a que a OS pertence.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
status | string | opcional | received | assigned | en_route | in_progress | waiting_part | done | cancelled |
contact_id | string | opcional | Só as OS deste contato |
process_id | string | opcional | Só as OS deste processo |
limit | number | opcional | Máximo de resultados (padrão 50) |
Exemplo de chamada
tools/call
{
"name": "list_field_orders",
"arguments": { "status": "in_progress" }
}create_field_order#Cria uma ordem de campo para um contato. Com process_id + process_step_id a OS vira uma etapa do processo; sem eles, é uma OS avulsa. O type_id instancia o checklist e o SLA daquele tipo de OS.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
contact_id | string | obrigatório | ID do contato (via list_contacts) |
title | string | obrigatório | Título da OS (ex: "Medição do terreno") |
description | string | opcional | Detalhes do serviço |
type_id | string | opcional | Tipo de OS — traz checklist e SLA |
address | string | opcional | Endereço da visita |
scheduled_at | string | opcional | Data/hora agendada em ISO |
process_id | string | opcional | Processo ao qual a OS pertence (via list_processes) |
process_step_id | string | opcional | Etapa que esta OS representa. Exige process_id. Fechar a OS conclui a etapa |
Exemplo de chamada
tools/call
{
"name": "create_field_order",
"arguments": { "contact_id": "cmu7...", "title": "Medição do terreno", "scheduled_at": "2026-09-25T14:00:00Z", "process_id": "cmu7g...", "process_step_id": "cmu7h..." }
}update_field_order_status#Move a OS de status. Ao mover para "done", a etapa de processo vinculada é concluída junto. Para o fechamento completo em campo (checklist obrigatório, fotos antes/depois, assinatura) use a tela do técnico, não esta tool.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
field_order_id | string | obrigatório | ID da OS (via list_field_orders) |
status | string | obrigatório | received | assigned | en_route | in_progress | waiting_part | done | cancelled |
technician_notes | string | opcional | Observações do técnico |
Exemplo de chamada
tools/call
{
"name": "update_field_order_status",
"arguments": { "field_order_id": "cmu7...", "status": "done" }
}Processos (Onboarding / Escopos)
6 ferramentasChecklists reutilizáveis para acompanhar escopos com clientes (ex: onboarding de cliente novo). Crie um template uma vez, instancie um processo por cliente e marque cada passo conforme executa — tudo rastreável dentro do Radar.
list_process_templates#Lista os templates de processo (checklists reutilizáveis, ex: "Onboarding de Cliente Novo"). Retorna id, nome, descrição e os passos. Use antes de create_process para pegar o template_id.
Exemplo de chamada
tools/call
{
"name": "list_process_templates",
"arguments": {}
}create_process_template#Cria um template de processo (checklist reutilizável). Os steps são um array de {title, description, order}.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
name | string | obrigatório | Nome do template (ex: "Onboarding de Cliente Novo") |
description | string | opcional | Descrição do template |
steps | array | obrigatório | Passos: [{ "title": "...", "description": "...", "order": 0 }] |
Exemplo de chamada
tools/call
{
"name": "create_process_template",
"arguments": { "name": "Onboarding de Cliente Novo", "steps": [{ "title": "Criar conta", "order": 0 }, { "title": "Conectar WhatsApp", "order": 1 }] }
}create_process#Instancia um processo para um contato, copiando os passos de um template (ou de uma lista de steps). Use para iniciar o onboarding de um cliente e acompanhar os passos.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
contact_id | string | obrigatório | ID do contato/cliente (via list_contacts) |
template_id | string | opcional | ID do template a copiar (via list_process_templates) |
title | string | opcional | Título do processo (padrão: nome do template) |
description | string | opcional | Descrição |
due_date | string | opcional | Prazo ISO |
steps | array | opcional | Passos avulsos, se não usar template |
Exemplo de chamada
tools/call
{
"name": "create_process",
"arguments": { "contact_id": "cmr...", "template_id": "onb_..." }
}list_processes#Lista processos (acompanhamento de escopo/onboarding por cliente). Filtra por status e/ou contato. Retorna progresso (feitos/total).
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
status | string | opcional | active | completed | cancelled |
contact_id | string | opcional | Filtrar por contato |
limit | number | opcional | Máx (padrão 20, máx 100) |
Exemplo de chamada
tools/call
{
"name": "list_processes",
"arguments": { "status": "active" }
}get_process#Retorna um processo com todos os passos e status. Use o process_id de list_processes.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
process_id | string | obrigatório | ID do processo |
Exemplo de chamada
tools/call
{
"name": "get_process",
"arguments": { "process_id": "cmr..." }
}update_process_step#Atualiza o status de um passo (pending → in_progress → done, ou blocked). Marcar "done" registra a data de conclusão. Use para avançar o onboarding conforme executa os passos.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
step_id | string | obrigatório | ID do passo (via get_process) |
status | string | obrigatório | pending | in_progress | done | blocked |
Exemplo de chamada
tools/call
{
"name": "update_process_step",
"arguments": { "step_id": "cmr...", "status": "done" }
}Marca, widget e portal do cliente
6 ferramentasA personalização visual que faz a plataforma aparecer com a marca do cliente, e o acesso que ele usa para acompanhar o próprio projeto. Sem estas ferramentas o provisionamento por MCP parava na metade: dava para criar a conta e configurar o agente, mas não para deixá-la com a cara do cliente. O logotipo pode ser enviado como arquivo (base64) quando não estiver hospedado em lugar nenhum.
set_brand#Define cores, fonte e logotipo da conta — usados no painel interno e no portal do cliente. Só os campos enviados mudam; string vazia limpa um campo.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
primary_color | string | opcional | Cor principal em hex de 6 dígitos (botões, menu ativo, progresso), ex: "#ad3432" |
dark_color | string | opcional | Cor escura em hex (barra lateral, faixas escuras) |
accent_color | string | opcional | Cor de destaque em hex (badges, realces) |
font_family | string | opcional | Nome da fonte; precisa existir no Google Fonts, ex: "Montserrat" |
logo_url | string | opcional | URL pública (http/https) do logotipo |
logo_base64 | string | opcional | Arquivo do logotipo como data URL ("data:image/png;base64,..."), até 400 KB. Tem prioridade sobre logo_url |
target_user_id | string | opcional | Conta-alvo (apenas administrador da plataforma) |
Exemplo de chamada
tools/call
{
"name": "set_brand",
"arguments": { "primary_color": "#ad3432", "dark_color": "#2b2c2e", "font_family": "Montserrat", "logo_url": "https://exemplo.com/logo.png" }
}get_brand#Lê a personalização aplicada (cores, fonte, logotipo) junto com a configuração do widget. Avisa quando a conta ainda está com o visual padrão da plataforma.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
target_user_id | string | opcional | Conta-alvo (apenas administrador da plataforma) |
Exemplo de chamada
tools/call
{
"name": "get_brand",
"arguments": {}
}set_widget_config#Configura o widget de chat embutível no site do cliente (página pública /widget/[userId]): título, saudação, cor e logotipo.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
title | string | opcional | Título do cabeçalho, ex: "Atendimento Montreal" |
greeting | string | opcional | Mensagem exibida ao abrir, antes de o visitante escrever |
color | string | opcional | Cor do widget em hex de 6 dígitos |
logo_url | string | opcional | URL pública do logotipo (cabeçalho e favicon da aba) |
logo_base64 | string | opcional | Logotipo como data URL, até 400 KB |
target_user_id | string | opcional | Conta-alvo (apenas administrador da plataforma) |
Exemplo de chamada
tools/call
{
"name": "set_widget_config",
"arguments": { "title": "Atendimento Montreal", "greeting": "Olá! Como podemos ajudar?", "color": "#ad3432" }
}create_portal_access#Cria ou redefine o acesso de um contato ao portal do cliente (/portal/login), onde ele acompanha os próprios processos e a proposta. Chamar de novo para o mesmo contato troca e-mail e senha, sem duplicar. A senha só é vista aqui — depois fica apenas o hash.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
email | string | obrigatório | E-mail de login do cliente no portal |
password | string | obrigatório | Senha, mínimo 6 caracteres |
contact_id | string | opcional | ID do contato (via list_contacts). Alternativa: phone |
phone | string | opcional | Telefone do contato, se não tiver o contact_id |
target_user_id | string | opcional | Conta-alvo (apenas administrador da plataforma) |
Exemplo de chamada
tools/call
{
"name": "create_portal_access",
"arguments": { "contact_id": "cmsls...", "email": "cliente@empresa.com", "password": "obra2026" }
}list_portal_access#Lista quem tem acesso ao portal nesta conta, com e-mail de login e último acesso. "ultimo_login" nulo significa que a pessoa nunca entrou.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
limit | number | opcional | Máximo de registros (padrão 50, teto 200) |
target_user_id | string | opcional | Conta-alvo (apenas administrador da plataforma) |
Exemplo de chamada
tools/call
{
"name": "list_portal_access",
"arguments": {}
}revoke_portal_access#Remove o acesso de um contato ao portal. O contato e os processos dele continuam intactos — apenas o login deixa de existir.
Parâmetros
| Nome | Tipo | Req. | Descrição |
|---|---|---|---|
contact_id | string | opcional | ID do contato. Alternativa: email |
email | string | opcional | E-mail do acesso, se não tiver o contact_id |
target_user_id | string | opcional | Conta-alvo (apenas administrador da plataforma) |
Exemplo de chamada
tools/call
{
"name": "revoke_portal_access",
"arguments": { "email": "cliente@empresa.com" }
}Referência do Protocolo
Detalhes técnicos para clientes e integradores.
Protocolo
MCP HTTP StreamableVersão spec
2025-03-26Formato de mensagem
JSON-RPC 2.0Autenticação
Bearer token — chave fixa (HMAC-SHA256) ou OAuth 2.0 + PKCECORS
Access-Control-Allow-Origin: *Métodos HTTP
POST · GET · OPTIONSEndpoints OAuth 2.0 (RFC 8414 + PKCE S256)
| Discovery | /.well-known/oauth-authorization-server |
| Authorization | /mcp/authorize |
| Token | /api/mcp/oauth/token |
| Dynamic Client Registration | /api/mcp/oauth/register |
Grant types: authorization_code (com PKCE) e refresh_token. Access token expira em 30 dias, refresh token em 90. Clientes que não fazem esse handshake (Claude Desktop, chamadas de API diretas) seguem usando a chave fixa (Bearer HMAC-SHA256) em vez de OAuth.
Métodos suportados
| Método | Descrição |
|---|---|
initialize | Negociação de protocolo — retorna protocolVersion e capabilities |
tools/list | Retorna a lista completa de ferramentas com inputSchema JSON Schema |
tools/call | Executa uma ferramenta — params: { name, arguments } |
ping | Health check — retorna {} |
notifications/initialized | Confirmação de inicialização pelo cliente — aceito graciosamente |
As ferramentas disponíveis são determinadas dinamicamente em runtime. Use tools/list para sempre obter o schema atualizado — novas ferramentas podem ser adicionadas sem aviso prévio.