Postmark
Um servidor MCP para envio de e-mails através do serviço Postmark, configurado por meio de variáveis de ambiente.
Documentação
Servidor MCP Oficial do Postmark

Envie e-mails com o Postmark usando o Claude e outros assistentes de IA compatíveis com MCP.
Recursos
- Expõe um servidor Model Context Protocol (MCP) baseado na sua conta Postmark
- 24 ferramentas que abrangem envio de e-mails (único + em lote), templates (CRUD + validação), busca de mensagens, diagnóstico de entrega, bounces, supressões, estatísticas, informações do servidor e webhooks
- Anotações de ferramentas MCP (
readOnlyHint,destructiveHint) permitem que clientes compatíveis aprovem automaticamente leituras seguras e exijam confirmação antes de operações de mutação ou destrutivas - Configuração simples por meio de variáveis de ambiente
- Tratamento abrangente de erros e desligamento gracioso
- Logs JSON estruturados para stderr com persistência opcional em arquivo de log; endereços de e-mail são parcialmente mascarados por padrão
- Imposição de HTTPS e lista de permissões de domínio opcional para registro de webhooks
- Rastreamento automático de abertura/clique em cada envio
Documentação Útil
- 📒 Documentação da API
- 🔎 Explorador de API
- 📖 Artigos de Engenharia
- 📝 Changelog — novidades em cada versão
Feedback
Adoraríamos ouvir sua opinião! Compartilhe seus comentários e sugestões usando nosso formulário de feedback.
Siga-nos no X - @postmarkapp
Configuração
Requisitos
- Node.js v20 ou superior
- Uma conta Postmark e token de servidor
Instalação (Desenvolvimento Local)
Clone o repositório:
git clone https://github.com/ActiveCampaign/postmark-mcp
cd postmark-mcp
Instale as dependências:
npm install
# or
yarn
# or
bun install
Configuração (Desenvolvimento Local)
Crie seu próprio arquivo de ambiente a partir do exemplo
cp .env.example .env
Edite seu .env para conter suas credenciais e configurações do Postmark.
Importante: Isso é destinado apenas para fins de desenvolvimento local. Segredos nunca devem ser armazenados em controle de versão e arquivos do tipo .env devem ser adicionados ao .gitignore.
Obrigatório
| Variável | Descrição |
|---|---|
POSTMARK_SERVER_TOKEN | Seu token de API do servidor Postmark |
DEFAULT_SENDER_EMAIL | Endereço de e-mail do remetente padrão (deve ser um remetente verificado no Postmark) |
DEFAULT_MESSAGE_STREAM | Stream de mensagens do Postmark (ex.: outbound) |
Opcional
| Variável | Padrão | Descrição |
|---|---|---|
AGENT_LABEL | — | Um rótulo para esta instância (ex.: prod, staging). Enviado como X-Agent-Label em cada requisição à API do Postmark, útil para identificar fontes de tráfego em logs ou tickets de suporte. |
WEBHOOK_URL_ALLOWLIST | — | Lista separada por vírgulas de prefixos de URL HTTPS que createWebhook aceitará (ex.: https://hooks.yourapp.com,https://inbound.corp.io). Quando não definido, qualquer URL HTTPS válida é aceita. |
LOG_FILE | — | Caminho para um arquivo onde logs JSON estruturados são anexados além do stderr. O arquivo é criado se não existir. Nenhuma rotação ou limite de tamanho é aplicado — use uma ferramenta externa como logrotate para gerenciar o arquivo em implantações de longa duração. |
LOG_EMAIL_FULL | false | Defina como true para registrar endereços de e-mail sem mascaramento. Por padrão, a parte da caixa de correio é parcialmente mascarada nos logs (u**r@example.com). |
Execute o servidor:
npm start
# or
yarn start
# or
bun start
Teste rápido (requer .env válido):
O repositório inclui dois arquivos de exemplo para teste rápido. Copie cada um para seu nome sem o sufixo de exemplo (que é ignorado pelo git) antes de executar, para que suas edições locais — incluindo endereços de remetente verificados — nunca sejam commitadas.
# Read-only suite (25 checks). Optionally edit RECIPIENT_WITH_HISTORY.
cp smoke-test.example.mjs smoke-test.mjs
npm run smoke
# Mutating suite (full lifecycles + real email sends).
# REQUIRED: edit SENDER and RECIPIENT to two of your verified addresses.
cp smoke-test-mutating.example.mjs smoke-test-mutating.mjs
node smoke-test-mutating.mjs
A suíte somente leitura inicia o servidor via stdio e exercita todas as ferramentas de leitura contra sua conta Postmark, além dos caminhos de validação para editTemplate e createWebhook. Não envia e-mails nem altera estado.
A suíte de mutação executa ciclos completos de criar→editar→excluir para templates (incluindo vínculo de layout), webhooks e supressões, e envia e-mails reais entre os dois endereços que você configurar. Ela faz a limpeza após a execução. O script se recusa a executar enquanto os valores de espaço reservado ainda estiverem no lugar.
Instalação Rápida no Cursor
Após instalar o MCP, atualize sua configuração para definir:
POSTMARK_SERVER_TOKENDEFAULT_SENDER_EMAILDEFAULT_MESSAGE_STREAM(padrão:outbound)
Configuração do Cliente MCP
Usando npx (recomendado — sem necessidade de clone)
Instale diretamente do npm sem gerenciar uma cópia local:
{
"mcpServers": {
"postmark": {
"command": "npx",
"args": ["-y", "@activecampaign/postmark-mcp"],
"env": {
"POSTMARK_SERVER_TOKEN": "your-postmark-server-token",
"DEFAULT_SENDER_EMAIL": "your-sender-email@example.com",
"DEFAULT_MESSAGE_STREAM": "outbound"
}
}
}
}
Usando um clone local
{
"mcpServers": {
"postmark": {
"command": "node",
"args": ["/absolute/path/to/postmark-mcp/index.js"],
"env": {
"POSTMARK_SERVER_TOKEN": "your-postmark-server-token",
"DEFAULT_SENDER_EMAIL": "your-sender-email@example.com",
"DEFAULT_MESSAGE_STREAM": "outbound"
}
}
}
}
Ambos os trechos funcionam com Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json), Cursor (.cursor/mcp.json) e qualquer outro cliente MCP que aceite o formato de configuração JSON padrão.
Ferramentas
Esta seção fornece uma referência completa das ferramentas do servidor MCP do Postmark, incluindo exemplos de prompts e payloads. O servidor registra 24 ferramentas organizadas em oito categorias.
Sumário
sendEmail
Envia um e-mail transacional para um destinatário ou até 50 destinatários.
Exemplo de Prompt:
Send an email using Postmark to recipient@example.com with the subject "Meeting Reminder" and the message "Don't forget our team meeting tomorrow at 2 PM."
Payload Esperado:
{
"to": "recipient@example.com",
"subject": "Meeting Reminder",
"textBody": "Don't forget our team meeting tomorrow at 2 PM.",
"htmlBody": "<p>Don't forget our team meeting tomorrow at 2 PM.</p>",
"from": "sender@example.com",
"cc": "manager@example.com",
"bcc": "archive@example.com",
"replyTo": "support@example.com",
"tag": "meetings"
}
to aceita um único endereço ou um array de até 50 endereços. htmlBody, from, cc, bcc, replyTo e tag são opcionais. Se from for omitido, DEFAULT_SENDER_EMAIL será usado.
Resposta:
Email sent successfully!
MessageID: 0a1b2c3d-...
To: recipient@example.com
Subject: Meeting Reminder
sendEmailWithTemplate
Envia um e-mail usando um template do Postmark.
Exemplo de Prompt:
Send the "welcome" template to customer@example.com with name "John Doe" and login_url "https://myapp.com/login".
Payload Esperado:
{
"to": "customer@example.com",
"templateAlias": "welcome",
"templateModel": {
"name": "John Doe",
"login_url": "https://myapp.com/login"
},
"from": "sender@example.com",
"tag": "onboarding"
}
Forneça ou templateId (número) ou templateAlias (string), não ambos.
Resposta:
Template email sent successfully!
MessageID: 0a1b2c3d-...
To: customer@example.com
Template: welcome
sendBatch
Envia até 500 e-mails em uma única chamada de API. Cada mensagem é totalmente independente — seu próprio destinatário, assunto e corpo. Isso encapsula o endpoint de lote síncrono do Postmark (POST /email/batch), que retorna resultados imediatos por mensagem.
Nota: O Postmark também oferece uma API de e-mail em massa assíncrona (
POST /email/bulk) para trabalhos de grande volume sem limite de contagem de mensagens e com limite de payload de 50 MB. Esse endpoint usa um fluxo de envio e consulta e atualmente não é encapsulado por este servidor MCP.
Payload Esperado:
{
"messages": [
{
"to": "alice@example.com",
"subject": "Order #1234 confirmed",
"textBody": "Thanks Alice — your order is on its way.",
"tag": "order-confirmation"
},
{
"to": "bob@example.com",
"subject": "Order #1235 confirmed",
"textBody": "Thanks Bob — your order is on its way.",
"tag": "order-confirmation"
}
]
}
Campos por mensagem: to, subject, textBody são obrigatórios. htmlBody, from, cc, bcc, replyTo e tag são opcionais. Se from for omitido em uma mensagem, DEFAULT_SENDER_EMAIL será usado.
Resposta:
Sent 2/2 successfully
Successes:
- alice@example.com — abc-123-def
- bob@example.com — abc-456-ghi
Quando algumas mensagens falham no envio (ex.: destinatários suprimidos), as falhas são listadas primeiro com seu ErrorCode e motivo:
Sent 8/10 successfully (2 failed)
Failures:
- blocked@example.com — 406: Address has been suppressed.
- bad@example.com — 300: Inactive recipient
...
sendBatchWithTemplate
Envia até 500 e-mails com template — mesmo template, modelos de template por destinatário. Ideal para fluxos de "renderizar este template de integração para cada novo usuário".
Payload Esperado:
{
"templateAlias": "welcome",
"from": "hello@yourapp.com",
"tag": "onboarding",
"recipients": [
{ "to": "alice@example.com", "templateModel": { "name": "Alice", "plan": "Pro" } },
{ "to": "bob@example.com", "templateModel": { "name": "Bob", "plan": "Free" } }
]
}
Forneça ou templateId (número) ou templateAlias (string). from e tag de nível superior se aplicam a todos os destinatários, mas podem ser substituídos por destinatário. Cada destinatário também aceita cc, bcc e replyTo opcionais.
Resposta: mesmo formato de sendBatch.
Templates
listTemplates
Lista templates salvos neste servidor. Retorna os primeiros 100 templates; se um servidor tiver mais de 100, a paginação ainda não é suportada e a resposta indicará que os resultados foram truncados.
Resposta:
Found 2 templates:
• **Welcome**
- ID: 12345678
- Alias: welcome
- Subject: Welcome to {{product_name}}
getTemplate
Recupera o conteúdo completo de um único template (corpo HTML, corpo de texto, assunto, tipo).
Payload: { "templateIdOrAlias": "welcome" } — aceita ID numérico ou alias de string.
createTemplate
Cria um novo template. Requer name. Pelo menos um de htmlBody ou textBody deve ser fornecido.
subject é obrigatório para templates Standard e deve ser omitido para templates Layout — o Postmark rejeita o campo em Layouts.
layoutTemplate (apenas Standard) vincula o novo template a um Layout existente por alias. Sem ele, o novo template é renderizado sem envoltório (sem chrome de nenhum layout).
Payload Esperado:
{
"name": "Order Confirmation",
"subject": "Your order #{{order_id}} is confirmed",
"htmlBody": "<h1>Thanks {{name}}</h1>",
"textBody": "Thanks {{name}}",
"alias": "order-confirmation",
"templateType": "Standard",
"layoutTemplate": "basic"
}
templateType pode ser "Standard" (padrão) ou "Layout".
editTemplate
Atualiza um template existente. Requer templateIdOrAlias além de pelo menos um campo atualizado (name, subject, htmlBody, textBody, alias ou layoutTemplate).
Passe "layoutTemplate": null para desvincular um template de seu Layout atual (o MCP traduz isso para a string vazia que a API do Postmark exige para limpar a associação).
deleteTemplate
Exclui permanentemente um template por ID ou alias. Templates Layout não podem ser excluídos enquanto templates Standard ainda estiverem vinculados a eles — desvincule via editTemplate primeiro.
Payload: { "templateIdOrAlias": "order-confirmation" }
validateTemplate
Valida o conteúdo do template (sintaxe Mustachio, variáveis indefinidas) sem salvar. Pelo menos um de subject, htmlBody ou textBody é obrigatório.
Payload Esperado:
{
"subject": "Order #{{order_id}}",
"htmlBody": "<p>Thanks {{name}}</p>",
"textBody": "Thanks {{name}}",
"testRenderModel": { "order_id": 42, "name": "John" },
"templateType": "Standard"
}
Mensagens
searchOutboundMessages
Pesquisa o histórico de mensagens de saída.
Payload Esperado (todos os filtros opcionais):
{
"recipient": "user@example.com",
"fromEmail": "sender@example.com",
"tag": "marketing",
"subject": "Welcome",
"status": "sent",
"messageStream": "outbound",
"fromDate": "2025-05-01",
"toDate": "2025-05-15",
"count": 50,
"offset": 0
}
status é um de queued, sent, processed. count é 1–500 (padrão 50).
getMessageDetails
Recupera detalhes completos e a linha do tempo de eventos de uma única mensagem de saída.
Payload: { "messageId": "0a1b2c3d-..." }
Diagnóstico
diagnoseDelivery
Ferramenta composta de triagem. Responde "meu e-mail chegou a X e, se não, por quê?" executando busca de mensagens, verificação de supressão e consultas de histórico de bounce em paralelo contra um endereço de destinatário, e então sintetizando uma recomendação em linguagem simples.
Esta é uma ferramenta de diagnóstico: ela compõe múltiplas chamadas à API do Postmark em uma única resposta coerente, em vez de espelhar um único endpoint.
Exemplo de Prompt:
Did my email to recipient@example.com get delivered? If not, what should I do?
Payload Esperado:
{
"recipient": "recipient@example.com",
"messageId": "0a1b2c3d-...",
"fromDate": "2026-04-21",
"toDate": "2026-04-28",
"messageStream": "outbound"
}
Todos os campos exceto recipient são opcionais. Se messageId for omitido, a mensagem mais recente para o destinatário será usada. A janela de busca padrão são os últimos 7 dias.
Exemplo de resposta:
Delivery Diagnosis: recipient@example.com
────────────────────────────────────────────────
Suppression: not suppressed on stream "outbound"
Most recent message:
MessageID: fadeae4e-fb04-4102-9303-9876078c7b81
Subject: Welcome to MyApp
Sent: 2026-04-27T18:42:19.0000000-04:00
Status: Sent
Events: Delivered, Opened×2, Clicked
Bounce history: none
Recommended action:
Email was delivered. If recipient says they didn't see it, check their
spam folder or ask them to whitelist the sender domain.
Quando o destinatário está suprimido, a recomendação difere com base no motivo: SpamComplaint é permanente, HardBounce pode ser reativável, ManualSuppression pode ser excluído via deleteSuppressions.
Bounces
searchBounces
Pesquisa o log de bounces com filtros opcionais por tipo, destinatário, tag, ID de mensagem, stream de mensagens, intervalo de datas e status ativo/inativo.
Payload Esperado (todos opcionais):
{
"type": "HardBounce",
"inactive": true,
"emailFilter": "@example.com",
"tag": "marketing",
"messageID": "0a1b2c3d-...",
"messageStream": "outbound",
"fromDate": "2025-05-01",
"toDate": "2025-05-15",
"count": 50,
"offset": 0
}
Valores suportados de type (correspondem ao enum BounceType do Postmark — 22 valores): AddressChange, AutoResponder, BadEmailAddress, Blocked, ChallengeVerification, DMARCPolicy, DnsError, HardBounce, InboundError, ManuallyDeactivated, OpenRelayTest, SMTPApiError, SoftBounce, SpamComplaint, SpamNotification, Subscribe, TemplateRenderingFailed, Transient, Unconfirmed, Unknown, Unsubscribe, VirusNotification.
getBounceDump
Retorna o dump SMTP bruto de um bounce. Os dumps de bounce são retidos por 30 dias.
Payload: { "bounceId": 123456 }
activateBounce
Reativa um endereço de e-mail desativado (apenas bounces onde CanActivate: true).
Payload: { "bounceId": 123456 }
Suppressions
listSuppressions
Lista as suppressions de um message stream.
Payload esperado (todos opcionais):
{
"messageStream": "outbound",
"suppressionReason": "HardBounce",
"origin": "Recipient",
"emailAddress": "user@example.com",
"fromDate": "2025-05-01",
"toDate": "2025-05-15"
}
suppressionReason ∈ HardBounce, SpamComplaint, ManualSuppression. origin ∈ Recipient, Customer, Admin. Se messageStream for omitido, DEFAULT_MESSAGE_STREAM será usado.
createSuppressions
Suprime até 50 endereços de e-mail em um message stream.
Payload: { "emailAddresses": ["a@example.com", "b@example.com"], "messageStream": "outbound" }
deleteSuppressions
Remove até 50 endereços da lista de suppressions. Observação: suppressions de SpamComplaint não podem ser excluídas.
Payload: { "emailAddresses": ["a@example.com"], "messageStream": "outbound" }
Estatísticas e Servidor
getDeliveryStats
Ferramenta unificada de estatísticas. O comportamento padrão retorna um resumo amigável; passe um stat opcional para um detalhamento específico.
Payload esperado (todos opcionais):
{
"stat": "summary",
"tag": "marketing",
"fromDate": "2025-05-01",
"toDate": "2025-05-15",
"messageStream": "outbound"
}
Valores suportados de stat:
stat | O que retorna |
|---|---|
summary (padrão) | Taxas principais de abertura / clique / bounce / spam |
overview | Todas as contagens de visão geral (enviados, rastreados, aberturas, cliques, bounces, …) |
sent | Contagem de enviados |
bounces | Detalhamento de bounces por tipo |
spam | Contagem de reclamações de spam |
tracked | Contagem de e-mails rastreados |
opens | Total + aberturas únicas |
openPlatforms | Detalhamento de plataforma de abertura (Desktop / Mobile / WebMail / Desconhecido) |
openClients | Top 10 clientes de e-mail (Apple Mail, Gmail, …) |
openReadTimes | Histograma de tempo de leitura |
clicks | Total + cliques únicos em links |
clickBrowsers | Top 10 navegadores usados para clicar |
clickPlatforms | Detalhamento de plataforma de clique (Desktop / Mobile / WebMail / Desconhecido) |
clickLocation | Localização do clique em HTML vs. texto simples |
Resposta de resumo padrão:
Email Delivery Summary
Sent: 74
Tracked: 33 (44.6% of sent)
Open rate: 93.9% (31/33 unique opens)
Click rate: 4.8% (10/207 unique links clicked)
Bounced: 1 (1.4%)
Spam: 0 (0.0%)
Period: 2025-05-01 → 2025-05-15
Tag: marketing
Exemplo de resposta stat: "openPlatforms":
Open Platform Usage
Desktop 20 (64.5%)
Mobile 0 (0.0%)
WebMail 11 (35.5%)
Unknown 0 (0.0%)
getServerInfo
Retorna o nome, a cor, as configurações de rastreamento e as URLs de webhook do servidor Postmark.
Payload: {}
Webhooks
listWebhooks
Lista os webhooks configurados. Filtro opcional de messageStream.
createWebhook
Cria uma assinatura de webhook. Requer um url e pelo menos um trigger.
Observação de segurança: Webhooks são persistentes — uma vez registrados, o Postmark fará POST dos dados de eventos (aberturas, cliques, bounces, reclamações de spam, etc.) para a URL de destino em todos os eventos futuros correspondentes naquele servidor, até que o webhook seja excluído. Registre apenas webhooks que apontem para URLs que você controla. Use WEBHOOK_URL_ALLOWLIST para restringir as URLs aceitas a prefixos conhecidos.
O url deve usar HTTPS. URLs HTTP são rejeitadas. Se WEBHOOK_URL_ALLOWLIST estiver definido, a URL também deve corresponder a um dos prefixos configurados.
Payload esperado:
{
"url": "https://hooks.yourapp.com/postmark",
"messageStream": "outbound",
"openEnabled": true,
"clickEnabled": true,
"deliveryEnabled": false,
"bounceEnabled": true,
"spamComplaintEnabled": true,
"subscriptionChangeEnabled": false
}
deleteWebhook
Exclui um webhook por ID.
Payload: { "webhookId": 1234567 }
Detalhes de Implementação
Cabeçalhos de Requisição da API
Todas as requisições à API do Postmark incluem os seguintes cabeçalhos para identificação do cliente:
| Cabeçalho | Descrição |
|---|---|
X-Postmark-Client | Sempre postmark-mcp — identifica este servidor como a origem da requisição |
X-Postmark-Client-Version | Versão deste servidor MCP, correspondente à versão do pacote |
X-Postmark-MCP-Client | Nome e versão do aplicativo host MCP (ex.: claude-desktop/1.0), capturados do handshake initialize do MCP. Omitido se o cliente não fornecer essas informações. |
X-Agent-Label | Valor da variável de ambiente AGENT_LABEL. Omitido quando não definido. |
Este servidor usa seu próprio cliente HTTP (sem o pacote npm postmark) para que o tráfego MCP seja identificável como postmark-mcp nos logs e tickets de suporte do Postmark.
Configuração Automática
Todos os e-mails são configurados automaticamente com:
TrackOpens: trueTrackLinks: "HtmlAndText"- Message stream da variável de ambiente
DEFAULT_MESSAGE_STREAM
Tratamento de Erros
O servidor implementa tratamento abrangente de erros:
- Validação de todas as variáveis de ambiente obrigatórias
- Desligamento gracioso em SIGTERM e SIGINT
- Tratamento adequado de erros para chamadas de API
- Nenhuma exposição de informações sensíveis nos logs
- Formatação consistente de mensagens de erro
Registro em Log
Cada invocação de ferramenta emite uma linha JSON estruturada para stderr. Se LOG_FILE estiver definido, a mesma linha também é anexada a esse arquivo.
Formato da entrada de log:
{
"timestamp": "2026-06-16T20:34:01.123Z",
"tool": "sendEmail",
"clientName": "claude-desktop",
"clientVersion": "1.0",
"args": {
"to": "u**r@example.com",
"subject": "Meeting Reminder",
"textBody": "[312ch]"
},
"status": "ok",
"durationMs": 243
}
Em caso de erro, status é "error" e um campo error contém a mensagem.
O que é e o que não é registrado:
| Dado | Registrado como |
|---|---|
| Endereços de e-mail | Parcialmente mascarados: u**r@example.com (defina LOG_EMAIL_FULL=true para desativar) |
htmlBody / textBody | Apenas contagem de bytes: [312ch] |
templateModel e outros objetos de dados | Apenas nomes de chaves: { "_keys": ["name", "plan"] } |
Arrays de messages / recipients em lote | Contagem + lista de destinatários: { "_count": 2, "_recipients": ["u**r@…", "a*b@…"] } |
Campos correspondentes a password, secret, token, apikey | [redacted] |
| Nome da ferramenta, duração, identidade do cliente MCP, status | Registrados integralmente |
Mensagens operacionais não estruturadas (inicialização, desligamento, conectividade com a API) continuam sendo gravadas em stderr como texto simples, junto aos logs JSON das ferramentas.
Considerações de Segurança
Escopo de acesso
Este servidor MCP atua com as permissões completas do POSTMARK_SERVER_TOKEN configurado. Ele expõe 24 ferramentas — incluindo envios de e-mail em massa, gerenciamento de templates, registro de webhooks e edições de listas de suppression — a qualquer cliente MCP que se conecte.
O Postmark tem dois tipos de token: um Server Token (usado aqui) e um Account Token. Nenhum deles suporta permissões sub-escopadas — um Server Token concede acesso total a todas as operações no servidor ao qual pertence. A forma prática de limitar a exposição é estrutural:
- Crie um servidor Postmark dedicado, usado exclusivamente para tráfego MCP. Uma violação fica então limitada aos dados e configurações desse servidor, em vez de toda a sua conta.
- Configure esse servidor apenas com os message streams e assinaturas de remetente verificadas que ele realmente precisa.
- Rotacione o token se ele for exposto.
Raio de impacto das ferramentas
As 24 ferramentas incluem várias operações de alto impacto. Abaixo está o detalhamento por nível de risco:
| Categoria | Ferramentas |
|---|---|
| Destrutivas (irreversíveis) | editTemplate, deleteTemplate, deleteWebhook, deleteSuppressions |
| Envio (e-mail de saída) | sendEmail, sendEmailWithTemplate, sendBatch, sendBatchWithTemplate |
| Aditivas (alterações no estado da conta) | createTemplate, createSuppressions, createWebhook, activateBounce |
| Somente leitura | Todas as 12 ferramentas restantes |
Todas as ferramentas possuem anotações MCP (readOnlyHint, destructiveHint, idempotentHint). Clientes MCP que respeitam anotações — incluindo Cursor e Claude Desktop — podem aprovar automaticamente consultas seguras de somente leitura (readOnlyHint: true) e exibirão prompts de confirmação para qualquer coisa que não seja leitura: envios, edições de templates, alterações de suppression e gerenciamento de webhooks. Ferramentas que excluem dados permanentemente também possuem destructiveHint: true para clientes que distinguem ações destrutivas de meramente mutáveis.
Política de URL de Webhook
createWebhook impõe HTTPS em todas as URLs. Uma vez registrado um webhook, o Postmark fará POST dos dados de eventos (aberturas, cliques, bounces, reclamações de spam) para essa URL continuamente até que o webhook seja excluído. Para evitar que uma chamada de ferramenta comprometida ou mal direcionada registre um callback que você não controla, defina WEBHOOK_URL_ALLOWLIST com os prefixos HTTPS que você possui. Audite os webhooks registrados regularmente com listWebhooks ou pelo painel do Postmark.
Para proteger seu receptor de webhook, coloque na lista de permissões os IPs de envio publicados pelo Postmark no nível de rede ou firewall, para que apenas o Postmark possa fazer POST no seu endpoint.
Risco de injeção de prompt
Como este servidor MCP pode enviar e-mails e registrar webhooks, ele é um alvo potencial para injeção de prompt — onde conteúdo malicioso em um e-mail, template ou repositório engana a IA para invocar uma ferramenta com argumentos não intencionais. As mitigações acima (token dedicado, aprovação de ferramentas no seu cliente MCP, WEBHOOK_URL_ALLOWLIST) reduzem o raio de impacto se isso ocorrer. Nunca configure aprovação automática para ferramentas de envio ou destrutivas em ambientes não confiáveis.
Para mais informações sobre a API do Postmark, visite a Documentação para Desenvolvedores do Postmark.
Licença
MIT © ActiveCampaign