An agent skill and an MCP server that check HTML email against caniemail.com.
Install Quickstart Tools Verdicts How it works
Power your agent
คำสั่งของผู้เผยแพร่เอง ไม่ใช่เอนด์พอยต์ของ PlugMCP
Host a copy with our keys and logs.
npx -y [email protected]Claude Code ไม่มีลิงก์ติดตั้งสำหรับคำสั่งแบบโลคัล ให้คัดลอกคำสั่งด้านล่างแล้วรันในเทอร์มินัล
claude mcp add mcp-server-caniemail -- npx -y mcp-server-caniemail@0.4.1รันในเทอร์มินัล
{ "mcpServers": { "mcp-server-caniemail": { "command": "npx", "args": [ "-y", "[email protected]" ] } }}claude_desktop_config.json
URL แบบรีโมตหรือคำสั่งบนเครื่องของคุณ? การติดตั้งสองแบบต่างกันอย่างไร
รันบน PlugMCP
A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.
เปิดEmail clients are not browsers. Outlook on Windows renders with Microsoft Word, and the gap between "works with a workaround" and "nobody has ever tested this" decides whether an email ships broken. caniemail.com has the data, and this puts it where an agent can use it while it writes.
css-display-flex cost about 200 tokens instead of a 620KB dataset.css-border-radius.mitigated verdict carries the note that says how, such as VML RoundRect for corners in Outlook.The skill and the MCP server share one core and answer identically. Pick by where your agent runs.
Install it into .agents/skills/ in the current project, or add -g for ~/.agents/skills/:
npx skills add shbernal/caniemail-ai-tooling
The skill has no dependencies, so there is nothing to install after it.
Add this to your client's MCP config:
{
"mcpServers": {
"caniemail": {
"command": "npx",
"args": ["-y", "mcp-server-caniemail"]
}
}
}
Its only dependencies are the MCP SDK and zod.
Set CANIEMAIL_OFFLINE=1 in its environment to skip the network and use the bundled snapshot.
lint_email against those clients, and rewrites whatever comes back unsupported.The skill also ships a CLI, which is what the agent runs and works the same by hand:
node skill/scripts/caniemail.mjs lint --html draft.html --clients 'outlook.windows,gmail.*'
Client lists take family.platform globs: outlook.windows, gmail.*, *.ios, or * for every client.
Three tools, deliberately not one. A single "give me the caniemail data" tool would return 620KB of JSON, about 300 features across 48 clients, and fill an agent's context before it did anything useful.
A fourth, list_email_clients, is rarely needed, because the client roster is already in the other tools' descriptions.
The dataset distinguishes four states, and collapsing them gives confidently wrong advice.
About a sixth of the matrix is untested, and some entries have not been retested in five years.
Every result carries last_test_date, and check_feature_support adds a staleness note when the data is old.
caniemail package?This started as a wrapper over the caniemail npm package.
It stopped being one because the package gives wrong answers on exactly the parts of the data an agent needs most.
docs/why-not-a-wrapper.md has the full account of each defect. The package stays a devDependency, because a differential test suite checks every fixture against it.
flowchart LR
A[Agent] -->|CLI| S[skill]
A -->|stdio| M[MCP server]
S --> C[core]
M --> C
C --> D[detect: markup to features, one parse]
C --> R[resolve: feature and client to verdict]
R --> L[(caniemail.com, then cache, then snapshot)]
One core, core/caniemail-core.mjs, does all the work.
The skill and the MCP server each carry a byte-identical copy of it, so they cannot drift apart.
Detection answers "what does this markup use?" without asking about any client. Resolution answers "does this client support it?" against the raw dataset, keeping all four verdicts and never re-sorting versions.
The dataset comes from caniemail.com at runtime and is cached for a day.
A response that doesn't look like the dataset is rejected, and the core falls back to the cache, then to the snapshot in core/data/caniemail.json.
The MCP server revalidates every 15 minutes, so an editor left open for a week does not keep reporting its first load as live.
Rendering only, meaning whether markup displays correctly in a given client. Deliverability, SPF, DKIM, DMARC, BIMI, list management and choosing an ESP are different problems, and caniemail data cannot answer them.
The caniemail dataset is a separate work, MIT, © 2019 Rémi Parmentier.
The caniemail npm package, used here only as a development-time reference, is MIT, © Andrew Powell.
MCP server for email client HTML/CSS compatibility, backed by caniemail.com
{ "mcpServers": { "mcp-server-caniemail": { "command": "npx", "args": [ "-y", "[email protected]" ] } }}เครื่องมือ
ยังไม่มีรายการเครื่องมือ เซิร์ฟเวอร์แบบรีโมตจะได้รายการหลังการตรวจสอบสถานะครั้งแรก
FAQ
คัดลอกคอนฟิก stdio สำหรับ Cursor, Claude Desktop, Claude Code หรือ VS Code ได้ในหน้านี้ คอนฟิกนี้ใช้การติดตั้งของผู้เผยแพร่ ไม่ใช่พร็อกซีของ PlugMCP
ระเบียนนี้ไม่ได้ระบุตัวแปรสภาพแวดล้อมที่จำเป็น
MCP Server Caniemail ทำงานแบบโลคัลผ่าน stdio
ตรวจสอบล่าสุดเมื่อ 2026-11-14 MCP server for email client HTML/CSS compatibility, backed by caniemail.com