Skip to main content
Glama

Precleared: cold-email legality checks for AI agents

Is your agent allowed to send that? Precleared answers before the email goes out: a per-address verdict on cold marketing email, the rule quoted, what the footer must include, and a signed receipt anyone can verify. Covers the UK (PECR and UK GDPR), the US (CAN-SPAM), Canada (CASL), Germany (UWG), France (CPCE), Australia (Spam Act), Ireland (S.I. 336/2011), the Netherlands (Telecommunicatiewet), Spain (LSSI), Italy (Privacy Code), Latvia (Information Society Services Law), the United Arab Emirates (PDPL), Egypt (Personal Data Protection Law) and Qatar (Personal Data Privacy Protection Law).

It sits between the step that finds an address (Hunter, Apollo, Clay) and the step that sends (Gmail, Outlook, Instantly, lemlist). One call per new contact, before the first email. It is not needed for invoices, receipts or other transactional email.

Plugin and agent skill

This repository is also a Claude plugin and an Agent Skills skill. The plugin connects your agent to the hosted MCP server and adds cold-email-check, a skill that tells the agent when to run a check (before the first cold email to a new address, not for invoices or replies), how to fill in the facts without guessing, what to do with each verdict and where to keep the receipt.

Claude Code:

claude plugin marketplace add gabrielaoimevbore-beep/precleared-mcp
claude plugin install precleared@precleared

If you added the Precleared MCP server separately before, remove it so the tools don't appear twice.

Claude.ai, the desktop app and Cowork: Customize, Plugins, Add, Add marketplace, enter gabrielaoimevbore-beep/precleared-mcp, then add Precleared and connect its connector from the plugin's Connectors tab.

Cursor, Codex, OpenCode and other agents that read skills:

npx skills add gabrielaoimevbore-beep/precleared-mcp

The skill uses the Precleared MCP tools when they are connected. Otherwise it runs skills/cold-email-check/scripts/check.mjs (Node 18 or later, no dependencies), which calls the REST API for one address or a whole list:

node skills/cold-email-check/scripts/check.mjs --email jane@acme.co.uk --sender GB --source SOURCE --pitch "bookkeeping software"
node skills/cold-email-check/scripts/check.mjs --file leads.csv --sender GB --source SOURCE --out leads-checked.csv

SOURCE is where the addresses came from: published, bought, scraped, given or unknown. It changes the verdict, so give the real answer. The script sends each address and the facts given for it to precleared.dev, with PRECLEARED_API_KEY if you set it. Nothing else leaves your machine, and nothing is sent to the recipient.

Related MCP server: Email Verifier MCP Server

Add it to your client

Cursor: Add to Cursor

VS Code: Add to VS Code

Claude Code:

claude mcp add --transport http precleared https://precleared.dev/mcp

Claude.ai and the Claude desktop app: Settings, Connectors, Add custom connector, paste https://precleared.dev/mcp.

Claude directory: https://claude.ai/directory/precleared (one click, no setup).

Smithery: connect through https://smithery.ai/servers/gabrielaoimevbore/precleared. The key is an optional connection setting there.

Official MCP registry: dev.precleared/contact-check

Local server over stdio (this repository): for clients that only run local servers.

{
  "mcpServers": {
    "precleared": {
      "command": "npx",
      "args": ["-y", "github:gabrielaoimevbore-beep/precleared-mcp"],
      "env": { "PRECLEARED_API_KEY": "pc_live_..." }
    }
  }
}

Or with Docker: docker build -t precleared-mcp . && docker run -i --rm -e PRECLEARED_API_KEY=pc_live_... precleared-mcp. The key is optional either way. Any client can also bridge the hosted endpoint with npx mcp-remote https://precleared.dev/mcp --transport http-only.

Any MCP client (JSON):

{
  "mcpServers": {
    "precleared": {
      "url": "https://precleared.dev/mcp",
      "headers": { "Authorization": "Bearer pc_live_..." }
    }
  }
}

The Authorization header is optional, and X-API-Key: pc_live_... works too. Without a key you get 100 free checks a day over the hosted MCP endpoint (10 over REST), shared by everyone on the same IP address. A free key from https://precleared.dev/get-key gives you your own 100 a day over MCP (25 over REST); a £39 pack adds 2,000 checks that never expire.

Claude Managed Agents

A ready-made agent definition that checks every recipient before drafting is in examples/claude-managed-agents.

What is in this repository

index.js is a small MCP server (Node 18 or later, one dependency) that exposes the same tools as the hosted endpoint and fulfils them through the public REST API. Nothing is stored locally and nothing is sent to the recipient. The hosted endpoint at https://precleared.dev/mcp is the canonical server: without a key it allows 100 checks a day, while the REST API behind this local server allows 10 a day per network, so add a free key if you run it locally at any volume.

npm install
npm test        # runs the server and the skill script against a fake API on localhost, no network needed
PRECLEARED_API_KEY=pc_live_... node index.js

Environment: PRECLEARED_API_KEY (optional), PRECLEARED_API_BASE (default https://precleared.dev/api/v1), PRECLEARED_TIMEOUT_MS (default 30000).

The plugin lives beside it: .claude-plugin/ holds the plugin and marketplace manifests, .mcp.json points at the hosted server, and skills/cold-email-check/ holds the skill and its script. node test/skill.mjs tests the script against a fake API.

Tools

Tool

What it does

contact_check

Takes a recipient email or domain, your sender country (GB, US, AE or CA), the pitch, where the address came from and, if you have them, the company name, the person's name and the draft email. Returns verdict (ok_to_email, consent_needed, blocked or unknown), confidence, the rule quoted with its source, footer_text (what the email's footer must include, not wording to paste), next_step, the facts used, email_check when a draft was passed (does the footer have an opt-out, the sender's identity and, where needed, a postal address; the draft is not stored) and a signed receipt. Not needed for transactional email such as invoices.

verify_receipt

Takes a receipt id and returns the receipt with its hashes, Ed25519 signature and public key.

suppress_contact

Adds an address or a whole domain to the key's opt-out list, or removes it. Every later contact_check on a listed address answers blocked, free of charge. Needs PRECLEARED_API_KEY.

Example

curl https://precleared.dev/api/v1/check \
  -H "Content-Type: application/json" \
  -d '{"recipient_email":"jane@acme.co.uk","sender_country":"GB","address_source":"published"}'
{
  "verdict": "ok_to_email",
  "confidence": "high",
  "reasons": [{ "rule_key": "gb_corporate_ok", "text": "Under PECR the consent rule for marketing email applies to individual subscribers only...", "source_title": "PECR 2003 regulation 22(1) and ICO Guide to PECR" }],
  "footer_text": "Say who you are and who the email is from, include a valid postal address, and give a simple free way to stop further emails (PECR regulation 23).",
  "next_step": "Send. Log the receipt against the lead.",
  "receipt": { "id": "cc_rcpt_...", "signature": "...", "key_version": "k1", "verify_url": "https://precleared.dev/api/v1/receipt?id=cc_rcpt_..." }
}

What the receipt proves

That Precleared was asked this question, with these facts, at this time, and gave this answer. Every receipt has a public page at https://precleared.dev/r/<id> and can be verified offline with the public key at https://precleared.dev/api/v1/public-key. It is decision support with sources, not legal advice.

Privacy and terms

https://precleared.dev/privacy · https://precleared.dev/terms

Available Tools

3 tools
contact_checkContact checkAInspect

Check whether a cold or unsolicited marketing email to one recipient is allowed under UK PECR and GDPR, US CAN-SPAM, Canadian CASL, German UWG, French CPCE, Australia's Spam Act, Ireland's ePrivacy Regulations, the Dutch Telecommunicatiewet, Spain's LSSI, Italy's Privacy Code, Latvia's Information Society Services Law, the UAE's PDPL, Egypt's Personal Data Protection Law and Qatar's Personal Data Privacy Protection Law. Use it before the first email to a new contact, one call per address. Not needed for transactional emails such as invoices, receipts or password resets. Returns the verdict, confidence, the rule quoted with its source, what the email's footer must include, the next step and the facts used. Pass the draft in email and the answer also reports whether its footer meets the rule (email_check). Each charged check uses one check from your allowance and is saved as a signed receipt; answers where no rule applied, and one re-check within a day, are free. It does not send anything.

Inputs: email, pitch, suppressed, company_name, +10 more. Returns: facts, usage, charged, reasons, +9 more

suppress_contactOpt-out listA
DestructiveIdempotent
Inspect

Add an email address or a whole domain to this key's opt-out list, or remove it. Use it when someone unsubscribes, replies asking not to be contacted, or must never be emailed. Every later contact_check on a listed address answers blocked, free of charge, so the list works across every tool that uses the same key. Needs PRECLEARED_API_KEY: the list belongs to a key. Nothing is sent to the recipient.

Inputs: email, domain, reason, remove. Returns: entry, charged, created, removed

verify_receiptVerify receiptA
Read-onlyIdempotent
Inspect

Fetch a Precleared receipt by its id (cc_rcpt_...) to show what was checked, when, and the verdict, with the hashes, Ed25519 signature and public key needed to verify it. Use it when a person or an audit asks for proof of a check.

Inputs: id (required). Returns: id, verdict, algorithm, signature, +11 more

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.4/5.0

    Scored across 3 tools

    Disambiguation5/5

    Each tool has a clearly separate role: contact_check evaluates send eligibility, verify_receipt retrieves proof of a past check, and suppress_contact manages the opt-out list. There is no meaningful overlap or risk of misselection.

    Naming Consistency4/5

    All names use snake_case, and verify_receipt and suppress_contact follow a verb_noun pattern. contact_check is noun-first and slightly breaks the pattern, but remains readable and unambiguous.

    Tool Count5/5

    Three tools is well matched to a narrow pre-send compliance service: check, prove, and suppress. Each tool earns its place without redundancy.

    Completeness4/5

    The core lifecycle is covered: check a recipient, retrieve a signed receipt, and manage opt-outs. Minor gaps exist, such as no way to list or export suppression entries or browse past checks, but agents can work around these.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to verify email addresses through a multi-signal probabilistic pipeline, returning confidence scores and honest statuses (safe/risky/invalid/unknown) with evidence.
      Apache 2.0
    • F
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to verify email addresses in real-time, checking syntax, DNS, MX records, and SMTP handshake, returning verdicts and deliverability scores without sending actual emails.
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Connects AI hosts to a deterministic, cited regulatory-compliance reference so agents can look up laws, search regulations, compute which requirements a product triggers, and find related Controls, vendors, enforcement actions, and counsel with primary-source links. It also exposes the accepted feature/market/audience catalog and a token verifier for grounding what was served.
      41 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Enables AI agents to have planned actions checked before execution and to retrieve signed receipts for past checks, with tools for describing and explaining the ruleset.
      CC BY-4.0