Email Verifier MCP

이메일 검증을 위한 원격 MCP 서버. RFC 5321 구문, MX 조회, 160k 일회용 도메인 블랙리스트 및 역할 계정 탐지. 기본적으로 DNS 전용 및 규정 준수; SMTP 핸드셰이크는 선택 사항입니다. 제3자 API 수수료 없음.

문서

Email Verifier MCP — DNS Email Verification (neeenja/email-verifier-mcp) Actor

Remote MCP server for email verification. RFC 5321 syntax, MX lookup, 160k disposable-domain blacklist and role-account detection. DNS-only and compliant by default; SMTP handshake is opt-in. Zero third-party API fees.

Pricing

from $5.00 / 1,000 mcp tool calls

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes. In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours, and optionally produces a well-defined JSON output, datasets with results, or files in key-value store. In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects. You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the API section below.

Each client library has reference documentation the quickstart does not restate: JavaScript/TypeScript (npm install apify-client) and Python (pip install apify-client).

README

Email Verifier MCP

Verify email addresses without paying a per-lookup API fee. RFC 5321 syntax, MX records, a 182,000-domain disposable blacklist and role-account detection — all from free DNS. SMTP handshake is opt-in and off by default.

License: MIT MCP Transport

🌐 English · 简体中文 · 繁體中文

It lives atLink
MCP endpointhttps://neeenja--email-verifier-mcp.apify.actor/mcp
Apify Storehttps://apify.com/neeenja/email-verifier-mcp
Source codehttps://github.com/PanStories/Email-Verifier-MCP
One-line installnpx -y email-verifier-mcp
Featured onSartbot Featured

English

What you get

Every product with a signup form needs to know whether an email is real. The usual answer is a paid API — SendGrid, Hunter, ZeroBounce — billed per lookup. This server does the checks that actually catch bad signups using free DNS queries and an open-source blocklist, so the marginal cost is zero.

It is built agent-native: one npx command and your agent can verify an address itself. No dashboard, no account, no API key.

ChecksRFC 5321 syntax · MX record · 182,000+ disposable domains · role accounts · optional SMTP handshake
Cost$0 per lookup. No third-party API, no key, no quota
ComplianceDNS-only by default — no outbound SMTP unless you opt in
TransparencyEvery check scored separately, so you can see why an address passed

Tools

ToolWhat it does
check_emailFull check on one address: syntax + MX + disposable + role, optional SMTP. Returns a human summary and structured JSON.
verify_bulkSame checks for up to 10 addresses at once, plus a summary line.
check_mxStandalone MX lookup, sorted by priority.
is_disposableIs this address or domain a throwaway provider? Accepts user@mailinator.com or mailinator.com.

Also exposed: resource blacklist://stats (blocklist size and source) and prompt verify_signup_email (an accept / flag / reject decision template).

Example

// request
{ "email": "someone@gmail.com" }

// response (structured)
{
  "email": "someone@gmail.com",
  "valid": true,
  "score": 80,
  "reason": "DNS checks passed",
  "checks_passed": ["syntax", "mx", "blacklist", "role"],
  "mx_records": [{ "priority": 10, "exchange": "gmail-smtp-in.l.google.com" }],
  "disposable": false,
  "role_account": false
}

Confidence score

The score is additive and fully explainable — no black box.

CheckPointsNote
Syntax20RFC 5321 / HTML5-flavoured pattern
MX record exists30Domain actually accepts mail
Not disposable20Against the 182k-domain list
Not a role account10support@, noreply@, … are flagged, not failed
SMTP reachable10Only when the handshake is enabled
SMTP confirms mailbox10Only when the handshake is enabled

80/100 means every DNS check passed. The last 20 points require the optional SMTP handshake, which is off by default. valid is a separate boolean: it is true only when syntax passes, an MX record exists, and the domain is not disposable.

Connect

Option A — local, via npx (free, unlimited). Runs as a stdio subprocess inside your own agent:

{
  "mcpServers": {
    "email-verifier-mcp": {
      "command": "npx",
      "args": ["-y", "email-verifier-mcp"]
    }
  }
}

Option B — hosted endpoint on Apify. Use it from anywhere, including agents that cannot spawn subprocesses:

{
  "mcpServers": {
    "email-verifier-mcp": {
      "type": "streamable-http",
      "url": "https://neeenja--email-verifier-mcp.apify.actor/mcp",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}

Works with Claude Desktop, Cursor, Windsurf, GitHub Copilot, and any other MCP client.

Compliance

Default verification is DNS-only — it never opens an outbound SMTP connection, so it cannot be mistaken for port-25 scanning.

The SMTP handshake is opt-in (smtp: true) and should only be enabled from infrastructure you control. Some mail providers treat unsolicited SMTP probes as abuse, and many return 250 to every RCPT TO specifically to defeat probing — so smtp_likely_valid is reported honestly as null when the answer is inconclusive rather than guessed.

Pricing

initialize / tools/listFree — agents can always connect and discover
Any tool call$0.005 on the hosted Apify endpoint
Self-hosted via npxFree and unlimited — the source is MIT

The hosted endpoint is pay-per-event: no subscription, no minimum. Running it locally with npx costs nothing.

Development

npm install
npm run build        # tsc -> dist/
npm test             # unit tests
npm run e2e          # stdio end-to-end (initialize -> tools/list -> tools/call)
npm run e2e:http     # HTTP end-to-end (readiness probe + full protocol)
npm run showcase     # real-DNS demo -> verify-showcase.html

License

MIT. The disposable-domain list comes from disposable-email-domain (MIT, refreshed weekly).


简体中文

你能得到什么

任何带注册环节的产品都要判断邮箱是不是真的。常见方案是付费 API —— SendGrid、Hunter、ZeroBounce 按次计费。本服务用免费 DNS 查询 + 开源黑名单完成真正有效的检查,边际成本为零。

它面向 Agent 设计:一条 npx 命令,Agent 就能自己校验邮箱。不需要仪表盘、不需要账号、不需要 API key。

检查项RFC 5321 语法 · MX 记录 · 18.2 万个一次性域名 · 角色账号 · 可选 SMTP 握手
成本每次查询 $0。无第三方 API、无密钥、无配额
合规默认仅 DNS —— 不主动发起出站 SMTP,除非你显式开启
可解释每项检查单独计分,能看清地址为什么通过

工具

工具作用
check_email单个地址全量校验:语法 + MX + 一次性域名 + 角色账号,可选 SMTP。同时返回人类可读摘要与结构化 JSON。
verify_bulk最多 10 个地址批量校验,并给出汇总。
check_mx独立 MX 查询,按优先级排序。
is_disposable判断地址或域名是否为临时邮箱。支持 user@mailinator.com 或 mailinator.com。

另外还提供资源 blacklist://stats(黑名单规模与来源)与提示词 verify_signup_email(接受 / 标记 / 拒绝的决策模板)。

示例

// 请求
{ "email": "someone@gmail.com" }

// 响应(结构化)
{
  "email": "someone@gmail.com",
  "valid": true,
  "score": 80,
  "reason": "DNS checks passed",
  "checks_passed": ["syntax", "mx", "blacklist", "role"],
  "mx_records": [{ "priority": 10, "exchange": "gmail-smtp-in.l.google.com" }],
  "disposable": false,
  "role_account": false
}

置信度评分

评分是累加式的,完全可解释,不是黑盒。

检查项分值说明
语法20RFC 5321 / HTML5 风格匹配
MX 记录存在30域名确实能收信
非一次性域名20基于 18.2 万域名黑名单
非角色账号10support@、noreply@ 等只标记,不判失败
SMTP 可达10仅当开启握手
SMTP 确认邮箱存在10仅当开启握手

80/100 代表所有 DNS 检查全部通过。 最后 20 分需要可选的 SMTP 握手,而它默认是关闭的。valid 是独立的布尔值:只有语法通过、MX 存在、且非一次性域名时才为 true。

连接方式

方式 A —— 本地 npx(免费、无限次)。在你的 Agent 进程内以 stdio 子进程运行:

{
  "mcpServers": {
    "email-verifier-mcp": {
      "command": "npx",
      "args": ["-y", "email-verifier-mcp"]
    }
  }
}

方式 B —— Apify 托管端点。任何地方都能调用,包括无法启动子进程的 Agent:

{
  "mcpServers": {
    "email-verifier-mcp": {
      "type": "streamable-http",
      "url": "https://neeenja--email-verifier-mcp.apify.actor/mcp",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}

兼容 Claude Desktop、Cursor、Windsurf、GitHub Copilot 及任何其他 MCP 客户端。

合规说明

默认校验仅使用 DNS —— 不建立任何出站 SMTP 连接,因此不会被误判为 25 端口扫描。

SMTP 握手是可选开启的(smtp: true),只应在你能掌控的基础设施上启用。部分邮件服务商会把未经请求的 SMTP 探测视为滥用,且很多服务会对所有 RCPT TO 一律返回 250 来反探测 —— 因此当结论不明确时,smtp_likely_valid 会诚实地返回 null,而不是猜一个结果。

定价

initialize / tools/list免费 —— Agent 永远能连上并发现工具
任意工具调用托管 Apify 端点 $0.005
npx 自托管免费且无限次 —— 源码为 MIT 许可

托管端点按次计费:无订阅、无最低消费。本地用 npx 运行不产生任何费用。

本地开发

npm install
npm run build        # tsc -> dist/
npm test             # 单元测试
npm run e2e          # stdio 端到端(initialize -> tools/list -> tools/call)
npm run e2e:http     # HTTP 端到端(就绪探针 + 完整协议)
npm run showcase     # 真实 DNS 演示 -> verify-showcase.html

许可

MIT。一次性域名列表来自 disposable-email-domain(MIT,每周更新)。


繁體中文

你能得到什麼

任何帶註冊環節的產品都要判斷信箱是不是真的。常見做法是付費 API —— SendGrid、Hunter、ZeroBounce 按次計費。本服務用免費 DNS 查詢 + 開源黑名單完成真正有效的檢查,邊際成本為零。

它為 Agent 而生:一條 npx 指令,Agent 就能自己驗證信箱。不需要儀表板、不需要帳號、不需要 API key。

檢查項目RFC 5321 語法 · MX 紀錄 · 18.2 萬個一次性網域 · 角色帳號 · 可選 SMTP 握手
成本每次查詢 $0。無第三方 API、無金鑰、無配額
合規預設僅 DNS —— 不主動發起出站 SMTP,除非你明確開啟
可解釋每個檢查項目單獨計分,能看清地址為什麼通過

工具

工具作用
check_email單一地址完整驗證:語法 + MX + 一次性網域 + 角色帳號,可選 SMTP。同時回傳人類可讀摘要與結構化 JSON。
verify_bulk最多 10 個地址批次驗證,並提供彙整。
check_mx獨立 MX 查詢,依優先級排序。
is_disposable判斷地址或網域是否為拋棄式信箱。支援 user@mailinator.com 或 mailinator.com。

另外提供資源 blacklist://stats(黑名單規模與來源)與提示詞 verify_signup_email(接受 / 標記 / 拒絕的決策範本)。

範例

// 請求
{ "email": "someone@gmail.com" }

// 回應(結構化)
{
  "email": "someone@gmail.com",
  "valid": true,
  "score": 80,
  "reason": "DNS checks passed",
  "checks_passed": ["syntax", "mx", "blacklist", "role"],
  "mx_records": [{ "priority": 10, "exchange": "gmail-smtp-in.l.google.com" }],
  "disposable": false,
  "role_account": false
}

信心分數

分數採累加式,完全可解釋,不是黑盒子。

檢查項目分數說明
語法20RFC 5321 / HTML5 風格比對
MX 紀錄存在30網域確實能收信
非一次性網域20依 18.2 萬網域黑名單
非角色帳號10support@、noreply@ 等僅標記,不判失敗
SMTP 可連線10僅在開啟握手時
SMTP 確認信箱存在10僅在開啟握手時

80/100 代表所有 DNS 檢查全數通過。 最後 20 分需要可選的 SMTP 握手,而它預設關閉。valid 是獨立的布林值:只有語法通過、MX 存在、且非一次性網域時才為 true。

連線方式

方式 A —— 本機 npx(免費、無限量)。在你的 Agent 行程內以 stdio 子行程執行:

{
  "mcpServers": {
    "email-verifier-mcp": {
      "command": "npx",
      "args": ["-y", "email-verifier-mcp"]
    }
  }
}

方式 B —— Apify 託管端點。任何地方都能呼叫,包含無法啟動子行程的 Agent:

{
  "mcpServers": {
    "email-verifier-mcp": {
      "type": "streamable-http",
      "url": "https://neeenja--email-verifier-mcp.apify.actor/mcp",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}

相容 Claude Desktop、Cursor、Windsurf、GitHub Copilot 以及任何其他 MCP 用戶端。

合規說明

預設驗證僅使用 DNS —— 不建立任何出站 SMTP 連線,因此不會被誤判為 25 埠掃描。

SMTP 握手是可選開啟的(smtp: true),只應在你能掌控的基礎設施上啟用。部分郵件服務商會把未經請求的 SMTP 探測視為濫用,且許多服務會對所有 RCPT TO 一律回應 250 來反制探測 —— 因此當結論不明確時,smtp_likely_valid 會誠實回傳 null,而不是猜測結果。

定價

initialize / tools/list免費 —— Agent 永遠能連上並探索工具
任何工具呼叫託管 Apify 端點 $0.005
npx 自託管免費且無限量 —— 原始碼採 MIT 授權

託管端點按次計費:無訂閱、無最低消費。本機以 npx 執行不會產生任何費用。

本機開發

npm install
npm run build        # tsc -> dist/
npm test             # 單元測試
npm run e2e          # stdio 端到端(initialize -> tools/list -> tools/call)
npm run e2e:http     # HTTP 端到端(就緒探針 + 完整協定)
npm run showcase     # 真實 DNS 展示 -> verify-showcase.html

授權

MIT。一次性網域清單來自 disposable-email-domain(MIT,每週更新)。

Changelog

This Actor's version history is a separate document: https://apify.com/neeenja/email-verifier-mcp/changelog.md

Actor input Schema

maxTotalChargeUsd (type: number):

Hard cap on how much this run may charge. Recommended when letting an autonomous agent call the server. Example: 0.10 USD ≈ 20 tool calls.

Actor input object example

{}

Actor output Schema

mcpEndpoint (type: string):

Streamable HTTP MCP endpoint of this Actor run. Connect an MCP client here (Authorization: Bearer <APIFY_TOKEN>). POST JSON-RPC messages: initialize, tools/list, tools/call.

API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

JavaScript example

import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("neeenja/email-verifier-mcp").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

Python example

from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("neeenja/email-verifier-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

CLI example

echo '{}' |
apify call neeenja/email-verifier-mcp --silent --output-dataset

MCP server setup

{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,neeenja/email-verifier-mcp"
        }
    }
}

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an Authorization: Bearer <APIFY_API_TOKEN> header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/LhK9VskPkgkSWCPDy/builds/yKqQDgcbfaV5YCH4A/openapi.json