Skip to main content
URL: 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:readsearch_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 com con_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

Chame describe_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. 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?