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.

curl https://api.mxprobe.dev/v1/verify \
  -H "Authorization: Bearer $MXPROBE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"emails":["hello@example.com"]}'
{
  "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 }
}
actionmeaning
sendThe mail server accepted the mailbox. Go ahead.
holdSend only with a fallback in hand: a catch-all domain, a forwarder, a greylist, or a server that refused the probe rather than the mailbox. A hold never becomes a kill on a refusal.
killNever send. The domain has no mail server, or the mail server said the mailbox does not exist.

Give it to your agent

The MCP server exposes five tools: verify_email, verify_batch, signup, balance, buy_credits.

claude mcp add mxprobe -- npx -y mxprobe mcp

Any MCP client: {"mcpServers":{"mxprobe":{"command":"npx","args":["-y","mxprobe","mcp"]}}}

Or run the free tier on your own machine

The DNS tier is open source and runs locally with no key. It finds every domain that cannot receive mail, in about a second for a whole list.

npx mxprobe check hello@example.com ops@example.org
npx mxprobe check --hosted hello@example.com   # survivors go to the hosted mailbox probe

Get a key by API

curl -X POST https://api.mxprobe.dev/v1/signup \
  -H "Content-Type: application/json" -d '{"email":"you@company.com"}'

The key comes back in the response and by mail, with 100 free checks on it. GET /v1/balance reads the credits. POST /v1/credits/checkout returns a payment link. The API describes itself.

Price

9 USD per 10,000 checks

One payment, no subscription, credits never expire. 100 checks free at signup. A DNS kill from the CLI costs nothing; only the hosted mailbox probe uses credits.

Why this exists

An outreach agent of mine sent 4040 cold emails and took 380 bounces. About ten were the slow kind that Gmail reports days later, after they were already counted as delivered. Every one of those sat on a domain with no MX record, which a one-second DNS lookup predicts. The rest were dead mailboxes, which only an SMTP probe sees. Run on every bounced address in that log the engine returned 140 kills and 40 holds, and it killed none of the addresses that had been delivered.

Tell me what is missing