Verify Email Address
deliveriq_verify_emailVerify email deliverability with syntax, MX, SMTP, disposable, and role-based checks. Returns reachability status (safe/risky/invalid/unknown) and a 0-100 score.
Instructions
Verify a single email address for deliverability. Returns reachability status (safe/risky/invalid/unknown), a 0-100 score, and detailed checks (syntax, MX, SMTP, disposable, role-based, etc.).
Args:
email (string): Email address to verify
skip_smtp (boolean): Skip SMTP check (faster, default: false)
check_gravatar (boolean): Check for Gravatar profile (default: false)
check_hibp (boolean): Check Have I Been Pwned breaches (default: false)
include_intelligence (boolean): Include DNSBL, spam trap, domain age, infrastructure analysis (default: false)
Returns: Markdown report with reachability, score, and check details.
Examples:
"Is john@acme.com a valid email?" -> { email: "john@acme.com" }
"Deep check on user@example.com" -> { email: "user@example.com", include_intelligence: true, check_hibp: true }
Credit cost: 1 credit (0 if syntax is invalid)
Error Handling:
Returns "Authentication failed..." if API key is invalid
Returns "Insufficient credits..." if balance is 0
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address to verify (e.g. "user@example.com") | ||
| skip_smtp | No | Skip SMTP verification step (faster but less accurate) | |
| check_gravatar | No | Check if email has a Gravatar profile | |
| check_hibp | No | Check if email appears in Have I Been Pwned breach data | |
| include_intelligence | No | Include deep intelligence (DNSBL, spam trap, domain age, infrastructure) |
Implementation Reference
- The handler function for deliveriq_verify_email. Calls client.verify() with the email address and optional flags (skip_smtp, check_gravatar, check_hibp, include_intelligence), then formats the result into a Markdown report with reachability status, score, and detailed checks (syntax, MX, SMTP, disposable, gravatar, DNSBL, spam trap, infrastructure, HIBP).
async (params) => { try { const res = await client.verify({ email: params.email, options: { skipSmtp: params.skip_smtp, checkGravatar: params.check_gravatar, checkHibp: params.check_hibp, includeIntelligence: params.include_intelligence, }, }); const r = res.result; const lines: string[] = [ `# Email Verification: ${r.email}`, '', `**Reachability**: ${r.reachability.toUpperCase()} | **Score**: ${r.score}/100 | **Credits Used**: ${res.creditsUsed}`, '', '## Checks', `- **Syntax**: ${r.syntax.valid ? 'Valid' : 'Invalid'}${r.syntax.error ? ` (${r.syntax.error})` : ''}`, `- **MX Records**: ${r.mx.valid ? `Valid (${r.mx.records.length} records)` : 'No MX records'}`, `- **SMTP**: ${r.smtp.isDeliverable === true ? 'Deliverable' : r.smtp.isDeliverable === false ? 'Not deliverable' : 'Unknown'} | Catch-all: ${r.smtp.isCatchAll ? 'Yes' : 'No'}`, `- **Disposable**: ${r.misc.isDisposable ? 'Yes' : 'No'} | Role-based: ${r.misc.isRoleBased ? 'Yes' : 'No'} | Free provider: ${r.misc.isFreeProvider ? 'Yes' : 'No'}`, ]; if (r.misc.hasGravatar) lines.push('- **Gravatar**: Found'); if (r.suggestion) lines.push(`- **Did you mean**: ${r.suggestion}`); if (r.intelligence?.dnsbl) { const d = r.intelligence.dnsbl; lines.push(`- **DNSBL**: ${d.listed ? `Listed on ${d.hits.filter((h) => h.listed).length}/${d.checkedZones} zones` : `Clean (${d.checkedZones} zones checked)`}`); } if (r.intelligence?.spamTrapClassification) { const s = r.intelligence.spamTrapClassification; lines.push(`- **Spam Trap**: ${s.riskLevel} risk (type: ${s.trapType}, confidence: ${(s.confidence * 100).toFixed(0)}%)`); } if (r.intelligence?.infrastructure) { const i = r.intelligence.infrastructure; lines.push(`- **Infrastructure**: Score ${i.score}/100 | SPF: ${i.hasSpf ? 'Yes' : 'No'} | DKIM: ${i.hasDkim ? 'Yes' : 'No'} | DMARC: ${i.hasDmarc ? 'Yes' : 'No'}`); } if (r.intelligence?.hibp) { lines.push(`- **HIBP**: ${r.intelligence.hibp.breached ? `Breached (${r.intelligence.hibp.breachCount} breaches)` : 'No breaches found'}`); } lines.push('', `*Verified in ${r.durationMs}ms*`); return successResponse(lines.join('\n')); } catch (error) { return handleSdkError(error); } }, ); - Zod schema defining input validation for deliveriq_verify_email. Accepts: email (required, must be valid email), skip_smtp (boolean, default false), check_gravatar (boolean, default false), check_hibp (boolean, default false), include_intelligence (boolean, default false).
export const VerifyEmailSchema = z.object({ email: z.string().email('Must be a valid email address') .describe('Email address to verify (e.g. "user@example.com")'), skip_smtp: z.boolean().default(false) .describe('Skip SMTP verification step (faster but less accurate)'), check_gravatar: z.boolean().default(false) .describe('Check if email has a Gravatar profile'), check_hibp: z.boolean().default(false) .describe('Check if email appears in Have I Been Pwned breach data'), include_intelligence: z.boolean().default(false) .describe('Include deep intelligence (DNSBL, spam trap, domain age, infrastructure)'), }).strict(); - deliveriq-mcp/src/tools/verification.ts:15-98 (registration)Registration of the tool 'deliveriq_verify_email' on the MCP server within the registerVerificationTools function. Called from index.ts line 39.
server.registerTool( 'deliveriq_verify_email', { title: 'Verify Email Address', description: `Verify a single email address for deliverability. Returns reachability status (safe/risky/invalid/unknown), a 0-100 score, and detailed checks (syntax, MX, SMTP, disposable, role-based, etc.). Args: - email (string): Email address to verify - skip_smtp (boolean): Skip SMTP check (faster, default: false) - check_gravatar (boolean): Check for Gravatar profile (default: false) - check_hibp (boolean): Check Have I Been Pwned breaches (default: false) - include_intelligence (boolean): Include DNSBL, spam trap, domain age, infrastructure analysis (default: false) Returns: Markdown report with reachability, score, and check details. Examples: - "Is john@acme.com a valid email?" -> { email: "john@acme.com" } - "Deep check on user@example.com" -> { email: "user@example.com", include_intelligence: true, check_hibp: true } Credit cost: 1 credit (0 if syntax is invalid) Error Handling: - Returns "Authentication failed..." if API key is invalid - Returns "Insufficient credits..." if balance is 0`, inputSchema: VerifyEmailSchema, annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true, }, }, async (params) => { try { const res = await client.verify({ email: params.email, options: { skipSmtp: params.skip_smtp, checkGravatar: params.check_gravatar, checkHibp: params.check_hibp, includeIntelligence: params.include_intelligence, }, }); const r = res.result; const lines: string[] = [ `# Email Verification: ${r.email}`, '', `**Reachability**: ${r.reachability.toUpperCase()} | **Score**: ${r.score}/100 | **Credits Used**: ${res.creditsUsed}`, '', '## Checks', `- **Syntax**: ${r.syntax.valid ? 'Valid' : 'Invalid'}${r.syntax.error ? ` (${r.syntax.error})` : ''}`, `- **MX Records**: ${r.mx.valid ? `Valid (${r.mx.records.length} records)` : 'No MX records'}`, `- **SMTP**: ${r.smtp.isDeliverable === true ? 'Deliverable' : r.smtp.isDeliverable === false ? 'Not deliverable' : 'Unknown'} | Catch-all: ${r.smtp.isCatchAll ? 'Yes' : 'No'}`, `- **Disposable**: ${r.misc.isDisposable ? 'Yes' : 'No'} | Role-based: ${r.misc.isRoleBased ? 'Yes' : 'No'} | Free provider: ${r.misc.isFreeProvider ? 'Yes' : 'No'}`, ]; if (r.misc.hasGravatar) lines.push('- **Gravatar**: Found'); if (r.suggestion) lines.push(`- **Did you mean**: ${r.suggestion}`); if (r.intelligence?.dnsbl) { const d = r.intelligence.dnsbl; lines.push(`- **DNSBL**: ${d.listed ? `Listed on ${d.hits.filter((h) => h.listed).length}/${d.checkedZones} zones` : `Clean (${d.checkedZones} zones checked)`}`); } if (r.intelligence?.spamTrapClassification) { const s = r.intelligence.spamTrapClassification; lines.push(`- **Spam Trap**: ${s.riskLevel} risk (type: ${s.trapType}, confidence: ${(s.confidence * 100).toFixed(0)}%)`); } if (r.intelligence?.infrastructure) { const i = r.intelligence.infrastructure; lines.push(`- **Infrastructure**: Score ${i.score}/100 | SPF: ${i.hasSpf ? 'Yes' : 'No'} | DKIM: ${i.hasDkim ? 'Yes' : 'No'} | DMARC: ${i.hasDmarc ? 'Yes' : 'No'}`); } if (r.intelligence?.hibp) { lines.push(`- **HIBP**: ${r.intelligence.hibp.breached ? `Breached (${r.intelligence.hibp.breachCount} breaches)` : 'No breaches found'}`); } lines.push('', `*Verified in ${r.durationMs}ms*`); return successResponse(lines.join('\n')); } catch (error) { return handleSdkError(error); } }, ); - deliveriq-mcp/src/constants.ts:5-18 (helper)Credit cost configuration: deliveriq_verify_email costs 1 credit.
export const CREDIT_COSTS: Record<string, number | string> = { deliveriq_verify_email: 1, deliveriq_batch_verify: '1 per email', deliveriq_batch_status: 0, deliveriq_batch_download: 0, deliveriq_list_jobs: 0, deliveriq_find_email: 2, deliveriq_blacklist_check: 1, deliveriq_infrastructure_check: 1, deliveriq_spam_trap_analysis: 1, deliveriq_domain_intel: 1, deliveriq_org_intel: 0, deliveriq_check_credits: 0, };