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   NPM Version  MIT licensed

Envie e-mails com o Postmark usando o Claude e outros assistentes de IA compatíveis com MCP.

Postmark MCP setup video

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

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

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ávelDescrição
POSTMARK_SERVER_TOKENSeu token de API do servidor Postmark
DEFAULT_SENDER_EMAILEndereço de e-mail do remetente padrão (deve ser um remetente verificado no Postmark)
DEFAULT_MESSAGE_STREAMStream de mensagens do Postmark (ex.: outbound)

Opcional

VariávelPadrãoDescriçã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_FULLfalseDefina 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_TOKEN
  • DEFAULT_SENDER_EMAIL
  • DEFAULT_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


E-mail

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:

statO que retorna
summary (padrão)Taxas principais de abertura / clique / bounce / spam
overviewTodas as contagens de visão geral (enviados, rastreados, aberturas, cliques, bounces, …)
sentContagem de enviados
bouncesDetalhamento de bounces por tipo
spamContagem de reclamações de spam
trackedContagem de e-mails rastreados
opensTotal + aberturas únicas
openPlatformsDetalhamento de plataforma de abertura (Desktop / Mobile / WebMail / Desconhecido)
openClientsTop 10 clientes de e-mail (Apple Mail, Gmail, …)
openReadTimesHistograma de tempo de leitura
clicksTotal + cliques únicos em links
clickBrowsersTop 10 navegadores usados para clicar
clickPlatformsDetalhamento de plataforma de clique (Desktop / Mobile / WebMail / Desconhecido)
clickLocationLocalizaçã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çalhoDescrição
X-Postmark-ClientSempre postmark-mcp — identifica este servidor como a origem da requisição
X-Postmark-Client-VersionVersão deste servidor MCP, correspondente à versão do pacote
X-Postmark-MCP-ClientNome 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-LabelValor 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: true
  • TrackLinks: "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:

DadoRegistrado como
Endereços de e-mailParcialmente mascarados: u**r@example.com (defina LOG_EMAIL_FULL=true para desativar)
htmlBody / textBodyApenas contagem de bytes: [312ch]
templateModel e outros objetos de dadosApenas nomes de chaves: { "_keys": ["name", "plan"] }
Arrays de messages / recipients em loteContagem + 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, statusRegistrados 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:

CategoriaFerramentas
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 leituraTodas 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