Verify Emails Inside Claude or Cursor With an MCP Server
To verify emails inside Claude or Cursor, connect SimpleVerifier's MCP server at https://simpleverifier.com/api/mcp with your API key. In Claude Code that is one claude mcp add --transport http command; in Cursor it is a short block in ~/.cursor/mcp.json. After that you can ask "check jane@company.com" or paste a list, and the assistant calls verify_email or verify_emails and returns valid, risky or invalid with a reason for each address. You need a plan with API access.
Full reference: MCP server docs.
Step 1: get an API key
Create a key on the API keys page in your dashboard. It starts with sv_live_. Keep it out of shared files: anyone with the key can use your plan.
Step 2: connect your client
Claude Code
claude mcp add --transport http simpleverifier https://simpleverifier.com/api/mcp \
--header "Authorization: Bearer $SIMPLEVERIFIER_KEY"
Check it with claude mcp list, or /mcp inside a session. The default scope is local (only you, only this project). Avoid --scope project for this server, because that writes a shared .mcp.json and your key would go with it.
Cursor
{
"mcpServers": {
"simpleverifier": {
"url": "https://simpleverifier.com/api/mcp",
"headers": { "Authorization": "Bearer ${env:SIMPLEVERIFIER_KEY}" }
}
}
}
Put it in ~/.cursor/mcp.json or a project's .cursor/mcp.json. ${env:SIMPLEVERIFIER_KEY} reads the key from the environment, so it never sits in a file that might be committed. Cursor asks for approval before using MCP tools by default; leave that on while you test.
Claude Desktop, ChatGPT and claude.ai are covered on the docs page. ChatGPT and claude.ai find the OAuth sign-in from the server itself, so there is no key to paste.
Step 3: what the assistant can do
| Tool | Use it for |
|---|---|
verify_email |
One address, with status, reason and send advice |
verify_emails |
Up to 100 addresses in one call, deduplicated; returns every result or a job_id |
get_job_results |
Progress and per-address results of a verify_emails job |
check_domain |
A domain's MX, SPF and DMARC, disposable status, and an optional catch-all probe (check_catch_all: false skips it) |
check_phone_format |
Format, E.164 form, country and allocated line type. It does not contact any network. |
get_usage |
What is left on your plan |
A single mailbox check can take up to 30 seconds when a mail server is slow, so expect some pauses on big lists.
Prompts that work
- "Check these 20 addresses and give me only the invalid ones as a list."
- "Before you write this outreach email, verify the recipient and stop if it is invalid."
- "Check the domain acme.com for MX and catch-all."
Reading the answers
The answers are the same as the API: valid (mailbox confirmed), risky (unconfirmed, such as a catch-all or a provider that hides mailbox status) or invalid (will bounce). Tell your agent that risky does not mean fine, or it may treat it as a pass. For catch-all rows, see catch-all emails: what to do.
Run 100 free checks in the dashboard first to see the result format before you wire up an agent.
Disconnecting
Open the API keys page and use Disconnect under Connected apps for OAuth clients; their tokens stop working immediately. Revoke an API key on the same page. Plans with API access are on pricing.
Common questions
How do I verify emails in Claude Code?
Run claude mcp add --transport http simpleverifier https://simpleverifier.com/api/mcp --header "Authorization: Bearer YOUR_API_KEY", then check it with claude mcp list or /mcp inside a session. Ask Claude to check an address and it calls verify_email.
How do I add the SimpleVerifier MCP server to Cursor?
Add a simpleverifier entry to ~/.cursor/mcp.json (or a project's .cursor/mcp.json) with the URL https://simpleverifier.com/api/mcp and an Authorization: Bearer header. Use ${env:SIMPLEVERIFIER_KEY} so the key is not in the file.
Do I need a paid plan to use the MCP server?
Yes, a plan with API access. Starter and Growth cover CSV verification in the dashboard only; the server returns a message linking to pricing if the plan has no API access.
Can the MCP server tell me if a phone number is in service?
No. check_phone_format checks the number against its country's numbering plan and returns the E.164 form, country and the line type the range is allocated for. It does not contact any network.
Does a risky result mean the address is fine?
No. Risky means the domain takes mail but the mailbox could not be confirmed, for example a catch-all domain or a provider that hides mailbox status. Treat it as unconfirmed.
Check your list before you send
Real mailbox checks over SMTP, and nothing is sent to the address. Sign in with Google and your first 100 email checks are free, no card. Plans for bigger lists are on the pricing page.