Para agentes de IA
Servidor MCP do SendHQ
Dê a um agente de IA controle total e seguro de um workspace do SendHQ: envie e receba e-mails, verifique domínios, publique templates e investigue a entregabilidade com 59 ferramentas estritamente tipadas. Escrito primeiro para agentes; humanos também são bem-vindos.
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcpO que é este servidor
O servidor MCP do SendHQ permite que um agente de IA opere um workspace do SendHQ por meio do Model Context Protocol: enviar e-mails (individuais, em lote, com template, respostas, anexos, novas tentativas idempotentes), ler e pesquisar e-mails enviados e recebidos (assuntos, corpos e nomes de anexos) e seus eventos de entrega, organizar e-mails em marcadores com regras de arquivamento automático, gerenciar rascunhos e anexos privados, criar e publicar templates hospedados, adicionar e verificar domínios e seu DNS, configurar o recebimento de e-mails e endereços de entrada, inspecionar entregabilidade, bounces, reclamações e supressões, e ler uso da conta, estado de cobrança, análises e metadados de chaves de API.
É um servidor stdio local, embutido no binário da CLI sendhq. Seu cliente MCP inicia sendhq mcp como processo filho e fala JSON-RPC por stdin/stdout. Cada chamada de ferramenta vira uma requisição documentada à API REST do SendHQ em https://sendhq.cc/api/v1, autenticada com a chave de API do seu workspace; portanto, o servidor MCP tem exatamente as permissões dessa chave e nenhuma a mais.
- 59 ferramentas em 8 grupos, geradas a partir de um único catálogo que também é publicado como tools.json.
- JSON Schemas estritos: argumentos desconhecidos, tipos errados e campos obrigatórios ausentes são rejeitados localmente, antes de qualquer coisa chegar ao SendHQ.
- Erros estruturados com um
codeestável, ostatusHTTP, umaexplanation, umremedyconcreto e a indicação de que tentar novamente pode ajudar ou não. - Toda ferramenta que envia e-mail real ou destrói dados avisa isso nas primeiras palavras da descrição e traz anotações de segurança do MCP.
- O modo
--read-onlyoculta todas as ferramentas de envio e de alteração. - Nada é registrado em log. O stdout carrega apenas mensagens do protocolo; a chave de API e o conteúdo das mensagens nunca chegam a um log.
https://sendhq.cc/api/mcp (consulta de preços e documentação, sem acesso à conta). O servidor desta página é o completo, com escopo de conta; ele roda localmente ou como o conector hospedado abaixo.Use o SendHQ no Claude e no ChatGPT
Não é preciso instalar nada: o SendHQ também executa este servidor como conector hospedado em https://mcp.sendhq.cc/mcp, com as mesmas ferramentas. Você entra com sua conta do SendHQ em vez de colar uma chave.
Claude
- Abra Settings → Connectors e encontre o SendHQ no diretório, ou escolha Add custom connector e cole
https://mcp.sendhq.cc/mcp. - Clique em Connect, entre no SendHQ, revise o acesso e clique em Allow.
- Peça ao Claude para verificar sua caixa de entrada, enviar um e-mail do seu domínio verificado ou explicar um bounce.
ChatGPT
- Open Settings → Security and login and turn on Developer mode.
- Go to chatgpt.com/plugins, click Create MCP app, name it SendHQ and enter
https://mcp.sendhq.cc/mcp. - Sign in to SendHQ and click Allow, then pick SendHQ from the tools menu in a new chat.
Muse by Meta
In Muse, open Connectors and search for SendHQ. Click Connect, sign in to SendHQ and click Allow.
Aprovação e desconexão
- The
request_featuretool sends a feature request to the SendHQ team with your account details, so we can follow up by email. - As ferramentas que enviam e-mail real ou excluem dados são identificadas como tal. Se o assistente pergunta antes é uma configuração por ferramenta no próprio assistente: no Claude, escolha Needs approval para essas ferramentas em Settings → Connectors → SendHQ.
- O conector recebe a própria chave de API, com o nome do assistente (por exemplo, “Claude (AI connector)”). Exclua-a em API Keys para desconectar imediatamente.
- Ele não pode criar nem revogar chaves de API, nem alterar a cobrança. Os anexos são enviados e retornados em base64; não há acesso a arquivos locais.
- Workspaces sem plano pago (teste de integração) só podem entregar para o e-mail da conta ou para um endereço do simulador do AWS SES.
Dúvidas: postmaster@sendhq.cc. Privacidade: sendhq.cc/privacy.
Instalação
Instale o binário sendhq (Linux, macOS e Windows em x86-64 e arm64). O instalador verifica o checksum da versão e coloca o binário em ~/.local/bin por padrão.
curl -fsSL https://downloads.sendhq.cc/install.sh | shirm https://downloads.sendhq.cc/install.ps1 | iexsendhq version
SENDHQ_API_KEY=re_your_key sendhq doctorCrie uma chave de API no painel em https://sendhq.cc/app#/keys. O servidor MCP não pode criar chaves. O único comando que executa o servidor é:
SENDHQ_API_KEY=re_your_key sendhq mcpNormalmente você nunca o executa manualmente: o cliente MCP o inicia. Quando executado em um terminal, ele fica aguardando JSON-RPC no stdin.
Configure seu cliente
Claude Code
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp
# read-only variant
claude mcp add sendhq-readonly --env SENDHQ_API_KEY=re_your_key -- sendhq mcp --read-onlyAdicione --scope user para disponibilizá-lo em todos os projetos, ou --scope project para gravá-lo no .mcp.json do projeto. Em um .mcp.json compartilhado, referencie a chave pelo ambiente em vez de fazer commit dela; o Claude Code expande ${VAR} no .mcp.json.
{
"mcpServers": {
"sendhq": {
"command": "sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "${SENDHQ_API_KEY}"
}
}
}
}OpenAI Codex
[mcp_servers.sendhq]
command = "sendhq"
args = ["mcp"]
env = { SENDHQ_API_KEY = "re_your_key" }Ou pela linha de comando: codex mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp.
Claude Desktop
Edite claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) e reinicie o app. Aplicativos de desktop não herdam o PATH do seu shell; use o caminho absoluto do binário (which sendhq).
{
"mcpServers": {
"sendhq": {
"command": "/Users/you/.local/bin/sendhq",
"args": [
"mcp"
],
"env": {
"SENDHQ_API_KEY": "re_your_key"
}
}
}
}Qualquer outro cliente MCP
Configure um servidor stdio com o comando sendhq, os argumentos ["mcp"] (opcionalmente "--read-only") e as variáveis de ambiente abaixo. O servidor aceita as versões 2024-11-05, 2025-03-26, 2025-06-18 e 2025-11-25 do protocolo MCP e implementa initialize, ping, tools/list e tools/call. Os resultados das ferramentas trazem um bloco de texto JSON e também structuredContent.
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_service_health","arguments":{}}}Não há transporte HTTP hospedado para o servidor com escopo de conta. Um endpoint MCP remoto com permissão de escrita exigiria OAuth por usuário, que o SendHQ não oferece; o binário local mantém a chave na máquina que já a possui.
Ambiente e flags
| Variável ou flag | Obrigatório | Significado |
|---|---|---|
SENDHQ_API_KEY | sim | Chave de API do workspace (re_…). Todas as ferramentas, exceto get_service_health, precisam dela. Sem ela, o servidor ainda inicia e toda chamada retorna um auth_error estruturado explicando como corrigir. |
SENDHQ_API_BASE_URL | não | URL base da API. Padrão: https://sendhq.cc/api/v1. Use apenas em um deploy local ou de staging. SENDHQ_BASE_URL é aceita como alias antigo. |
SENDHQ_MCP_READ_ONLY | não | 1, true ou yes se comporta como --read-only. |
--read-only | não | Expõe apenas as ferramentas que não enviam e-mail nem alteram estado. As ferramentas ocultas também são recusadas se chamadas pelo nome. |
SENDHQ_PROFILE / --profile | não | Usa uma chave armazenada por sendhq auth login no chaveiro do sistema operacional em vez de SENDHQ_API_KEY. A variável de ambiente prevalece quando ambas existem. |
A chave é enviada somente no cabeçalho Authorization: Bearer para a URL base configurada. Ela nunca é impressa, registrada em log, repetida em erros nem incluída nos resultados das ferramentas.
Modelo de segurança para agentes
- Envia e-mail real.
send_email,send_batchesend_template_testentregam e-mails a pessoas reais e consomem créditos de entrega. As descrições delas começam comSENDS REAL EMAIL. Chame-as somente quando o usuário tiver pedido explicitamente o envio daquela mensagem específica, com destinatários, remetente e conteúdo confirmados. - Destrutivas.
delete_email,delete_draft,delete_attachment,delete_domain,delete_inboxeremove_suppressionsão marcadas comdestructiveHint: truee suas descrições começam comDESTRUCTIVE. Confirme antes com o usuário.remove_suppressionenfraquece um bloqueio de segurança e só é apropriada quando uma pessoa confirma que o endereço voltou a funcionar. - Altera estado. Criar ou atualizar rascunhos, templates, domínios e caixas de entrada, publicar templates e iniciar a verificação alteram o workspace, mas não enviam e-mails.
- Somente leitura. Todo o resto é
readOnlyHint: truee pode ser chamado livremente. - O DNS nunca é alterado por este servidor.
add_domainretorna registros para uma pessoa publicar;get_domain_connect_linkretorna uma URL de consentimento que uma pessoa precisa abrir e aprovar no provedor de DNS. - A cobrança nunca é alterada por este servidor.
get_accountlê apenas o plano, o uso e o estado da assinatura. - Workspaces sem plano pago (teste de integração) só podem entregar para o e-mail do dono da conta (
get_account→user.email) ou para um endereço do simulador do AWS SES, comosuccess@simulator.amazonses.com, e não podem enviar anexos. - Aceito não é entregue. Um envio bem-sucedido retorna um ID; as evidências de entrega, bounce e reclamação chegam depois em
list_email_events. Nunca afirme que o e-mail chegou à caixa de entrada nem que alguém leu a mensagem. - Não troque o endereço De para contornar uma pausa
423e nunca adicione de novo destinatários que se descadastraram ou reclamaram.
Chaves de API estão fora do escopo
Por design, não há ferramentas que criem, modifiquem, rotacionem, revoguem ou excluam chaves de API. Um agente não deve emitir nem destruir credenciais. list_api_keys retorna apenas nomes, prefixos não secretos e horários do último uso. O gerenciamento de chaves fica no painel, com uma pessoa autenticada.
Fluxos de trabalho
1. Primeiro envio
get_service_healthconfirma que a API está acessível (funciona sem chave).get_accountmostra o plano (access.tier), a cota restante euser.email. No teste, esse e-mail é o único destinatário real permitido.list_sending_identitieslista os endereços De que você pode usar. Se estiver vazia, faça primeiro o fluxo de domínio.- Confirme remetente, destinatário, assunto e corpo com o usuário e, depois, use
send_emailcom umidempotency_key. list_email_eventscom oidretornado mostradelivery,bounce,complaintourejectassim que o provedor informa (em geral, de segundos a minutos).
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "SendHQ is connected",
"text": "It works.",
"idempotency_key": "first-send-2026-09-26"
}
}2. Verificação de domínio de ponta a ponta
add_domaincomname: "example.com". O resultado inclui os registros DNS (CNAMEs de DKIM, verificação do SES, SPF, DMARC recomendado).get_dns_providercom odomain_iddetecta o provedor de DNS autoritativo e retorna o host relativo exato a informar para cada registro nesse provedor.- Se
providers.domainConnect.availablefor true,get_domain_connect_linkretorna uma URL de consentimento. Entregue-a a uma pessoa; nada muda até que ela aprove no provedor. Caso contrário, entregue à pessoa os registros a publicar. Nunca publique um segundo registro SPF: incorporeinclude:amazonses.comao valorv=spf1existente. verify_domainverifica de novo o DNS e o SES. O status passa porpending,checkingepropagatingatéverified. Consulteverify_domainouget_domaina cada 30 a 60 segundos; o DNS pode levar de minutos a horas.- Quando
statusforverified, os endereços do domínio aparecem emlist_sending_identities.
3. Bounces, reclamações e supressões
list_blocked_recipientsretorna todos os endereços bloqueados com o motivo (bounce,complaint,unsubscribe) e uma contagem resumida.list_suppressionsretorna as supressões por hard bounce e por reclamação;deliverability_statstraz as taxas de entrega, bounce e reclamação dos últimos 30 dias;list_sender_reputationmostra quais endereços De estão com o ritmo reduzido ou pausados.- Um envio que contém um destinatário suprimido falha com
422 recipient_suppressed. Remova esse destinatário e envie de novo. - Somente quando uma pessoa confirmar que uma caixa postal que deu bounce voltou a funcionar, chame
remove_suppression. Supressões por reclamação são permanentes (409 complaint_suppression_locked).
4. Receber e-mails de entrada
- O domínio (muitas vezes um subdomínio, como
inbound.example.com) precisa estar verificado. setup_inboundprovisiona o recebimento e retorna um registro MX. Uma pessoa o publica.verify_inboundaté questatussejaready.create_inboxcomdomain_idelocal_part(por exemplo,support) criasupport@inbound.example.com.- Consulte
list_emailscomdirection: "in"eunread: true(opcionalmenteinbox_id). Leia uma mensagem comget_email, a conversa comget_thread, os anexos comdownload_attachmente marque-a como tratada commark_email(read: true). - Responda na mesma thread com
send_emailereply_to_email_id; o SendHQ define In-Reply-To, References e a thread.
5. Webhooks e notificações de eventos
Atualmente, o SendHQ não oferece webhooks configuráveis pelo cliente, portanto não há uma ferramenta de webhook. As notificações dos provedores são processadas dentro do SendHQ e expostas por meio de leituras. Em vez disso, faça polling: list_email_events para o resultado de uma mensagem, list_emails com status (por exemplo, bounced) ou after para mudanças recentes, list_emails com direction: "in" e unread: true para novos e-mails de entrada e list_blocked_recipients para novas supressões. Consulte no máximo cerca de uma vez por minuto para cada pergunta.
6. Diagnosticar uma falha de entrega
- Encontre a mensagem:
list_emailscomdirection: "out"etoouquery, ouget_emailse você tiver o ID.status: failedsignifica que o SendHQ ou o provedor a rejeitou na submissão; o erro do e-mail explica o motivo. list_email_events:bounce(permanente ou transitório, com o diagnóstico do provedor),complaint,rejectoudelivery. Nenhum evento ainda significa que o provedor não informou nada; aguarde e verifique de novo.- Se a própria chamada de envio falhou, leia o
codedo erro:sender_domain_unverified→ conclua a verificação do domínio;recipient_suppressed→ o endereço já teve hard bounce ou reclamação;sender_paused→ inspecionelist_sender_reputatione corrija a origem da lista;trial_recipient_restricted→ limites do teste;quota_exhausted→ uso emget_account. get_domainverifica se DKIM, SPF e DMARC ainda estão publicados;deliverability_statsmostra se o problema é uma única mensagem ou uma tendência.- Relate o que as evidências mostram. Um evento
deliverysignifica que o servidor do destinatário aceitou a mensagem, não que ela chegou à caixa de entrada nem que foi lida.
7. Tenha uma categoria de tarefas (marcadores)
create_labelcomname(por exemplo,Agent/Orders) eskip_inbox: true. Isso transforma o marcador em uma categoria: os e-mails recebidos que a recebem são arquivados e aparecem apenas no marcador, nunca na Caixa de entrada da pessoa.- Envie e-mails de tarefas com
send_email(ousend_batch) elabels: ["Agent/Orders"]. As respostas a essa conversa herdam o marcador automaticamente e não vão para a Caixa de entrada. - Para e-mails que começam fora das suas conversas, adicione uma regra de arquivamento:
create_label_rulecominbox_id(um endereço dedicado, comoorders@…),from,toousubject. Passeapply_to_existing: truepara arquivar e-mails já recebidos. - Trabalhe a categoria:
list_emailscomlabel: "Agent/Orders",direction: "in"eunread: true; leia comget_emailouget_thread, responda comsend_emailereply_to_email_ide usemark_emailcomread: truequando concluir. - Mova uma mensagem avulsa para dentro ou para fora com
label_email(add/remove). Adicionar o marcador de uma categoria a uma mensagem recebida também a arquiva. - Opcionalmente,
set_inbox_forwardingenvia uma cópia de tudo o que um endereço de recebimento recebe para outra caixa postal (o destino confirma antes por e-mail).
{
"name": "send_email",
"arguments": {
"from": "Orders <orders@example.com>",
"to": [
"customer@example.net"
],
"subject": "Order 1042: confirm delivery window",
"text": "Reply with a time that works.",
"labels": [
"Agent/Orders"
],
"idempotency_key": "order-1042-window"
}
}8. Anexos e templates
Anexe até 10 arquivos com attachments de send_email (cada um precisa de content_base64 ou de um file_path local; filename assume por padrão o nome-base do arquivo) em um plano pago. Para templates hospedados: create_template → update_template_draft → render_template para pré-visualizar com dados de exemplo → send_template_test (envia um teste real) → publish_template e, depois, envie com send_email ou send_batch usando template: {key, data} e exatamente um destinatário em to.
Resultados, paginação e erros
Uma chamada bem-sucedida retorna o objeto JSON da API como structuredContent e como bloco de texto JSON. Toda ferramenta list_* aceita limit (1–200, padrão 50) e offset, e adiciona um objeto pagination. Continue chamando com offset: pagination.next_offset enquanto has_more for true.
{
"data": [
"…"
],
"count": 50,
"pagination": {
"offset": 0,
"limit": 50,
"returned": 50,
"total": 180,
"has_more": true,
"next_offset": 50
}
}Uma chamada com falha retorna isError: true com um erro estruturado. Siga o remedy em vez de tentar novamente às cegas; só tente de novo quando retryable for true.
{
"error": {
"code": "trial_recipient_restricted",
"status": 402,
"message": "The integration trial can deliver only to your account email or an AWS SES simulator address",
"retryable": false,
"explanation": "This workspace is on the unpaid integration trial. Trial sends can be delivered only to the account owner's email address or an AWS SES simulator address.",
"remedy": "Send to the account email (get_account -> user.email) or a simulator address such as success@simulator.amazonses.com to test. To email anyone else, the account owner must activate a paid plan in the dashboard (Profile & Billing). Do not retry the same recipients."
}
}Campos de erro opcionais: request_id (informe-o ao suporte), retry_after_seconds, problems (lista de violações de schema para invalid_arguments) e idempotent_replayed (veja Idempotência).
Idempotência
send_email e send_batch aceitam idempotency_key (máx. 200 caracteres), enviado como o cabeçalho Idempotency-Key. Gere uma chave estável por mensagem lógica, por exemplo invoice-4812-receipt.
- Uma nova tentativa deve reutilizar a mesma chave E um corpo de requisição idêntico. A mesma chave com qualquer alteração (destinatário, assunto, corpo, cabeçalho, dados do template, até valores de argumentos) retorna
409 idempotency_conflict. - Mesma chave, mesmo corpo, original já concluído: o SendHQ retorna o resultado armazenado sem enviar de novo. É assim que você tenta novamente com segurança após um timeout ou
network_error. - Mesma chave enquanto o original ainda está em execução:
409 idempotency_in_progress, com nova tentativa possível após uma curta espera. - Uma nova mensagem lógica exige uma nova chave.
- Falhas armazenadas também são reproduzidas. Se a primeira tentativa falhou, tentar de novo com a mesma chave retorna essa mesma falha com
idempotent_replayed: trueeretryable: false. Verifiquelist_emails(direction: out) para confirmar que nada saiu, corrija a causa e envie com uma nova chave. - O servidor nunca repete um POST por conta própria. Apenas chamadas GET somente leitura são repetidas automaticamente (até 3 tentativas em erros de rede, 429 e 5xx).
send_emailcomattachmentsinline não pode receber umidempotency_key, porque executa várias requisições. Para envios de anexos seguros para novas tentativas:create_draft→upload_attachment→send_emailcomdraft_ideidempotency_key.
{
"name": "send_email",
"arguments": {
"from": "Acme <billing@example.com>",
"to": [
"owner@example.com"
],
"subject": "Receipt #4812",
"text": "Thanks for your payment.",
"idempotency_key": "receipt-4812"
}
}Limites de taxa e cotas
O SendHQ não publica um limite fixo de requisições por segundo para a API. Os limites que um agente realmente encontra são limites de uso, retornados como 429:
- Entregas mensais a destinatários por plano. Cada endereço em To, Cc e Bcc conta como uma entrega. Veja
get_account→usage.recipientDeliveriesvs.usage.emailQuotaMonth. - Destinatários diários por endereço De exato, definidos pelo estado de reputação desse remetente (
list_sender_reputation→dailyLimit, 2.000 por padrão nos planos pagos). - Teste de integração: 100 destinatários no total, apenas para o e-mail da conta ou endereços do simulador do SES.
- Anexos: no máximo 10 arquivos e 10 MB por mensagem; 10 GB de transferência de anexos ponderada por destinatário por mês nos planos pagos.
- Por requisição: To + Cc + Bcc até 100 endereços;
send_batchaté 100 mensagens. - Disjuntor de reputação: em uma janela móvel de 7 dias, bounces ou reclamações acima do limite reduzem o ritmo ou pausam um endereço De (
423 sender_paused). Ele se recupera automaticamente quando as taxas caem.
quota_exhausted não permite nova tentativa até que o período seja reiniciado ou o plano mude. rate_limited permite nova tentativa após retry_after_seconds; em envios, tente de novo com o mesmo idempotency_key e o corpo idêntico.
Catálogo de erros
code é estável; ramifique por ele e não por message.
| code | HTTP | Repetir? | O que significa e o que fazer |
|---|---|---|---|
invalid_arguments | — | não | Os argumentos falharam no JSON Schema da ferramenta localmente; nada chegou ao SendHQ. Corrija os campos listados em problems. |
auth_error | 401 | não | Chave de API ausente, revogada ou incorreta. Defina SENDHQ_API_KEY para o processo do servidor; uma pessoa cria as chaves no painel. |
trial_recipient_restricted | 402 | não | O teste de integração só pode entregar para o e-mail da conta ou para um endereço do simulador do SES. Envie para lá, ou o dono ativa um plano pago. |
payment_required | 402 | não | O recurso exige um plano pago (por exemplo, anexos). Envie sem ele ou faça upgrade. |
sender_domain_not_owned | 403 | não | O domínio De não está neste workspace. Use list_sending_identities ou add_domain. |
sender_domain_unverified | 403 | não | O domínio De ainda não foi verificado. get_domain, publique os registros que faltam, verify_domain. |
domain_limit_reached | 403 | não | Limite de domínios do plano atingido. Remova um domínio sem uso (com aprovação) ou faça upgrade. |
marketing_not_enabled | 403 | não | A classe de marketing não está habilitada para este domínio ou plano. Use transactional somente se a mensagem realmente for transacional. |
forbidden | 403 | não | A política não permite a operação. Ajuste a requisição. |
not_found | 404 | não | O ID não está neste workspace. Liste o recurso para encontrar o ID correto; restaure antes os templates arquivados. |
idempotency_conflict | 409 | não | Chave reutilizada com um corpo diferente. Reenvie exatamente o original ou use uma nova chave para uma nova mensagem. |
idempotency_in_progress | 409 | sim | A requisição original ainda está em execução. Aguarde e tente de novo com a mesma chave e o mesmo corpo. |
revision_conflict | 409 | não | O rascunho do template mudou desde que você o leu. get_template, faça o merge e salve de novo. |
complaint_suppression_locked | 409 | não | O destinatário reclamou. Nunca mais envie e-mail para ele. |
inbound_not_ready | 409 | não | O recebimento de e-mails de entrada não está pronto. setup_inbound, publique o MX, verify_inbound. |
conflict | 409 | não | O recurso já existe ou está no estado errado. Leia-o e ajuste. |
attachments_too_large | 413 | não | Mais de 10 arquivos ou 10 MB. Remova ou reduza os anexos. |
recipient_suppressed | 422 | não | Um destinatário teve hard bounce ou reclamou antes. Remova-o; veja list_blocked_recipients. |
recipient_unsubscribed | 422 | não | Um destinatário optou por não receber e-mails de marketing. Remova-o permanentemente. |
validation_failed | 422 | não | Conteúdo rejeitado, por exemplo dados de template que quebram o contrato de variáveis. Corrija a entrada. |
sender_paused | 423 | não | Este endereço De está pausado pelo disjuntor de bounces/reclamações de 7 dias. Pare, corrija a lista e aguarde a recuperação automática. |
quota_exhausted | 429 | não | Limite mensal, diário por remetente, de anexos ou do teste atingido. Verifique get_account; aguarde a renovação ou faça upgrade. |
rate_limited | 429 | sim | Reduza o ritmo; aguarde retry_after_seconds. Em envios: mesma chave, mesmo corpo. |
server_error | 5xx | sim | Falha temporária do SendHQ ou do provedor. Use backoff e tente de novo; em envios, com a mesma chave e o mesmo corpo. Se idempotent_replayed for true, use uma nova chave depois de confirmar que nada foi enviado. |
network_error | — | sim | Requisição ou resposta perdida. Tente de novo; em envios, o mesmo idempotency_key torna isso seguro. |
invalid_request | 400 | não | Requisição malformada. Leia message e corrija. |
tool_error | — | não | Falha local dentro do servidor MCP (por exemplo, um file_path ilegível). Leia message. |
Referência das ferramentas
Todas as ferramentas com sua classe de segurança, o endpoint REST que chamam, os parâmetros, o formato de retorno e um exemplo de objeto de params de tools/call. Os parâmetros são exatos: o servidor rejeita qualquer coisa que não esteja listada.
E-mails e threads: send_email, send_batch, list_emails, get_email, mark_email, delete_email, list_email_events, get_thread
Marcadores e regras de arquivamento automático: list_labels, get_label, create_label, update_label, delete_label, create_label_rule, delete_label_rule, label_email
Rascunhos, anexos e identidades de remetente: list_sending_identities, create_draft, list_drafts, get_draft, update_draft, delete_draft, upload_attachment, download_attachment, delete_attachment
Templates hospedados: list_templates, create_template, get_template, update_template_draft, create_template_draft, render_template, send_template_test, publish_template, archive_template, restore_template
Domínios e DNS: list_domains, get_domain, add_domain, verify_domain, delete_domain, get_dns_provider, get_domain_connect_link
E-mail de entrada: setup_inbound, verify_inbound, list_inboxes, get_inbox, create_inbox, update_inbox, set_inbox_forwarding, delete_inbox
Entregabilidade, bounces e supressões: deliverability_stats, list_sender_reputation, list_suppressions, remove_suppression, list_blocked_recipients
Conta, uso, análises e chaves: get_account, get_analytics, list_api_keys, get_service_health
Nenhuma ferramenta corresponde a este filtro.
E-mails e threads
send_emailEnviar um e-mail
ENVIA E-MAIL REAL. Envia uma mensagem de um domínio verificado: html/texto bruto, um template hospedado publicado, uma resposta em uma thread existente ou uma mensagem com anexos. Passe idempotency_key para que uma nova tentativa não envie duas vezes; a nova tentativa deve reutilizar a mesma chave E uma requisição idêntica, caso contrário o SendHQ retorna 409. attachments é uma conveniência que cria um rascunho, faz o upload de cada arquivo e envia com esse rascunho; não pode ser combinado com idempotency_key nem com draft_id (use create_draft + upload_attachment + send_email com draft_id para envios de anexos seguros para novas tentativas). Workspaces sem plano pago (teste de integração) só podem entregar para o e-mail da conta ou para um endereço do simulador do AWS SES, e não podem enviar anexos.
Informe pelo menos um destes: html, text, template.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
from | string | sim | Remetente, por exemplo Acme <hello@example.com>. O domínio precisa estar verificado neste workspace (veja list_sending_identities). (máx. 998 caracteres) |
to | string[] | sim | Destinatários. Cada entrada é um endereço, opcionalmente com nome de exibição. To+cc+bcc podem somar no máximo 100; cada destino consome um crédito de entrega. (1–100 itens) |
cc | string[] | não | Destinatários em cópia. (0–100 itens) |
bcc | string[] | não | Destinatários em cópia oculta. (0–100 itens) |
subject | string | não | Linha de assunto. Omita ao enviar um template. (máx. 998 caracteres) |
text | string | não | Corpo em texto simples. Informe text, html ou template. |
html | string | não | Corpo em HTML. O SendHQ o sanitiza e gera o texto quando text é omitido. |
reply_to | string | não | Endereço de Reply-To. |
headers | object | não | Cabeçalhos personalizados seguros extras (valores em string), por exemplo {"X-Entity-Ref-ID": "123"}. Cabeçalhos de roteamento como From/To/Message-ID são controlados pelo SendHQ. |
message_class | string | não | transactional (padrão) ou marketing. Marketing exige um plano ou domínio com marketing habilitado e adiciona o tratamento de descadastro. (um de transactional, marketing) |
reply_to_email_id | string | não | Responde dentro de uma conversa existente: o ID em_… da mensagem que está sendo respondida. O SendHQ define In-Reply-To/References e a thread. |
thread_id | string | não | ID explícito da thread em que a mensagem será arquivada. |
draft_id | string | não | Envia os anexos de um rascunho armazenado com esta mensagem (dr_…). O rascunho é excluído após um envio bem-sucedido. |
template | object | não | Envia um template hospedado publicado em vez de html/texto bruto. Exige exatamente um destinatário em to e nenhum cc/bcc; o template fornece o assunto. Informe pelo menos um destes: id, key. |
template.id | string | não | ID do template (tmpl_…). Informe id ou key. |
template.key | string | não | Chave do template, como account-welcome. Informe id ou key. |
template.version_id | string | não | ID de release publicada opcional (tmplv_…). Por padrão, é a release publicada atual. |
template.data | object | não | Valores das variáveis tipadas do template. |
labels | string[] | não | Nomes de marcadores ou IDs lbl_… em que esta mensagem será arquivada. Nomes desconhecidos são criados. As respostas na conversa herdam os marcadores, e um marcador de categoria (skip_inbox) mantém essas respostas fora da Caixa de entrada. Máx. 10. (0–10 itens) |
idempotency_key | string | não | Cabeçalho Idempotency-Key (máx. 200 caracteres). Reutilize-o apenas para tentar de novo exatamente esta requisição. (máx. 200 caracteres) |
attachments | object[] | não | Arquivos a anexar (máx. 10 arquivos, 10 MB no total). Cada um precisa de content_base64 (mais filename) ou de um file_path local. (0–10 itens) Informe pelo menos um destes: content_base64, file_path. |
attachments[].filename | string | não | Nome do arquivo exibido ao destinatário. Obrigatório com content_base64; por padrão, é o nome-base de file_path. (máx. 255 caracteres) |
attachments[].content_type | string | não | Tipo MIME, por exemplo application/pdf. O padrão é application/octet-stream. |
attachments[].content_base64 | string | não | Conteúdo do arquivo em base64 padrão. |
attachments[].file_path | string | não | Caminho absoluto de um arquivo local legível pelo processo do servidor MCP. |
{
"name": "send_email",
"arguments": {
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"subject": "Your export is ready",
"text": "Download it from your dashboard.",
"idempotency_key": "export-ready-42"
}
}send_batchEnviar um lote de e-mails individualizados
ENVIA E-MAIL REAL. Envia de 1 a 100 mensagens independentes em uma única requisição (use para personalização de template por destinatário). Cada item tem o mesmo formato de send_email (sem attachments/idempotency_key). Os itens têm sucesso ou falha individualmente: HTTP 207 significa sucesso parcial; inspecione data[i].ok e data[i].error de cada um. Um único idempotency_key cobre todo o corpo do lote.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
emails | object[] | sim | Mensagens a enviar. (1–100 itens) Informe pelo menos um destes: html, text, template. |
idempotency_key | string | não | Idempotency-Key para todo o lote (máx. 200 caracteres). (máx. 200 caracteres) |
{
"name": "send_batch",
"arguments": {
"emails": [
{
"from": "Acme <hello@example.com>",
"to": [
"owner@example.com"
],
"template": {
"key": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}
],
"idempotency_key": "welcome-batch-2026-09-26"
}
}list_emailsListar e pesquisar e-mails
Lista e-mails enviados (direction: out) e recebidos (direction: in) do mais novo para o mais antigo, com filtros. Os e-mails recebidos são classificados: leia a caixa de entrada da pessoa com direction: in, archived: false, category: primary; faça a triagem com important: true; o spam fica oculto, a menos que category: spam ou include_spam: true. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
direction | string | não | in para recebidos, out para enviados. (um de in, out) |
status | string | não | Filtro de status, por exemplo queued, sent, delivered, bounced, complained, failed. |
domain | string | não | Apenas mensagens deste domínio, ou de uma lista de domínios separados por vírgula (corresponde a qualquer um). |
inbox_id | string | não | Apenas mensagens recebidas por esta caixa de entrada (inb_…). |
label | string | não | Apenas mensagens com este marcador: um ID de marcador lbl_… ou o nome exato, ou uma lista separada por vírgula (corresponde a qualquer um). Use list_labels para ver as pastas. |
archived | boolean | não | false = a visualização da Caixa de entrada (e-mails recebidos não arquivados), true = apenas arquivados. Omita para todos os e-mails. |
category | string | não | primary (pessoas), updates (newsletters, envios em massa, automáticos) ou spam; ou uma lista separada por vírgula. O spam fica oculto, a menos que solicitado. |
important | boolean | não | true = apenas mensagens marcadas como importantes (respostas a conversas que você iniciou e remetentes marcados como importantes). |
include_spam | boolean | não | Inclui spam nos resultados (para pesquisas em todas as pastas). |
from | string | não | O endereço do remetente contém este valor. |
to | string | não | O endereço do destinatário contém este valor. |
unread | boolean | não | true = apenas não lidas, false = apenas lidas. |
after | string | não | Timestamp ISO-8601; apenas mensagens criadas depois dele. (date-time) |
before | string | não | Timestamp ISO-8601; apenas mensagens criadas antes dele. (date-time) |
query | string | não | Pesquisa de texto livre em assuntos, corpos, endereços de remetente/destinatário e nomes de arquivos de anexos. (máx. 200 caracteres) |
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_emails",
"arguments": {
"direction": "in",
"unread": true,
"limit": 25
}
}get_emailObter um e-mail
Recupera uma mensagem com cabeçalhos, corpo html/texto, status, metadados da thread e metadados dos anexos (baixe os bytes com download_attachment).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email_id | string | sim | ID do e-mail (começa com em_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "get_email",
"arguments": {
"email_id": "em_123"
}
}mark_emailMarcar como lido, arquivado, spam ou importante
Atualiza uma mensagem: read, archived, category (primary, updates, spam; apenas e-mails recebidos) e important. Denunciar spam ou marcar como importante ensina o SendHQ sobre esse remetente para os próximos e-mails; passe learn: false para alterar apenas esta mensagem. Informe pelo menos um campo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email_id | string | sim | ID do e-mail (começa com em_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
read | boolean | não | true = lida, false = não lida. |
archived | boolean | não | true = arquivar (não vai para a Caixa de entrada), false = mover de volta para a Caixa de entrada. |
category | string | não | Move uma mensagem recebida para primary, updates ou spam. (um de primary, updates, spam) |
important | boolean | não | Marca ou desmarca a mensagem como importante. |
learn | boolean | não | false = não memorizar este veredito para o remetente (padrão true). |
{
"name": "mark_email",
"arguments": {
"email_id": "em_123",
"read": true
}
}delete_emailExcluir um e-mail
DESTRUTIVA: exclui permanentemente do SendHQ uma mensagem retida e seus anexos armazenados. Não recolhe uma mensagem que já foi entregue.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email_id | string | sim | ID do e-mail (começa com em_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "delete_email",
"arguments": {
"email_id": "em_123"
}
}list_email_eventsListar eventos de entrega de um e-mail
Eventos do provedor para uma mensagem enviada: delivery, bounce, complaint, reject, open, click. Esta é a evidência de que uma mensagem foi entregue ou do motivo da falha. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email_id | string | sim | ID do e-mail (começa com em_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_email_events",
"arguments": {
"email_id": "em_123"
}
}get_threadObter uma conversa
Recupera todas as mensagens de uma conversa em ordem cronológica (enviadas e recebidas), cada uma com os metadados dos anexos.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
thread_id | string | sim | ID da thread (em geral, o ID em_… da primeira mensagem; veja threadId em qualquer e-mail). (máx. 128 caracteres) |
{
"name": "get_thread",
"arguments": {
"thread_id": "em_123"
}
}Marcadores e regras de arquivamento automático
list_labelsListar marcadores
Lista os marcadores (pastas) do workspace com as contagens total e de não lidos e suas regras de arquivamento automático. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_labels",
"arguments": {}
}get_labelObter um marcador
Recupera um marcador com contagens e regras de arquivamento automático.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
label_id | string | sim | ID do marcador (começa com lbl_) ou o nome exato do marcador. (máx. 128 caracteres) |
{
"name": "get_label",
"arguments": {
"label_id": "Billing"
}
}create_labelCriar um marcador
Cria um marcador no estilo de pasta. Defina skip_inbox: true para transformá-lo em uma categoria que pertence a um agente: envie com labels: [name] e as respostas são arquivadas no marcador e mantidas fora da Caixa de entrada. Regras opcionais de arquivamento automático arquivam e-mails novos enviados/recebidos (todas as condições de uma regra precisam corresponder). Defina apply_to_existing para arquivar também os e-mails retidos.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome do marcador, por exemplo Billing ou Clients/Acme. Único por workspace (sem diferenciar maiúsculas de minúsculas). (máx. 64 caracteres) |
color | string | não | Cor hexadecimal, como #1a73e8. Opcional. |
skip_inbox | boolean | não | Modo categoria: os e-mails recebidos que recebem este marcador (por regra, por resposta a uma conversa enviada com este marcador ou manualmente) são arquivados e aparecem apenas no marcador, não na Caixa de entrada. |
rules | object[] | não | Regras opcionais de arquivamento automático (máx. 20). Cada uma precisa de pelo menos um entre inbox_id, from, to, subject. (0–20 itens) |
rules[].direction | string | não | Apenas e-mails in (recebidos) ou out (enviados). Omita para ambos. (um de in, out) |
rules[].inbox_id | string | não | Apenas e-mails recebidos por esta caixa de entrada (inb_…). Arquiva cada endereço de recebimento em sua própria pasta. |
rules[].from | string | não | O remetente contém este texto (sem diferenciar maiúsculas de minúsculas), por exemplo @stripe.com. (máx. 200 caracteres) |
rules[].to | string | não | To/Cc contém este texto (sem diferenciar maiúsculas de minúsculas). (máx. 200 caracteres) |
rules[].subject | string | não | O assunto contém este texto (sem diferenciar maiúsculas de minúsculas). (máx. 200 caracteres) |
rules[].skip_inbox | boolean | não | Arquiva os e-mails recebidos correspondentes para que apareçam apenas na pasta do marcador, não na Caixa de entrada. |
apply_to_existing | boolean | não | Arquiva também os e-mails já retidos que correspondem às regras. |
{
"name": "create_label",
"arguments": {
"name": "Agent/Orders",
"skip_inbox": true,
"rules": [
{
"from": "@stripe.com"
}
]
}
}update_labelRenomear, mudar a cor ou transformar um marcador em categoria
Renomeia um marcador, muda sua cor ou alterna o modo categoria (skip_inbox). Ativar o modo categoria arquiva os e-mails recebidos que já estão no marcador.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
label_id | string | sim | ID do marcador (começa com lbl_) ou o nome exato do marcador. (máx. 128 caracteres) |
name | string | não | Novo nome. (máx. 64 caracteres) |
color | string | não | Nova cor hexadecimal. |
skip_inbox | boolean | não | Modo categoria: os e-mails recebidos que recebem este marcador (por regra, por resposta a uma conversa enviada com este marcador ou manualmente) são arquivados e aparecem apenas no marcador, não na Caixa de entrada. |
{
"name": "update_label",
"arguments": {
"label_id": "lbl_123",
"name": "Finance/Billing"
}
}delete_labelExcluir um marcador
DESTRUTIVA: exclui um marcador e suas regras. O e-mail em si é mantido; ele apenas perde este marcador.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
label_id | string | sim | ID do marcador (começa com lbl_) ou o nome exato do marcador. (máx. 128 caracteres) |
{
"name": "delete_label",
"arguments": {
"label_id": "lbl_123"
}
}create_label_ruleAdicionar uma regra de arquivamento automático
Adiciona uma regra a um marcador para que os novos e-mails correspondentes sejam arquivados automaticamente. Todas as condições definidas precisam corresponder. Use inbox_id para dar a um endereço de recebimento a própria pasta; adicione skip_inbox para mantê-lo fora da Caixa de entrada.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
label_id | string | sim | ID do marcador (começa com lbl_) ou o nome exato do marcador. (máx. 128 caracteres) |
direction | string | não | Apenas e-mails in (recebidos) ou out (enviados). Omita para ambos. (um de in, out) |
inbox_id | string | não | Apenas e-mails recebidos por esta caixa de entrada (inb_…). Arquiva cada endereço de recebimento em sua própria pasta. |
from | string | não | O remetente contém este texto (sem diferenciar maiúsculas de minúsculas), por exemplo @stripe.com. (máx. 200 caracteres) |
to | string | não | To/Cc contém este texto (sem diferenciar maiúsculas de minúsculas). (máx. 200 caracteres) |
subject | string | não | O assunto contém este texto (sem diferenciar maiúsculas de minúsculas). (máx. 200 caracteres) |
skip_inbox | boolean | não | Arquiva os e-mails recebidos correspondentes para que apareçam apenas na pasta do marcador, não na Caixa de entrada. |
apply_to_existing | boolean | não | Arquiva também os e-mails já retidos que correspondem. |
{
"name": "create_label_rule",
"arguments": {
"label_id": "Billing",
"inbox_id": "inb_123",
"skip_inbox": true
}
}delete_label_ruleExcluir uma regra de arquivamento automático
DESTRUTIVA: remove uma regra de arquivamento automático. Os e-mails já arquivados mantêm o marcador.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
label_id | string | sim | ID do marcador (começa com lbl_) ou o nome exato do marcador. (máx. 128 caracteres) |
rule_id | string | sim | ID da regra (começa com lrule_), obtido em get_label. (máx. 128 caracteres) |
{
"name": "delete_label_rule",
"arguments": {
"label_id": "lbl_123",
"rule_id": "lrule_123"
}
}label_emailAdicionar ou remover marcadores de um e-mail
Move uma mensagem entre pastas: adiciona e/ou remove marcadores por nome ou por ID lbl_…. Nomes desconhecidos em add são criados, a menos que create seja false.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email_id | string | sim | ID do e-mail (começa com em_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
add | string[] | não | Marcadores a adicionar. (0–10 itens) |
remove | string[] | não | Marcadores a remover. (0–10 itens) |
create | boolean | não | Cria os marcadores desconhecidos em add (padrão true). |
{
"name": "label_email",
"arguments": {
"email_id": "em_123",
"add": [
"Billing"
],
"remove": [
"Support"
]
}
}Rascunhos, anexos e identidades de remetente
list_sending_identitiesListar identidades de remetente verificadas
Endereços e domínios a partir dos quais este workspace pode enviar agora (domínios verificados, seu De padrão e endereços de caixas de entrada ativas). Chame antes de send_email para escolher um from válido.
Sem parâmetros.
{
"name": "list_sending_identities",
"arguments": {}
}create_draftCriar um rascunho
Cria um rascunho do compositor. Os rascunhos guardam anexos: crie um rascunho, use upload_attachment e depois send_email com draft_id. Não envia nada.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
from | string | não | Endereço de remetente em um domínio verificado (pode ficar vazio durante a edição). |
to | string[] | não | Destinatários. (0–100 itens) |
cc | string[] | não | Destinatários em cópia. (0–100 itens) |
bcc | string[] | não | Destinatários em cópia oculta. (0–100 itens) |
subject | string | não | Linha de assunto. (máx. 998 caracteres) |
html | string | não | Corpo em HTML. |
text | string | não | Corpo em texto simples. |
reply_to_email_id | string | não | ID do e-mail ao qual este rascunho responde. |
thread_id | string | não | ID da thread à qual este rascunho pertence. |
{
"name": "create_draft",
"arguments": {
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice"
}
}list_draftsListar rascunhos
Lista os rascunhos do compositor, do atualizado mais recentemente para o mais antigo. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_drafts",
"arguments": {}
}get_draftObter um rascunho
Recupera um rascunho com os metadados dos anexos.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
draft_id | string | sim | ID do rascunho (começa com dr_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "get_draft",
"arguments": {
"draft_id": "dr_123"
}
}update_draftSubstituir o conteúdo do rascunho
Substitui o conteúdo e os destinatários de um rascunho. É uma substituição completa: os campos omitidos são apagados; portanto, leia get_draft primeiro e envie todos os campos que quiser manter. Os anexos não são afetados.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
draft_id | string | sim | ID do rascunho (começa com dr_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
from | string | não | Endereço de remetente em um domínio verificado (pode ficar vazio durante a edição). |
to | string[] | não | Destinatários. (0–100 itens) |
cc | string[] | não | Destinatários em cópia. (0–100 itens) |
bcc | string[] | não | Destinatários em cópia oculta. (0–100 itens) |
subject | string | não | Linha de assunto. (máx. 998 caracteres) |
html | string | não | Corpo em HTML. |
text | string | não | Corpo em texto simples. |
reply_to_email_id | string | não | ID do e-mail ao qual este rascunho responde. |
thread_id | string | não | ID da thread à qual este rascunho pertence. |
{
"name": "update_draft",
"arguments": {
"draft_id": "dr_123",
"from": "hello@example.com",
"to": [
"owner@example.com"
],
"subject": "Invoice (updated)",
"text": "Attached."
}
}delete_draftDescartar um rascunho
DESTRUTIVA: descarta um rascunho e exclui permanentemente seus anexos armazenados.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
draft_id | string | sim | ID do rascunho (começa com dr_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "delete_draft",
"arguments": {
"draft_id": "dr_123"
}
}upload_attachmentFazer upload de um anexo para um rascunho
Faz o upload de um arquivo para um rascunho (máx. 10 arquivos e 10 MB no total por mensagem). Informe content_base64 ou um file_path local. Os anexos exigem um plano pago no momento do envio.
Informe pelo menos um destes: content_base64, file_path.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
draft_id | string | sim | ID do rascunho (começa com dr_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
filename | string | não | Nome do arquivo exibido ao destinatário. Por padrão, é o nome-base de file_path. (máx. 255 caracteres) |
content_type | string | não | Tipo MIME, por exemplo application/pdf. O padrão é application/octet-stream. |
content_base64 | string | não | Conteúdo do arquivo em base64 padrão. |
file_path | string | não | Caminho absoluto de um arquivo local legível pelo processo do servidor MCP. |
{
"name": "upload_attachment",
"arguments": {
"draft_id": "dr_123",
"filename": "invoice.pdf",
"content_type": "application/pdf",
"file_path": "/tmp/invoice.pdf"
}
}download_attachmentBaixar um anexo
Baixa um anexo privado (enviado, recebido ou de rascunho). Retorna o conteúdo em base64 ou grava o arquivo quando save_to_path é definido (recusa sobrescrever, a menos que overwrite seja true).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
attachment_id | string | sim | ID do anexo (começa com att_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
save_to_path | string | não | Caminho local absoluto opcional para gravar o arquivo em vez de retornar base64. |
overwrite | boolean | não | Permite substituir um arquivo existente em save_to_path. O padrão é false. |
{
"name": "download_attachment",
"arguments": {
"attachment_id": "att_123",
"save_to_path": "/tmp/invoice.pdf"
}
}delete_attachmentExcluir um anexo
DESTRUTIVA: exclui permanentemente um anexo armazenado (por exemplo, para remover um arquivo de um rascunho antes de enviar).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
attachment_id | string | sim | ID do anexo (começa com att_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "delete_attachment",
"arguments": {
"attachment_id": "att_123"
}
}Templates hospedados
list_templatesListar templates hospedados
Lista os templates de e-mail hospedados com estado de publicação e uso. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
lifecycle | string | não | active (padrão), archived ou all. (um de active, archived, all) |
query | string | não | Pesquisa por nome ou chave. (máx. 120 caracteres) |
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_templates",
"arguments": {
"lifecycle": "active"
}
}create_templateCriar um template hospedado
Cria um template com um rascunho editável, opcionalmente a partir de um modelo inicial (welcome, reset, receipt ou blank). Publique-o antes de enviar por chave.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome legível. (máx. 120 caracteres) |
key | string | não | Chave de envio estável: letras minúsculas, números e hifens; começa com uma letra (2–64 caracteres). Derivada do nome quando omitida. |
starter | string | não | Conteúdo inicial. (um de blank, welcome, reset, receipt) |
{
"name": "create_template",
"arguments": {
"name": "Account welcome",
"key": "account-welcome",
"starter": "welcome"
}
}get_templateObter um template
Recupera o rascunho atual de um template (com revision), a release publicada ativa, o histórico de releases e o uso. Aceita ID ou chave.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
template_id | string | sim | ID do template (tmpl_…) ou chave. (máx. 128 caracteres) |
{
"name": "get_template",
"arguments": {
"template_id": "account-welcome"
}
}update_template_draftSalvar um rascunho de template
Salva o rascunho editável do template usando concorrência otimista: passe o revision atual obtido em get_template (409 significa que outra pessoa salvou primeiro; leia de novo e tente novamente). É uma substituição completa do conteúdo do rascunho: os campos omitidos são apagados; portanto, envie todos os campos que quiser manter. Use placeholders {{variable}}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
template_id | string | sim | ID ou chave do template. (máx. 128 caracteres) |
revision | integer | sim | Revisão atual do rascunho, obtida em get_template. (1–…) |
name | string | não | Nome do template. (máx. 120 caracteres) |
subject_template | string | não | Assunto com placeholders. (máx. 998 caracteres) |
preheader_template | string | não | Texto de pré-visualização. (máx. 240 caracteres) |
html_template | string | não | Corpo em HTML com placeholders. |
text_template | string | não | Corpo em texto simples com placeholders. |
from | string | não | Remetente padrão para os envios deste template. |
reply_to | string | não | Reply-To padrão. |
variables | object[] | não | Contrato de variáveis tipadas. Cada item: {key (minúsculas/sublinhados), label, type: text|number|url|boolean, required (padrão true), fallback, description}. |
variables[].key | string | sim | |
variables[].label | string | não | |
variables[].type | string | não | (um de text, number, url, boolean) |
variables[].required | boolean | não | |
variables[].fallback | any | não | |
variables[].description | string | não | |
sample_data | object | não | Valores de exemplo usados em pré-visualizações e testes. |
{
"name": "update_template_draft",
"arguments": {
"template_id": "account-welcome",
"revision": 3,
"name": "Account welcome",
"subject_template": "Welcome, {{first_name}}",
"text_template": "Hi {{first_name}}",
"variables": [
{
"key": "first_name",
"type": "text",
"required": true
}
],
"sample_data": {
"first_name": "Asha"
}
}
}create_template_draftIniciar um novo rascunho a partir da release publicada
Cria um novo rascunho editável copiado da release publicada atual (409 se já existir um rascunho ou se nada estiver publicado).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
template_id | string | sim | ID ou chave do template. (máx. 128 caracteres) |
{
"name": "create_template_draft",
"arguments": {
"template_id": "account-welcome"
}
}render_templateRenderizar uma pré-visualização de template
Renderiza a saída exata do servidor (subject, html, text) para o rascunho, a release publicada ou uma versão específica com os dados informados. Não envia. Retorna 422 com findings quando os dados violam o contrato de variáveis.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
template_id | string | sim | ID ou chave do template. (máx. 128 caracteres) |
version_id | string | não | ID de versão opcional; por padrão, usa o rascunho e, depois, a release publicada. |
data | object | não | Valores das variáveis; por padrão, os dados de exemplo da versão. |
{
"name": "render_template",
"arguments": {
"template_id": "account-welcome",
"data": {
"first_name": "Asha"
}
}
}send_template_testEnviar um e-mail de teste de template
ENVIA E-MAIL REAL. Envia um snapshot do rascunho (ou de uma versão informada) com o prefixo [Test] para os destinatários informados. Conta no uso; workspaces em teste só podem enviar para o e-mail da conta ou para um endereço do simulador do SES.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
template_id | string | sim | ID ou chave do template. (máx. 128 caracteres) |
to | string[] | sim | Destinatários do teste. (1–100 itens) |
from | string | não | Remetente em um domínio verificado; por padrão, o De do template. |
version_id | string | não | ID de versão opcional. |
data | object | não | Valores das variáveis; por padrão, os dados de exemplo. |
{
"name": "send_template_test",
"arguments": {
"template_id": "account-welcome",
"to": [
"owner@example.com"
]
}
}publish_templatePublicar uma release de template
Publica o rascunho atual como uma release imutável que send_email com template.key usará. Falha com 422 e findings em caso de erros de validação, ou com 409 se quebrasse o contrato de variáveis ativo de um template já usado em produção.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
template_id | string | sim | ID ou chave do template. (máx. 128 caracteres) |
{
"name": "publish_template",
"arguments": {
"template_id": "account-welcome"
}
}archive_templateArquivar um template
Interrompe novos envios que usam este template (o histórico é mantido; reversível com restore_template). Qualquer integração que envie com esta chave passará a falhar com 404.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
template_id | string | sim | ID ou chave do template. (máx. 128 caracteres) |
{
"name": "archive_template",
"arguments": {
"template_id": "account-welcome"
}
}restore_templateRestaurar um template arquivado
Torna um template arquivado ativo de novo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
template_id | string | sim | ID ou chave do template. (máx. 128 caracteres) |
{
"name": "restore_template",
"arguments": {
"template_id": "account-welcome"
}
}Domínios e DNS
list_domainsListar domínios
Lista os domínios de envio com setup_status agregado (verified | checking | pending), estado do DNS por registro e status de entrada. Pode ser lento: domínios não verificados são verificados de novo em tempo real. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_domains",
"arguments": {}
}get_domainObter os detalhes de configuração de um domínio
Recupera um domínio com os registros DNS exatos a publicar (type, name, value), o estado em tempo real de cada registro em dois resolvedores públicos, dns_issues com correções e o status de entrada.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain_id | string | sim | ID do domínio (começa com dom_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "get_domain",
"arguments": {
"domain_id": "dom_123"
}
}add_domainAdicionar um domínio de envio
Registra um domínio que você controla para envio. Retorna os registros DNS (CNAMEs de DKIM Easy do SES) que o dono precisa publicar. Não altera o DNS. Conta no limite de domínios do plano.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | sim | Nome de domínio simples, por exemplo example.com ou mail.example.com. (máx. 253 caracteres) |
default_from | string | não | Endereço de remetente padrão opcional neste domínio. |
{
"name": "add_domain",
"arguments": {
"name": "example.com"
}
}verify_domainVerificar um domínio
Executa agora uma verificação em tempo real do SES/DNS. É seguro repetir; consulte a cada 30–60 s após alterações de DNS (a propagação pode levar de minutos a horas). O envio é permitido quando o status é verified.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain_id | string | sim | ID do domínio (começa com dom_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "verify_domain",
"arguments": {
"domain_id": "dom_123"
}
}delete_domainExcluir um domínio
DESTRUTIVA: remove o domínio do workspace, inclusive sua rota de recebimento de entrada. Os envios a partir dele passam a falhar imediatamente. Não exclui registros DNS no seu provedor de DNS.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain_id | string | sim | ID do domínio (começa com dom_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "delete_domain",
"arguments": {
"domain_id": "dom_123"
}
}get_dns_providerDetectar o provedor de DNS e os hosts dos registros
Detecta o provedor de DNS autoritativo do domínio e retorna o host relativo a digitar nesse provedor para cada registro, o registro DMARC recomendado, orientações de MX de entrada e se a configuração com um clique (Domain Connect) está disponível.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain_id | string | sim | ID do domínio (começa com dom_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "get_dns_provider",
"arguments": {
"domain_id": "dom_123"
}
}get_domain_connect_linkObter um link de configuração de DNS com um clique
Quando get_dns_provider informa providers.domainConnect.available, cria uma URL de consentimento assinada. Entregue-a a uma pessoa: ela a abre e aprova a alteração de DNS no provedor. Nada muda até que ela aprove. 409 se não houver suporte.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain_id | string | sim | ID do domínio (começa com dom_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "get_domain_connect_link",
"arguments": {
"domain_id": "dom_123"
}
}E-mail de entrada
setup_inboundHabilitar o recebimento de e-mails de entrada em um domínio
Provisiona o recebimento de entrada do SES para um domínio verificado. Usa o domínio raiz quando ele não tem MX conflitante; caso contrário, inbound.<domain>. Retorna o registro MX que o dono precisa publicar; não edita o DNS.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain_id | string | sim | ID do domínio (começa com dom_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "setup_inbound",
"arguments": {
"domain_id": "dom_123"
}
}verify_inboundVerificar o MX de entrada
Verifica de novo o registro MX de entrada. O status passa a ready quando os dois resolvedores públicos o enxergam.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain_id | string | sim | ID do domínio (começa com dom_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "verify_inbound",
"arguments": {
"domain_id": "dom_123"
}
}list_inboxesListar endereços de entrada
Lista os endereços de recebimento, opcionalmente de um domínio. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain_id | string | não | Filtro opcional por ID de domínio. |
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_inboxes",
"arguments": {
"domain_id": "dom_123"
}
}get_inboxObter uma caixa de entrada
Recupera um endereço de entrada.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
inbox_id | string | sim | ID da caixa de entrada (começa com inb_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "get_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}create_inboxCriar um endereço de entrada
Cria um endereço como support@<receiving domain> em um domínio cujo status de entrada seja ready (execute antes setup_inbound e verify_inbound). Os e-mails recebidos aparecem em list_emails com direction in.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain_id | string | sim | ID do domínio (começa com dom_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
local_part | string | sim | Parte antes do @, por exemplo support. (máx. 64 caracteres) |
name | string | não | Nome de exibição opcional. |
{
"name": "create_inbox",
"arguments": {
"domain_id": "dom_123",
"local_part": "support",
"name": "Support"
}
}update_inboxRenomear, ativar ou desativar uma caixa de entrada
Renomeia uma caixa de entrada ou define seu status como active / disabled.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
inbox_id | string | sim | ID da caixa de entrada (começa com inb_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
name | string | não | Novo nome de exibição. |
status | string | não | Novo status. (um de active, disabled) |
{
"name": "update_inbox",
"arguments": {
"inbox_id": "inb_123",
"status": "disabled"
}
}set_inbox_forwardingEncaminhar uma caixa de entrada para outro endereço
ENVIA E-MAIL REAL ao encaminhar para alguém que não seja o dono da conta: define para onde os e-mails recebidos de uma caixa de entrada são encaminhados. O endereço do próprio dono é ativado imediatamente; qualquer outro endereço recebe um e-mail de confirmação e o encaminhamento permanece pending até que alguém de lá confirme. Passe forward_to: null para desativar o encaminhamento. As cópias encaminhadas vêm do endereço da caixa de entrada, com o remetente original como Reply-To.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
inbox_id | string | sim | ID da caixa de entrada (começa com inb_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
forward_to | string,null | sim | Endereço de e-mail de destino do encaminhamento, ou null para desativá-lo. (máx. 254 caracteres) |
{
"name": "set_inbox_forwarding",
"arguments": {
"inbox_id": "inb_123",
"forward_to": "team@example.net"
}
}delete_inboxExcluir uma caixa de entrada
DESTRUTIVA: exclui um endereço de entrada. Os e-mails já recebidos são retidos; os novos e-mails para o endereço deixam de ser arquivados nele.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
inbox_id | string | sim | ID da caixa de entrada (começa com inb_), conforme retornado por uma ferramenta de listagem ou criação. (máx. 128 caracteres) |
{
"name": "delete_inbox",
"arguments": {
"inbox_id": "inb_123"
}
}Entregabilidade, bounces e supressões
deliverability_statsObter estatísticas de entrega dos últimos 30 dias
Totais de 30 dias de todo o workspace: sent, delivery, bounce, complaint, reject, open, click e deliveryRate (%).
Sem parâmetros.
{
"name": "deliverability_stats",
"arguments": {}
}list_sender_reputationListar a reputação do remetente
Estado de reputação por endereço De exato: active, throttled (limite diário menor) ou paused (os envios retornam 423), com o motivo e o limite diário. Verifique isto quando os envios falharem com 423 ou 429. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_sender_reputation",
"arguments": {}
}list_suppressionsListar supressões
Lista de supressão do workspace: destinatários bloqueados após um bounce permanente ou uma reclamação de spam. Os envios para eles falham com 422. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_suppressions",
"arguments": {}
}remove_suppressionRemover uma supressão por bounce
DESTRUTIVA (enfraquece um bloqueio de segurança): remove uma supressão por bounce para que o endereço possa receber e-mails de novo. Faça isso somente quando uma pessoa confirmar que o endereço agora é válido. Supressões por reclamação não podem ser removidas (409).
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | sim | Endereço do destinatário suprimido. (máx. 320 caracteres) |
{
"name": "remove_suppression",
"arguments": {
"email": "fixed-mailbox@example.net"
}
}list_blocked_recipientsListar destinatários bloqueados
Todos os destinatários que o SendHQ vai recusar: bounces, reclamações e descadastros de marketing por domínio, com um resumo por tipo. Lê até os 500 mais recentes. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_blocked_recipients",
"arguments": {}
}Conta, uso, análises e chaves
get_accountObter conta, uso e cobrança
E-mail do dono da conta, plano/nível de acesso, entregas a destinatários no período atual usadas vs. cota, domínios usados vs. limite, transferência de anexos, resumo de reputação, estado da assinatura, planos publicados e contagens do workspace. Use para verificar a cota restante ou para quem o teste pode entregar (o e-mail da conta).
Sem parâmetros.
{
"name": "get_account",
"arguments": {}
}get_analyticsObter análises de envio
Análises do painel dos últimos 7, 30 ou 90 dias: totais de enviados/recebidos/entregues/bounces/bloqueados/abertos/cliques/reclamações, uma linha do tempo diária, os principais domínios de envio e os principais assuntos.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
days | integer | não | Janela em dias: 7, 30 (padrão) ou 90. (um de 7, 30, 90) |
{
"name": "get_analytics",
"arguments": {
"days": 30
}
}list_api_keysListar metadados de chaves de API
Lista nomes de chaves de API, prefixos não secretos e horários do último uso. Somente leitura: este servidor MCP não pode criar, rotacionar nem revogar chaves; uma pessoa faz isso no painel. Paginado: o resultado inclui pagination {offset, limit, returned, total?, has_more, next_offset}.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
limit | integer | não | Tamanho da página. O padrão é 50. (padrão 50; 1–200) |
offset | integer | não | Número de registros a ignorar. Use pagination.next_offset da página anterior. (padrão 0; 0–…) |
{
"name": "list_api_keys",
"arguments": {}
}get_service_healthVerificar a saúde do serviço SendHQ
Verifica se a API do SendHQ está no ar e qual provedor de e-mail está ativo. Não precisa de uma chave de API válida.
Sem parâmetros.
{
"name": "get_service_health",
"arguments": {}
}Inventário de cobertura da API
Todas as operações da API pública e a ferramenta que as cobre. Tudo o que uma pessoa pode fazer no painel e que tem uma API está coberto; as exclusões abaixo são deliberadas.
| Endpoint | Ferramenta | Observações |
|---|---|---|
| POST /emails | send_email | Enviar um e-mail |
| POST /emails/batch | send_batch | Enviar até 100 mensagens individualizadas |
| GET /emails | list_emails | Listar e-mails enviados e recebidos |
| GET /emails/:id | get_email | Recuperar um e-mail e seus anexos |
| PATCH /emails/:id | mark_email | Atualizar lido, arquivado, spam, categoria ou importância |
| POST /emails/:id/labels | label_email | Adicionar ou remover marcadores de um e-mail |
| DELETE /emails/:id | delete_email | Excluir um e-mail retido |
| GET /emails/:id/events | list_email_events | Listar eventos de entrega de um e-mail |
| GET /threads/:id | get_thread | Recuperar uma conversa em ordem cronológica |
| GET /labels | list_labels | Listar marcadores com contagens de mensagens e regras de arquivamento |
| POST /labels | create_label | Criar um marcador, opcionalmente com regras de arquivamento automático |
| GET /labels/:id | get_label | Recuperar um marcador por ID ou nome |
| PATCH /labels/:id | update_label | Renomear, mudar a cor ou transformar um marcador em categoria |
| DELETE /labels/:id | delete_label | Excluir um marcador sem excluir seus e-mails |
| POST /labels/:id/rules | create_label_rule | Adicionar uma regra de arquivamento automático a um marcador |
| DELETE /labels/:id/rules/:rule_id | delete_label_rule | Excluir uma regra de arquivamento automático |
| POST /drafts | create_draft | Criar um rascunho do compositor |
| GET /drafts | list_drafts | Listar rascunhos do compositor |
| GET /drafts/:id | get_draft | Recuperar um rascunho e seus anexos |
| PUT /drafts/:id | update_draft | Substituir o conteúdo do rascunho |
| DELETE /drafts/:id | delete_draft | Descartar um rascunho |
| POST /drafts/:id/attachments | upload_attachment | Fazer upload de um anexo para um rascunho |
| GET /attachments/:id | download_attachment | Baixar um anexo privado |
| DELETE /attachments/:id | delete_attachment | Excluir um anexo privado |
| GET /sending-identities | list_sending_identities | Listar identidades de remetente verificadas |
| GET /templates | list_templates | Listar templates hospedados |
| POST /templates | create_template | Criar um template hospedado |
| GET /templates/:id | get_template | Recuperar rascunhos, releases e uso |
| PUT /templates/:id/draft | update_template_draft | Salvar automaticamente um rascunho de template |
| POST /templates/:id/draft | create_template_draft | Criar um novo rascunho a partir da release publicada |
| POST /templates/:id/render | render_template | Renderizar a saída exata do servidor |
| POST /templates/:id/test | send_template_test | Enviar um snapshot de teste |
| POST /templates/:id/publish | publish_template | Publicar uma release imutável de template |
| POST /templates/:id/archive | archive_template | Arquivar um template |
| POST /templates/:id/restore | restore_template | Restaurar um template arquivado |
| POST /domains | add_domain | Adicionar um domínio de envio |
| GET /domains | list_domains | Listar domínios e o estado de DNS em cache |
| GET /domains/:id | get_domain | Recuperar os detalhes de configuração de um domínio |
| POST /domains/:id/verify | verify_domain | Atualizar a verificação do SES e do DNS |
| POST /domains/:id/inbound/setup | setup_inbound | Provisionar o recebimento de entrada do SES |
| POST /domains/:id/inbound/verify | verify_inbound | Verificar o roteamento do MX de entrada |
| DELETE /domains/:id | delete_domain | Excluir um domínio |
| GET /dns/provider | get_dns_provider | Detectar o provedor de DNS autoritativo e os hosts relativos dos registros |
| GET /dns/domain-connect/connect | get_domain_connect_link | Criar um link de consentimento do Domain Connect para configuração de DNS com um clique |
| POST /inboxes | create_inbox | Criar um endereço de entrada |
| GET /inboxes | list_inboxes | Listar endereços de entrada |
| GET /inboxes/:id | get_inbox | Recuperar um endereço de entrada |
| PATCH /inboxes/:id | update_inbox | Renomear, ativar ou desativar uma caixa de entrada |
| PUT /inboxes/:id/forwarding | set_inbox_forwarding | Encaminhar os e-mails recebidos de uma caixa de entrada para outro endereço |
| DELETE /inboxes/:id | delete_inbox | Excluir uma caixa de entrada mantendo as mensagens |
| GET /deliverability/stats | deliverability_stats | Recuperar estatísticas de entrega dos últimos 30 dias |
| GET /deliverability/reputation | list_sender_reputation | Listar o estado de reputação por identidade de remetente exata |
| GET /suppressions | list_suppressions | Listar as supressões do workspace |
| DELETE /suppressions/:email | remove_suppression | Remover uma supressão por bounce elegível |
| GET /blocked-recipients | list_blocked_recipients | Listar bounces, reclamações e descadastros |
| GET /account | get_account | Recuperar conta, uso, estado de cobrança e contagens do workspace com uma chave de API |
| GET /analytics | get_analytics | Recuperar as análises de envio do painel para 7, 30 ou 90 dias |
| GET /profile | get_account | Equivalente de GET /account apenas para sessão; o servidor MCP lê a rota da chave de API. |
| POST /billing/checkout | não exposto | As alterações de cobrança são apenas por sessão, por design, e exigem o dono da conta no painel. O estado de cobrança pode ser lido com get_account. |
| POST /billing/cancel | não exposto | As alterações de cobrança são apenas por sessão, por design, e exigem o dono da conta no painel. O estado de cobrança pode ser lido com get_account. |
| POST /keys | não exposto | Excluída deliberadamente: um agente não deve emitir nem destruir credenciais. As chaves são gerenciadas por uma pessoa no painel. |
| GET /keys | list_api_keys | Listar metadados de chaves de API |
| DELETE /keys/:id | não exposto | Excluída deliberadamente: um agente não deve emitir nem destruir credenciais. As chaves são gerenciadas por uma pessoa no painel. |
Deliberadamente indisponível
| Recurso | Endpoints | Motivo |
|---|---|---|
| Criar, rotacionar, revogar ou excluir chaves de API | POST /keys, DELETE /keys/:id | Excluída deliberadamente: um agente não deve emitir nem destruir credenciais. As chaves são gerenciadas por uma pessoa no painel. |
| Iniciar um checkout ou cancelar uma assinatura | POST /billing/checkout, POST /billing/cancel | As alterações de cobrança são apenas por sessão, por design, e exigem o dono da conta no painel. O estado de cobrança pode ser lido com get_account. |
| Configuração de DNS com um clique da Cloudflare (OAuth) | GET /api/dns/cloudflare/connect | Exige uma sessão interativa no navegador e o consentimento OAuth da Cloudflare. Use os registros de get_domain, os hosts de get_dns_provider ou get_domain_connect_link. |
| Cadastro, login, logout e vinculação de conta Google | /api/auth/* | Autenticação humana no navegador; o servidor MCP se autentica com uma chave de API. |
| Formulário de contato com o suporte | POST /api/contact | Formulário público do site de marketing, para pessoas, não uma operação do workspace. |
Catálogo legível por máquina: /docs/mcp/tools.json (schemas, anotações, mapeamento de endpoints, exclusões). Versão em Markdown desta página: /docs/mcp.md. Com a CLI instalada, sendhq commands --format json imprime o mesmo catálogo.