Emailens Mcp
Servidor MCP para análise de compatibilidade de e-mails. Analise, visualize, diferencie e corrija e-mails HTML em 15 clientes de e-mail — além de capturar capturas de tela reais e criar links compartilháveis com uma chave de API opcional.
Documentação
Servidor MCP para análise de compatibilidade de e-mail. Analise, visualize, compare e corrija e-mails em 21 clientes de e-mail, além de capturar capturas de tela reais e criar links compartilháveis com uma chave de API opcional.
Envie HTML, MJML, Maizzle ou React Email. Defina format e o template será compilado antes da análise, para que o que seja verificado seja o HTML que seus leitores realmente recebem.
Por que seu assistente precisa disso: entre os 298 recursos de CSS e HTML que rastreamos, apenas 6 são totalmente suportados em todos os principais clientes de e-mail (veja os dados). Peça ao Claude para verificar seu e-mail antes de enviá-lo.
Construído em @emailens/engine. Também disponível como uma GitHub Action.
Instalação
npx -y @emailens/mcp
Configuração
Claude Desktop
Adicione ao claude_desktop_config.json:
{
"mcpServers": {
"emailens": {
"command": "npx",
"args": ["-y", "@emailens/mcp"]
}
}
}
Claude Code
claude mcp add emailens -- npx -y @emailens/mcp
Com chave de API (opcional, desbloqueia capturas de tela + compartilhamento)
{
"mcpServers": {
"emailens": {
"command": "npx",
"args": ["-y", "@emailens/mcp"],
"env": {
"EMAILENS_API_KEY": "ek_live_..."
}
}
}
}
Obtenha sua chave de API gratuita em emailens.dev/settings/api-keys.
Remoto (sem instalação)
Use o endpoint hospedado: sem necessidade de npm ou Node.js. Chave de API necessária.
{
"mcpServers": {
"emailens": {
"url": "https://emailens.dev/api/mcp",
"headers": {
"Authorization": "Bearer ek_live_..."
}
}
}
}
Ferramentas
Ferramentas locais (sem necessidade de conta)
preview_email
Visualização completa de compatibilidade de e-mail: transforma HTML para 21 clientes, analisa CSS, gera pontuações, simula modo escuro, verifica pré-visualização da caixa de entrada e tamanho do e-mail.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
html | string | Sim | Fonte HTML do e-mail |
clients | string[] | Não | Filtrar para IDs de clientes específicos |
format | enum | Não | "html", "jsx", "mjml", "maizzle" |
analyze_email
Análise rápida de compatibilidade CSS; retorna pontuações por cliente e um achado por problema. Mais rápido que audit_email quando você só precisa de compatibilidade CSS.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
html | string | Sim | Fonte HTML do e-mail |
format | enum | Não | Formato de entrada |
detail | enum | Não | "summary" (padrão) ou "full" |
clients | string[] | Não | Relatar apenas estes IDs de clientes |
targetingPolicy | enum | Não | "progressive" (padrão), "strict" ou "lenient" |
Um achado por problema, não um por cliente. O mecanismo relata por cliente
porque uma pontuação é por cliente, e por seletor porque uma correção é por seletor.
Em um boletim informativo comum, border-radius chega doze vezes (dois clientes
que o descartam, seis seletores que o usam) com a mesma frase em cada cópia.
Isso era 286KB de JSON, cerca de 73.000 tokens, para um e-mail de 11KB.
Os achados são agrupados por propriedade, gravidade e mensagem, listando os clientes afetados, com posições mescladas em todos eles. O mesmo e-mail agora retorna 40KB.
{
"property": "border-radius",
"severity": "warning",
"clients": ["outlook-windows", "outlook-windows-legacy"],
"message": "Does not support \"border-radius\". Round corners can be used in VML…",
"fixType": "structural",
"hasFix": true,
"loc": { "line": 61, "column": 28, "offset": 2753, "length": 171 },
"alsoAtLines": [62, 64, 75, 78, 87]
}
Snippets de correção não estão incluídos; eles eram 93KB desses 286KB, e fix_email
os produz para os problemas que você decidir corrigir. hasFix informa se um está
disponível; fixType informa se o reparo é de marcação ou CSS.
Passe detail: "full" para a forma por cliente do mecanismo com snippets, e
clients: ["gmail-web", "outlook-windows"] para relatar apenas o que você se importa:
a economia adicional mais rápida, reduzindo aproximadamente pela metade a resposta para dois clientes.
As pontuações permanecem do e-mail inteiro de qualquer forma: estreitar o relatório não muda o que
o e-mail vale em outros lugares. Um ID de cliente desconhecido é rejeitado pelo nome; um
resultado vazio seria lido como "este e-mail está bom para esse cliente".
Posições de origem. Para entrada HTML, cada aviso carrega loc (line,
column, offset, length) para a primeira ocorrência, além de alsoAtLines para
quaisquer outras, para que um assistente possa editar a fonte exata e saiba onde as demais
estão. audit_email posiciona seus outros achados da mesma forma.
{
"property": "border-radius",
"loc": { "line": 7, "column": 8, "offset": 142, "length": 25 },
"alsoAtLines": [12, 19]
}
Ocorrências posteriores são números de linha em vez de posições completas de propósito: esta resposta é lida por um modelo que paga por cada token, e um boletim informativo real pode produzir mais de mil ocorrências; carregá-las todas por extenso quase dobra a carga útil.
As posições são relatadas apenas para entrada html. JSX, MJML e Maizzle são compilados
antes da análise, então um número de linha apontaria para a saída gerada em vez do
arquivo que você tem aberto: as ferramentas o omitem em vez de retornar um que pareça
autoritativo.
audit_email
Auditoria abrangente de qualidade: compatibilidade CSS, pontuação de spam, validação de links, acessibilidade, imagens, pré-visualização da caixa de entrada, tamanho (corte do Gmail), variáveis de template, estouro de conteúdo, bugs visuais, contraste de texto em modo escuro e móvel, consistência de design e segmentação de clientes.
Os três últimos cobrem o que uma pré-visualização leve de desktop não pode mostrar: texto que desaparece quando um cliente força o modo escuro ou quando o próprio bloco escuro do e-mail repinta uma superfície sem recolorir o texto sobre ela, contraste abaixo do ponto de quebra do e-mail e cores que diferem por valor, mas não para um leitor.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
html | string | Sim | Fonte HTML do e-mail |
format | enum | Não | Formato de entrada |
detail | enum | Não | "summary" (padrão) ou "full" |
clients | string[] | Não | Relatar apenas estes IDs de clientes |
skip | string[] | Não | Verificações para pular (ex.: ["spam", "images"]) |
targetingPolicy | enum | Não | "progressive" (padrão), "strict" ou "lenient" |
fix_email
Gere um prompt de correção estruturado para problemas de compatibilidade. Retorna markdown com instruções de correção que a IA pode aplicar diretamente.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
html | string | Sim | HTML do e-mail para corrigir |
format | enum | Não | Controla a sintaxe da correção |
scope | enum | Não | "all" ou "current" |
selectedClientId | string | Não | ID do cliente para correções direcionadas |
list_clients
Liste todos os 21 clientes de e-mail suportados com IDs, nomes, mecanismos e suporte a modo escuro.
diff_emails
Compare duas versões de HTML de e-mail; mostra mudanças de pontuação, problemas corrigidos e problemas introduzidos por cliente.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
before | string | Sim | HTML do e-mail original |
after | string | Sim | HTML do e-mail modificado |
format | enum | Não | Formato de entrada |
check_deliverability
Verifique a entregabilidade de e-mail para um domínio: registros SPF, DKIM, DMARC, MX, BIMI com pontuação e problemas acionáveis.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
domain | string | Sim | Domínio para verificar (ex.: "company.com") |
Ferramentas hospedadas (exigem EMAILENS_API_KEY)
capture_screenshots
Capture capturas de tela reais de e-mail em 21 clientes em navegadores reais. As capturas de tela são hospedadas em CDN.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
html | string | Sim | Fonte HTML do e-mail |
format | enum | Não | Formato de entrada |
clients | string[] | Não | Filtrar clientes |
modes | string[] | Não | ["light"], ["dark"] ou ["light", "dark"] |
title | string | Não | Nome para a pré-visualização |
Plano gratuito: 30 pré-visualizações/dia. Inscreva-se
share_preview
Crie um link compartilhável. Os destinatários veem a análise completa sem uma conta.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
html | string | Sim | Fonte HTML do e-mail |
title | string | Não | Título de exibição |
format | enum | Não | Formato de entrada |
Requer o plano Dev ($9/mês). Os links de compartilhamento expiram após 7 dias (Dev) ou nunca (Pro).
Formatos de template
format aceita html (o padrão), mjml, maizzle e jsx (React
Email). maizzle é um template HTML ou um componente Vue de arquivo único. Um
arquivo Vue colado sem format é compilado como maizzle. Qualquer coisa que não seja html é
compilada antes da análise e também decide a sintaxe na qual os snippets de correção retornam.
Compilar importa mais do que parece. Um cliente de e-mail renderiza a saída, então
é isso que precisa ser verificado: entregue um documento <mjml> bruto, um analisador HTML
não encontra CSS nele e relata um e-mail perfeitamente limpo. Uma resposta assim é
pior que um erro, porque um assistente a repetirá.
Os compiladores não estão incluídos. Somente MJML puxa 56MB, e este servidor é
geralmente iniciado com npx, então o mecanismo os mantém como dependências
opcionais de pares:
npm install mjml # MJML
npm install @maizzle/framework@5 # Maizzle HTML
npm install @maizzle/framework@6 # Maizzle Vue single-file components
npm install sucrase react @react-email/components @react-email/render # React Email
Eles precisam ser instalados onde o servidor roda, o que nem sempre é um lugar que você
controla. Se não for, compile o template você mesmo e envie o HTML resultante
com format: "html": as ferramentas avisam quando isso acontece.
Clientes de e-mail suportados (21)
| Cliente | ID | Modo escuro | Notas |
|---|---|---|---|
| Gmail | gmail-web | Sim | |
| Gmail Android | gmail-android | Sim | |
| Gmail iOS | gmail-ios | Sim | |
| Outlook 365 | outlook-web | Sim | |
| Outlook Windows | outlook-windows | Não | |
| Outlook Windows Legacy | outlook-windows-legacy | Não | Descontinuado em outubro de 2026 |
| Outlook iOS | outlook-ios | Sim | Novo na v0.4.0 |
| Outlook Android | outlook-android | Sim | Novo na v0.4.0 |
| Outlook para Mac | outlook-macos | Sim | Novo na v0.10.0 |
| Apple Mail | apple-mail-macos | Sim | |
| Apple Mail iOS | apple-mail-ios | Sim | |
| Yahoo Mail | yahoo-mail | Sim | |
| Yahoo Mail Android | yahoo-mail-android | Sim | Novo na v0.10.0 |
| Yahoo Mail iOS | yahoo-mail-ios | Sim | Novo na v0.10.0 |
| Samsung Mail | samsung-mail | Sim | |
| Thunderbird | thunderbird | Não | |
| HEY Mail | hey-mail | Sim | |
| Proton Mail | protonmail | Sim | Novo na v0.10.0 |
| AOL Mail | aol | Sim | Novo na v0.10.0 |
| Fastmail | fastmail | Sim | Novo na v0.10.0 |
| Superhuman | superhuman | Sim |
Lançamento
Duas publicações: npm e o registro MCP. A listagem do registro ficou cinco
lançamentos atrasada porque nada empurrou server.json, então essa metade é um
fluxo de trabalho agora. RELEASING.md tem os detalhes e os quatro
lugares onde a versão precisa concordar.
Desenvolvimento
bun install
bun run build
bun test
bun run typecheck
Licença
MIT
Se isso te salvou de uma surpresa do Outlook, uma estrela ajuda outros desenvolvedores de e-mail a encontrá-lo.