emailmd

Turn markdown into email-safe HTML, check drafts for deliverability issues and get a preview link

Official · anypost TypeScript Remote (hosted) · Streamable HTTPLocal · stdio Developer toolsCommunication

68 popularity score ★ 1.4k ↓ 5.3k/wk

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http emailmd https://www.emailmd.dev/api/mcp
Claude (desktop and web)Settings → Connectors → Add custom connector
https://www.emailmd.dev/api/mcp
ChatGPTSettings → Apps → Advanced → Developer mode, then Create app
https://www.emailmd.dev/api/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "emailmd": {
      "url": "https://www.emailmd.dev/api/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "emailmd": {
      "type": "http",
      "url": "https://www.emailmd.dev/api/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.emailmd]
url = "https://www.emailmd.dev/api/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http emailmd https://www.emailmd.dev/api/mcp
Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add emailmd -- npx emailmd mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "emailmd": {
      "command": "npx",
      "args": [
        "emailmd",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "emailmd": {
      "command": "npx",
      "args": [
        "emailmd",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "emailmd": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "emailmd",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.emailmd]
command = "npx"
args = ["emailmd", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user emailmd npx -- emailmd mcp

What it does

emailmd is a markdown-to-email converter built on MJML, and its npm package includes an MCP server, started with the `mcp` subcommand of its command-line program. An assistant connected to it can write an email in emailmd's extended markdown (buttons, charts, KPI tiles and other directives), check it for problems, and turn it into a full HTML document plus a plain-text part ready to hand to a sending service.

There are three tools. `render` returns the HTML, the plain text, frontmatter metadata, any repairs made while rendering, the HTML size in bytes and a preview link; it minifies the HTML only when asked. `lint` checks a draft for deliverability, accessibility and readability issues, such as missing alt text, plain http links, generic link text, spam-trigger phrases and Gmail's 102KB clipping limit, and returns the findings with a count of warnings and suggestions, without rendering. `read_docs` fetches the emailmd docs index or one docs page so the assistant can look up syntax. The server also sends the client a built-in instruction text covering the write, lint, render, share workflow.

The preview link opens the emailmd web builder with the markdown compressed into the URL fragment, so the draft itself is not sent to the site when the link is opened. Both `render` and `lint` accept named partials, inserted where a document says `::: include <name>`; the local server can preload a folder of them with `--partials`.

It runs two ways: a hosted Streamable HTTP endpoint at emailmd.dev that needs no sign-in, or locally over stdio with `npx emailmd mcp`, where rendering happens on your own machine. The source (src/mcp.ts at v0.13.2) rejects markdown or any single partial over 256KB and partial names over 200 characters. Even when run locally, `read_docs` fetches pages over the network from www.emailmd.dev.

What it needs

To run it yourselfNode.js 20+

For the local server: Node.js 20 or newer (required since v0.3.0, which moved to MJML 5) and network access to npm for npx. For the hosted endpoint: an MCP client that supports Streamable HTTP; ChatGPT needs developer mode switched on before you can add it as a connector. No account or API key is needed either way.

Limits

It only produces HTML and text. It does not send email, manage contacts or connect to any mail provider. Markdown input and each partial are capped at 256KB, and partial names at 200 characters. `read_docs` needs network access to www.emailmd.dev, including when run locally. The project is pre-1.0 and its README warns that the API may change between minor versions, and the MCP tool names and result shapes follow the same stability policy. The hosted endpoint always runs the latest release, while the local server runs whatever version npx installs.

Who it suits

A good fit for developers writing transactional or marketing emails who want an assistant to draft them in markdown and get back HTML that holds up across mail clients, plus a lint pass before sending. Pick the hosted endpoint for no setup and the local stdio server to keep rendering on your own machine or to preload partials. It does no sending, so pair it with a server for your mail provider if you want the assistant to deliver the result. It only reads and returns content, so it is low-stakes to connect.

Tools 3

render
Converts emailmd markdown to a full HTML email plus plain text, metadata, warnings, size and a preview link
lint
Checks a draft for deliverability, accessibility and readability problems without rendering it
read_docs
Fetches the emailmd docs index, or one docs page by path, from emailmd.dev

Similar servers