BounceLens Email Check
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@BounceLens Email Checkis jane@outlok.com a real address?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
BounceLens Email Check – MCP server
Lets Claude, Cursor and other MCP clients check email addresses before you send to them or save them. It finds:
Typos in the domain:
jane@gmial.com→ did you meanjane@gmail.com?Disposable / throwaway domains (mailinator.com, 10minutemail and ~9,000 more)
Dead domains: the domain doesn't exist, has no mail server, or says it accepts no email (null MX)
Bad syntax, role addresses (info@, sales@), free providers, and duplicates (Gmail dot and +tag variants count as the same inbox)
The mail provider behind the domain (Google, Microsoft, Proofpoint, …)
Runs on your machine. No API key, no account, no sign-up. The only network calls are DNS lookups over HTTPS (Cloudflare 1.1.1.1). It uses the same checks as the free checker at bouncelens.com.
It never connects to the recipient's mail server, so it can't confirm that a mailbox exists. The best result is
unconfirmed(format and domain OK). To check a whole CSV in your browser, use bouncelens.com.
Install
Requires Node.js 18 or newer. Also listed on Smithery.
Claude Code
claude mcp add bouncelens -- npx -y github:bouncelens/mcp-email-checkClaude Desktop, Cursor, Windsurf and other clients. Add this to the client's MCP config (claude_desktop_config.json, .cursor/mcp.json, …):
{
"mcpServers": {
"bouncelens": {
"command": "npx",
"args": ["-y", "github:bouncelens/mcp-email-check"]
}
}
}From a clone
git clone https://github.com/bouncelens/mcp-email-check.git
cd mcp-email-check && npm install
# then use: "command": "node", "args": ["/path/to/mcp-email-check/index.js"]Related MCP server: email-verify
Tools
Tool | Input | Returns |
|
| One result |
|
|
|
Each result (real output for a mistyped Outlook address):
{
"input": "jane@outlok.com",
"email": "jane@outlok.com",
"status": "risky",
"reasons": ["No MX record; mail would go to the website server", "Looks like a typo of outlook.com"],
"flags": { "disposable": false, "role": false, "free": false, "duplicate": false, "gateway": false },
"did_you_mean": "jane@outlook.com",
"provider": null,
"mx": null
}status | Meaning |
| Will bounce: bad syntax, domain doesn't exist, no mail server, or null MX |
| Disposable domain, likely typo, no MX record (mail would go to the web server), or the DNS lookup failed |
| Format and domain OK. The mailbox itself isn't checked |
Example prompts
"Check these sign-ups for fake or mistyped emails: …"
"Is jane@outlok.com a real address?"
"Clean this list: drop invalid and disposable addresses, fix the typos, remove duplicates."
Privacy
Addresses never leave your machine. Only the domain part is sent to Cloudflare's DNS-over-HTTPS resolver (1.1.1.1) to look up its MX/A records.
Development
npm install
npm test # offline: DNS answers are fakedlib/engine.js and data/disposable.json are generated from the BounceLens main codebase, so change them there.
More from BounceLens
bouncelens.com – free email list checker in your browser (CSV in, clean list out)
Craft CMS plugin – blocks fake and mistyped emails in Craft forms
License
MIT. Disposable-domain list: disposable-email-domains (CC0).
Available Tools
2 toolscheck_emailCheck one email addressARead-only
Check one email address for bad syntax, typos in the domain (gmial.com → gmail.com), disposable/throwaway domains, role addresses (info@, sales@) and domains that do not exist or have no mail server. status is "invalid" (will bounce: bad syntax, domain does not exist, no mail server), "risky" (disposable domain, likely typo such as gmial.com, no MX record) or "unconfirmed" (format and domain OK; the mailbox itself is not checked). did_you_mean holds the corrected address for typos.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | The email address to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, so the description carries the substantive behavioral load and does it well: it explains what each status means, that an 'unconfirmed' result means the mailbox itself was not verified, and how did_you_mean is populated. It stops short of noting rate limits, quota, or whether the check is real-time, but the core semantics are unusually well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct load: what is checked, what each status means, and what did_you_mean contains. The most important content (the checked categories) is front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by documenting the return fields (status values and did_you_mean) and the meaning of the 'unconfirmed' outcome. Nothing an agent needs in order to call and interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter at 100% schema description coverage, so the schema already documents it fully. The description adds no format, normalization, or trimming detail beyond the schema, which puts it at the baseline for fully covered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Check one email address') and enumerates exactly what is validated (syntax, domain typos, disposable domains, role addresses, non-existent domains). The singular 'one' implicitly separates it from the sibling check_emails, so an agent can pick correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It defines the validation use case clearly and the three status outcomes give the agent a sense of when each result type applies. However, it never explicitly names the alternative sibling check_emails or states when to prefer it, so the routing guidance stays implicit rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_emailsCheck a list of email addressesARead-only
Check up to 500 email addresses at once (same checks as check_email, plus duplicates, counting Gmail dot and +tag variants as the same inbox). Returns a summary with counts and one result per address, in input order. status is "invalid" (will bounce: bad syntax, domain does not exist, no mail server), "risky" (disposable domain, likely typo such as gmial.com, no MX record) or "unconfirmed" (format and domain OK; the mailbox itself is not checked). did_you_mean holds the corrected address for typos.
| Name | Required | Description | Default |
|---|---|---|---|
| emails | Yes | Email addresses, at most 500 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, openWorldHint=true), the description discloses the exact semantics of each result state, including the crucial caveat that 'unconfirmed' means the mailbox itself was never verified, and that typo corrections are surfaced in did_you_mean. It also explains duplicate normalization behavior, which materially affects how an agent should interpret the returned counts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scale limit and sibling relationship are front-loaded, and the three status values are enumerated compactly in a single sentence. Every sentence carries distinct information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing the return value, and it does: a summary with counts plus one result per address in input order, the status vocabulary, and the did_you_mean field. Nothing an agent needs to call or interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is only one parameter, so the schema already documents the input fully. The description echoes the 500-item cap (already present in the schema) but adds no format or syntax detail beyond that, so it is a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (check email addresses in bulk) with an explicit scale limit (up to 500) and distinguishes itself from the sibling check_email by adding duplicate collapsing across Gmail dot and +tag variants. An agent can tell exactly what this tool does and how it differs from the single-address tool without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It grounds usage in the sibling by stating it performs the 'same checks as check_email, plus duplicates', which implies the batch case is the reason to pick this tool. However, it never explicitly says when to prefer check_email instead, nor states prerequisites or rate limits, so the routing guidance is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.0.0- First observed
check_email - First observed
check_emails
TDQS
Scored across 2 tools
check_email and check_emails have clearly distinct purposes: one validates a single address, the other validates up to 500 in a batch. The descriptions explicitly differentiate them, and there is no functional overlap that would cause misselection.
Both tools follow a consistent verb_noun pattern (check_email, check_emails), with the plural form clearly indicating the batch operation. The naming is predictable and easy to infer.
Two tools is slightly below the typical 3-15 range, but the server's narrow purpose (email validation) is well-covered by a single and a bulk tool. Each tool earns its place, and adding more would likely be redundant.
The surface fully covers the stated domain: single and bulk email validation with detailed statuses, typo suggestions, and duplicate handling. There are no obvious missing operations for the core task, and the limitation on mailbox checking is clearly disclosed.
Maintenance
Related MCP Connectors
Verify emails and domains for routing, disposable providers, role accounts, and SMTP risk.
Keyless email checks: disposable, role, and free-provider detection, MX, and typo suggestions.
Email validation for Claude and any MCP client — verdicts with evidence and bulk jobs.
Check whether an email address can receive mail — one address or a list — without sending to it.
Related MCP Servers
- AlicenseAqualityCmaintenanceEmail validation MCP server using MailboxValidator API to determine validity of an email address.330 npm1MIT
- AlicenseAqualityDmaintenanceEnables real-time email verification via MCP tools, checking syntax, MX, disposable domains, and optional SMTP probe to determine deliverability with a VALID/RISKY/INVALID verdict.29 npmMIT
- FlicenseNot gradedqualityDmaintenanceComprehensive email validation MCP server that checks syntax, MX records, disposable domains, role-based accounts, SPF/DKIM, typo suggestions, and risk scoring.-
- FlicenseNot gradedqualityCmaintenanceProvides email verification as an MCP tool, checking format, disposable domains, and mail server availability with structured results.-