npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mcp-server-caniemail

v0.2.0

Published

MCP server for email client HTML/CSS compatibility, backed by caniemail.com

Readme

mcp-server-caniemail

MCP server giving an AI agent email client HTML/CSS compatibility data, backed by caniemail.com.

Email clients are not browsers. Outlook on Windows renders with Microsoft Word, support for anything modern is patchy, and the difference between "works with a workaround" and "nobody has ever tested this" decides whether an email ships broken.

Install

{
  "mcpServers": {
    "caniemail": {
      "command": "npx",
      "args": ["-y", "mcp-server-caniemail"]
    }
  }
}

Node 22+. Set CANIEMAIL_OFFLINE=1 to skip the network and use the bundled dataset.

Tools

  • lint_email — give it drafted HTML and/or CSS plus a client list; returns only what breaks, with every source position the feature was used at, affected clients, documented workarounds, and a feature URL. Passing features are never returned.
  • check_feature_support — per-client verdicts for one feature, for deciding how to build something rather than checking what you built.
  • search_features — find feature slugs by keyword. Slugs are not guessable: "rounded corners" is css-border-radius, flexbox is css-display-flex.
  • list_email_clients — the roster of 48 clients with display names. It is inlined into the other tools' descriptions, so this is rarely needed.

Four verdicts, not a boolean

| Verdict | Severity | Meaning | |---|---|---| | supported | — | Use it. | | unsupported | error | Will not render. Use a fallback. | | mitigated | warning | Works with a documented workaround — the note is the answer. | | untested | unknown | No data. Not evidence of support, or against it. |

Around a sixth of the matrix is untested. Results also carry last_test_date and a staleness note, because some entries have not been retested in five years.

Data is fetched from caniemail.com and cached for 24 hours; every result names which copy answered via data_source. The server revalidates as it runs rather than loading once at startup, so a session left open for days does not keep answering from the copy it fetched on the first morning. Startup itself touches no network — the handshake never waits on caniemail.com.

lint_email is sized for an agent's context. A finding carries only what its verdict decides — the severity, the clients affected, the notes — and everything that does not vary by verdict is stated once in a features legend keyed by slug: the title, the URL, the last test date, and positions, every place the markup uses the feature, as "line:col-line:col" strings with an occurrence_count. clients_affected is compressed against the clients you asked for ("*", "outlook.*", with client_count always exact), and the per-severity advice is a second legend, guidance, rather than a paragraph repeated on every finding.

Scope

Rendering only. Nothing about deliverability, SPF/DKIM/DMARC/BIMI, list management, or choosing between ESPs.

License

MIT. The caniemail dataset is a separate work — MIT, © 2019 Rémi Parmentier — fetched at runtime rather than redistributed here.

Source: https://github.com/shbernal/caniemail-ai-tooling