# FrostyVerify MCP Server

Verify emails from any [MCP](https://modelcontextprotocol.io) client (Claude
Desktop, Claude Code, Cursor, etc.) using your FrostyVerify account.

## Setup

1. Create an API key at https://frostyverify.com/api-keys
2. Add the server to your MCP client config:

```json
{
  "mcpServers": {
    "frostyverify": {
      "command": "npx",
      "args": ["-y", "frostyverify-mcp"],
      "env": { "FROSTYVERIFY_API_KEY": "fv_live_your_key" }
    }
  }
}
```

Optional: set `FROSTYVERIFY_BASE_URL` to point at a different environment
(defaults to `https://frostyverify.com/api/v1`).

Connect in **Claude Code** with one command:

```bash
claude mcp add --env FROSTYVERIFY_API_KEY=fv_live_your_key --transport stdio frostyverify -- npx -y frostyverify-mcp
```

Then just say: *"verify leads.csv, give me the safe ones, then score the catch-alls."*

## Tools

| Tool | What it does |
|------|--------------|
| `verify_email` | Verify one address, returns its category (1 credit). |
| `verify_bulk` | Submit up to 50,000 emails, returns a `job_id`. |
| `verify_catchall` | Score catch-all / accept-all addresses (separate catch-all credits), returns a `job_id`. |
| `get_job` | Poll a job: live counts while running, final summary + CSV link when done. |

## Run locally (dev)

```bash
cd mcp
npm install
FROSTYVERIFY_API_KEY=fv_live_your_key node index.mjs
```

## Categories

Email: `safe`, `role`, `catch_all`, `disposable`, `inbox_full`, `spam_trap`,
`disabled`, `invalid`, `unknown` ("safe to send" = `safe` + `role`).
Catch-all: `safe`, `risky`, `invalid`.
