{"name":"io.github.emailens/mcp","slug":"emailens-mcp","title":"Emailens MCP","description":"Analyze, audit, fix and diff HTML, MJML, Maizzle and React Email across 21 email clients.","url":"https://mcp.market/server/emailens-mcp","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"email","tags":["email"],"presence":{"score":47,"stars":7,"forks":1,"downloads_week":1128,"last_push_at":"2026-10-30T03:11:27.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-05T08:35:49.730Z","last_ok_at":"2026-11-05T08:35:49.730Z","latency_ms":177},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/emailens/mcp","website":"https://emailens.dev/mcp","version":"0.15.0","remotes":[{"type":"streamable-http","url":"https://emailens.dev/api/mcp"}],"packages":[{"registryType":"npm","identifier":"@emailens/mcp","version":"0.15.0","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"API key for screenshots and sharing. Get one free at app.emailens.dev/dashboard/api","isSecret":true,"name":"EMAILENS_API_KEY"}]}],"tools":[{"name":"analyze_email","description":"Fix error and warning findings. Info findings are not problems (the email falls back safely there): never remove responsive (@media) or dark-mode CSS to clear them. Quick CSS compatibility analysis, returns per-client scores and one finding per problem, listing the clients it affects. For HTML input each finding carries loc (line, column, offset) and alsoAtLines, so you can edit the exact source. Narrow with clients, or pass detail:'full' for the per-client breakdown with fix snippets. Use audit_email for a full quality report (spam, links, a11y, images, etc.).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"html":{"type":"string","description":"The email source"},"format":{"description":"Source format: 'html' (default), 'jsx' (React Email), 'mjml', or 'maizzle' (HTML template or Vue single-file component). Anything but 'html' is compiled before analysis and sets the syntax of the fix snippets. A pasted Vue file with no format is compiled as maizzle.","type":"string","enum":["html","jsx","mjml","maizzle"]},"detail":{"description":"'summary' (default) returns one entry per error or warning, listing the clients it affects, and only counts info findings (safe fallbacks). 'full' returns one entry per client with fix snippets, info included.","type":"string","enum":["summary","full"]},"clients":{"description":"Only report these client IDs (e.g. ['gmail-web','outlook-windows']). The fastest way to cut the response when you care about specific clients. Use list_clients for the IDs.","type":"array","items":{"type":"string"}},"targetingPolicy":{"description":"'progressive' (default) suppresses compatibility false-positives inside client-targeted scopes and only flags deprecated or dangerous hacks. 'strict' treats targeting as non-standard and reports every hack. 'lenient' suppresses false positives and ignores non-fatal targeting warnings.","type":"string","enum":["progressive","strict","lenient"]}},"required":["html"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"audit_email","description":"Fix error and warning findings, and restore anything listed in designRemovals. Info findings are not problems (the email falls back safely there): never remove responsive (@media), dark-mode CSS or rounded corners to clear them. designRemovals compares this version with the first one audited for the same email (or with previousHtml): design the edits deleted, such as @media rules, dark mode, corners, gradients, VML fallbacks or images. Comprehensive email quality audit: CSS compatibility, spam scoring, link validation, accessibility, images, inbox preview, size (Gmail clipping), template variables, content overflow, visual fallbacks, dark-mode and mobile text contrast, design consistency, structural faults in Outlook-only VML, style survival (CSS a client parses and then discards, such as a stylesheet past Gmail's 16 KB ceiling or every rule after a `}}`), and client targeting (HowToTarget hacks such as Gmail u+.body or MSO conditionals). For HTML input, findings tied to a specific element carry loc (line, column, offset). Compatibility is collapsed to one finding per problem listing the clients it affects; pass detail:'full' for the per-client breakdown with fix snippets. Use skip to omit checks, targetingPolicy to change how targeted scopes affect scores, and clients to narrow which clients are reported.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"html":{"type":"string","description":"The email source"},"format":{"description":"Source format: 'html' (default), 'jsx' (React Email), 'mjml', or 'maizzle' (HTML template or Vue single-file component). Anything but 'html' is compiled before analysis and sets the syntax of the fix snippets. A pasted Vue file with no format is compiled as maizzle.","type":"string","enum":["html","jsx","mjml","maizzle"]},"skip":{"description":"Checks to skip (e.g. ['spam', 'images'])","type":"array","items":{"type":"string","enum":["spam","links","accessibility","images","compatibility","inboxPreview","size","templateVariables","overflow","visual","darkContrast","mobileContrast","design","vml","styleSurvival","targeting"]}},"detail":{"description":"'summary' (default) returns one entry per error or warning, listing the clients it affects, and only counts info findings (safe fallbacks). 'full' returns one entry per client with fix snippets, info included.","type":"string","enum":["summary","full"]},"clients":{"description":"Only report these client IDs (e.g. ['gmail-web','outlook-windows']). The fastest way to cut the response when you care about specific clients. Use list_clients for the IDs.","type":"array","items":{"type":"string"}},"targetingPolicy":{"description":"'progressive' (default) suppresses compatibility false-positives inside client-targeted scopes and only flags deprecated or dangerous hacks. 'strict' treats targeting as non-standard and reports every hack. 'lenient' suppresses false positives and ignores non-fatal targeting warnings.","type":"string","enum":["progressive","strict","lenient"]},"emailType":{"description":"'transactional' (receipts, password resets, codes, alerts: no unsubscribe link required) or 'marketing'. Omitted: guessed from the content, which misses many transactional emails.","type":"string","enum":["marketing","transactional"]},"previousHtml":{"description":"The design to hold this version to, usually your first draft. Omitted: the first version of this email you audited recently (matched by <title> and text).","type":"string"}},"required":["html"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"build_email","description":"Generate a cross-client-compatible email from a brief using Emailens's self-healing loop (generate → score across 21 clients → repair). Output stays in the framework you choose. Returns a runId immediately , poll get_build_status for progress and the final code. Requires a Pro/Team API key.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"intent":{"type":"string","description":"What the email should be and contain , the brief to build from"},"format":{"description":"Output framework: 'html' (default), 'jsx', 'mjml', or 'maizzle'","type":"string","enum":["html","jsx","mjml","maizzle"]},"seedHtml":{"description":"Optional existing code to improve from instead of starting blank","type":"string"},"threshold":{"description":"Target compatibility score, 50-100 (default 90)","type":"number"},"maxIterations":{"description":"Max repair rounds, 1-8 (default 5)","type":"number"}},"required":["intent"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"capture_screenshots","description":"Capture real email screenshots across 21 clients (Gmail, Outlook, Apple Mail, etc.) with light and dark mode variants. Screenshots are rendered in real browsers and hosted on CDN.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"html":{"type":"string","description":"The email source"},"format":{"description":"Input format","type":"string","enum":["html","jsx","mjml","maizzle"]},"clients":{"description":"Filter to specific client IDs","type":"array","items":{"type":"string"}},"modes":{"description":"Screenshot modes (default: ['light'])","type":"array","items":{"type":"string","enum":["light","dark"]}},"title":{"description":"Name for the hosted preview","type":"string"}},"required":["html"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"check_deliverability","description":"Check email deliverability for a domain , SPF, DKIM, DMARC, MX, BIMI.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"domain":{"type":"string","minLength":3,"pattern":"^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$","description":"Domain to check (e.g. 'company.com')"}},"required":["domain"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"diff_emails","description":"Compare two email HTML versions , shows score changes, fixed issues, and regressions per client.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"before":{"type":"string","description":"Original email HTML"},"after":{"type":"string","description":"Modified email HTML"},"format":{"description":"Input format","type":"string","enum":["html","jsx","mjml","maizzle"]}},"required":["before","after"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"fix_email","description":"Generate a structured fix prompt for email compatibility issues.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"html":{"type":"string","description":"The email HTML source code to fix"},"format":{"description":"Input format , controls fix syntax","type":"string","enum":["html","jsx","mjml","maizzle"]},"scope":{"description":"Fix scope","type":"string","enum":["all","current"]},"selectedClientId":{"description":"Client ID for scoped fixes","type":"string"}},"required":["html"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_build_status","description":"Check a build_email run by runId , returns status, iteration, best compatibility score, and the current best source once available.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"runId":{"type":"string","description":"The runId returned by build_email"}},"required":["runId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_clients","description":"List all 21 supported email clients with IDs, names, rendering engines, dark mode support, and deprecation status. Use the returned IDs to filter other tools like preview_email or capture_screenshots.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"preview_email","description":"Full email compatibility preview , transforms HTML for 21 email clients, analyzes CSS, generates scores, simulates dark mode, checks inbox preview and email size.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"html":{"type":"string","description":"The email HTML source code"},"clients":{"description":"Optional client ID filter","type":"array","items":{"type":"string"}},"format":{"description":"Source format: 'html' (default), 'jsx' (React Email), 'mjml', or 'maizzle' (HTML template or Vue single-file component). Anything but 'html' is compiled before analysis and sets the syntax of the fix snippets. A pasted Vue file with no format is compiled as maizzle.","type":"string","enum":["html","jsx","mjml","maizzle"]},"targetingPolicy":{"description":"'progressive' (default) suppresses compatibility false-positives inside client-targeted scopes and only flags deprecated or dangerous hacks. 'strict' treats targeting as non-standard and reports every hack. 'lenient' suppresses false positives and ignores non-fatal targeting warnings.","type":"string","enum":["progressive","strict","lenient"]}},"required":["html"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"sandbox_get_inbox","description":"Retrieve or auto-create your Emailens sandbox test email address for capturing test emails.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"description":"Optional friendly name for the sandbox inbox","type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"sandbox_get_message","description":"Get complete email details: HTML/text body, parsed headers, spam score, SPF/DKIM/DMARC auth status, and validated links.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"messageId":{"type":"string","description":"ID of the sandbox message"}},"required":["messageId"],"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"sandbox_list_messages","description":"List recently captured test emails in the Emailens sandbox.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"inboxId":{"description":"Optional inbox ID filter","type":"string"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"sandbox_wait_for_email","description":"Poll and wait for a matching incoming test email in the sandbox (ideal for auth OTPs, magic links, transactional email assertions).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"inboxId":{"description":"Optional inbox ID filter","type":"string"},"subject":{"description":"Substring match for email subject (case-insensitive)","type":"string"},"sender":{"description":"Substring match for sender address (case-insensitive)","type":"string"},"timeoutSeconds":{"description":"Max seconds to wait (default: 30, max: 60)","type":"number"}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"share_preview","description":"Create a shareable link for an email preview. Recipients see the full analysis without needing an account. Requires the Dev plan or above.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"html":{"type":"string","description":"The email source"},"title":{"description":"Display title for the share page","type":"string"},"format":{"description":"Input format","type":"string","enum":["html","jsx","mjml","maizzle"]}},"required":["html"],"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":82,"grade":"B","scanned_at":"2026-11-01T06:16:44.269Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-11-01T06:16:44.219Z","components":{"code":{"score":25,"max":25,"notes":["2 source files scanned"]},"reliability":{"score":17,"max":20,"notes":["remote reachable in 2424ms"]},"poisoning":{"score":15,"max":15,"notes":["15 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 7 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://emailens.dev/api/mcp","reachable":true,"authRequired":false,"latencyMs":2424,"serverInfo":{"name":"emailens","version":"0.13.0"}}],"packages":[{"registryType":"npm","identifier":"@emailens/mcp","version":"0.15.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-10-29T07:44:27.789Z","repositoryUrl":"git+https://github.com/emailens/mcp.git","weeklyDownloads":1128}],"repo":{"found":true,"owner":"emailens","repo":"mcp","archived":false,"pushedAt":"2026-10-30T03:11:27Z","stars":7,"forks":1,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/263677535?v=4","ownerCreatedAt":"2026-02-24T14:23:40Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/263677535?v=4&s=128","source":"registry","width":128,"height":128},"presence":{"stars":7,"forks":1,"downloadsWeek":1128,"license":"MIT","lastPushAt":"2026-10-30T03:11:27.000Z","score":47}}}},"grade_history":[{"kind":"downgrade","fromGrade":"A","toGrade":"B","reason":"score 82: Write-action tools reachable without authentication","createdAt":"2026-11-01T06:16:46.716Z"}],"reviews":[]}