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 a few thousand cold emails, and hundreds bounced. Some bounces arrived days later, after the mail had already been counted as delivered. Those addresses were on domains that cannot receive mail at all, which a one-second check catches before you send. The rest were mailboxes that no longer exist, which only asking the mail server reveals. Run over the same list afterwards, this checker would have stopped about half of the bounces, and it cleared every address that had actually been delivered.

Tell me what is missing