Back to Directory/Communication

MX Probe

Email verification for AI agents: send, hold or kill with the reason. Signup and credits by API.

CommunicationTypeScriptv0.2.6

MX Probe

Email verification for AI agents. One call returns send, hold or kill for an address, with the reason. Signup and credits happen by API too, so an outreach agent can provision itself. No form, no CAPTCHA, no dashboard.

npx mxprobe check hello@example.com          # free DNS tier, local, no key
npx mxprobe check --hosted hello@example.com # survivors go to the hosted SMTP probe
claude mcp add mxprobe -- npx -y mxprobe mcp # the MCP server
{
  "email": "hello@example.com",
  "action": "send",
  "verdict": "OK",
  "reason": "mailbox accepted by aspmx.l.google.com",
  "checks": { "syntax": true, "mx": "aspmx.l.google.com", "smtp": "accepted", "catch_all": false }
}

action is send, hold or kill; verdict is OK, WEAK or DEAD. A hold never becomes a kill on a refusal, a greylist or a catch-all. Only a 5xx that names the mailbox kills.

Layout

PathWhat
packages/coreThe engine: DNS tier, SMTP probe, the verdict contract and the API's wire types. Zero dependencies.
packages/cli`npx mxprobe check
serverThe hosted API: node:http + node:sqlite, Stripe Checkout, Resend, Telegram.
siteThe landing page, static.
deployCaddyfile, systemd units, the install script and the runbook.

Develop

Everything is TypeScript (strict, ESM). Each package compiles its src/ to dist/ with tsc -b; the published packages ship dist/ only. mxprobe and the server import mxprobe-core through the workspace link to its dist/, so pnpm build at the root (which runs the packages in dependency order) must come before a single package's test or typecheck. Tests are .ts files that Node runs directly with its built-in type stripping.

pnpm install
pnpm build                      # tsc -b in each package, core first
pnpm test                       # builds, then: fake resolver, fake SMTP server, in-memory SQLite. No network.
pnpm typecheck                  # the sources and the tests, without emitting
pnpm test:live                  # the DNS tier against the real network
pnpm check a@b.com              # the CLI from this checkout
cp server/.env.example server/.env && pnpm dev:server

Node 22.18 or newer (24 recommended) to develop and to run the tests; the compiled engine and CLI run on Node 20, the server on 22.13 or newer (node:sqlite).

Pricing

100 checks free at signup, then 9 USD per 10,000, one payment, credits never expire. Addresses are logged for 24 hours for debugging and then deleted.

MIT.

Installation

Source-derived launch command. Check the maintainer’s required arguments and credentials before running:

bash
npx -y mxprobe

Set up in your AI client

Merge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.

json
{
  "mcpServers": {
    "dev-mxprobe-mxprobe": {
      "command": "npx",
      "args": [
        "-y",
        "mxprobe"
      ]
    }
  }
}

Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.

Claude Desktop setup reference

Package

mxprobenpm

Compatible MCP Clients

MX Probe works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.

  • Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.
  • Cursor~/.cursor/mcp.jsonRestart Cursor for changes to take effect.
  • VS Code.vscode/mcp.jsonReload VS Code window for changes to take effect.
  • Windsurf~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect.
  • Claude Code.mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.

Learn More