Ligada ao Claude ou ao ChatGPT, a sua loja responde em conversa: o assistente lê o estoque e o resumo do dia e lança torra, envase, contagem, venda e despacho por você, com as mesmas regras das telas do painel. Você fala "torrei 6 kg do Gourmet" e o lançamento aparece em Torras, com o nome do assistente na nota. Ligar leva uns 5 minutos e não precisa programar: é copiar um endereço e entrar com a senha do painel.
Esta página serve a você e ao seu agente. Se preferir, mande o link para o Claude e peça "liga a minha loja do TorraHub": tudo o que ele precisa está aqui, inclusive a lista de operações em JSON e esta página em Markdown.
O que o agente faz na sua loja
Você fala como falaria com alguém da equipe. O agente procura os ids que precisa (o café, a pilha, o cliente), mostra o que vai lançar com os números, e só lança depois do seu ok.
“Como está o dia?”
Os pedidos a despachar, quem ainda deve e quanto, os alertas do sino e os pacotes que saíram sem rótulo.
“Torrei 6 kg do Gourmet hoje, saiu 5,1 kg. Envasei 12 de 250 g em grão.”
A fornada entra com o verde que saiu do lote, o custo do torrador e os 12 pacotes. O que não foi envasado fica a granel.
“Vendido 2 Gourmet para a Ana, cobra no Pix.”
O pedido entra como venda direta, com o preço do catálogo, e volta um link do WhatsApp com a cobrança e o Pix para você tocar e mandar.
“Despachei o #0071, rastreio AP123456789BR.”
O pedido passa a enviado com o rastreio. Antes, o agente pergunta se avisa o cliente.
“Contei o Moca: 14.”
A pilha do Moca fica com 14 pacotes. Se o Moca estiver em mais de uma pilha, o agente pergunta como dividir.
A lista completa, com cada campo que o agente pode mandar, está em Tudo o que ele pode ler e lançar.
Ligue em 5 minutos, sem programar
O caminho é o mesmo nos três aplicativos: você cola o endereço da loja como conector personalizado, entra com o e-mail e a senha do painel e clica em Autorizar. Não tem senha no endereço, e você não cola token nenhum.
- No painel da sua loja, abra Integrações → Assistentes de IA (
/admin/integracoes/assistentes) e escolha o seu assistente. - Clique em Copiar endereço. É sempre o domínio da loja (o mesmo da vitrine) mais
/api/mcp, por exemplohttps://cafeserrano.com.br/api/mcp. - Siga os passos do seu aplicativo, logo abaixo. O painel mostra os mesmos passos, ao lado do botão de copiar.
- Claude: funciona. Funciona em todos os planos.
- ChatGPT: funciona em parte. Só nos planos de empresa.
- Gemini: ainda não. Ainda não no Brasil.
No Claude (claude.ai, app do computador e do celular)
Que plano precisa. Funciona em todos os planos do Claude, inclusive no gratuito. No gratuito cabe um conector personalizado só. Nos planos Team e Enterprise, quem adiciona é o dono da conta da empresa, em Configurações da Organização → Conectores; depois cada pessoa clica em Conectar.
Computador ou celular. Adicione pelo computador. Depois de ligada, a loja aparece também no app do Claude no celular, na mesma conta.
Passo a passo:
- No computador, abra o claude.ai (ou o aplicativo do Claude para computador) e entre na sua conta.
- Clique em Personalizar e depois em Conectores. Com o Claude em inglês: Customize → Connectors.
- Clique em + Adicionar e escolha Adicionar conector personalizado (em inglês, Add custom connector).
- No nome, escreva o nome da sua loja. No endereço, cole o endereço da loja que você copiou e clique em Continuar.
- O Claude mostra como vai entrar na loja. Deixe as opções que ele sugerir, clique em Continuar e depois em Adicionar.
- Clique em Conectar no conector da loja. Abre a tela de entrada do painel: entre com o seu e-mail e senha e clique em Autorizar.
Como é a tela de entrada. O Claude abre uma janela do painel da sua loja. Entre com o mesmo e-mail e senha do painel. Depois aparece "Claude quer acessar" e o nome da sua loja, com o que ele vai poder fazer e o que não vai. Clique em Autorizar. A janela fecha sozinha e você volta para a conversa.
Teste. Numa conversa, clique no + embaixo, à esquerda, depois em Conectores, e ligue o da loja. Pergunte: "Como está o dia?". Na primeira vez, o Claude pede licença para usar a loja: aceite. Antes de lançar qualquer coisa, ele mostra o que vai lançar e espera o seu ok.
Para desconectar:
- No Claude: Personalizar → Conectores, no conector da loja, Remover.
- Pela loja: no painel, em Integrações → Assistentes de IA, clique em Desconectar ao lado do aplicativo. O acesso cai na hora, mesmo que o conector continue no aplicativo.
Se não der certo. Se a entrada der erro no passo 6, remova o conector e adicione de novo; no passo 5, em Cliente OAuth, escolha Registrar automaticamente.
Conferido nas páginas de ajuda em 9 de novembro de 2026: Comece com conectores personalizados (ajuda do Claude) · Conectores no celular (ajuda do Claude).
No ChatGPT
Que plano precisa. O ChatGPT lança venda, torra e estoque só nos planos Business, Enterprise e Edu. No Pro, ele liga a loja mas só lê (o resumo do dia, o estoque, os clientes). No Plus e no gratuito, a OpenAI ainda não libera conector próprio. No Business, só o administrador ou o dono da conta da empresa adiciona.
Computador ou celular. Só pelo site, no computador. O app do ChatGPT no celular ainda não adiciona conector próprio.
Passo a passo:
- No computador, abra o chatgpt.com e entre na sua conta.
- Abra Plugins, no menu da esquerda (ou direto em chatgpt.com/plugins).
- Clique no + e escolha Adicionar servidor MCP personalizado (em inglês, Add custom MCP server).
- Dê o nome da sua loja. Em Conexão, cole o endereço da loja que você copiou.
- Na autenticação, deixe a entrada por login (OAuth). Em geral o ChatGPT já escolhe sozinho.
- Leia o aviso, marque Entendo e quero continuar e clique em Criar como plugin.
- Clique em Conectar. Abre a tela de entrada do painel: entre com o seu e-mail e senha e clique em Autorizar.
Como é a tela de entrada. O ChatGPT abre uma janela do painel da sua loja. Entre com o mesmo e-mail e senha do painel. Depois aparece "ChatGPT quer acessar" e o nome da sua loja, com o que ele vai poder fazer e o que não vai. Clique em Autorizar. A janela fecha sozinha e você volta para a conversa.
Teste. Numa conversa nova, digite @, escolha a loja e pergunte: "Como está o dia?". A escolha vale para aquela mensagem: na próxima, chame a loja de novo com @. Antes de lançar, o ChatGPT pede confirmação.
Para desconectar:
- No ChatGPT: Configurações → Plugins, abra o da loja e clique em Desconectar.
- Pela loja: no painel, em Integrações → Assistentes de IA, clique em Desconectar ao lado do aplicativo. O acesso cai na hora, mesmo que o conector continue no aplicativo.
Se não der certo. No Plus ou no gratuito, use o Claude: ele liga a loja até no plano gratuito.
Conferido nas páginas de ajuda em 9 de novembro de 2026: Conectar servidores MCP personalizados no ChatGPT (ajuda da OpenAI).
No Gemini
Que plano precisa. O app do Gemini só aceita apps personalizados em conta pessoal do Google, de maiores de 18 anos, nos Estados Unidos e com o Gemini em inglês. Conta do trabalho ou da escola não aceita. No Brasil, a opção ainda não aparece. No Gemini Enterprise, o Google pede um cadastro fixo de aplicativo que a loja ainda não oferece.
Computador ou celular. Quando chegar, adiciona pelo site no computador e usa também no celular.
O melhor caminho hoje. Enquanto isso, use o Claude: ele liga a loja até no plano gratuito. Quem programa pode ligar a loja no Gemini CLI, em Avançado.
Se a opção aparecer na sua conta:
- No computador, abra o gemini.google.com.
- Vá em Settings → Connected Apps (se não aparecer, Personal Intelligence → Connected Apps).
- Em Custom apps, clique em Add a custom app, cole o endereço da loja que você copiou e clique em Next.
- Abre a tela de entrada do painel: entre com o seu e-mail e senha e clique em Autorizar.
Como é a tela de entrada. O Gemini abre uma janela do painel da sua loja. Entre com o mesmo e-mail e senha do painel. Depois aparece "Gemini quer acessar" e o nome da sua loja, com o que ele vai poder fazer e o que não vai. Clique em Autorizar. A janela fecha sozinha e você volta para a conversa.
Teste. Numa conversa, digite @, escolha a loja e pergunte: "How is my store doing today?" (o recurso é só em inglês). O Gemini pede confirmação antes de lançar.
Para desconectar:
- No Gemini: Settings → Connected Apps, em Custom apps, More details → Remove app.
- Pela loja: no painel, em Integrações → Assistentes de IA, clique em Desconectar ao lado do aplicativo. O acesso cai na hora, mesmo que o conector continue no aplicativo.
Conferido nas páginas de ajuda em 9 de novembro de 2026: Conectar apps personalizados ao Gemini (ajuda do Google, em inglês) · Servidor MCP no Gemini Enterprise (ajuda do Google).
Para quem programa: o token da loja
O Claude Code, o Claude Desktop e os scripts entram com um token, sem a tela de entrada. Quem só usa o Claude ou o ChatGPT não precisa disto.
- No painel da sua loja, abra Integrações → Assistentes de IA (
/admin/integracoes/assistentes) e abra Avançado (para quem programa). - Dê um nome ao agente (ele aparece na nota de cada lançamento, por exemplo "Claude do balcão") e toque em Criar token.
- Copie o token na hora. Ele começa com
thag_e aparece uma vez só: a loja guarda apenas uma impressão dele, e não tem como mostrá-lo de novo. Perdeu, crie outro e revogue o antigo.
Um token por pessoa ou por uso deixa a trilha mais clara e permite cortar um sem derrubar os outros. A lista de tokens mostra quando cada um foi usado pela última vez.
No Claude Code
Troque o endereço pelo da sua loja e thag_… pelo token. O painel, em Avançado, já mostra este comando com o endereço certo e, logo depois de criado, com o token.
claude mcp add --transport http torrahub https://{sua-loja}/api/mcp --header "Authorization: Bearer thag_…"Depois, numa conversa nova, /mcp mostra o servidor torrahub ligado. O endereço do servidor é sempre https://<sua-loja>/api/mcp, no domínio da loja (o mesmo da vitrine).
No Claude Desktop, com token
O jeito simples é o conector personalizado, como no claude.ai: o que se adiciona no site aparece no aplicativo. Para ligar com token, pelo arquivo de configuração, use o mcp-remote (precisa do Node.js instalado). Abra Configurações → Desenvolvedor → Editar configuração e acrescente:
{
"mcpServers": {
"torrahub": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://{sua-loja}/api/mcp",
"--header",
"Authorization:${TOKEN}"
],
"env": {
"TOKEN": "Bearer thag_…"
}
}
}
}Feche e abra o Claude Desktop. As ferramentas da loja aparecem no botão de ferramentas da conversa. O Authorization:${TOKEN} vai sem espaço de propósito: no Windows, o espaço dentro do argumento quebra o cabeçalho.
No Gemini CLI
O Gemini CLI, de linha de comando, liga servidores MCP remotos e descobre sozinho o login da loja: sem token. Ele abre o navegador nesta máquina para a tela de entrada, e a autorização volta para o localhost (a tela da loja avisa que o destino é o seu computador).
gemini mcp add --transport http torrahub https://{sua-loja}/api/mcp
# depois, dentro do Gemini CLI:
/mcp auth torrahubOutros agentes e scripts: a porta REST
As mesmas operações respondem em /api/agente/<nome>, com o token no cabeçalho Authorization: Bearer thag_…. As que só leem aceitam GET (os campos vão na URL); todas aceitam POST com o corpo em JSON.
# o que este token pode fazer, com o esquema de cada operação
curl -H "Authorization: Bearer $TOKEN" https://{sua-loja}/api/agente
# ler
curl -H "Authorization: Bearer $TOKEN" "https://{sua-loja}/api/agente/clientes?busca=Ana"
# lançar
curl -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"pedido":"0071","tipo":"enviado","rastreio":"AP123456789BR","avisarCliente":true}' \
https://{sua-loja}/api/agente/despacho200: deu certo. A resposta trazok,messagee, quando há,dados(ids, listas) ewhatsappUrl.422: a regra recusou, com a mesma mensagem que a tela mostraria (granel curto, café que não é da loja, data inválida).400corpo que não é JSON;401sem token, token inválido ou revogado;403token de outra loja;404operação que não existe;405GET numa operação que escreve.
O servidor MCP é a mesma lista vista pelo protocolo: transporte Streamable HTTP, sem sessão, com initialize, ping, tools/list e tools/call num POST para /api/mcp.
Tudo o que ele pode ler e lançar
Esta lista é gerada da mesma lista que o servidor da loja executa. O nome é o da ferramenta no MCP e o fim do caminho no REST. Campo marcado como obrigatório tem de ir; os outros, quando ausentes, usam o que a descrição diz.
As que só leem
resumosó lêGET · POST /api/agente/resumoO resumo do dia: pedidos a despachar, pedidos esperando pagamento (com quanto falta), os alertas do sino (sem rastreio, entrega falhada, contas vencidas, extrato a decidir, rupturas) e os pacotes que saíram sem rótulo.
Sem campos de entrada.
estoquesó lêGET · POST /api/agente/estoqueLista as fornadas que ainda têm café: granel (gramas), pilhas de pacotes prontos (id, peso, moagem, quantidade) e as gramagens que cada café vende. Use ANTES de envasar, moer, contar ou desenvasar, para pegar os ids. Não adivinhe ids.
Sem campos de entrada.
cadastrossó lêGET · POST /api/agente/cadastrosLista os cafés à venda (variantes com id, peso, moagem, preço e quanto dá para vender agora), os lotes de café verde (id, nome, código) e os torradores (id, nome, se é terceirizado, preço por kg de verde). Use antes de registrar torra ou venda.
Sem campos de entrada.
clientessó lêGET · POST /api/agente/clientesProcura clientes pelo nome, telefone ou e-mail. Devolve id, nome e telefone. Se vier mais de um com o mesmo nome, PERGUNTE qual antes de vender.
buscastringobrigatório- nome, telefone ou e-mail
As que escrevem (pedem confirmação)
torraescrevePOST /api/agente/torraRegistra uma torra inteira: o verde que entrou (por lote), o torrado que saiu, data, quantas fornadas no torrador, quem torrou (torrador do cadastro), se foi terceirizada, o custo, e na mesma chamada quanto foi moído e os envases (grão e/ou moído, peso, rótulo frente/trás, embalagem, custo do envase). Pegue os ids em "cadastros". Tudo que não foi envasado fica a granel.
cafeSlugstringobrigatório- slug do café (em "cadastros")
datastringobrigatório- AAAA-MM-DD da torra
verdelista de objetosverde[].loteIdstring- uuid
verde[].gramasinteger- mínimo 1
torradoGintegerobrigatório- mínimo 1
fornadasinteger- quantas fornadas no torrador; mínimo 1
torradorIdstring- uuid do torrador do cadastro
quemTorroustring- nome, se o torrador não está no cadastro
terceirizadabooleanobrigatóriocustoTorraCentsinteger- custo da torra; ausente = preço por kg do torrador × kg de verde
consumoProprioGinteger- mínimo 0
moerGinteger- gramas do torrado que foram moídas; mínimo 1
envaseslista de objetosenvases[].pacotesinteger- mínimo 1
envases[].grindstring- 'whole' = grão, 'medium' = moído; valores:
whole,medium envases[].pesoGinteger- gramas do pacote; obrigatório se o café tem duas gramagens
envases[].datastring- AAAA-MM-DD; sem ela, hoje
envases[].notastring- texto livre que vai na nota do movimento
envases[].insumosobject- O que o envase consumiu. Ausente = o do cadastro do café. null num campo = "nenhum" (não colei / sem fecho).
envases[].insumos.embalagemstring | null- slug do saco
envases[].insumos.fechostring | null- slug do fecho
envases[].insumos.rotuloFrenteCentsnumber | null- custo da face da frente; null = não colei
envases[].insumos.rotuloTrasCentsnumber | null- custo da face de trás; null = não colei
envases[].envaseCentsPorPacotenumber | null- mão de obra por pacote, em centavos; null = envasei eu; ausente = nada declarado
notastring- texto livre que vai na nota do movimento
moerescrevePOST /api/agente/moerMói granel em grão de uma fornada: as gramas viram granel moído (na fornada irmã ou numa nova, devolvida em destinoId).
roastBatchIdstringobrigatório- uuid
gramasintegerobrigatório- mínimo 1
datastring- AAAA-MM-DD; sem ela, hoje
notastring- texto livre que vai na nota do movimento
envaseescrevePOST /api/agente/envaseEnvasa: o café sai do granel de uma fornada e vira pacote (a mesma regra da tela de Torras). Pegue o roastBatchId em "estoque". Moído (medium) sai do granel moído — se a fornada só tem grão, use "moer" antes.
roastBatchIdstringobrigatório- uuid
pacotesintegerobrigatório- mínimo 1
grindstringobrigatório- 'whole' = grão, 'medium' = moído; valores:
whole,medium pesoGinteger- gramas do pacote; obrigatório se o café tem duas gramagens
datastring- AAAA-MM-DD; sem ela, hoje
notastring- texto livre que vai na nota do movimento
insumosobject- O que o envase consumiu. Ausente = o do cadastro do café. null num campo = "nenhum" (não colei / sem fecho).
insumos.embalagemstring | null- slug do saco
insumos.fechostring | null- slug do fecho
insumos.rotuloFrenteCentsnumber | null- custo da face da frente; null = não colei
insumos.rotuloTrasCentsnumber | null- custo da face de trás; null = não colei
envaseCentsPorPacotenumber | null- mão de obra por pacote, em centavos; null = envasei eu; ausente = nada declarado
amostrasescrevePOST /api/agente/amostrasEnvasa amostras (saquinhos) do granel de uma fornada.
roastBatchIdstringobrigatório- uuid
quantidadeintegerobrigatório- mínimo 1
grindstringobrigatório- 'whole' = grão, 'medium' = moído; valores:
whole,medium pesoGintegerobrigatório- gramas de cada amostra, ex.: 50
saquinhostring- slug do insumo do saquinho
datastring- AAAA-MM-DD; sem ela, hoje
notastring- texto livre que vai na nota do movimento
pacotesescrevePOST /api/agente/pacotesMove pacotes prontos de UMA pilha (o + e o − de Estoque): 'entrada', 'perda', 'consumo_proprio', 'amostra_avulsa'. Para contagem de várias pilhas, use "contagem".
roastBatchIdstringobrigatório- uuid
roastPileIdstring- uuid da pilha; obrigatório se a fornada tem mais de uma
motivostringobrigatório- valores:
contagem,perda,consumo_proprio,amostra_avulsa,entrada pacotesintegerobrigatório- na contagem, o TOTAL contado; nos outros, quantos; mínimo 0
datastring- AAAA-MM-DD; sem ela, hoje
notastring- texto livre que vai na nota do movimento
contagemescrevePOST /api/agente/contagemLança a contagem da prateleira, várias pilhas de uma vez: para cada pilha, o TOTAL contado (zero vale). Pegue roastBatchId e roastPileId em "estoque". Se o café/peso/moagem que a pessoa disse está em mais de uma pilha, PERGUNTE como dividir.
itenslista de objetosobrigatórioitens[].roastBatchIdstringobrigatório- uuid
itens[].roastPileIdstringitens[].pacotesintegerobrigatório- mínimo 0
datastring- AAAA-MM-DD; sem ela, hoje
notastring- texto livre que vai na nota do movimento
desenvasarescrevePOST /api/agente/desenvasarDesfaz pacotes: o café volta ao granel. Diga se o saco volta a ser usado (devolveSaco).
roastBatchIdstringobrigatório- uuid
roastPileIdstringpacotesintegerobrigatório- mínimo 1
devolveSacobooleanobrigatóriodatastring- AAAA-MM-DD; sem ela, hoje
notastring- texto livre que vai na nota do movimento
vendaescrevePOST /api/agente/vendaRegistra uma venda direta (WhatsApp, feira, balcão) para um cliente do cadastro, pelos pacotes do catálogo. Pegue clienteId em "clientes" e variantId em "cadastros". Sem preço, usa o do catálogo. cobrarPix: true devolve whatsappUrl com a mensagem de cobrança e o Pix — mostre o link para a pessoa tocar. Pacote sem estoque vira encomenda.
clienteIdstringobrigatório- uuid
itenslista de objetosobrigatórioitens[].variantIdstringobrigatório- uuid
itens[].quantidadeintegerobrigatório- mínimo 1
itens[].precoCentsinteger- preço combinado por pacote; ausente = do catálogo; mínimo 0
pagobooleanobrigatório- true = já recebeu; false = a pagar
cobrarPixboolean- gera a cobrança Pix e o link do WhatsApp (só se não pago)
entregastring- em mãos ou despacho; valores:
hand,ship datastring- AAAA-MM-DD; sem ela, hoje
despachoescrevePOST /api/agente/despachoMarca um pedido como enviado (com rastreio e data de postagem) ou entregue em mãos. avisarCliente: true manda o aviso ao cliente (e-mail/WhatsApp, se a régua estiver ligada); pergunte se não souber.
pedidostringobrigatório- o número, ex.: "0071" ou "#0071"
tipostringobrigatório- entregue = em mãos; valores:
enviado,entregue rastreiostringdataPostagemstring- AAAA-MM-DD; sem ela, hoje
cidadestring- cidade da entrega em mãos
avisarClientebooleanobrigatório
verificar-pagamentosescrevePOST /api/agente/verificar-pagamentosO botão "Verificar pagamentos": confere no Mercado Pago os pagamentos dos últimos 35 dias, lança o que casa com certeza e diz o que precisa de confirmação na tela.
Sem campos de entrada.
O que o acesso abre, e o que nunca abre
- Uma loja por acesso. O token, ou a autorização do conector, abre só a loja que o criou. Mandado ao endereço de outra loja, é recusado.
- Revogável na hora. Desconectar o aplicativo, ou revogar o token, em Integrações → Assistentes de IA, corta o acesso no pedido seguinte. Para voltar, conecte de novo (ou crie outro token).
- Escrita com confirmação. O servidor instrui o agente a dizer o que vai lançar, com os números, e esperar o seu ok antes de toda operação que escreve. O próprio Claude também pede permissão antes de usar uma ferramenta, a menos que você a libere.
- Trilha de tudo. Cada lançamento leva "Agente (nome do token)" na nota do movimento e uma linha na trilha de auditoria da loja, com o que foi pedido e o que a loja respondeu.
- As regras das telas. Nenhuma operação tem atalho: o envase confere o granel, a venda confere o catálogo, o despacho confere o pedido, e a recusa é a mesma mensagem da tela. Nenhuma operação apaga registro; o que sai do estoque sai por movimento, como no painel.
- O que ele vê. Só o que as operações devolvem: estoque, cafés, lotes de verde e torradores, o resumo do dia (pedidos a despachar e a receber, alertas) e, na busca de clientes, nome, telefone e e-mail de quem bate com a busca, para lançar a venda.
- O que ele nunca alcança. Dados de cartão, senhas, as configurações e as integrações da loja, a edição de preços e do cadastro de produtos, e o console de dados. Não existe operação para isso, então não há o que o agente chame.
Guarde o token como guarda uma senha: no segredo do ambiente ou no arquivo de configuração, nunca colado numa conversa.
Para o agente que está lendo
Se você é um agente configurando esta integração para alguém:
- Pergunte o domínio da loja (o da vitrine, por exemplo
https://cafeserrano.com.br). Sem token,GET https://<loja>/api/agente/descricaodevolve o nome da loja, o endereço do MCP dela e todas as operações com o esquema da entrada. - Se a pessoa usa o claude.ai, o app do Claude ou o ChatGPT, mande-a para os passos de Ligue em 5 minutos: ela cola o endereço como conector personalizado e autoriza na tela da loja, sem token.
- Para você mesmo (Claude Code, scripts), peça à pessoa que crie o token em Painel da loja → Integrações → Assistentes de IA → Avançado (para quem programa) e o guarde como segredo. Não peça para colar o token no chat se houver outro caminho.
- Ligue o MCP em
https://<loja>/api/mcp: como conector personalizado, que entra por OAuth (a pessoa autoriza na tela da loja), ou com o cabeçalhoAuthorization: Bearer thag_…(comandos acima). Ou use o REST. - Siga as regras abaixo, que o servidor também manda no
initialize.
- Antes de lançar, leia ("estoque", "cadastros", "clientes") para pegar os ids. Nunca invente um id.
- Confirme com a pessoa o que vai lançar antes de toda operação que escreve, dizendo os números.
- Quando uma operação devolver whatsappUrl, mostre o link para a pessoa tocar.
- Se a resposta vier com ok: false, diga a mensagem como veio: é a mesma recusa que a tela do painel mostraria.
Versões para máquina: operacoes.json (as operações com o esquema JSON, o caminho REST e o nome no MCP), agente.md (esta página) e llms.txt.
TorraHub · CNPJ 45.402.285/0001-25
