Skip to content

Developers · 6 min read

Email verification for AI agents: an MCP server for Claude, Cursor and OpenAI

How to let Claude, Cursor or an OpenAI agent verify email addresses through MCP: what the SimpleCold MCP server does, setup for each client, and how to test it for free.

Oct 30, 2026 · SimpleCold team

Three-step flow from an AI agent in Claude, Cursor or OpenAI to the SimpleCold MCP server and a verified address, with a verify_email call returning Deliverable

An AI assistant can verify email addresses if you connect it to an email verification MCP server. SimpleCold runs a hosted one at https://simplecold.com/api/v1/mcp: add that URL and your API key to Claude Code, Cursor, Claude Desktop or the OpenAI Responses API, and the assistant gets tools to verify one address, up to 50 at a time, or whole lists. Each address uses one credit, the same as the API, and a test key lets you try everything without spending any.

The rest of this post explains why an assistant can't do this on its own, what the tools are, and how to set each client up.

Why a language model can't check an email by itself

Ask a chatbot "is [email protected] a real address?" and it will give you an answer. It just won't be a verified one. A language model can spot a malformed address or a misspelled gmial.com, but it has no way to know whether a specific mailbox exists today. That takes a live check: look up the domain's mail servers, then ask the server over SMTP whether it would accept mail for that recipient, and stop before anything is sent.

Models also make up plausible addresses when asked to find one, and they'll happily guess jane.doe@ when the real pattern is jdoe@. A verification tool turns a guess into a checked result with a reason. The background is in how to verify an email address without sending.

What MCP is

The Model Context Protocol is an open standard for giving AI assistants tools. A service publishes an MCP server; the assistant connects to it, reads the list of tools and their inputs, and calls them when a request needs one. You don't write glue code per assistant. One server works with every client that supports the protocol.

SimpleCold's server is remote and hosted, so there's nothing to install or run. It uses the Streamable HTTP transport and authenticates with your API key as a Bearer token.

The six tools

ToolWhat it does
verify_emailVerifies one address and returns the result, the reason and any typo suggestion
verify_emailsVerifies up to 50 addresses in one call, results in the same order
start_list_verificationStarts a list job from a public CSV link (up to 50 MB) or an array of up to 10,000 addresses
get_list_statusShows a list job's status and progress
get_list_resultsReturns the summary per result, plus the addresses a page at a time, optionally filtered by result
get_credit_balanceShows the credits available before you start a big list

Each tool is the same as an API endpoint, with the same results. Every address comes back Deliverable, Risky or Undeliverable with a plain reason, such as a missing mailbox, a catch-all domain, a disposable inbox or a typo with the suggested fix. The tools can't change API keys, billing, team members or webhooks.

Set it up

First, create an API key in the dashboard under API keys. Choose a test key to start. It begins with sc_test_, runs in the sandbox and never uses credits. Replace YOUR_API_KEY below with it.

Claude Code

claude mcp add --transport http simplecold https://simplecold.com/api/v1/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

Run /mcp inside Claude Code to check that simplecold is connected.

Cursor

Open Settings, then MCP, then add a new server, or edit ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

{
  "mcpServers": {
    "simplecold": {
      "url": "https://simplecold.com/api/v1/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Don't commit a project mcp.json that holds a live key.

Claude Desktop

Claude Desktop's custom connectors sign in with OAuth, which SimpleCold doesn't offer yet. Use the mcp-remote bridge instead, which sends your key as a header. In Settings, Developer, Edit Config, add:

{
  "mcpServers": {
    "simplecold": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://simplecold.com/api/v1/mcp", "--header", "Authorization:${SIMPLECOLD_AUTH}"],
      "env": { "SIMPLECOLD_AUTH": "Bearer YOUR_API_KEY" }
    }
  }
}

Restart Claude Desktop. This needs Node.js 18 or later. The key sits in an environment variable because some systems split arguments on spaces.

ChatGPT and the OpenAI API

ChatGPT's custom connectors also sign in with OAuth, so they can't send an API key yet. For OpenAI models, use the MCP tool in the Responses API, which passes your key as a header:

import os
from openai import OpenAI

client = OpenAI()
response = client.responses.create(
    model="gpt-4.1",
    tools=[{
        "type": "mcp",
        "server_label": "simplecold",
        "server_url": "https://simplecold.com/api/v1/mcp",
        "headers": {"Authorization": f"Bearer {os.environ['SIMPLECOLD_API_KEY']}"},
        "require_approval": "never",
    }],
    input="Is [email protected] deliverable?",
)
print(response.output_text)

Use any model your OpenAI account offers. With a live key, set require_approval to "always" so you approve each call.

Other clients

Any MCP client that supports Streamable HTTP and custom headers works the same way: point it at https://simplecold.com/api/v1/mcp and send Authorization: Bearer YOUR_API_KEY. The MCP docs have the full reference.

Try it with a test key

With a test key, the result depends on the part of the address before the @, so you can see every outcome without verifying anyone real. Ask the assistant to verify:

Watch what the assistant does with each one. If it treats Risky as safe, or retries the slow address in a loop, fix that in your instructions before you switch to a live key. The sandbox docs list every test address.

Prompts that work

Once connected, ask in plain words. The assistant picks the tool:

  • "Verify [email protected] and tell me whether it's safe to send to."
  • "Check these 20 addresses and list the risky ones with the reason."
  • "Verify the CSV at https://example.com/leads.csv, wait for it to finish, then show me the undeliverable rows."
  • "How many SimpleCold credits do I have left?"

For a pasted list or a table in the chat, the assistant uses verify_emails. For anything over 50 addresses, it starts a list job, checks the status, then reads the results page by page.

Limits and costs

  • Credits: one per address, exactly like the API. Test keys use none.
  • Rate limits: the same as the API. The single check allows 100 requests a minute per key and 300 a minute across your organisation.
  • Slow servers: some mail servers answer slowly on purpose. The result comes back as pending, and asking verify_email again within 30 minutes collects it without another credit.
  • List jobs: up to 10,000 addresses passed directly, or a public CSV link of up to 50 MB. Private and internal URLs are refused.

Keep the assistant on a short leash

The assistant acts with your key and spends your organisation's credits, so anyone who can talk to it can spend them. Give it its own key, start with a test key, and disable the key when you stop using it.

If an agent sends email on its own, don't rely on the prompt to stop it sending to bad addresses. Put the send rule in code: send Deliverable, skip Undeliverable, hold Risky and pending for review. AI SDR email verification shows that gate with code.

Where to go next

Check your list before you send it

Start with 200 free credits. Pay per credit after that.