https://mcp.chatsailer.com/mcp/crm
Leia e gerencie um workspace da Sailer. As tools de registro recebem um
resource de "contact", "organization" ou "deal" para cobrir o CRM sem
comer o orçamento de tools do cliente. Campanhas e traces de conversa têm as
suas próprias tools. Não há send numa conversa ao vivo.
Uma tool que cobre vários resources aparece se você tem qualquer dos
scopes de leitura ou escrita dela, e depois checa o scope do resource que
você nomeou. Uma conexão com deals:read vê search_records mas não
consegue buscar contatos.
Todo workspace define os seus próprios campos personalizados. O JSON Schema
que um cliente cacheia não os inclui — clientes cacheiam por servidor, não
por tenant. É por isso que describe_schema existe, e por isso você chama
primeiro.
A primeira conexão é somente leitura. Tools de write nem
aparecem até você reconectar com o write scope correspondente —
contacts:write, organizations:write, deals:write ou campaigns:write.Oriente-se
whoami
Sem argumentos, sem scope. A qual workspace esta conexão está ligada, quem
autorizou, oauth vs api_token, se lê company-wide, e os scopes que você
de fato tem.
Which Sailer workspace am I connected to?Uma conta da Sailer pode pertencer a vários workspaces. A conexão está ligada a exatamente um, escolhido no consent. Nenhum argumento de tool pode mudar isso.
describe_schema
Precisa de qualquer um de contacts:read, organizations:read ou
deals:read. resource opcional ("contact", "organization", "deal");
omita para descrever tudo o que esta conexão consegue ler.
Devolve campos built-in e personalizados, quais são required ou read-only,
opções de select, e quais keys são filterable, sortable ou expandable. Em
deals também devolve os pipelines e stages do workspace — você precisa de um
par válido para criar um deal.
What custom fields does this workspace have?Use a
key que ele devolve dentro de custom_fields no create e no update.
Adivinhar a partir de outro workspace — ou desta documentação — é como você
leva um erro de unknown-field.
Ler registros
Ids se parecem comcon_8f3a…, org_8f3a…, deal_8f3a…. O prefixo é o
resource. get_record e update_record não recebem argumento resource — um
par que discordasse não teria um vencedor com princípio.
search_records
Precisa de qualquer um de contacts:read, organizations:read ou
deals:read. resource tem default "contact". O scope de leitura do
resource nomeado é o que autoriza a chamada.
Se
has_more for true, continue paginando. Não conte uma página e chame isso
de população — para isso existe count_records. Cursors são opacos, o mesmo
contrato da paginação REST.
Find contacts created in the last 7 days.
Find deals in Negotiation.
get_record
Precisa de qualquer um de contacts:read, organizations:read ou
deals:read. id, expand opcional. O prefixo de id seleciona o
resource.
Show me contact con_…
Show me deal deal_…
Ausente, apagado ou fora do que você consegue ver: not found. O mesmo próximo
passo nos três casos — busque de novo.
count_records
Precisa de qualquer um de contacts:read, organizations:read ou
deals:read. O mesmo resource / filter / q do search, sem paging.
How many contacts are in this workspace?
How many organizations are in this workspace?
Escrever registros
Chamedescribe_schema primeiro. Keys de custom-field desconhecidas ou
read-only são rejeitadas, não ignoradas.
O que é required no create depende de resource:
create_record
Precisa de qualquer um de contacts:write, organizations:write ou
deals:write. Linha nova. Prefira upsert_contact se a pessoa já puder
existir — um duplicado não se desfaz automaticamente.
Create a contact named Ana with phone +5511999999999.
Create an organization named Acme.
update_record
Precisa de qualquer um de contacts:write, organizations:write ou
deals:write. Só id — sem argumento resource. Destrutivo: sobrescreve o
que você envia. Omita um campo para deixá-lo; envie null para limpá-lo.
Leia primeiro se a intenção era append.
Set Ana’s email to ana@example.com.
upsert_contact
Scope: contacts:write. Só contatos. Match por phone, depois da
canonicalization — (11) 98765-4321 e +55 11 98765-4321 são a mesma
pessoa. O on_match default é update; ignore devolve a linha existente
sem tocar.
O resultado diz qual ramo rodou (created vs matched_existing). O registro
sozinho não diz.
Add or update the contact with this phone number.
Deals
move_deal_stage
Scope: deals:write. deal_id, mais stage_name ou stage_id.
Dê stage_name — o nome como aparece no board, matched
case-insensitively — e ele é resolvido dentro do próprio pipeline deste
deal. Você não consegue mover um deal para o stage de outro pipeline por
acidente. Use stage_id só se você já tiver um.
Move Acme to Negotiation.
Campanhas
list_campaigns
Scope: campaigns:read. Mais novas primeiro. status opcional, limit 1–100
(default 25). Use isso para obter um campaign_id.
List this workspace’s campaigns.
get_campaign
Scope: campaigns:read. Uma campanha mais uma página dos seus participants.
participant_limit opcional (default 25; 0 para a campanha sozinha).
projected_send_at é uma estimativa, não um compromisso.
Para performance agregada, chame get_campaign_analytics — isto devolve
linhas, não totais.
Who is in this campaign, and where does each contact stand?
get_campaign_analytics
Scope: campaigns:read. Uma campanha, uma família de métricas.
window_start / window_end opcionais (UTC). Default: os últimos 30 dias.
Essas famílias não são intercambiáveis. big_numbers e daily_metrics
usam um “answered” estrito (um inbound que qualifica, classificado como
reply). status_funnel usa o status de lifecycle, que costuma ser um número
maior. Taxas em big_numbers vão de 0–100, não frações.
Toda resposta carrega _meta.caveats. Leia-os antes de comparar dois
números. Uma diferença entre duas famílias não é uma mudança no tempo.
Show me campaign performance. Read the caveats before you summarize.
add_campaign_participants
Scope: campaigns:write. Destrutivo. Envia mensagens reais para pessoas
reais. Confirme com o usuário antes de chamar.
Enrolar um contato numa campanha em andamento significa que a campanha vai
escrever para ele no próprio horário — uma mensagem de WhatsApp para um
número de telefone de verdade. Isso não pode ser desfeito depois de enviado.
Os contatos já precisam existir; isto não os cria. Use search_records ou
upsert_contact primeiro. Quem já está na campanha é reportado em
already_present e não é enrolado duas vezes. Não há jeito de fazer a
campanha enviar na hora a partir daqui.
Add these contacts to the campaign. Confirm with me before you call it.
Conversas
Não há tool que liste conversas nem que envie uma mensagem numa. REST consegue listar e recuperar; um modelo chega a uma conversa a partir do contato com o qual já está trabalhando. Enviar numa conversa ao vivo não está ligado de propósito — use o sandbox do Studio se você precisa testar um turno.get_conversation_trace
Scopes: conversations:read e inference:read. conversation_id, since
opcional.
Explica por que o agente roteou uma conversa real do jeito que roteou: cada
routing edge que considerou, quais condições passaram e os valores que
comparou. A parte útil costuma ser os edges que perderam. Passe since
para restringir isso a um turno — sem ele, um fio longo devolve muito
histórico.
Isto não inclui prompts, completions do modelo, nomes de modelo, token
counts nem custo.
Why did the agent say that to this customer?