Skip to main content
Glama

Update agent config

update_agent_config
DestructiveIdempotent

Configura o agente conversacional de uma conta: persona (system_prompt), mensagem de boas-vindas, tom, modelo OpenAI, 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.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "update_agent_config"
  }
}

Input Schema

NameRequiredDescriptionDefault
toneNoTom do agente (opcional).
modelNoModelo OpenAI (opcional).
is_activeNoAtivar ("true") ou desativar ("false") o agente.
voice_nameNoVoz da resposta em áudio. coral (feminina, calorosa — padrão), nova (feminina, animada), shimmer (feminina, suave), sage (feminina, serena), ash (masculina, firme), ballad (masculina, suave), echo (masculina, neutra), verse (masculina, expressiva). Vazio = padrão.
order_fieldsNoCAMPOS PERSONALIZADOS da solicitação (mesma lista de Minha Conta › IA e atendimento › Campos personalizados): o que o agente coleta antes de registrar com create_service_order. Use para tudo que o agente precisa PERGUNTAR ao cliente (em vez de listar as perguntas no system_prompt, onde a regra é seguida só na maioria das vezes); preço NÃO vai aqui, vai no catálogo (create_product). JSON array [{"label":"Cidade e estado","required":true,"id":"cidade_estado"}] — "id" é opcional (gerado pelo rótulo). Os campos obrigatórios travam o registro até serem preenchidos; os opcionais vão para a solicitação se o cliente informar. Nome, telefone e e-mail são fixos e sempre ficam (pode mandar {"id":"email","required":false} para mudar só a obrigatoriedade deles). A lista enviada SUBSTITUI a atual inteira. Máx. 20 campos. "[]" volta só aos três padrão.
system_promptNoPersona/instruções do agente, ex: "Você é a atendente da Confeitaria Doce Mel: simpática, tira dúvidas de produtos, informa preços e horários, e monta o pedido confirmando no fim."
auto_tag_rulesNoJSON array de regras de fallback para marcação de tag: [{"matchText":"frase exata ou trecho do texto do agente","tag":"NomeDaTag"}]. Se a resposta gerada pelo agente contiver matchText (case-insensitive), a tag é aplicada via código mesmo que o modelo não tenha chamado a tool add_contact_tag — útil porque o LLM às vezes decide corretamente mas esquece de executar a tool call. Vazio ou omitido = sem fallback.
business_hoursNoHorá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. O horário mora só aqui, não no system_prompt nem na base, para não haver dois horários divergentes. Formato recomendado (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. 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, por exemplo, sai errado). Diferente de calendar_instructions (janela de AGENDAMENTO): isso é usado quando o cliente pede pra falar com um humano — o agente sabe se está dentro ou fora do expediente (fuso America/Sao_Paulo) e avisa quando o time volta. Vazio ou omitido = recurso desativado.
handoff_notifyNoPASSAGEM PARA A EQUIPE — quem recebe o aviso quando o agente passa a conversa: "equipe" (padrão: todos da conta com notificação ligada, como sempre foi), "dono_conversa" (só quem é dono da conversa; conversa sem dono avisa a equipe toda) ou "escolhidos" (exige handoff_notify_user_ids).
openai_api_keyNoChave da OpenAI da conta (opcional; deve começar com "sk-"). Criptografada ao salvar. Necessária para o agente responder e para indexar a KB.
orders_enabledNoPermitir o agente registrar pedidos (tool create_service_order). "true"/"false".
target_user_idNoID da conta-alvo (opcional; APENAS o admin da plataforma pode usar). Padrão: a conta autenticada.
customer_memoryNoMemória do cliente: o agente reconhece e lembra pedidos anteriores do contato. "true" liga (padrão), "false" desliga.
kb_search_limitNoQuantos trechos da base de conhecimento vão ao agente por mensagem (1 a 20; padrão 5). Aumente quando a conta tem MUITOS documentos e a informação existe na base mas não aparece na resposta — o teto é silencioso: o que fica fora do corte simplesmente não existe para aquela resposta. Caso real: com cardápio em texto E em foto, os textos ocupavam os 5 slots e a foto (que carrega o link da imagem) nunca chegava.
timeout_messageNoTexto 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. 😊".
welcome_messageNoMensagem de boas-vindas / saudação inicial (opcional).
async_qa_enabledNoRevisão ASSÍNCRONA de qualidade (cron, não em tempo real): audita periodicamente respostas recentes do agente contra a base de conhecimento, usando um modelo de IA como juiz, pra detectar alucinação confiante (fato inventado ou errado dito sem hedge/evasiva) — complementa knowledge_gap_tracking_enabled, que só pega quando o agente ADMITE não saber. Achados viram registros em /insights com source "async_qa". "true"/"false" (padrão: false).
handoff_channelsNoPor onde o aviso de passagem sai, separado por vírgula: "push" (notificação), "whatsapp" (números de Alertas de Mensagens), "email" (e-mail de quem é avisado). Padrão: "push,whatsapp". Ao menos um.
reminder_messageNoTexto do lembrete do Estágio 1. Usado como fallback se ai_reminder_enabled="false" ou se a geração por IA falhar. Padrão: "Oi! Você ainda está aí? 😊".
voice_reply_modeNoResposta em ÁUDIO no WhatsApp: "mirror" = quando o cliente manda áudio, o agente responde com mensagem de voz (OpenAI 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 depois do áudio; lista ou resposta longa vai só por texto. Só funciona em número conectado direto pela Meta.
availability_introNoFrase antes da lista de horários. Use {quando} no começo: vira "Ainda hoje", "Amanhã" ou "Terça, 13/10". Ex.: "{quando} temos estes horários disponíveis:". Vazio = padrão. Quando o dia pedido está cheio, o sistema põe antes "Hoje já não tenho horário livre." sozinho.
voice_instructionsNoJeito de falar da voz, 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).
ai_reminder_enabledNoGera o lembrete do Estágio 1 por IA, referenciando o que estava sendo discutido nas últimas mensagens (ex: "sobre o que vocês usam hoje pra organizar as demandas..."), em vez do texto fixo de reminder_message — tende a reengajar melhor quem abandonou NO MEIO de uma qualificação já engajada. "true"/"false" (padrão: false).
handoff_max_repliesNoPASSAGEM PARA A EQUIPE — limite de respostas do agente por conversa (1 a 500). Ao bater, o agente para de responder naquela conversa, manda a mensagem de passagem (a mesma do "chamar um humano", que respeita o Horário de atendimento) e avisa a equipe com o resumo. Devolver a conversa ao agente ("Liberar") zera a contagem. Vazio = sem limite (padrão).
prospect_reply_modeNoComo 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 pro operador revisar. "auto" = agente responde sozinho (com travas de opt-out/pausa do operador).
availability_closingNoFrase depois da lista de horários. Ex.: "Qual desses horários é melhor para você?". Vazio = "Qual desses horários prefere?". Sem nenhum dos três campos de horário, a lista sai no formato antigo, igual sempre.
handoff_max_cost_usdNoPASSAGEM PARA A EQUIPE — limite de gasto de IA por conversa, em dólares (ex.: "0.50"; até 100). Mesmo efeito do handoff_max_replies. Vazio = sem limite (padrão).
order_notify_channelNoAvisar o cliente ao mudar o estágio do pedido no Kanban. "off" (não avisa) | "auto" (WhatsApp; cai pra SMS fora da janela) | "whatsapp" | "sms".
order_stage_messagesNoJSON das mensagens por estágio, ex: {"preparo":"","pronto":"Seu pedido está pronto!"}. Presença da chave = estágio avisa (vazio = texto padrão). Omitir o campo = usa os padrões (preparo/pronto/entregue). Variáveis: {nome}, {produto}.
second_touch_enabledNoSEGUNDO TOQUE — contato que NUNCA respondeu (diferente do Estágio 1/2, que exigem resposta prévia por compliance WABA: aqui é o oposto, só dispara quando o contato nunca respondeu nada e a janela de 24h nunca abriu). Envia um TEMPLATE aprovado (compliant fora da janela), não texto livre. Requer second_touch_template_name preenchido. Só se aplica a conversas de WhatsApp, e nunca a contato de cadência de prospecção (a cadência já cuida do follow-up). "true"/"false" (padrão: false).
calendar_booking_modeNoAtiva o fluxo de agendamento guiado (check_availability -> coleta de dados -> schedule_appointment) quando há uma conexão de agenda (Google Calendar ou NeetoCal) conectada na conta. "true"/"false".
contact_tagging_enabledNoPermitir o agente marcar tags no contato durante a conversa (tool add_contact_tag), disparando automações "tag:<nome>" (ex: marcar lead qualificado). "true" (padrão) ou "false".
handoff_notify_user_idsNoIds de usuário da própria conta, separados por vírgula, para handoff_notify="escolhidos".
availability_max_optionsNoLISTA DE HORÁRIOS (check_availability): quantos horários mostrar, no máximo (1 a 26), sempre os mais cedo do dia. Vazio = todos do dia (padrão). Letras seguem A, B, C... e só as mostradas valem para a escolha.
reminder_timeout_minutesNoTIMEOUT DE INATIVIDADE — Estágio 1 (lembrete): minutos sem resposta do cliente pra disparar um lembrete "você ainda está aí?" automático. Só dispara se o cliente já respondeu pelo menos 1 vez na conversa (WABA compliance — nunca cutuca quem nunca abriu a janela) e nunca em contato de cadência de prospecção. Vazio/omitido = estágio desativado.
typing_indicator_enabledNoMostra "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).
operator_signature_enabledNoPõe o primeiro nome de quem respondeu, em negrito, no topo de cada mensagem que a equipe envia pelo chat do WhatsApp (ex.: "*Vinicius:*" e o texto na linha de baixo), como o WhatsApp Business faz com vários atendentes. Vale para texto e legenda de mídia; não vale para template, SMS nem Instagram. O histórico do Radar guarda a mensagem sem o nome. "true"/"false" (padrão: desligado).
second_touch_delay_minutesNoMinutos sem resposta (desde a última mensagem do agente) pra disparar o segundo toque. Deve ser no mínimo 1440 (24h) — antes disso a janela ainda está aberta e o Estágio 1/2 (texto livre) é o caminho certo, não o template. Vazio/omitido = usa 1440 (24h).
second_touch_template_langNoIdioma do template (padrão "pt_BR" se omitido).
second_touch_template_nameNoNome exato do template WABA APROVADO a enviar (ver list_whatsapp_templates), ex: "segundo_toque_sdr_ekyte_v2". O template PRECISA ter exatamente UMA variável {{1}} no corpo pro primeiro nome do contato (ex: "Oi {{1}}! ..."), nem mais nem menos — o cron sempre envia o primeiro nome como esse único parâmetro; a Meta rejeita se a contagem não bater ("Number of parameters does not match").
conversation_timeout_minutesNoTIMEOUT DE INATIVIDADE — Estágio 2 (encerramento): minutos sem resposta pra enviar mensagem de encerramento e arquivar a conversa. Sempre relativo à ÚLTIMA mensagem do agente, independente do lembrete. Deve ficar com folga da janela de 24h do WABA (ex: até 22h) pra a mensagem de encerramento ainda conseguir ser enviada como texto livre. Vazio/omitido = estágio desativado.
knowledge_gap_tracking_enabledNoRegistra internamente (tool flag_knowledge_gap + fallback heurístico) perguntas que o agente não soube responder, para revisão humana em /insights e evolução da KB/prompt. "true"/"false" (padrão: false).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / order_fields / description
      Previous value: -"CAMPOS PERSONALIZADOS da solicitação (mesma lista de Minha Conta › Agente IA › Campos personalizados): o que o agente coleta antes de registrar com create_service_order. Use para tudo que o agente precisa PERGUNTAR ao cliente (em vez de listar as perguntas no system_prompt, onde a regra é seguida só na maioria das vezes); preço NÃO vai aqui, vai no catálogo (create_product). JSON array [{\"label\":\"Cidade e estado\",\"required\":true,\"id\":\"cidade_estado\"}] — \"id\" é opcional (gerado pelo rótulo). Os campos obrigatórios travam o registro até serem preenchidos; os opcionais vão para a solicitação se o cliente informar. Nome, telefone e e-mail são fixos e sempre ficam (pode mandar {\"id\":\"email\",\"required\":false} para mudar só a obrigatoriedade deles). A lista enviada SUBSTITUI a atual inteira. Máx. 20 campos. \"[]\" volta só aos três padrão."New value: +"CAMPOS PERSONALIZADOS da solicitação (mesma lista de Minha Conta › IA e atendimento › Campos personalizados): o que o agente coleta antes de registrar com create_service_order. Use para tudo que o agente precisa PERGUNTAR ao cliente (em vez de listar as perguntas no system_prompt, onde a regra é seguida só na maioria das vezes); preço NÃO vai aqui, vai no catálogo (create_product). JSON array [{\"label\":\"Cidade e estado\",\"required\":true,\"id\":\"cidade_estado\"}] — \"id\" é opcional (gerado pelo rótulo). Os campos obrigatórios travam o registro até serem preenchidos; os opcionais vão para a solicitação se o cliente informar. Nome, telefone e e-mail são fixos e sempre ficam (pode mandar {\"id\":\"email\",\"required\":false} para mudar só a obrigatoriedade deles). A lista enviada SUBSTITUI a atual inteira. Máx. 20 campos. \"[]\" volta só aos três padrão."
  2. First observed

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and non-read-only, and the description usefully adds the upsert behavior ("Cria a configuração se ainda não existir") and the ownership/admin scoping. But for a destructive, 42-parameter update it never states the update semantics an agent most needs — whether omitted fields are left untouched or reset, that order_fields replaces the whole list (that warning lives only in the schema), and what authorization per-field is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the purpose and the configurable surface before the target_user_id rule and the create-if-missing note. No filler or duplicated schema text. Slightly compressed for a 42-parameter tool, but every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 42 optional parameters, no required ones, no output schema and a destructive annotation, the description covers the essentials (scope, admin targeting, upsert) but leaves two significant holes: partial-vs-full update semantics for omitted fields, and the boundary against update_agent_profile/get_agent_config. The unusually rich schema compensates for parameter-level detail, but not for those workflow-level questions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each of the 42 parameters carries a long, self-sufficient description, so the baseline is 3. The description echoes a handful of them (system_prompt, welcome message, tone, model, openai_api_key, activation) and adds the defaulting rule for target_user_id, which is genuine added meaning. It adds nothing about the other ~35 parameters, but the schema already covers them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb ("Configura") and resource ("agente conversacional de uma conta") and enumerates the configurable areas — persona, welcome message, tone, model, OpenAI key, activation. That is far more than a restatement of the name. However, it never distinguishes itself from the sibling tools update_agent_profile, create_agent_profile, set_agent_menu or the read counterpart get_agent_config, so an agent cannot tell from this text alone which of those to call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real scoping guidance: without target_user_id it configures the authenticated account's own agent, and the platform admin can target a client account (e.g. one just created via create_client_account). It also notes the config is created if missing (upsert). But there is no explicit statement of when to choose this over update_agent_profile or to read first with get_agent_config, and no exclusions — usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources