# Email Finder & Verifier MCP Server for AI Agents (`memo23/email-mcp-server`) Actor

Hosted email MCP server: find company emails from a website or company name, and verify any email list (syntax + MX + disposable + role checks) — from Claude, Cursor, ChatGPT or any MCP client. No API keys. Billed per lookup.

- **URL**: https://apify.com/memo23/email-mcp-server.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** AI, Agents, MCP servers
- **Stats:** 1 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 email verifieds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

<h1 align="center">Email Finder &amp; Verifier MCP Server — Find &amp; Verify Emails from Claude, Cursor &amp; ChatGPT</h1>

<p align="center">
  <img src="https://muhamed-didovic.github.io/assets/email-mcp-server-card.png" alt="Email Finder & Verifier MCP Server — a hosted Model Context Protocol server with verify_email, verify_emails, find_company_emails and find_company_domain tools" width="100%">
</p>

Give your AI assistant **email superpowers**. This Actor runs as a **hosted MCP server** (Model Context Protocol): connect Claude, Cursor, ChatGPT, VS Code or any MCP client and it can **find a company's contact emails** (from a website or just a company name) and **verify any email list** — syntax, MX/mail-server, disposable-domain, role and free-provider checks — with a clean `valid` / `risky` / `invalid` verdict. **No API keys, no third-party email-finder subscription, nothing to host.**

Apify hosts it, authenticates it with your Apify token, and bills it **per lookup / per email** — you don't run or host anything.

---

### 🧰 Tools

**Four tools**, all returning **clean, typed JSON** — ready for an LLM to reason over.

| Tool | What it does | Key arguments |
|---|---|---|
| **`verify_email`** | Verify one email address: syntax, MX/mail-server presence, disposable-domain, role-based and free-provider checks. Returns a `valid` / `risky` / `invalid` verdict. | `email` *(required)* |
| **`verify_emails`** | Verify a **list** of emails in bulk (up to **100** per call). Each gets the full check set plus a verdict; returns a summary count + per-email results. | `emails` *(required, list, 1–100)* |
| **`find_company_emails`** | Find a company's contact emails. Pass a **website** when you know it (most accurate — the site is scraped directly), or just the **company name** (the domain is discovered first). Optionally verify the results in one call. | `website` *and/or* `company` *(one required)*, `city`, `state`, `verify` (bool) |
| **`find_company_domain`** | Discover the most likely website domain for a company name — no scraping, just the domain. Cheap and fast; useful as a first step. | `company` *(required)* |

> **Pricing** is per-call: `verify_email` / each email in `verify_emails` is billed **per email verified**, `find_company_emails` **per lookup**, and `find_company_domain` **per domain lookup** (the cheapest). Adding `verify: true` to `find_company_emails` also bills the returned emails as verifications.

---

### 🔌 Connect it

This Actor runs in **Standby mode** and exposes an MCP endpoint at **`/mcp`** over the **Streamable HTTP** transport. Point your MCP client at the Actor's Standby URL and authenticate with your **Apify API token** as a bearer token.

Add this to your MCP client config (**Claude Desktop, Cursor, VS Code, Windsurf, …**):

```json
{
  "mcpServers": {
    "email": {
      "url": "https://<YOUR-STANDBY-URL>/mcp",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
````

- Your **Standby URL** is shown on the Actor's page once you enable Standby (looks like `https://<user>--email-mcp-server.apify.actor`).
- Your **Apify API token** is under **Settings → Integrations** in the Apify Console.

That's it — your assistant will discover the four tools automatically and pick the right one.

***

### 💬 Example prompts

Once connected, just ask your assistant naturally:

- *“Find the contact email for apify.com.”*
- *“What's the website domain for Stripe?”*
- *“Here's a list of 40 emails from a lead export — verify them and tell me which are safe to send to.”*
- *“Find emails for ‘Acme Roofing’ in Austin, Texas, and verify them.”*
- *“Is ceo@stripe.com a deliverable address?”*

***

### 📦 Example tool calls & output

#### `verify_emails`

```json
{ "emails": ["ceo@stripe.com", "info@shopify.com", "fake@nope.invalid"] }
```

```json
{
  "summary": { "total": 3, "valid": 1, "risky": 1, "invalid": 1 },
  "results": [
    {
      "email": "ceo@stripe.com",
      "syntaxValid": true,
      "domain": "stripe.com",
      "mxFound": true,
      "isDisposable": false,
      "isRoleBased": false,
      "isFreeProvider": false,
      "verdict": "valid"
    },
    {
      "email": "info@shopify.com",
      "syntaxValid": true,
      "domain": "shopify.com",
      "mxFound": true,
      "isDisposable": false,
      "isRoleBased": true,
      "isFreeProvider": false,
      "verdict": "risky"
    },
    {
      "email": "fake@nope.invalid",
      "syntaxValid": true,
      "domain": "nope.invalid",
      "mxFound": false,
      "isDisposable": false,
      "isRoleBased": false,
      "isFreeProvider": false,
      "verdict": "invalid"
    }
  ]
}
```

- **valid** — syntax + MX both pass and it's not disposable/role/free.
- **risky** — deliverable domain, but role-based (`info@`, `sales@`…) or a free provider — reaches an inbox but may not be the person you want.
- **invalid** — bad syntax, no mail server (MX), or a disposable domain.

#### `verify_email`

```json
{ "email": "ceo@stripe.com" }
```

Returns a single object with the same fields as one `results[]` entry above.

#### `find_company_emails`

```json
{ "website": "apify.com" }
```

```json
{
  "company": null,
  "website": "apify.com",
  "emails": ["hello@apify.com"],
  "emailCount": 1,
  "source": "website",
  "confidence": "high"
}
```

Pass `company` instead of `website` to discover the domain first, or add `"verify": true` to attach a `verifications` block with a verdict per email.

#### `find_company_domain`

```json
{ "company": "Stripe" }
```

```json
{ "company": "Stripe", "domain": "stripe.com", "found": true }
```

***

### ✅ Why use it

- **Two jobs, one server.** Find emails **and** verify them — no separate email-finder and email-verifier subscriptions.
- **No API keys.** No Hunter/NeverBounce/ZeroBounce account, no OAuth, no per-service billing to wire up.
- **Built for agents.** Clean, typed tools with descriptions LLMs understand, so your assistant picks the right one and gets structured JSON back.
- **Website-first accuracy.** When you know the site, `find_company_emails` scrapes it directly for the truest contacts; when you only have a name, it discovers the domain first.
- **Pay per call.** Billed per email / per lookup — no subscription, no idle server cost, nothing to host.
- **Works everywhere.** Standard **Streamable HTTP** MCP transport — Claude, Cursor, ChatGPT, VS Code, Windsurf, or your own agent.

***

### 🎯 Great for

- **Lead-list hygiene** — verify a scraped or exported list before you send, to protect sender reputation.
- **Outbound & sales prospecting** — turn a company name or website into a real contact email inside your agent.
- **CRM enrichment** — fill in missing emails and flag stale / risky addresses.
- **Sign-up / form validation** — check an address is deliverable (syntax + MX) at the point of capture.

***

### ⚙️ Notes & limitations

- **Verification is heuristic, not an SMTP mailbox ping.** Checks are **syntax + MX (mail-server) presence + disposable-domain + role-based + free-provider** — it confirms the address is well-formed and the domain can receive mail, and flags likely-low-quality addresses. It does **not** open an SMTP session to confirm a specific mailbox exists, so a `valid` verdict means *deliverable-looking*, not *guaranteed to exist*.
- **Role & free addresses are `risky`, not `invalid`** — `info@`, `support@`, `sales@` and Gmail/Outlook-style addresses reach an inbox but may not be the individual you want.
- `find_company_emails` returns public contact addresses published on the company's own site (or the discovered domain). Coverage depends on what the business exposes; some sites list none.
- Bulk `verify_emails` is capped at **100 emails per call** — split larger lists across calls.

***

### ⚠️ Disclaimer

This Actor accesses only **publicly available** data (public company websites and public DNS/MX records) and performs no login or private-account access. Email verification is heuristic and provided as-is with no guarantee that any address is deliverable. You are responsible for using the output — including any outreach — in compliance with anti-spam laws (CAN-SPAM, GDPR, CASL…) and applicable terms. Not affiliated with, endorsed by, or sponsored by any company named in examples.

***

### 🔎 SEO keywords

email MCP, email MCP server, email finder MCP, email verifier MCP, email verification API, find company email, company email finder, email verifier for Claude, email finder for Cursor, email finder for ChatGPT, MCP server, Model Context Protocol, verify email address, bulk email verification, MX record check, disposable email detection, role-based email check, lead enrichment MCP, no-auth email finder, email tool for AI agents, hosted MCP server, Streamable HTTP MCP.

# Actor input Schema

## `useApifyProxy` (type: `boolean`):

Fetch company websites through Apify Proxy for reliability (recommended). Turn off to fetch directly.

## Actor input object example

```json
{
  "useApifyProxy": true
}
```

# 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

```javascript
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("memo23/email-mcp-server").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

```python
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("memo23/email-mcp-server").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call memo23/email-mcp-server --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/email-mcp-server",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Email Finder & Verifier MCP Server for AI Agents",
        "description": "Hosted email MCP server: find company emails from a website or company name, and verify any email list (syntax + MX + disposable + role checks) — from Claude, Cursor, ChatGPT or any MCP client. No API keys. Billed per lookup.",
        "version": "0.0",
        "x-build-id": "CvyMjg6cQtaJ4i2zO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~email-mcp-server/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-email-mcp-server",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~email-mcp-server/runs": {
            "post": {
                "operationId": "runs-sync-memo23-email-mcp-server",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~email-mcp-server/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-email-mcp-server",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "useApifyProxy": {
                        "title": "Route outbound requests through Apify Proxy",
                        "type": "boolean",
                        "description": "Fetch company websites through Apify Proxy for reliability (recommended). Turn off to fetch directly.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
