I needed to check disposable emails inside a Claude workflow. The usual options: write an integration from scratch, find a library, maintain it. None of that.
Emailyze runs a hosted MCP server. You add its URL to your Claude Desktop or Cursor config, restart the app, and check_email is available as a native tool. No installation. No local process. Nothing to maintain.
Here's the whole setup.
Open your Claude Desktop config at ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows).
Add this:
{
"mcpServers": {
"emailyze": {
"url": "https://api.emailyze.xyz/mcp/",
"headers": {
"x-api-key": "YOUR_EMAILYZE_API_KEY"
}
}
}
}
For Cursor, same block in ~/.cursor/mcp.json.
Get a key at [emailyze.xyz](https://emailyze.xyz) — the free tier covers 1,000 checks/month.
Restart your AI client. Done.
I typed this in Claude Desktop:
> Check fake@guerrillamail.com — is it a real address?
Claude's response:
> [calls check_email("fake@guerrillamail.com")] > > guerrillamail.com is a well-known disposable email provider. Risk score: 92/100. Provider type: disposable. The domain has valid MX records and is catch-all (accepts any address). I'd recommend blocking this at signup.
Then I tried a batch:
> Which of these are safe to send to? > alice@gmail.com, bob@tempmail.com, carol@proton.me, dave@guerrillamail.com
Claude called check_emails_batch with all four and summarized:
> - alice@gmail.com — Safe. Personal provider, risk score 5. > - bob@tempmail.com — Block. Disposable, risk score 90. > - carol@proton.me — Safe. Personal provider, risk score 8. > - dave@guerrillamail.com — Block. Disposable, risk score 92. > > Two should be blocked. Two are legitimate personal addresses.
In Cursor, it works the same way from the Chat panel. Useful when you're reviewing a registration handler and want to sanity-check what risk scores look like for your validation logic.
Two tools are available:
check_email(email, verify?) — Single address or domain. Returns is_disposable, risk_score (0–100), provider_type, mx_valid, catch_all, and more. Set verify: true for SMTP deliverability probes (adds ~1–3s).
check_emails_batch(emails, verify?) — Up to 1,000 addresses at once.
The response fields:
| Field | What it means | |-------|---------------| | is_disposable | true for throwaway providers | | risk_score | 0–100. 80+ suggests blocking; 50–79 worth reviewing | | provider_type | disposable, personal (Gmail, Outlook), masked (Apple Hide My Email), unknown | | mx_valid | Domain has working mail exchange records | | catch_all | Domain accepts all addresses — common with disposable providers |
The older pattern for MCP tools required running a process locally: install a Python package, configure a command + args in the config, manage a Python environment. That's fine for tools that need local filesystem access.
For an API-backed tool, a remote server is cleaner:
The tradeoff: you're making a network request instead of a local call. For an email check that already hits an external API, the latency difference is negligible.
Tools not showing up: Make sure the JSON is valid (no trailing commas) and the URL has a trailing slash. Fully quit and relaunch.
401 error: Check that the header key is x-api-key (lowercase). Verify your key is active in the dashboard.
Cursor "No server info found": The server URL is probably unreachable. Open https://api.emailyze.xyz/mcp/ in a browser — you should see a 401 response, confirming the server is up.
Full setup guide with more detail: [MCP Setup Guide](/blog/mcp-guide)
Get a free API key at [emailyze.xyz](https://emailyze.xyz). 1,000 checks/month, no credit card.