emailmd
Render markdown into email-safe HTML, lint drafts for deliverability problems, and preview emails.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"emailmd": {
"command": "npx",
"args": [
"emailmd"
]
}
}
}Runnable packages
0.11.0stdioRemote endpoints
https://www.emailmd.dev/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (3)
⚪render(markdown, minify, partials)
Render emailmd markdown into email-safe HTML. Returns html (the complete email document), text (the plain-text MIME part), meta (frontmatter), warnings (non-fatal repairs made while rendering; aim for none), htmlBytes, and previewUrl (a live browser preview of this exact document to share with the user).
Input Schema
{
"type": "object",
"properties": {
"markdown": {
"type": "string",
"maxLength": 262144,
"description": "The emailmd markdown document, optionally starting with YAML frontmatter."
},
"minify": {
"description": "Minify the HTML. Recommended for sending; helps stay under Gmail's 102KB clip limit.",
"type": "boolean"
},
"partials": {
"description": "Named markdown partials spliced in wherever the document says \"::: include <name>\".",
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 200
},
"additionalProperties": {
"type": "string",
"maxLength": 262144
}
}
},
"required": [
"markdown"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢lint(markdown, partials)
Check emailmd markdown for deliverability, accessibility, and readability problems without rendering it: missing alt text, http:// links, Gmail's 102KB clip limit, generic link text, spam-trigger phrases, and more. Fix warnings before sending; suggestions are sometimes intentional (e.g. transactional emails without an unsubscribe link).
Input Schema
{
"type": "object",
"properties": {
"markdown": {
"type": "string",
"maxLength": 262144,
"description": "The emailmd markdown document, optionally starting with YAML frontmatter."
},
"partials": {
"description": "Named markdown partials spliced in wherever the document says \"::: include <name>\".",
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 200
},
"additionalProperties": {
"type": "string",
"maxLength": 262144
}
}
},
"required": [
"markdown"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢read_docs(page)
Fetch emailmd documentation from emailmd.dev. Call with no arguments for the index of all pages; pass page to read one (e.g. 'buttons', 'frontmatter', 'theme', 'directives/hero'). Read the relevant page before using syntax you are not sure about.
Input Schema
{
"type": "object",
"properties": {
"page": {
"description": "Docs page path, e.g. 'buttons' or 'directives/hero'. Omit for the index.",
"type": "string",
"maxLength": 200,
"pattern": "^[a-z0-9][a-z0-9/-]*$"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence