ezverify-mcp
Click 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., "@ezverify-mcpverify sarah.jones@acme.com for me"
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.
ezverify-mcp: requires an EzVerify Starter or Business plan
Requires an EzVerify Starter or Business plan. The Free plan is web-app only: its API key is rejected with 403 plan_upgrade_required.
EzVerify MCP server: lets an MCP client such as Claude verify email addresses, run bulk verification jobs and check your credit balance through your EzVerify account.
What is EzVerify MCP Server?
EzVerify MCP Server is a Model Context Protocol (MCP) server that connects Claude and other MCP clients to the EzVerify email verification API. It lets the assistant verify email addresses, submit bulk verification jobs and read your account information on your behalf, from a plain-language conversation.
It calls the EzVerify REST API with your API key, so it needs an EzVerify account on the Starter or Business plan.
Related MCP server: unpublished
Setup
Requires a Starter or Business plan and Node.js 18+. Generate an API key on the API Usage page of your EzVerify dashboard (Dashboard → API Usage). It is shown once, so store it safely; regenerate it if you lose it.
Claude Desktop
Add to claude_desktop_config.json:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"ezverify": {
"command": "npx",
"args": ["-y", "ezverify-mcp"],
"env": {
"EZVERIFY_API_KEY": "YOUR_EZVERIFY_API_KEY"
}
}
}
}Restart Claude Desktop after saving.
Claude Code
Add a .mcp.json file at your project root:
{
"mcpServers": {
"ezverify": {
"command": "npx",
"args": ["-y", "ezverify-mcp"],
"env": {
"EZVERIFY_API_KEY": "YOUR_EZVERIFY_API_KEY"
}
}
}
}Your key is in that file, so do not commit it to source control.
Other MCP clients
Any client that can start a stdio MCP server works the same way: run npx -y ezverify-mcp with the EZVERIFY_API_KEY environment variable set.
How to Use
Once configured, ask your assistant to verify emails in plain English. For example:
"Verify this email address for me"
"Check which of these 20 emails are valid"
"How many credits do I have left?"
Key Features
Verify a single email address and get a full result including status, deliverability score and detailed flags
Submit bulk email lists for async verification and poll for results when complete
Results include disposable-domain, role-account and typo-suggestion flags
Check your credit usage and remaining balance without logging into the dashboard
Retrieve your current plan and account information on demand
Your API key stays in your local configuration and is sent only to
ezverify.app; the server does not store or log it
Available Tools
Tool | Description | Credits |
| Verify a single email: status, score, flags | Uses credits |
| Submit an async bulk verification job (up to 1,000 emails per request) | Uses credits |
| Poll bulk job progress and results | Free |
| Request statistics over the last N days (single verifications; credits spent by bulk jobs are not included) | Free |
| Plan, credits used this month, credits remaining, monthly limit | Free |
The three read-only tools are marked readOnlyHint in the tool metadata. verify_email and verify_emails_bulk are not, because they spend credits, so clients that ask for confirmation before non-read-only tools will ask before running them.
Limits
verify_emailis limited to 100 calls per hour per account (the API answers429 rate_limit_exceeded). The other tools are not limited per hour.A bulk job takes up to 1,000 emails per request. Duplicates within one request are verified and billed once.
A bulk
webhook_urlmust be a publichttp(s)address. It gets one POST when the job completes, with counts only (campaign_id, which equals therequest_id, and the valid/invalid/risky/unknown totals), not per-address results: fetch those withget_bulk_job_status. It is attempted once and not retried.An account that is restricted (for example after repeated declined payments) gets
402 account_restrictedon the two verification tools; the read-only tools still work.
Use Cases
Ask Claude to clean an email list before a campaign launch and return only the valid addresses
Verify a prospect's email address mid-conversation while researching leads
Check whether a submitted email is real before triggering an onboarding workflow
Ask Claude how many credits you have left before running a large verification job
Bulk verify emails pasted directly into the chat and get a formatted summary of results
Example Prompts
"Verify john@example.com — is it safe to send to?"
"Bulk verify these 20 emails and return only the valid ones."
"How many credits have I used this month?"
"What plan am I on and how many credits are left this month?"
HTTP mode (self-hosting)
By default the server talks to the client over stdio. To run it as a small HTTP service instead, set PORT:
PORT=3100 npx -y ezverify-mcpIt listens on
127.0.0.1unless you setHOST. Put a TLS reverse proxy in front of it if you expose it beyond your machine.MCP endpoint:
POST /mcp(Streamable HTTP, stateless: every request gets its own server instance, there are no sessions).GETandDELETEanswer405.Each caller sends its own EzVerify API key in an
X-Api-Keyheader. The service has no key of its own and never falls back to one from its environment, soEZVERIFY_API_KEYis not used in this mode. A call without the header gets amissing_api_keytool error.Requests that carry an
Originheader (browsers) are refused with403, and a request body over 1 MB with413. Clients that can only authenticate with OAuth are not supported.GET /healthreturns{"status":"ok",...}for monitoring.
FAQ
Do I need to install anything?
Node.js 18 or newer. The server runs through npx, which downloads and starts it on demand, so there is no separate install step.
Where do I get my API key? Log in to your EzVerify dashboard at ezverify.app, open API Usage (ezverify.app/Dashboard/ApiUsage) and generate a key there. It is shown once, so copy it and store it safely; if you lose it, regenerate it on the same page. API keys only work on the Starter and Business plans.
Does this use my EzVerify credits?
Yes, verify_email and verify_emails_bulk do. They use the same credits as a direct API call, at your plan's rates. Only definitive results (valid, invalid, risky) use a credit; unknown results are free. Checking the same address in a separate call is charged again.
Is my API key safe? The server reads your API key from your local configuration and sends it only to the EzVerify API. It does not store or log it. Treat the key like a password, and regenerate it on the API Usage page if it leaks.
Can I use this with Claude Code?
Yes. Add a .mcp.json file to your project root with the configuration above.
What happens if I use more than my monthly credits?
Nothing stops. Credits are counted per calendar month (UTC) and reset on the 1st; unused credits do not roll over. Usage beyond your plan's monthly credits is billed as overage at your plan's per-credit rate (Starter $0.004, Business $0.002); you are charged after the month ends, never up front. Check your balance any time with get_account_info.
Requirements
Node.js 18+
An EzVerify account on the Starter or Business plan (the API and this MCP server are not available on the Free plan)
License
Available Tools
5 toolsget_account_infoGet account and credit balanceARead-only
Get EzVerify account info: current plan, credits used this calendar month, credits remaining, monthly credit limit. Credits reset on the 1st of each month; usage beyond the limit is billed as overage. Free: does not use credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: credits reset on the 1st of each calendar month, usage past the limit is billed as overage, and the free tier consumes no credits — context an agent needs to interpret the numbers correctly.
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?
Two sentences, front-loaded with the verb+resource, with each trailing clause (reset date, overage billing, free-tier exemption) carrying distinct semantic weight. 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?
There is no output schema, so the description must convey return contents — and it does, listing the four values returned. The billing-cycle and overage notes make the returned numbers interpretable; only the cross-tool relationship to get_usage_stats is left open.
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?
The tool takes zero parameters, so the baseline is 4. The description introduces no parameter concepts and correctly needs none.
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?
Names the resource (EzVerify account info) and enumerates exactly what comes back: plan, credits used, credits remaining, monthly limit. It's clearly a read of account/credit state, but it never contrasts itself with the sibling get_usage_stats, which an agent could plausibly confuse with this.
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?
Usage is only implied — an agent infers 'call this to check plan or credit balance.' There is no explicit when-to-use/when-not, and no pointer telling the agent to prefer get_usage_stats for usage history versus this for balance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bulk_job_statusCheck a bulk verification jobARead-only
Check the status of a bulk verification job. Returns progress, counts, and full results when completed. Free: does not use credits.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | The request_id returned by verify_emails_bulk |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, closed-world operation. The description adds useful behavior beyond that by saying it returns progress and counts, provides full results when completed, and does not consume credits.
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 description is three short sentences with no wasted language. The core purpose is front-loaded, followed by return behavior and cost information.
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?
For a simple one-parameter read-only status tool with an output schema absent, the description covers purpose, returned information, completion behavior, and cost. It could add explicit polling or expiration guidance, but nothing critical for correct invocation 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 the request_id parameter is already documented as the value returned by verify_emails_bulk. The description adds no additional parameter format or constraints beyond the schema, so the baseline of 3 is appropriate.
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 states a specific verb ('Check the status') and resource ('a bulk verification job'), clearly separating it from the single-email and account/usage sibling tools. It also identifies the returned object as progress, counts, and full results when completed.
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?
The phrase 'bulk verification job' and the schema's 'request_id returned by verify_emails_bulk' give clear context that this is used after starting a bulk job. It does not explicitly discuss polling cadence or when not to use it, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usage_statsGet request statisticsARead-only
Get EzVerify request statistics for the last N days: total requests, credits used, valid/invalid/risky/unknown counts, average processing time. Covers single verifications (API or dashboard Quick Verify) plus one entry per bulk submission; credits and per-address results of bulk jobs are NOT included — use get_account_info for this month's credit total. Free: does not use credits.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to look back (default 30, max 365) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds genuinely new behavior: the tool is free and does not consume credits, and bulk job credits and per-address results are deliberately omitted. It also lists the returned metrics, which matters given there is no output schema. It stops short of describing aggregation boundaries (account-wide vs key-level) or the lookback handling near day edges.
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?
Two sentences, no filler: the first front-loads the capability and metrics, the second carries the scope exclusions and the free-of-charge fact. Every clause earns its place and the routing information arrives before the caveats.
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 compensates by listing the metrics returned, and it explains the tool's relationship to bulk jobs and the account info tool. An agent has enough to choose it, parameterize it, and interpret its output without follow-up.
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 coverage is 100% and the single 'days' parameter already carries its default (30) and max (365). The description restates the N-days window concept but adds no format, boundary, or edge-case semantics beyond what the schema provides, so baseline 3 applies.
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?
States a specific verb and resource (EzVerify request statistics) and enumerates exactly which metrics are returned: total requests, credits used, valid/invalid/risky/unknown counts, average processing time. It also delimits scope against get_account_info and the bulk-job tools, so an agent can distinguish it from every sibling 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?
Explicitly routes the agent to get_account_info when the goal is a month's credit total, and implicitly frames this tool as the lookback-window option ('last N days'). It doesn't state outright when not to use it, but the exclusion of bulk credit data and the free/no-credit note give the agent a clear decision signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_emailVerify an email addressA
Verify a single email address. Returns status (valid/invalid/risky/unknown), deliverability score, syntax/domain/MX/SMTP flags, disposable domain detection, role account flag, typo suggestion, and mailbox-full status. Uses credits: 1 credit for a definitive result (valid, invalid or risky); unknown results are free. Checking the same address again is charged again.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | The email address to verify |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true and idempotentHint=false, and the description adds the reason behind the non-idempotency: every repeated check of the same address is charged again, and unknown results are free. That credit accounting is exactly the kind of context annotations cannot express. It does not cover latency, SMTP timeout behavior, or auth requirements, which a live SMTP probe would plausibly have.
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 tight sentences: purpose first, then the return payload, then billing. The dense field enumeration earns its length because there is no output schema, and nothing is repeated from the schema or annotations.
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 substitutes by enumerating status values and flags, and it explains the credit model. The one meaningful gap is operational: a live SMTP/MX check is slow and can time out, and nothing tells the agent what to expect or how errors surface.
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?
One required parameter at 100% schema description coverage, so the schema already fully documents `email`. The description adds no format, normalization, or casing guidance beyond it, which is the expected baseline when the schema carries the burden.
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?
Opens with a specific verb+resource ("Verify a single email address") and the word "single" implicitly marks the boundary against the sibling verify_emails_bulk. The return-field list further pins down what the tool produces. It stops short of naming the bulk sibling explicitly, so the differentiation is inferred rather than stated.
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?
"Single email address" hints that bulk verification belongs to verify_emails_bulk, but no sentence says when to use this versus that tool. Prerequisites, batch alternatives, and failure contexts are left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_emails_bulkVerify a list of email addresses (bulk job)A
Submit an async bulk email verification job (up to 1,000 emails per request; duplicate addresses are verified and billed once). Returns a request_id — poll with get_bulk_job_status. Uses credits: 1 credit per address with a definitive result (valid, invalid or risky), charged when the job completes; unknown results are free.
| Name | Required | Description | Default |
|---|---|---|---|
| emails | Yes | List of email addresses to verify | |
| webhook_url | No | Optional public http(s) URL that gets one POST when the job completes. It carries counts only (campaign_id, which equals the request_id, plus total, valid, invalid, risky and unknown counts), not per-address results; fetch those with get_bulk_job_status. Delivered once, not retried. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations, disclosing async behavior, the request_id return, credit cost (1 credit per definitive result), free unknown results, and duplicate-billing semantics. With annotations already covering readOnly/openWorld/idempotent hints, this adds substantial context; only rate limits or failure behavior are missing.
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?
Front-loaded with the action and cap, then the follow-up step, then cost. Dense and near-waste-free, though the parenthetical about billing is slightly nested.
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?
No output schema exists, yet the description explains that the return is a request_id and how to retrieve results, and it describes the webhook payload via the schema. Complete for correct invocation, with only edge-case/failure behavior unaddressed.
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%, so the schema already defines both parameters and the webhook payload shape. The description adds only the 1,000-address cap and duplicate-billing semantics, which are useful but modest against a schema that does the heavy lifting; the baseline of 3 is appropriate.
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?
States a specific verb ('Submit an async bulk email verification job'), the resource, and the scope (up to 1,000 emails per request). The word 'bulk' plus 'list' cleanly separates it from the single-address sibling verify_email.
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?
Clearly implies when to use it (bulk lists) and explicitly routes the follow-up step: 'poll with get_bulk_job_status'. It stops short of an explicit exclusion such as 'use verify_email for a single address', so the boundary with the single-verify sibling is inferred rather than stated.
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.
5 tool updates
v1.0.8- First observed
get_account_info - First observed
get_bulk_job_status - First observed
get_usage_stats - First observed
verify_email - First observed
verify_emails_bulk
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: single verification, bulk submission, bulk status polling, historical usage stats, and account/credit information. The descriptions explicitly clarify the boundary between get_usage_stats and get_account_info, avoiding likely confusion.
All tool names use consistent snake_case with an action-oriented verb and clear noun phrase (verify_email, verify_emails_bulk, get_bulk_job_status, get_usage_stats, get_account_info). The pattern is predictable throughout.
Five tools are well-scoped for an email verification service, covering both single and bulk workflows plus account and usage visibility. No tool feels redundant or excessive.
The surface covers the core lifecycle: single verification, bulk job submission, bulk job status retrieval, usage reporting, and account/credit information. No obvious operational dead end is present for the stated purpose.
Maintenance
Related MCP Connectors
Emailable MCP — wraps the Emailable email verification API (emailable.com)
Verify emails and domains for routing, disposable providers, role accounts, and SMTP risk.
MillionVerifier MCP — wraps the MillionVerifier single-verify API (millionverifier.com)
- EusendOAuthdev.eusend
Send transactional email and manage domains, audiences, and broadcasts from any MCP client.
Related MCP Servers
- 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
- MIT
- FlicenseAqualityBmaintenanceEnables email address verification through a single MCP tool, returning whether an address is valid, invalid, or risky.1-
- AlicenseAqualityCmaintenanceEnables MCP clients such as Claude Code or Claude Desktop to verify whether email addresses are deliverable, returning status, sub-status, reason, confidence, and metadata.15 npmISC