Verifly

Email verification for AI agents — verify, clean & validate emails; self-onboard + crypto pay

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
82%
Naming quality
95%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • HIGHTool poisoning patterns detected
  • LOWTool 'get_credits' description lacks action verbin get_credits
  • LOWTool description contains role marker that could confuse chat modelsin get_started

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,360Tokens (tool definitions)
~858 BTypical response size
Moderate attention impact (1.84% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "verifly": {
      "url": "https://verifly.email/mcp"
    }
  }
}

Remote endpoints

https://verifly.email/mcpstreamable-http

What it can do

Tool inventory

Tools (17)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_started

Call this FIRST if you have no Verifly API key. Returns how Verifly works and how to get access with no human: pay-as-you-go email verification API, 100 free credits on self-registration, no monthly fee. No API key required to call this tool.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪verify_email_demo(email)

Verify one email address with NO account or API key, so you can evaluate Verifly before registering. Rate-limited per IP (a few checks). Returns the same deliverability verdict and flags as the full API. For real volume, call register_account for a key + 100 free credits, then use verify_email.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "The email address to verify, e.g. [email protected]"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪verify_email(email)

Verify one email address in real time. Returns a deliverability verdict (valid / invalid / risky / unknown), the reason, detailed flags (disposable, role account, catch-all, MX, SMTP), a send/reject recommendation, and credit usage.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "The email address to verify, e.g. [email protected]"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢verify_batch(emails, exclude_role_accounts, exclude_public_domains)

Synchronously verify a list of email addresses (best for up to a few hundred). Returns a per-address verdict for each email. For very large lists use the bulk async endpoint instead.

Input Schema

{
  "type": "object",
  "properties": {
    "emails": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "description": "Array of email addresses to verify."
    },
    "exclude_role_accounts": {
      "type": "boolean",
      "description": "Flag/exclude role accounts (info@, sales@, ...). Default false."
    },
    "exclude_public_domains": {
      "type": "boolean",
      "description": "Flag/exclude public domains (gmail.com, ...). Default false."
    }
  },
  "required": [
    "emails"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢clean_email_list(emails, remove_disposable, exclude_role_accounts)

Clean a list of email addresses before an import or campaign: dedupes, removes invalid syntax, and (optionally) strips disposable and role accounts. Returns the cleaned list plus a summary of what was removed.

Input Schema

{
  "type": "object",
  "properties": {
    "emails": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "description": "Email addresses to clean."
    },
    "remove_disposable": {
      "type": "boolean",
      "description": "Remove disposable/throwaway addresses. Default true."
    },
    "exclude_role_accounts": {
      "type": "boolean",
      "description": "Remove role accounts (info@, support@, ...). Default false."
    }
  },
  "required": [
    "emails"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢extract_emails(text, deduplicate, lowercase)

Extract all email addresses found in a block of free-form text (notes, pasted documents, signatures). Optionally deduplicates and lowercases the results.

Input Schema

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "Free-form text to scan for email addresses."
    },
    "deduplicate": {
      "type": "boolean",
      "description": "Remove duplicate addresses. Default true."
    },
    "lowercase": {
      "type": "boolean",
      "description": "Lowercase all extracted addresses. Default true."
    }
  },
  "required": [
    "text"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢check_domain_health(domain)

Check the DNS and deliverability health of an email domain: MX records, SPF, DMARC, and an overall health score. Useful for diagnosing why a domain bounces or for validating a sending domain.

Input Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain to check, e.g. example.com"
    }
  },
  "required": [
    "domain"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_credits

Return the API key's remaining verification credits and recent usage (today / this month) and plan. Costs no credits.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡submit_bulk(emails, webhook_url)

Submit a list of email addresses as an asynchronous bulk verification job — the right tool for large lists. Returns immediately with a job_id, status, and the check_status_url / results_url to poll. Small lists may complete inline (status 'completed'); larger ones return status 'pending' — poll get_job_status until it is 'completed', then call get_job_results. Optionally register a webhook_url (public HTTPS) to be notified when the job finishes.

Input Schema

{
  "type": "object",
  "properties": {
    "emails": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "description": "Email addresses to verify in this job (deduped server-side)."
    },
    "webhook_url": {
      "type": "string",
      "description": "Optional public HTTPS URL to POST a job.completed notification to."
    }
  },
  "required": [
    "emails"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡get_job_status(job_id)

Fetch the current status and progress of a bulk verification job by its job_id (status, percent progress, processed count, and a valid/invalid/risky summary). Poll this after submit_bulk until status is 'completed', then call get_job_results.

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "description": "The job_id returned by submit_bulk."
    }
  },
  "required": [
    "job_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_job_results(job_id)

Fetch the full per-address results of a completed bulk verification job by job_id (each email's verdict, recommendation, and reason) plus the valid/invalid/risky summary and credits used. The job must be 'completed' — check get_job_status first.

Input Schema

{
  "type": "object",
  "properties": {
    "job_id": {
      "type": "string",
      "description": "The job_id returned by submit_bulk."
    }
  },
  "required": [
    "job_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_jobs(status, limit, offset)

List the account's bulk verification jobs, most recent first, with their status, progress, and summary. Optionally filter by status and paginate. Use this to find past jobs and their job_ids.

Input Schema

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "processing",
        "completed",
        "failed"
      ],
      "description": "Only return jobs in this status."
    },
    "limit": {
      "type": "integer",
      "description": "Max jobs to return (1-100, default 50)."
    },
    "offset": {
      "type": "integer",
      "description": "Pagination offset (default 0)."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_usage(period, limit)

Return detailed usage statistics for the account over a period (day, week, or month): total credits used, emails processed, request counts broken down by endpoint and source, a daily breakdown, and recent activity.

Input Schema

{
  "type": "object",
  "properties": {
    "period": {
      "type": "string",
      "enum": [
        "day",
        "week",
        "month"
      ],
      "description": "Reporting period. Default 'month'."
    },
    "limit": {
      "type": "integer",
      "description": "Max recent log entries to include (default 100, max 1000)."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_account

Return the account profile for the current API key: email, name, company, timezone, remaining credits, total credits used, number of API keys, and plan. Costs no credits.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_packages

List the credit packages available for purchase (id, name, credit amount, price in USD, and price per 1k credits). Use the returned package id with buy_credits.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢buy_credits(package_id, method, currency)

Start a purchase of a credit package and return a way to pay. This does NOT complete a payment by itself — it returns a payment link / address: • method 'stripe' → returns a checkout_url. Paying by card requires a HUMAN to open that link and enter card details; an agent cannot finish a card payment on its own. • method 'crypto' → returns a Plisio invoice with a checkout_url AND, when you pass a `currency` (BTC, ETH, LTC, USDT, USDC), a RAW wallet `address` + `amount`. An autonomous agent CAN pay this from a crypto wallet with no browser/human, then credits are added automatically once the payment confirms. Prefer crypto for fully autonomous top-ups. Get a package id from get_packages first.

Input Schema

{
  "type": "object",
  "properties": {
    "package_id": {
      "type": "string",
      "description": "The package id to buy (from get_packages)."
    },
    "method": {
      "type": "string",
      "enum": [
        "stripe",
        "crypto"
      ],
      "description": "Payment method. 'stripe' = card link (needs a human), 'crypto' = wallet-payable invoice. Default 'stripe'."
    },
    "currency": {
      "type": "string",
      "enum": [
        "BTC",
        "ETH",
        "LTC",
        "USDT",
        "USDC"
      ],
      "description": "For method 'crypto': the coin to pay in; returns a raw wallet address an agent can pay autonomously."
    }
  },
  "required": [
    "package_id"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡register_account(email, password)

Programmatically create a brand-new Verifly account — this is how an agent self-onboards with no human in the loop. Requires only an email and a password (min 8 chars; disposable email domains are rejected). The new account starts with free credits. The response includes the new account id/email and a freshly generated `api_key.key` that is shown ONCE — capture and store it immediately, it cannot be retrieved again. Subsequent tool calls can then use that key as the bearer token.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "Email for the new account (not a disposable domain)."
    },
    "password": {
      "type": "string",
      "minLength": 8,
      "description": "Password for the new account (minimum 8 characters)."
    }
  },
  "required": [
    "email",
    "password"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded17 tools
verifiedversion not recorded17 tools