inboxvalid-mcp
An MCP server that exposes a mock email verification tool over stdio transport, providing structured JSON results with statuses valid, invalid, or risky.
README
inboxvalid-mcp
An MCP (Model Context Protocol) server built with TypeScript and Node.js that exposes a mock email verification tool (verify_email) over stdio transport.
Getting Started
Prerequisites
- Node.js 18+ (or 20+)
- npm 9+
Installation & Build
# Clone or navigate to the directory
cd inboxvalid-mcp
# Install dependencies
npm install
# Build TypeScript to dist/
npm run build
# Run unit tests
npm test
# Run the console demo
npm run demo
Starting the Server
npm start
# or directly: node dist/server.js
Testing with the MCP Inspector
You can test inboxvalid-mcp interactively in the official MCP Inspector:
npx @modelcontextprotocol/inspector node dist/server.js
- Open the inspector URL shown in the terminal (usually
http://localhost:5173or similar). - Connect to the stdio transport.
- Select
verify_emailfrom the Tools tab. - Provide an argument such as:
{ "address": "user@gmail.com" } - Click Run Tool to inspect the structured response.
Tool Interface: verify_email
Input Schema
{
"address": "string (email address to verify)"
}
Output Schema
{
"email": "user@gmail.com",
"status": "valid",
"reasons": [],
"checks": {
"syntaxValid": true,
"disposableDomain": false,
"mxPlausible": true
},
"latencyMs": 120
}
Interface Design Choices
-
Structured JSON vs Plain Text: LLMs and agentic pipelines require predictable, machine-parseable outputs to make reliable branching decisions (e.g. asking the user for a new email vs proceeding with signup). Structured JSON prevents ambiguous text parsing errors.
-
Three-State Status (
valid|invalid|risky) instead of Binary (valid|invalid): Email verification in practice is probabilistic. Syntax failure is binary (invalid), but disposable domains or unverified MX servers don't always mean the inbox cannot receive mail—they signal elevated fraud or deliverability risk. Ariskystate allows consuming systems to decide custom business logic (e.g. challenge with 2FA, flag for manual review, or display a warning) rather than forcing an artificial pass/fail. -
Separated
checksin Response: Exposing granular flags (syntaxValid,disposableDomain,mxPlausible) alongside the high-levelstatusand human-readablereasonslets downstream callers inspect exactly which rule triggered without reverse-engineering error messages.
Error Handling & Retry/Backoff Reasoning
- Fail-Fast Syntax Validation: If email syntax fails regex checks, execution terminates immediately without triggering network operations or retry loops.
- Exponential Backoff with Jitter: Mock MX lookups are wrapped in a generic retry utility (
withRetry) that attempts up to 3 times with exponential backoff (baseDelay * 2^(attempt - 1)) plus randomized jitter. Jitter prevents thundering herd issues under concurrent load. - Fail-Open vs Fail-Closed Strategy:
When external verification/MX lookup exhausts all retries, the server fails open with caution: instead of throwing an unhandled exception or returning
invalid, it returnsstatus: "risky"with reason"verification service unavailable, defaulting to caution".- Why: Crashing the MCP tool breaks the agent's execution loop. Rejecting valid users because of a transient network blip causes false positives and bad UX. Flagging as
riskykeeps the pipeline resilient while alerting callers to proceed carefully.
- Why: Crashing the MCP tool breaks the agent's execution loop. Rejecting valid users because of a transient network blip causes false positives and bad UX. Flagging as
Assumptions
- Mock Verification Engine: Simulates network latency (50–200ms) and uses a deterministic list of known reputable mail providers (
gmail.com,outlook.com,yahoo.com,icloud.com,proton.me, etc.) to provide reproducible demo results without live SMTP/DNS queries. - Static Disposable List: Bundles a local
disposableDomains.jsonfile representing ~18 known temporary email services (mailinator.com,10minutemail.com,yopmail.com, etc.). - Transport: Standard stdio transport for local integration with LLM hosts (Claude Desktop, MCP Inspector, etc.).
Production Readiness Roadmap
To transition this server to production:
- Real DNS MX Resolution:
Replace mock MX logic with Node's native
node:dns/promises(dns.resolveMx(domain)), inspecting record priority and fallback A records. - Real-time Disposable & Fraud Feed: Integrate with live disposable domain feeds or APIs (e.g. Kickbox, Debounce, or daily synchronized blocklists).
- Caching Layer:
Add an in-memory (LRU) or Redis cache keyed by domain to prevent redundant DNS lookups for popular domains (
gmail.com,outlook.com), dramatically lowering latency and upstream traffic. - SMTP Handshake / Mailbox Ping: Optional RCPT TO verification with connection pooling and strict timeout handling where deliverability guarantees are critical.
- Rate Limiting & Concurrency Control: Apply token bucket or leaky bucket rate limiting per client to guard upstream DNS resolvers and APIs.
Scalability & Architecture
- Stateless MCP Server: The server maintains no local session state. Multiple worker processes can run behind load balancers or container orchestrators without coordination.
- Shared Cache & Feed Storage: In a distributed setup, domain MX cache and disposable lists move to Redis or an edge KV store (Cloudflare Workers KV, AWS ElastiCache) for real-time invalidation and synchronized updates.
- Transport Flexibility: While stdio is ideal for local desktop clients, the server logic is isolated from the transport layer and can be mounted over SSE (Server-Sent Events) or WebSockets for cloud-hosted agent deployments.
Demo
Screenshots of the verify_email tool being invoked via MCP Inspector, showing all three result states:

Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
Neon Database
MCP server for interacting with Neon Management API and databases
E2B
Using MCP to run code via e2b.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.