Skip to main content
Glama
jefferyleo

ezverify-mcp

by jefferyleo

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.

npm version npm downloads MCP.so License: MIT

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.json

  • macOS: ~/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_email

Verify a single email: status, score, flags

Uses credits

verify_emails_bulk

Submit an async bulk verification job (up to 1,000 emails per request)

Uses credits

get_bulk_job_status

Poll bulk job progress and results

Free

get_usage_stats

Request statistics over the last N days (single verifications; credits spent by bulk jobs are not included)

Free

get_account_info

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_email is limited to 100 calls per hour per account (the API answers 429 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_url must be a public http(s) address. It gets one POST when the job completes, with counts only (campaign_id, which equals the request_id, and the valid/invalid/risky/unknown totals), not per-address results: fetch those with get_bulk_job_status. It is attempted once and not retried.

  • An account that is restricted (for example after repeated declined payments) gets 402 account_restricted on 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-mcp
  • It listens on 127.0.0.1 unless you set HOST. 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). GET and DELETE answer 405.

  • Each caller sends its own EzVerify API key in an X-Api-Key header. The service has no key of its own and never falls back to one from its environment, so EZVERIFY_API_KEY is not used in this mode. A call without the header gets a missing_api_key tool error.

  • Requests that carry an Origin header (browsers) are refused with 403, and a request body over 1 MB with 413. Clients that can only authenticate with OAuth are not supported.

  • GET /health returns {"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

MIT

Available Tools

5 tools
get_account_infoGet account and credit balanceA
Read-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.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 jobA
Read-only

Check the status of a bulk verification job. Returns progress, counts, and full results when completed. Free: does not use credits.

NameRequiredDescriptionDefault
request_idYesThe request_id returned by verify_emails_bulk

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 statisticsA
Read-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.

NameRequiredDescriptionDefault
daysNoNumber of days to look back (default 30, max 365)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
emailYesThe email address to verify

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
emailsYesList of email addresses to verify
webhook_urlNoOptional 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

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv1.0.8
    • First observedget_account_info
    • First observedget_bulk_job_status
    • First observedget_usage_stats
    • First observedverify_email
    • First observedverify_emails_bulk

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    2
    9 npm
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    Enables email address verification through a single MCP tool, returning whether an address is valid, invalid, or risky.
    1
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables MCP clients such as Claude Code or Claude Desktop to verify whether email addresses are deliverable, returning status, sub-status, reason, confidence, and metadata.
    1
    5 npm
    ISC