CommSync
Uma caixa de entrada para SMS e e-mail empresarial. Pesquise e leia mensagens de texto e e-mails em todas as linhas telefônicas e caixas de correio, gerencie contatos e rótulos, faça triagem de conversas e envie SMS e e-mail pelas linhas que você permitir. Servidor remoto hospedado com OAuth 2.1.
Servidor MCP hospedado
npx add-mcp 'https://server.commsync.ai/api/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Servidor MCP
O CommSync fala o Model Context Protocol. Aponte um aplicativo ou agente compatível com MCP para o endpoint. Ele poderá ler conversas, enviar mensagens, gerenciar contatos e rótulos, e muito mais.
Existem duas formas de autenticar, e ambas alcançam as mesmas ferramentas:
- OAuth 2.1 é a forma principal. O aplicativo faz seu login sem segredo compartilhado. Veja Conectar aplicativos de IA.
- Uma chave de API é a alternativa para scripts e servidores. Envie-a como um token Bearer. Veja Chaves de API.
OAuth é como Claude, ChatGPT, Codex, Cursor e VS Code se conectam.
O usuário conectado e a função dele na organização definem o escopo de cada operação.
Agentes podem buscar /docs/mcp.txt para o mesmo catálogo como texto simples com detalhes completos dos parâmetros — uma requisição, sem scraping.
Conectar
O servidor é um único endpoint HTTP sem estado. Para conectar um aplicativo de IA, cole a URL do endpoint no aplicativo e faça login. A página Conectar aplicativos de IA tem um guia para cada aplicativo.
Para chamar o endpoint a partir do seu próprio código com uma chave de API:
Crie uma chave de API
No CommSync, abra **Configurações → Chaves de API** e crie uma chave. O CommSync a mostra
apenas uma vez — guarde-a com segurança. Veja <a href="/docs/api-keys">Chaves de API</a>.
Chame o endpoint
Envie JSON-RPC POST para a rota <code>/api/mcp</code> na sua origem da API do CommSync.
```bash
curl -X POST "$COMMSYNC_API/api/mcp" \
-H "Authorization: Bearer csk_your_api_key" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```
Chame uma ferramenta
Use <code>tools/call</code> com o nome da ferramenta e seus argumentos.
```json
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": { "name": "list_threads", "arguments": { "limit": 20 } }
}
```
| Endpoint | POST /api/mcp (na sua origem da API do CommSync) |
| Transporte | HTTP, sem estado — uma requisição por chamada |
| Autenticação | Token de acesso OAuth 2.1, ou Authorization: Bearer csk_… |
Autenticação
OAuth 2.1
O CommSync é seu próprio servidor de autorização. Um cliente precisa apenas da URL do endpoint, porque descobre todo o resto:
- Uma requisição sem token recebe
401e um cabeçalhoWWW-Authenticate. O cabeçalho nomeia os metadados do recurso protegido (/.well-known/oauth-protected-resource/api/mcp, RFC 9728). - Esse documento nomeia o servidor de autorização. Os metadados dele estão em
/.well-known/oauth-authorization-server(RFC 8414). - O cliente se registra, envia você para a tela de consentimento e troca o código por tokens.
| Concessão | Código de autorização com PKCE (somente S256) |
| Registro do cliente | Registro dinâmico em POST /oauth/register (RFC 7591), ou um Documento de Metadados de ID do Cliente: uma URL https como o client_id |
| Autenticação do cliente | none (clientes públicos), client_secret_post, client_secret_basic |
| Escopo | mcp (o padrão quando você omite scope) |
| Recurso | A URL do endpoint (RFC 8707). O CommSync vincula cada token a ela |
| Token de acesso | csat_…, válido por uma hora |
| Token de atualização | csrt_…, válido por 90 dias. Ele é rotacionado a cada uso. Por 30 segundos após um uso, o mesmo token recebe o mesmo novo par novamente, para um cliente que atualiza duas vezes ao mesmo tempo. Depois disso, um token usado revoga sua família de tokens |
| Revogação | POST /oauth/revoke (RFC 7009) |
A resposta de autorização carrega iss (RFC 9207). Um redirecionamento de loopback
(http://127.0.0.1, http://localhost, http://[::1]) pode usar qualquer porta.
Um código é de uso único. Uma segunda troca que passe na verificação PKCE revoga os tokens que a primeira troca emitiu. O CommSync recusa uma segunda troca sem o verificador correto, e essa troca não muda nada.
Chave de API
Envie Authorization: Bearer csk_…. Uma chave não expira, e você a revoga
em Configurações, em Chaves de API. Uma chave é adequada para um script ou um agente
no lado do servidor.
Modelo de autorização
Cada requisição resolve sua credencial (um token OAuth ou uma chave de API) para
(userId, orgId, role, accessibleChannels).
Cada ferramenta está atrás de um dos quatro portões. O servidor rejeita uma chamada que
exceda seu acesso antes que qualquer coisa aconteça.
qualquer membro qualquer usuário na organização acesso ao canal precisa de acesso ao canal relevante proprietário / administrador somente proprietário
- qualquer membro — qualquer usuário com associação à organização.
- acesso ao canal — você deve ter acesso ao canal envolvido.
- proprietário / administrador — reservado para proprietários e administradores da organização.
- somente proprietário — o único proprietário do espaço de trabalho (por exemplo, cobrança).
Proprietários e administradores têm acesso ao canal implicitamente; membros o obtêm por canal — veja Funções e permissões.
O CommSync também etiqueta as ferramentas por efeito: read (sem alteração), write (altera) ou
destructive (remove dados — use com cuidado).
Chaves e aplicativos com escopo de canal
Uma chave de API ou um aplicativo conectado pode ser ajustado para linhas específicas em vez do seu acesso total ao canal. Para uma chave, escolha Linhas específicas ao criá-la ou editá-la em Configurações, em Chaves de API. Para um aplicativo, escolha-o na tela de consentimento. Você pode alterar isso depois em Configurações, em Conectar aplicativos de IA. Escolha os endereços de e-mail e números de telefone que ele pode acessar.
O servidor então cruza seu acesso ao canal em tempo real com a lista de permissões em cada requisição. Uma chave ou aplicativo com escopo só pode ler, enviar e agir nas linhas escolhidas. Conversas em outros canais são invisíveis para ele, e o CommSync recusa envios de outros canais. As listagens de canais mostram apenas o que está no escopo.
- O padrão é Todos os canais: a chave segue seu acesso em tempo real.
- Isso inclui linhas que você conectar depois; o CommSync migrou chaves pré-existentes dessa forma.
- Uma chave com escopo nunca excede seus privilégios.
- Se você perder o acesso, ou alguém excluir a linha, ela também sai do escopo da chave.
- Superfícies por usuário (contatos, rótulos, IA, webhooks, perfil) não pertencem a um canal, então o escopo não as afeta.
Catálogo de ferramentas
Conversas
Leituras com escopo da organização (filtradas por acesso ao canal); alterações gravam apenas o estado da sua própria visualização por usuário.
| Ferramenta | Acesso | Tipo | Descrição |
|---|---|---|---|
list_threads | acesso ao canal | leitura | Lista conversas visíveis para você |
get_thread_summary | acesso ao canal | leitura | Resumo de conversa individual no formato de linha de lista |
get_thread_messages | acesso ao canal | leitura | Mensagens paginadas de uma conversa |
mark_thread_read | acesso ao canal | escrita | Limpa sua contagem de não lidas |
mark_thread_unread | acesso ao canal | escrita | Força uma conversa como não lida para você |
archive_thread | acesso ao canal | escrita | Arquivar (por usuário) |
unarchive_thread | acesso ao canal | escrita | Desarquivar (por usuário) |
mark_thread_spam | acesso ao canal | escrita | Mover para Spam (por usuário) |
mark_thread_promotions | acesso ao canal | escrita | Mover para Promoções (por usuário) |
mark_thread_automated | acesso ao canal | escrita | Mover para Mensagens Automatizadas — e-mail não humano (por usuário) |
move_thread_to_inbox | acesso ao canal | escrita | Limpar sinalizadores de categoria (por usuário) |
snooze_thread | acesso ao canal | escrita | Adiar até um timestamp (por usuário) |
unsnooze_thread | acesso ao canal | escrita | Limpar um adiamento (por usuário) |
delete_thread | acesso ao canal | destrutiva | Ocultar a conversa da sua visualização; a organização mantém a cópia |
restore_thread | acesso ao canal | escrita | Restaurar uma conversa excluída suavemente |
delete_message | acesso ao canal | destrutiva | Ocultar uma mensagem de você |
hard_delete_thread | proprietário / administrador | destrutiva | Excluir permanentemente a conversa e as mensagens compartilhadas |
Envios de saída
O CommSync aplica o acesso ao canal antes de qualquer envio. Compor e encaminhar também exigem pelo menos um canal acessível do tipo certo.
| Ferramenta | Acesso | Tipo | Descrição |
|---|---|---|---|
send_sms | acesso ao canal | escrita | Responder em uma conversa SMS atual |
send_email | acesso ao canal | escrita | Responder em uma conversa de e-mail atual |
compose_sms | acesso ao canal | escrita | Iniciar uma nova conversa SMS |
compose_email | acesso ao canal | escrita | Iniciar uma nova conversa de e-mail |
forward_message | acesso ao canal | escrita | Encaminhar uma mensagem para um novo destinatário |
resend_failed_message | acesso ao canal | escrita | Tentar novamente uma mensagem de saída com falha |
get_send_capacity | acesso ao canal | leitura | Taxa de envio sustentável por linha, além de qualquer pausa ativa por limite de taxa |
Corpos de e-mail
send_email e compose_email aceitam dois campos de corpo: bodyText e
bodyHtml. Forneça um deles ou ambos. Uma chamada sem nenhum falha antes
que o CommSync envie qualquer coisa.
Somente texto simples é suficiente. O CommSync constrói a parte HTML a partir de bodyText.
Ele escapa o texto, mantém as quebras de linha e transforma cada link http:// ou
https:// em um link clicável. Quando você fornece bodyHtml, o CommSync
envia seu HTML sem alterações. Quando você fornece apenas bodyHtml, o CommSync
cria a parte de texto simples a partir dele. A assinatura da conta e o rodapé "Enviado do
CommSync", quando ativados, vão após o seu texto em ambas as partes.
Limites de taxa nunca chegam até você
O CommSync aceita todo envio autorizado e assume a entrega a partir desse
ponto — isso também cobre limites de taxa de operadoras e servidores de e-mail. As ferramentas
de envio não retornam 429 e nunca pedem que você tente novamente. Quando um provedor nos limita,
a mensagem permanece na fila, recua e sai sozinha.
Cada ferramenta de envio retorna um recibo que descreve onde a mensagem realmente está:
{
"accepted": true,
"messageId": "cm9x…",
"threadId": "cm7a…",
"state": "waiting_on_line",
"estimatedSendAt": "2026-07-29T18:41:12.000Z",
"pacing": {
"provider": "<platform name>",
"sustainedPerMinute": 54,
"rateLimited": true,
"reason": "<platform name> rate limit — waiting 45s"
}
}
state é um de dispatching, waiting_on_line, scheduled, sent ou
failed. Nunca chame uma ferramenta de envio duas vezes para a mesma mensagem — o CommSync
já colocou uma mensagem waiting_on_line na fila e a entregará.
Antes de um envio em massa, chame get_send_capacity para a taxa sustentável em cada
linha da qual você pode enviar. Se você excedê-la, isso é seguro — as mensagens entram
na fila em vez de falhar; elas simplesmente demoram mais para sair.
Gerenciamento de canais
| Ferramenta | Acesso | Tipo | Descrição |
|---|---|---|---|
list_email_accounts | acesso ao canal | leitura | Lista canais de contas de e-mail que você pode ver |
add_email_account | qualquer membro | escrita | Vincular uma caixa de correio IMAP/SMTP à organização |
delete_email_account | proprietário / administrador | destrutiva | Remover uma conta de e-mail |
test_email_account | acesso ao canal | leitura | Testar credenciais IMAP/SMTP armazenadas |
list_phone_numbers | acesso ao canal | leitura | Lista canais de números de telefone que você pode ver |
add_phone_number | qualquer membro | escrita | Vincular um número de telefone à organização |
delete_phone_number | proprietário / administrador | destrutiva | Remover um número de telefone |
Cobrança
| Ferramenta | Acesso | Tipo | Descrição |
|---|---|---|---|
get_billing_state | qualquer membro | leitura | Plano, status, assentos, limites, uso |
change_tier | somente proprietário | escrita | Trocar o plano da assinatura (com rateio) |
set_seats | somente proprietário | escrita | Definir a quantidade de assentos pagos (com rateio) |
seats_preview | somente proprietário | leitura | Simular uma alteração de assentos com rateio |
Contatos
O grafo de contatos é privado por usuário — estes nunca vazam entre usuários.
| Ferramenta | Acesso | Tipo | Descrição |
|---|---|---|---|
list_contacts | qualquer membro | leitura | Lista seus contatos |
get_contact | qualquer membro | leitura | Um contato, com identidades e rótulos |
create_contact | qualquer membro | escrita | Criar um novo contato |
update_contact | qualquer membro | escrita | Atualizar o nome de exibição ou notas |
delete_contact | qualquer membro | destrutiva | Excluir um contato; identidades ficam órfãs |
merge_contacts | qualquer membro | destrutiva | Mesclar contatos inteiros em um único sobrevivente; o CommSync exclui as fontes |
merge_identities | qualquer membro | escrita | Mesclar duas identidades sob um contato |
split_identity | qualquer membro | escrita | Desanexar uma identidade em um órfão |
attach_identity_to_contact | qualquer membro | escrita | Anexar um órfão a um contato |
promote_identity_to_contact | qualquer membro | escrita | Promover um órfão a um novo contato |
Identidades
| Ferramenta | Acesso | Tipo | Descrição |
|---|---|---|---|
get_identity | qualquer membro | leitura | Uma identidade e seu contato |
update_identity_notes | qualquer membro | escrita | Editar notas por canal |
list_orphaned_identities | qualquer membro | leitura | Identidades ainda não vinculadas a um contato |
list_all_identities | qualquer membro | leitura | Todas as identidades que você possui |
Rótulos
| Ferramenta | Acesso | Tipo | Descrição |
|---|---|---|---|
list_labels | qualquer membro | leitura | Listar rótulos com contagens de uso |
create_label | qualquer membro | escrita | Criar um rótulo (nome e cor hexadecimal) |
update_label | qualquer membro | escrita | Atualizar o nome, a cor ou o prompt de IA |
delete_label | qualquer membro | destrutivo | Excluir um rótulo em todos os lugares |
assign_label | qualquer membro | escrita | Aplicar um rótulo a um contato ou identidade |
unassign_label | qualquer membro | escrita | Remover um rótulo |
IA
| Ferramenta | Acesso | Tipo | Descrição |
|---|---|---|---|
get_ai_settings | qualquer membro | leitura | Ler a configuração de IA |
update_ai_settings | qualquer membro | escrita | Atualizar a configuração de IA |
get_todays_digest | qualquer membro | leitura | Resumo diário de hoje (ou uma data) |
list_digests | qualquer membro | leitura | Resumos diários recentes |
dismiss_digest | qualquer membro | escrita | Marcar um resumo como dispensado |
trigger_digest_run | qualquer membro | escrita | Executar um resumo agora |
list_ai_runs | qualquer membro | leitura | Entradas recentes de atividade de IA |
test_ai_connectivity | qualquer membro | leitura | Verificar se o CommSync tem IA configurada |
trigger_inbox_backfill | qualquer membro | escrita | Classificar remetentes históricos em Promoções ou Spam |
Pesquisa, conta e webhooks
| Ferramenta | Acesso | Tipo | Descrição |
|---|---|---|---|
search | qualquer membro | leitura | Pesquisar contatos, identidades, mensagens |
search_threads | qualquer membro | leitura | Pesquisa completa centrada em conversas: todas as conversas que correspondem a uma consulta, classificadas e paginadas, com trechos de correspondência |
get_profile | qualquer membro | leitura | Seu perfil (id, e-mail, nome) |
update_profile | qualquer membro | escrita | Atualizar seu nome de exibição |
list_webhooks | qualquer membro | leitura | Listar seus endpoints de webhook |
get_webhook | qualquer membro | leitura | Um único endpoint |
register_webhook | qualquer membro | escrita | Criar um endpoint (retorna o segredo uma vez) |
update_webhook | qualquer membro | escrita | Alterar url / eventos / modo / status |
rotate_webhook_secret | qualquer membro | escrita | Rotacionar o segredo de assinatura (antigo válido por 24h) |
delete_webhook | qualquer membro | destrutivo | Excluir um endpoint e seu histórico |
list_webhook_deliveries | qualquer membro | leitura | Registro de entrega paginado |
resend_webhook_delivery | qualquer membro | escrita | Tentar novamente uma entrega |
Os CommSync Agents são os colegas de equipe de IA que respondem a mensagens de texto e e-mail recebidos. Você os configura e gerencia pelo aplicativo ou pela API administrativa REST, não por este catálogo de ferramentas MCP. Consulte Agents para detalhes.
Não há, propositalmente, nenhuma ferramenta MCP que permita que um
agente externo crie, reconfigure ou aprove turnos para um CommSync
Agent. Use send_sms ou
send_email acima para que sua própria
integração responda diretamente.
Recursos
Além das ferramentas, o servidor expõe recursos MCP para leituras diretas:
commsync://threads/{threadId}/messages — messages in a thread
commsync://contacts/{personId} — a contact's detail
commsync://digests/{localDate} — the AI digest for a date
Fluxos de trabalho comuns
Triagem da caixa de entrada
`list_threads` → `get_thread_messages(threadId)` para ler as mensagens mais recentes.
Responder
`get_thread_messages(threadId)` para encontrar a identidade pela qual uma mensagem
chegou → <code>send_sms</code> ou
<code>send_email</code> com esse `identityId`.
Mesclar um contato duplicado
`list_orphaned_identities` (ou `search`) para encontrar a identidade
solta → `merge_identities(identityAId, identityBId)` ou
`attach_identity_to_contact(personId, identityId)`. Para dois registros de contato
inteiros da mesma pessoa, confirme ambos com `get_contact` e
chame `merge_contacts(survivorPersonId, sourcePersonIds)` em vez disso.
Reagir em tempo real
Você não precisa chamar `list_threads` repetidamente. Registre um
<a href="/docs/webhooks">webhook</a> e chame o MCP novamente
somente quando um evento for disparado.
Conecte um aplicativo em Connect AI apps, ou crie uma chave em API keys. Depois, configure webhooks, para que seu agente reaja a mensagens e não precise perguntar repetidamente. Referência completa de parâmetros: /docs/mcp.txt.