Skip to main content
Glama

Email rendering analysis for AI assistants

CI npm license MCP Registry Smithery GitHub stars

MCP server for email compatibility analysis. Analyze, preview, diff, and fix emails across 21 email clients, plus capture real screenshots and create shareable links with an optional API key.

Send HTML, MJML, Maizzle or React Email. Set format and the template is compiled before analysis, so what gets checked is the HTML your readers actually receive.

Why your assistant needs this: across the 298 CSS and HTML features we track, only 6 are fully supported in every major email client (see the data). Ask Claude to check your email before you send it.

Built on @emailens/engine. Also available as a GitHub Action.

Install

npx -y @emailens/mcp

Related MCP server: email-on-acid-mcp

Setup

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "emailens": {
      "command": "npx",
      "args": ["-y", "@emailens/mcp"]
    }
  }
}

Claude Code

claude mcp add emailens -- npx -y @emailens/mcp

With API Key (optional, unlocks screenshots + sharing)

{
  "mcpServers": {
    "emailens": {
      "command": "npx",
      "args": ["-y", "@emailens/mcp"],
      "env": {
        "EMAILENS_API_KEY": "ek_live_..."
      }
    }
  }
}

Get your free API key at emailens.dev/settings/api-keys.

Remote (no install)

Use the hosted endpoint: no npm or Node.js needed. API key required.

{
  "mcpServers": {
    "emailens": {
      "url": "https://emailens.dev/api/mcp",
      "headers": {
        "Authorization": "Bearer ek_live_..."
      }
    }
  }
}

Tools

Local Tools (no account needed)

preview_email

Full email compatibility preview: transforms HTML for 21 clients, analyzes CSS, generates scores, simulates dark mode, checks inbox preview and email size.

Parameter

Type

Required

Description

html

string

Yes

Email HTML source

clients

string[]

No

Filter to specific client IDs

format

enum

No

"html", "jsx", "mjml", "maizzle"

analyze_email

Quick CSS compatibility analysis; returns per-client scores and one finding per problem. Faster than audit_email when you only need CSS compatibility.

Parameter

Type

Required

Description

html

string

Yes

Email HTML source

format

enum

No

Input format

detail

enum

No

"summary" (default) or "full"

clients

string[]

No

Only report these client IDs

One finding per problem, not one per client. The engine reports per client because a score is per client, and per selector because a fix is per selector. On an ordinary newsletter border-radius arrives twelve times (two clients that drop it, six selectors that use it) with the same sentence in every copy. That was 286KB of JSON, about 73,000 tokens, for an 11KB email.

Findings group by property, severity and message, listing the clients affected, with positions merged across all of them. The same email now returns 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]
}

Fix snippets are not included; they were 93KB of that 286KB, and fix_email produces them for the issues you decide to act on. hasFix tells you one is available; fixType tells you whether the repair is markup or CSS.

Pass detail: "full" for the engine's per-client shape with snippets, and clients: ["gmail-web", "outlook-windows"] to report only what you care about: the fastest further saving, roughly halving the response for two clients. Scores stay whole-email either way: narrowing the report does not change what the email is worth elsewhere. An unknown client ID is rejected by name; an empty result would read as "this email is fine for that client".

Source positions. For HTML input, every warning carries loc (line, column, offset, length) for the first occurrence, plus alsoAtLines for any others, so an assistant can edit the exact source and knows where the rest are. audit_email positions its other findings the same way.

{
  "property": "border-radius",
  "loc": { "line": 7, "column": 8, "offset": 142, "length": 25 },
  "alsoAtLines": [12, 19]
}

Later occurrences are line numbers rather than full positions on purpose: this response is read by a model paying for every token, and a real newsletter can produce over a thousand occurrences; carrying them all in full nearly doubles the payload.

Positions are reported for html input only. JSX, MJML and Maizzle are compiled before analysis, so a line number would point into generated output rather than the file you have open: the tools omit it instead of returning one that looks authoritative.

audit_email

Comprehensive quality audit: CSS compatibility, spam scoring, link validation, accessibility, images, inbox preview, size (Gmail clipping), template variables, content overflow, visual bugs, dark-mode and mobile text contrast, and design consistency.

The last three cover what a light desktop preview cannot show: text that disappears when a client forces dark mode or when the email's own dark block repaints a surface without re-colouring the text on it, contrast below the email's breakpoint, and colours that differ by value but not to a reader.

Parameter

Type

Required

Description

html

string

Yes

Email HTML source

format

enum

No

Input format

detail

enum

No

"summary" (default) or "full"

clients

string[]

No

Only report these client IDs

skip

string[]

No

Checks to skip (e.g. ["spam", "images"])

fix_email

Generate a structured fix prompt for compatibility issues. Returns markdown with fix instructions that the AI can apply directly.

Parameter

Type

Required

Description

html

string

Yes

Email HTML to fix

format

enum

No

Controls fix syntax

scope

enum

No

"all" or "current"

selectedClientId

string

No

Client ID for scoped fixes

list_clients

List all 21 supported email clients with IDs, names, engines, and dark mode support.

diff_emails

Compare two email HTML versions; shows score changes, fixed issues, and introduced issues per client.

Parameter

Type

Required

Description

before

string

Yes

Original email HTML

after

string

Yes

Modified email HTML

format

enum

No

Input format

check_deliverability

Check email deliverability for a domain: SPF, DKIM, DMARC, MX, BIMI records with a score and actionable issues.

Parameter

Type

Required

Description

domain

string

Yes

Domain to check (e.g. "company.com")

Hosted Tools (require EMAILENS_API_KEY)

capture_screenshots

Capture real email screenshots across 21 clients in real browsers. Screenshots are hosted on CDN.

Parameter

Type

Required

Description

html

string

Yes

Email HTML source

format

enum

No

Input format

clients

string[]

No

Filter clients

modes

string[]

No

["light"], ["dark"], or ["light", "dark"]

title

string

No

Name for the preview

Free plan: 30 previews/day. Sign up

share_preview

Create a shareable link. Recipients see the full analysis without an account.

Parameter

Type

Required

Description

html

string

Yes

Email HTML source

title

string

No

Display title

format

enum

No

Input format

Requires Dev plan ($9/mo). Share links expire after 7 days (Dev) or never (Pro).

Template formats

format accepts html (the default), mjml, maizzle and jsx (React Email). Anything but html is compiled before analysis and also decides the syntax the fix snippets come back in.

Compiling matters more than it sounds. An email client renders the output, so that is what has to be checked: handed a raw <mjml> document, an HTML parser finds no CSS in it and reports a perfectly clean email. An answer like that is worse than an error, because an assistant will repeat it.

The compilers are not bundled. MJML alone pulls 56MB, and this server is usually started with npx, so the engine keeps them as optional peer dependencies:

npm install mjml                                              # MJML
npm install @maizzle/framework                                # Maizzle
npm install sucrase react @react-email/components @react-email/render  # React Email

They have to be installed where the server runs, which is not always somewhere you control. If it is not, compile the template yourself and send the resulting HTML with format: "html": the tools say so when they hit this.

Supported Email Clients (21)

Client

ID

Dark Mode

Notes

Gmail

gmail-web

Yes

Gmail Android

gmail-android

Yes

Gmail iOS

gmail-ios

Yes

Outlook 365

outlook-web

Yes

Outlook Windows

outlook-windows

No

Outlook Windows Legacy

outlook-windows-legacy

No

Deprecated Oct 2026

Outlook iOS

outlook-ios

Yes

New in v0.4.0

Outlook Android

outlook-android

Yes

New in v0.4.0

Outlook for Mac

outlook-macos

Yes

New in v0.10.0

Apple Mail

apple-mail-macos

Yes

Apple Mail iOS

apple-mail-ios

Yes

Yahoo Mail

yahoo-mail

Yes

Yahoo Mail Android

yahoo-mail-android

Yes

New in v0.10.0

Yahoo Mail iOS

yahoo-mail-ios

Yes

New in v0.10.0

Samsung Mail

samsung-mail

Yes

Thunderbird

thunderbird

No

HEY Mail

hey-mail

Yes

Proton Mail

protonmail

Yes

New in v0.10.0

AOL Mail

aol

Yes

New in v0.10.0

Fastmail

fastmail

Yes

New in v0.10.0

Superhuman

superhuman

Yes

Releasing

Two publishes: npm, and the MCP registry. The registry listing sat five releases behind because nothing pushed server.json, so that half is a workflow now. RELEASING.md has the details and the four places the version has to agree.

Development

bun install
bun run build
bun test
bun run typecheck

License

MIT


If this saved you from an Outlook surprise, a star helps other email developers find it.

Available Tools

9 tools
analyze_emailAnalyze EmailA
Read-onlyIdempotent
Inspect

Quick CSS compatibility analysis — returns warnings and per-client scores. Use audit_email for full quality report (spam, links, a11y, images, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYesThe email HTML source code
formatNoInput format for framework-specific fix snippets

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the agent knows this is a safe, non-destructive, repeatable operation. The description adds useful context about what the tool returns ('warnings and per-client scores') and its scope ('quick CSS compatibility analysis'), which goes beyond the annotations. However, it doesn't describe rate limits, authentication needs, or detailed behavioral traits beyond the basic operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (two sentences) with zero wasted words. The first sentence states the purpose and output, the second provides crucial usage guidance. Every sentence earns its place, and the information is front-loaded with the core functionality stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (CSS analysis with client-specific scoring), good annotations coverage, and 100% schema description, the description is mostly complete. It explains what the tool does, what it returns, and when to use it versus alternatives. The main gap is lack of output schema, so return values aren't formally documented, but the description does mention 'warnings and per-client scores' which helps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema already fully documents both parameters (html and format with enum values). The description doesn't add any parameter-specific information beyond what's in the schema. The baseline score of 3 is appropriate when the schema does all the parameter documentation work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('analyze', 'returns') and resources ('CSS compatibility', 'warnings and per-client scores'). It explicitly distinguishes from its sibling 'audit_email' by contrasting 'quick CSS compatibility analysis' versus 'full quality report (spam, links, a11y, images, etc.)', making the distinction clear and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool versus alternatives: 'Use audit_email for full quality report (spam, links, a11y, images, etc.)'. This clearly indicates that analyze_email is for quick CSS-focused analysis while audit_email is for comprehensive quality checks, giving the agent clear decision criteria between sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audit_emailAudit EmailA
Read-onlyIdempotent
Inspect

Comprehensive email quality audit — CSS compatibility, spam scoring, link validation, accessibility, images, inbox preview, size (Gmail clipping), and template variables. Use skip to omit specific checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYesThe email HTML source code
formatNoInput format for framework-specific fix snippets
skipNoChecks to skip (e.g. ['spam', 'images'])

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false, covering safety and idempotency. The description adds context about what the audit entails (e.g., checks for spam, accessibility, size) and the skip functionality, but does not disclose additional behavioral traits like rate limits, auth needs, or output format. With annotations present, the bar is lower, and this adds moderate value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose ('Comprehensive email quality audit') followed by a list of checks and usage note about 'skip,' all in two concise sentences. Every sentence earns its place by providing essential information without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (auditing multiple email aspects) and rich annotations, the description is mostly complete, covering what the tool does and how to customize checks. However, there is no output schema, and the description does not explain return values or potential errors, leaving a minor gap. For a read-only tool with good annotations, this is acceptable but not perfect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters (html, format, skip) thoroughly. The description mentions 'skip to omit specific checks,' which aligns with the schema but does not add significant meaning beyond it. With high schema coverage, the baseline is 3, and the description does not compensate with extra param details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs a 'comprehensive email quality audit' and lists specific checks (CSS compatibility, spam scoring, link validation, etc.), distinguishing it from sibling tools like analyze_email, fix_email, or preview_email which likely have different scopes. The verb 'audit' with the resource 'email' is specific and comprehensive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (for email quality audits covering multiple aspects) and mentions the 'skip' parameter to omit specific checks, implying flexibility. However, it does not explicitly state when not to use it or name alternatives among sibling tools (e.g., vs. analyze_email or check_deliverability), which would be needed for a score of 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

capture_screenshotsCapture ScreenshotsAInspect

Capture real email screenshots across 15 clients (Gmail, Outlook, Apple Mail, etc.) with light and dark mode variants. Screenshots are rendered in real browsers and hosted on CDN. Requires EMAILENS_API_KEY env var — free plan at emailens.dev?ref=mcp.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYesThe email HTML source code
formatNoInput format
clientsNoFilter to specific client IDs
modesNoScreenshot modes (default: ['light'])
titleNoName for the hosted preview

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations: it discloses the API key requirement (auth needs), mentions the free plan availability (cost/rate limit context), and describes the rendering method ('rendered in real browsers') and hosting location ('hosted on CDN'). These details aren't covered by the existing annotations, which only provide basic hints about mutability and idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured in two sentences: the first explains the core functionality and scope, the second covers implementation details and requirements. Every element serves a purpose with zero wasted words, making it easy to parse while being information-dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, no output schema, and annotations covering basic behavioral hints, the description provides good contextual completeness. It explains the rendering method, hosting, client support, and authentication requirements. The main gap is lack of information about return values or error handling, but given the annotations and parameter coverage, it's reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents all 5 parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline expectation but doesn't provide additional semantic context about how parameters interact or affect behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('capture real email screenshots'), resources involved ('across 15 clients'), and scope ('with light and dark mode variants'). It distinguishes itself from siblings like 'preview_email' or 'analyze_email' by emphasizing screenshot capture rather than analysis or previewing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by mentioning 'real email screenshots' and 'hosted on CDN', but doesn't explicitly state when to use this tool versus alternatives like 'preview_email' or 'share_preview'. It provides some prerequisites (API key requirement) but lacks explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_deliverabilityCheck DeliverabilityA
Read-onlyIdempotent
Inspect

Check email deliverability for a domain — SPF, DKIM, DMARC, MX, and BIMI records. Returns a score (0-100) and actionable issues. Uses DNS lookups (no API key needed).

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesDomain to check (e.g. 'company.com')

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond the annotations: it specifies that the tool performs DNS lookups, requires no API key, and returns a score (0-100) with actionable issues. While annotations already indicate it's read-only, non-destructive, idempotent, and open-world, the description enhances understanding of the tool's operational characteristics and output format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and well-structured in a single sentence that front-loads the core purpose, lists key features, and ends with implementation details. Every element ('Returns a score...', 'Uses DNS lookups...') adds essential information without redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (DNS-based analysis), rich annotations, and full schema coverage, the description is largely complete. It explains what the tool does, how it operates, and what it returns. The main gap is the lack of an output schema, but the description compensates by specifying the return format (score 0-100 with actionable issues).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema already fully documents the single 'domain' parameter. The description doesn't add any parameter-specific details beyond what's in the schema, so it meets the baseline of 3 for adequate but not enhanced parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Check email deliverability for a domain') and enumerates the exact resources examined (SPF, DKIM, DMARC, MX, and BIMI records). It distinguishes from siblings like 'analyze_email' or 'audit_email' by focusing specifically on DNS-based domain deliverability rather than email content analysis or broader audits.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context about when to use this tool ('Check email deliverability for a domain') and mentions it 'Uses DNS lookups (no API key needed)', which helps differentiate it from tools that might require authentication. However, it doesn't explicitly state when NOT to use it or name specific alternative tools among the siblings for different scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

diff_emailsDiff EmailsA
Read-onlyIdempotent
Inspect

Compare two email HTML versions — shows score changes, fixed issues, and newly introduced issues per client. Use after making fixes to verify improvements.

ParametersJSON Schema
NameRequiredDescriptionDefault
beforeYesOriginal email HTML
afterYesModified email HTML
formatNoInput format for framework-specific analysis

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the agent knows this is a safe, non-destructive operation. The description adds useful context about what the tool outputs ('score changes, fixed issues, and newly introduced issues per client'), which goes beyond the annotations but doesn't cover rate limits, authentication needs, or detailed behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise with two sentences that are front-loaded and waste no words. Every phrase ('Compare two email HTML versions', 'shows score changes...', 'Use after making fixes...') directly contributes to understanding the tool's purpose and usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, rich annotations, and 100% schema coverage, the description is mostly complete. It explains the tool's purpose, output types, and usage context well. However, without an output schema, it could benefit from more detail on return format or error handling, though this is partially mitigated by the clear behavioral context provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, maintaining the baseline score for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('compare', 'shows') and resources ('two email HTML versions'), distinguishing it from siblings like analyze_email or audit_email by focusing on comparison rather than standalone analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool ('Use after making fixes to verify improvements'), which helps differentiate it from siblings like fix_email or preview_email. However, it doesn't explicitly state when not to use it or name specific alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fix_emailFix EmailA
Read-onlyIdempotent
Inspect

Generate a structured fix prompt for email compatibility issues. Returns markdown with the original code, detected issues (CSS or structural), fix snippets, and format-specific instructions. Use after preview_email or analyze_email.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYesThe email HTML source code to fix
formatNoInput format — controls fix syntax
scopeNo'all' (default) or 'current' (requires selectedClientId)
selectedClientIdNoClient ID to scope fixes to (e.g. 'outlook-windows')

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable context beyond annotations: it specifies the output format ('Returns markdown with the original code, detected issues, fix snippets, and format-specific instructions'), which isn't covered by annotations. Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false, so the description doesn't contradict them and enhances understanding of the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by output details and usage guidelines in just two sentences, with zero wasted words—every sentence earns its place by adding essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 parameters, no output schema), the description is mostly complete: it covers purpose, output format, and usage context. However, it lacks details on error handling or specific behavioral constraints (e.g., rate limits), leaving minor gaps in full contextual understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema fully documents all parameters. The description adds minimal param semantics by mentioning 'format-specific instructions' (hinting at the format parameter's role) but doesn't provide significant additional meaning beyond what the schema already specifies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('Generate a structured fix prompt') and resources ('for email compatibility issues'), distinguishing it from siblings like analyze_email or preview_email by focusing on generating fixes rather than analysis or previewing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool ('Use after preview_email or analyze_email'), providing clear context and distinguishing it from alternatives by positioning it as a follow-up step to those specific tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_clientsList Email ClientsA
Read-onlyIdempotent
Inspect

List all 15 supported email clients with IDs, names, engines, and dark mode support.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering safety and idempotency. The description adds valuable context beyond annotations by specifying the exact count (15 clients) and data fields returned, which helps set expectations about the fixed dataset (openWorldHint=false supports this). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence efficiently conveys purpose, scope, and return data. Every word earns its place with no redundancy or fluff. Front-loaded with the core action ('List all 15 supported email clients').

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with rich annotations (safety, idempotency, closed world) and no parameters, the description is nearly complete. It specifies the dataset size and fields, though lacks output format details (e.g., structure, pagination). Since there's no output schema, this minor gap prevents a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0 parameters and 100% schema description coverage, the baseline is high. The description appropriately states there are no inputs needed, implicitly confirming the empty parameter set. It adds value by clarifying what data is returned, though this overlaps somewhat with what an output schema would provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and resource ('all 15 supported email clients'), specifying exactly what data is returned (IDs, names, engines, dark mode support). It distinguishes from siblings like 'analyze_email' or 'check_deliverability' by focusing on metadata listing rather than email analysis or testing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing client metadata, but provides no explicit guidance on when to use this tool versus alternatives like 'audit_email' or 'preview_email'. There's no mention of prerequisites, exclusions, or specific scenarios where this tool is preferred over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_emailPreview EmailA
Read-onlyIdempotent
Inspect

Full email compatibility preview — transforms HTML for 15 email clients (Gmail, Outlook, Apple Mail, Yahoo, Samsung, Thunderbird, HEY, Superhuman), analyzes CSS, generates scores, simulates dark mode, checks inbox preview and email size.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYesThe email HTML source code
clientsNoOptional client ID filter (e.g. ['gmail-web', 'outlook-windows'])
formatNoInput format: 'html' (default), 'jsx', 'mjml', or 'maizzle'

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, non-destructive, and idempotent behavior, so the description adds value by detailing specific capabilities beyond safety: it lists the 15 email clients supported, mentions analysis of CSS, scoring, dark mode simulation, and checks for inbox preview and size. This provides useful context about the tool's comprehensive preview features, though it doesn't cover rate limits or auth needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and efficiently lists key features in a single, dense sentence without waste. Every element (e.g., client list, analysis types) earns its place by informing the tool's scope, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, rich annotations, and 100% schema coverage, the description is largely complete: it details the preview functionality, client support, and analysis features. However, without an output schema, it doesn't explain return values like scores or preview data, leaving a minor gap in full context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents parameters like html, clients, and format. The description adds no additional parameter semantics beyond what's in the schema, such as examples or constraints, but doesn't need to compensate given the high coverage. The baseline score of 3 reflects adequate but no extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('preview — transforms HTML for 15 email clients') and resource ('email compatibility'), distinguishing it from siblings like analyze_email or audit_email by focusing on client-specific rendering rather than general analysis or compliance checks. It explicitly lists the key email clients covered, making the scope concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for email compatibility testing across clients, but does not explicitly state when to use this tool versus alternatives like analyze_email or capture_screenshots. It mentions specific features like dark mode simulation, which suggests use cases, but lacks direct guidance on tool selection or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

share_previewShare PreviewAInspect

Create a shareable link for an email preview. Recipients see the full analysis without needing an account. Requires EMAILENS_API_KEY env var and Dev plan ($9/mo).

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYesThe email HTML source code
titleNoDisplay title for the share page
formatNoInput format

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a non-readOnly, non-destructive, non-idempotent, openWorld operation. The description adds useful context about authentication requirements (EMAILENS_API_KEY) and cost (Dev plan $9/mo), which are not covered by annotations. However, it lacks details on rate limits, response format, or error handling, keeping the score at a moderate level.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence, followed by essential context in the second. Every sentence earns its place by providing critical information without redundancy, making it highly efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no output schema) and rich annotations, the description is mostly complete. It covers purpose, prerequisites, and key behavioral context, but it could improve by mentioning output details (e.g., what the shareable link looks like) or error cases, slightly reducing the score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema fully documents all parameters (html, title, format). The description does not add any semantic details beyond what the schema provides, such as examples or usage tips for the parameters. Thus, it meets the baseline but does not enhance understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Create a shareable link') and resource ('for an email preview'), distinguishing it from siblings like analyze_email, preview_email, or capture_screenshots. It specifies that recipients see 'full analysis without needing an account,' which further clarifies the tool's unique function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (to share email previews externally) and mentions prerequisites (EMAILENS_API_KEY env var and Dev plan), but it does not explicitly state when not to use it or name alternatives among siblings. This omission prevents a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.4.1
    • First observedanalyze_email
    • First observedaudit_email
    • First observedcapture_screenshots
    • First observedcheck_deliverability
    • First observeddiff_emails
    • First observedfix_email
    • First observedlist_clients
    • First observedpreview_email
    • First observedshare_preview

TDQS

A4.3/5.0

Scored across 9 tools

Disambiguation4/5

Most tools have distinct purposes, such as analyze_email for quick CSS checks, audit_email for comprehensive audits, and capture_screenshots for visual rendering. However, analyze_email and preview_email have some overlap in providing compatibility analysis, which could cause mild confusion, though descriptions clarify that preview_email is more comprehensive with transformations and simulations.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as analyze_email, audit_email, and capture_screenshots. This uniformity makes the tool set predictable and easy to navigate, with no deviations in naming conventions.

Tool Count5/5

With 9 tools, the server is well-scoped for email testing and quality assurance, covering analysis, auditing, previewing, fixing, and sharing. Each tool serves a clear function without redundancy, fitting the domain appropriately without being too sparse or bloated.

Completeness5/5

The tool set provides comprehensive coverage for email testing, including analysis (analyze_email, audit_email), visualization (capture_screenshots, preview_email), deliverability checks (check_deliverability), comparison (diff_emails), fixing (fix_email), client listing (list_clients), and sharing (share_preview). There are no obvious gaps, supporting a full workflow from creation to deployment.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An advanced email security analysis MCP server for real-time phishing detection, comprehensive header analysis, and threat intelligence integration. It enables users to extract indicators of compromise and validate email authentication protocols like DKIM, SPF, and DMARC.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server exposing every documented Email on Acid API v5 request as a tool — 24 tools across authentication, email client lists, email rendering testing, and spam testing.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Comprehensive email validation MCP server that checks syntax, MX records, disposable domains, role-based accounts, SPF/DKIM, typo suggestions, and risk scoring.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server providing email client compatibility data from caniemail.com, enabling agents to lint HTML/CSS for email client support, check feature support across clients, and search for features by keyword, with verdicts including supported, unsupported, mitigated, and untested.
    1
    MIT