AI Agent Architecture Guide 2026

Email Verification in AI Agent Pipelines

AI agents can validate emails as part of larger workflows—enriching leads, screening signups, cleaning CRM data, and blocking fraud—without pre-defined steps. This guide covers MCP server architecture, LLM tool calling, and real agent pipeline patterns for email verification.

MCP
Model Context Protocol Server
25ms
API Latency for Agent Calls
4
Agent Pipeline Patterns

Why Agents Need Email Verification

AI agents that work with email data—CRM updates, lead enrichment, signup screening, campaign management—need verification built in. Without it, agents propagate bad data downstream at scale.

22.5%
Data Decay Per Year
25ms
Agent Call Latency
99.9%
Verification Accuracy
1 API
Call = All Checks

Traditional Automation vs Agentic Verification

Zapier / n8n / Make

  • •Pre-defined steps—trigger, API call, if/else branch. Every path is hard-coded.
  • •No decision-making—cannot evaluate context, adjust validation strategy, or escalate unexpected patterns.
  • •Single-purpose—each workflow handles one task (clean list, screen signup, update CRM).
  • •Manual setup—requires configuration for every new scenario.

AI Agent with Verification Tool

  • •Autonomous decisions—agent decides when to validate based on context, risk signals, and task requirements.
  • •Adaptive strategy—can escalate high-risk emails, suggest typo corrections, or flag patterns for human review.
  • •Multi-purpose—same tool used for CRM hygiene, lead enrichment, signup screening, and fraud detection.
  • •Natural language interface—no configuration needed. Tell the agent what to do.

Why AI Agents Need Email Verification

AI agents that process leads, update CRM records, screen signups, or manage campaigns need to verify emails at runtime. Without built-in verification, agents propagate bad data downstream at machine speed—undoing the work of data hygiene teams. This guide covers the Email-Check.app MCP server, LLM tool calling patterns, and four production agent pipelines.

MCP Server: Email Verification as a Hosted Tool

MCP (Model Context Protocol) gives AI agents a standard way to discover and invoke external tools. Email-Check App hosts a production MCP server at https://api.email-check.app/mcp, so there is nothing to self-host or wrap: register the URL in any MCP-compatible client—Claude Desktop, Cursor, Windsurf, or a custom agent runtime—and the verification tools appear alongside your other agent tools.

The server speaks Streamable HTTP: every call is a POST of a JSON-RPC 2.0 message with an Accept: application/json, text/event-stream header. Authentication uses the same credentials as the REST API—your Email-Check API key in the x-api-key header. Keys are host-scoped, so an Email-Check key only works on the Email-Check endpoint.

# Client configuration — Claude Desktop, Cursor, or any
# MCP client that speaks Streamable HTTP
{
  "mcpServers": {
    "email-check": {
      "type": "http",
      "url": "https://api.email-check.app/mcp",
      "headers": { "x-api-key": "YOUR_API_KEY" }
    }
  }
}

# Tools your agent discovers after connecting:
# - account_whoami — free identity probe; confirms which
#   account the key resolves to before you spend credits
# - email_validate — full validation: format, MX, optional
#   SMTP mailbox probe, disposable/free detection, name
#   detection, and domain suggestions

The initialize result carries server instructions that tell the agent how to authenticate, what a call costs, and what an HTTP 402 means—so well-behaved clients learn the billing contract without extra prompting. Discovery metadata is published at /.well-known/mcp/server-card.json and /llms.txt, and the API reference on email-check.app/open-api includes a one-click MCP connection panel.

email_validate input schema

One tool covers every check. Probes are opt-in through arguments, so a fast signup screen can run format and MX checks while a scheduled hygiene job adds the slower SMTP mailbox probe:

{
  "email": "lead@example.com",   // required
  "verifyMx": true,              // check the domain has MX records
  "verifySmtp": true,            // probe the SMTP server for the
                                 // mailbox (slower)
  "detectName": true,            // probable first/last name from
                                 // the local part
  "suggestDomain": true,         // correction for common domain
                                 // typos
  "checkDomainAge": true,        // domain age in days
  "checkDomainRegistration": false, // domain registration data
  "smtpDebug": false,            // SMTP transcript summary
  "timeout": 2000                // per-check timeout in ms,
                                 // default 2000, max 10000
}

LLM Tool Calling Pattern

Tool calling lets the LLM decide when to invoke email verification during a task. Once the MCP server is registered, the agent calls email_validate autonomously whenever it encounters an email that needs validation. Under the hood, every call is a JSON-RPC tools/call request:

POST https://api.email-check.app/mcp
Content-Type: application/json
Accept: application/json, text/event-stream
x-api-key: YOUR_API_KEY

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "email_validate",
    "arguments": {
      "email": "lead@example.com",
      "verifyMx": true,
      "verifySmtp": true,
      "detectName": true,
      "suggestDomain": true,
      "timeout": 5000
    }
  }
}

# Response (abridged):
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [{ "type": "text", "text": "..." }],
    "structuredContent": {
      "email": "lead@example.com",
      "validFormat": true,
      "validMx": true,
      "validSmtp": true,
      "isDisposable": false,
      "isFree": false,
      "detectedName": { "firstName": "Lead", "confidence": 0.62 },
      "domainSuggestion": null
    }
  }
}

The agent receives both a machine-readable structuredContent object and a text mirror, so it can reason over typed fields instead of parsing prose. Example prompt: “Review these 50 leads. Flag invalid emails, correct typos, and add verified contacts to Salesforce. Skip disposable addresses.” The agent will read each email, call email_validate, interpret the nullable result fields, and take the appropriate action based on your policy.

Prefer a direct integration without MCP? The same checks are available as a plain REST call, which works well for custom agent runtimes that register tools internally:

// Registering the REST endpoint as a custom agent tool
const tools = [
  {
    name: "email_validate",
    description: "Validate an email address. Returns format, MX," +
      "SMTP mailbox, disposable and free-provider detection, name" +
      "detection, and domain typo suggestions.",
    parameters: {
      type: "object",
      properties: {
        email: {
          type: "string",
          format: "email",
          description: "Email to validate"
        }
      },
      required: ["email"]
    },
    execute: async ({ email }) => {
      const params = new URLSearchParams({
        email,
        verifyMx: "true",
        verifySmtp: "true",
        suggestDomain: "true"
      });
      const response = await fetch(
        `https://api.email-check.app/v1-get-email-details?${params}`,
        {
          headers: {
            "x-api-key": process.env.EMAIL_CHECK_API_KEY
          }
        }
      );
      return response.json();
    }
  }
];

Pipeline 1: CRM Hygiene Agent

This agent runs on a schedule or on demand. It queries the CRM for contacts modified since the last run, validates their emails, and updates CRM records with verification status. Unlike a Zapier workflow, the agent can handle unexpected scenarios—escalating unusual patterns, grouping results by domain, or summarizing findings in natural language.

// CRM hygiene agent — prompt template
const CRM_HYGIENE_PROMPT = `
You are a CRM data hygiene agent. Your task:

1. Fetch all contacts modified in the last 7 days from the CRM
   using the fetch_contacts tool.
2. For each contact with an email field, call email_validate
   with verifyMx and verifySmtp enabled.
3. Based on the result:
   - validFormat && validMx && validSmtp && !isDisposable:
     update email_status to "verified"
   - validFormat === false, or validSmtp === false after a
     retry: update email_status to "invalid", flag for removal
   - validSmtp === null (inconclusive): update email_status to
     "flagged", add a note with the reason, schedule one retry
   - domainSuggestion with a suggested domain: record the
     suggestion for manual review, do not rewrite silently
4. After processing, write a summary report:
   - Total contacts processed
   - Breakdown by outcome (verified / invalid / flagged)
   - Domains with highest failure rates
   - Contacts requiring manual review

Use the update_contact tool to modify CRM records.
Use the write_report tool to create the summary.`;

// Agent handles all logic autonomously — no pre-defined
// branching needed. If it encounters an edge case (e.g.,
// a catch-all domain with 100+ contacts — visible through
// smtpDebug.isCatchAll when requested), it can decide
// to flag it instead of processing each one individually.

Pipeline 2: Signup Fraud Screening Agent

This agent screens signups in real-time. It validates the email, checks for disposable addresses, and decides whether to approve the registration, flag it for review, or block it entirely. The agent can also cross-reference patterns—blocking signups from the same disposable domain that appeared multiple times in the last hour.

// Signup fraud screening agent
const SIGNUP_SCREEN_PROMPT = `
You are a signup fraud screening agent. When a new signup
arrives:

1. Call email_validate with the signup email, verifyMx true,
   verifySmtp true, suggestDomain true, checkDomainAge true.
2. Apply these rules:
   - isDisposable === true -> BLOCK and log
   - validFormat === false -> BLOCK and request correction
   - validSmtp === false -> BLOCK and log
   - domainAge.ageInDays < 30 -> FLAG for manual review
     (brand-new domain)
   - isFree === true -> FLAG per your account policy
2b. A domainSuggestion (e.g. gmial.com -> gmail.com) means a
    likely typo: ask the user to confirm the corrected
    address, then validate the correction.
3. Track patterns: if 3+ signups from the same disposable
   domain appear in the last hour, escalate to the security
   team using the send_alert tool.

Use approve_signup, block_signup, or flag_signup tools.
Use the log_event tool for audit trail.`;

// The agent's advantage: it can correlate signals across
// multiple signups, adjust its thresholds based on traffic
// patterns, and provide natural-language explanations for
// each decision when audited.

Pipeline 3: B2B Lead Enrichment Agent

This agent enriches B2B prospect lists before they enter outbound sequences. It validates each prospect email, filters out role-based and free provider addresses, and prioritizes leads by verification quality. The agent can also enrich records with additional signals from the same response.

// B2B lead enrichment agent
const LEAD_ENRICH_PROMPT = `
You are a B2B lead enrichment agent. Process the
provided prospect list:

1. For each prospect, call email_validate with verifyMx,
   verifySmtp, detectName, and suggestDomain enabled.
2. Classify each lead:
   Tier 1: validFormat && validMx && validSmtp
     && !isDisposable && !isFree
   Tier 2: validMx && validSmtp && !isDisposable
     (may include free providers)
   Tier 3: validSmtp === null or unknown outcome
   Reject: validFormat === false, validSmtp === false,
     or isDisposable === true
3. For Tier 1 leads: push to Salesforce using create_lead
   with email_verified = true. Attach detectedName when
   confidence is high.
4. For Tier 2 leads: push with email_verified = "partial"
   and add a note about the free-provider signal.
5. For Tier 3 leads: push with email_verified = "uncertain"
   and schedule re-verification in 7 days.
6. Reject leads: log to a separate rejected list.
7. Write a summary: total processed, tier distribution,
   domains with most Tier 1 leads, top rejections.`;

// Agent advantage over Clay/Zapier: the agent can
// re-prioritize leads mid-batch if it notices patterns
// (e.g., all emails from a specific domain are failing),
// and it can explain its decisions in a follow-up
// conversation.

Pipeline 4: Pre-Campaign Verification Agent

Before an email campaign sends, this agent validates the recipient list, removes invalid addresses, applies typo corrections, and produces a deliverability report. It can segment the list into clean, risky, and invalid groups, and recommend whether to proceed with the send.

// Pre-campaign verification agent
const PRE_CAMPAIGN_PROMPT = `
You are a pre-campaign verification agent. A campaign
is scheduled to send to N recipients. Your job:

1. Fetch the recipient list using fetch_campaign_list.
2. Validate every email using email_validate with
   verifyMx and verifySmtp enabled.
3. Segment results:
   - SEND: validFormat && validMx && validSmtp
     && !isDisposable
   - CORRECT_AND_SEND: domainSuggestion present — verify
     the corrected domain before sending
   - HOLD: validSmtp === null or smtpDebug.isCatchAll
     === true (accept-all evidence)
   - REMOVE: validFormat === false, validSmtp === false,
     or isDisposable === true
4. Apply corrections for the CORRECT_AND_SEND group.
5. Update the campaign list: add SEND group, hold the
   HOLD group, remove the REMOVE group.
6. Generate a deliverability report:
   - Original list size vs clean list size
   - % of emails corrected
   - Estimated bounce prevention
   - Recommendation: proceed / delay / abort

Use update_campaign_list and generate_report tools.`;

// The agent provides a recommendation, not just data.
// Marketing teams get an actionable assessment instead
// of a raw validation dump.

Bulk Processing Helper for Agents

For agents processing large lists, batch validation with rate limiting prevents throttling. This helper processes emails in configurable batch sizes with delays between requests, using the REST endpoint directly for maximum throughput.

// Bulk processing helper — used by agent pipelines
const batchSize = 50;
const delayMs = 200;

async function validateBatch(emails) {
  const results = [];
  for (let i = 0; i < emails.length; i += batchSize) {
    const batch = emails.slice(i, i + batchSize);
    const promises = batch.map(email =>
      fetch(
        `https://api.email-check.app/v1-get-email-details?${new URLSearchParams({
          email,
          verifyMx: "true",
          verifySmtp: "true",
          suggestDomain: "true"
        })}`,
        {
          headers: {
            "x-api-key": process.env.EMAIL_CHECK_API_KEY
          }
        }
      ).then(r => r.json())
    );
    const batchResults = await Promise.all(promises);
    results.push(...batchResults);

    if (i + batchSize < emails.length) {
      await new Promise(r => setTimeout(r, delayMs));
    }
  }
  return results;
}

// Usage in agent: "Validate these 500 leads in batches."
// Agent calls this helper, gets results, then proceeds
// with classification and CRM updates.
// For very large lists, prefer the bulk CSV checker over
// per-address calls.

API Quick Reference

# MCP endpoint — JSON-RPC 2.0 over Streamable HTTP
POST https://api.email-check.app/mcp
Accept: application/json, text/event-stream
x-api-key: YOUR_API_KEY

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{
  "name":"email_validate",
  "arguments":{"email":"user@domain.com","verifyMx":true,
    "verifySmtp":true}
}}

# Direct REST equivalent
GET https://api.email-check.app/v1-get-email-details
  ?email=user@domain.com&verifyMx=true&verifySmtp=true
x-api-key: YOUR_API_KEY

# Response fields (both surfaces return the same shape):
{
  "email": "user@domain.com",
  "validFormat": true,   // address passes format rules
  "validMx": true,       // nullable: null = not requested/unknown
  "validSmtp": true,     // nullable: null = inconclusive probe
  "isDisposable": false, // true = temporary/throwaway provider
  "isFree": false,       // true = gmail.com, yahoo.com, etc.
  "detectedName": { "firstName": "User", "confidence": 0.7 },
  "domainSuggestion": null, // { original, suggested } on typos
  "domainAge": { "ageInDays": 3650, "isValid": true },
  "smtpDebug": { "responseCode": 250, "isCatchAll": false }
}

# Billing: 1 credit per tool call. account_whoami is free.
# HTTP 402 = out of credits -> https://email-check.app/pricing

Frequently Asked Questions

What is MCP and why does it matter for email verification?

MCP (Model Context Protocol) is a standard for AI agents to discover and invoke external tools. Email-Check App hosts an MCP server at https://api.email-check.app/mcp, so any MCP-compatible agent can validate emails without custom integration code—register the server URL with an API key and the agent gains email_validate and account_whoami as callable tools inside any task.

Do I need to build my own MCP server to use email verification with agents?

No. The hosted server is ready to connect. MCP is one access path; you can also register the REST endpoint (GET /v1-get-email-details) as a custom tool in Claude, GPT, Gemini, or open-source agent frameworks like LangChain or AutoGen. Use MCP when you want the verification tool available across multiple agent environments without maintaining tool wrappers yourself.

How does agent verification differ from Zapier or n8n workflows?

Zapier and n8n use pre-defined steps: trigger, API call, if/else branch. An agent decides when to validate based on context, can handle unexpected scenarios (escalating unusual patterns, cross-referencing signals), and explains its decisions in natural language. For deterministic, scheduled tasks, Zapier/n8n are sufficient. For dynamic, decision-driven tasks, agents are better.

What about rate limits when agents process large lists?

Batch emails in groups of 50 with short delays between batches, and implement exponential backoff when you receive 429 responses. For lists beyond a few thousand addresses, the bulk CSV checker is more efficient than per-address agent calls—spread very large jobs across multiple hours using a scheduler trigger.

Can agents correct typos and re-verify automatically?

Yes, with a human-in-the-loop safeguard. When the response includes a domainSuggestion (for example gmial.com to gmail.com), the agent can validate the corrected address before updating the record. For signup flows, ask the user to confirm the correction; for internal list cleaning, agents can make the correction decision, re-validate, and update the CRM in a single autonomous sequence.

Agent Architecture Decision Matrix

Different agent frameworks and patterns suit different use cases. This matrix helps you pick the right approach for your email verification pipeline.

PatternBest ForSetupFlexibilityScale
MCP ServerMulti-agent environmentsMediumHighestExcellent
LLM Tool CallingSingle-agent tasksLowHighExcellent
Direct API in AgentCustom agent runtimesLowHighGood
Zapier + AgentHybrid workflowsLowMediumLimited
🔌

Hosted MCP Server

A production MCP server is live at api.email-check.app/mcp—Streamable HTTP, authenticated with your existing API key. Agents get email_validate and a free account_whoami probe without any self-hosted wrapper.

⚡

25ms Agent Call Latency

Agent pipelines need fast tool responses to maintain throughput. 25ms average latency means verification adds negligible overhead to agent decision loops—even when processing hundreds of emails per task.

🎯

Structured, Nullable Results

Every call returns typed fields—validFormat, validMx, validSmtp, isDisposable, isFree—with null reserved for inconclusive probes. Agents apply your accept, reject, review, or correct policy without parsing raw text.

📊

Risk Signals for Routing

Disposable and free-provider flags, domain age, registration data, and catch-all evidence from SMTP diagnostics give agents continuous signals for multi-path routing: accept clean addresses, review uncertain ones, reject throwaways.

✏️

Typo Correction Loop

When the response includes a domainSuggestion, agents can validate the corrected domain and update the record. This closed-loop correction is hard to implement in Zapier but trivial in an agent pipeline.

🔐

Security & Privacy Controls

Emails are processed for validation and not stored. security, privacy, GDPR, and CCPA-aligned data handling make it safe for enterprise agent pipelines processing sensitive contact data.

Give Your Agents Email Verification

Connect your agents to the hosted MCP server or REST API and start building autonomous validation pipelines. Plans start at $6.99/month with 6,000 validations included.

99.9%
Validation Accuracy
25ms
Agent Call Latency
1 Call
All Checks in One Request

All plans include SMTP verification, disposable detection, typo correction, and risk scoring. No feature paywalls. Enterprise pricing available.