Skip to main content
Glama

Precleared Contact Check

Cold email compliance check

contact_check
Read-only

Is it legal to send a cold or marketing email to this person? Check before the first email to any new lead, prospect or contact who is not already a customer, one call per address: a compliance check for B2B sales outreach, prospecting and lead lists. Whether it is allowed, or needs consent first, turns on facts you cannot see in the address, such as whether a UK recipient is a limited company or a sole trader, so it looks them up live (UK Companies House) and applies 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 and the UAE's PDPL. Returns a verdict (ok_to_email, consent_needed, blocked or unknown), the rule quoted with its source, the footer requirements (who you are, a postal address, an unsubscribe or opt-out), the next step and a signed receipt id to show a client or auditor. Each charged call uses one check from your allowance (free daily allowance, no sign-in); unknown-country answers and one qualifying re-check within a day are free, up to a combined limit of 50 a day. Nothing is sent to the recipient. Not for transactional emails such as invoices, receipts or password resets. To check the email itself, send the draft as email ({ subject, body, from_name, from_email }); the answer then gains email_check, saying whether the footer has an opt-out, the sender's identity and, where the rule needs one, a postal address. The draft is not stored. Addresses on the key's opt-out list (see suppress_contact) come back blocked and free.

Input Schema

NameRequiredDescriptionDefault
emailNoThe draft email, if you want the answer to say whether its footer meets the rule for the recipient's country. The body is not stored.
pitchNoWhat the email offers, in a few words, for example 'bookkeeping software for dental practices'. Used to judge relevance to the recipient's role.
suppressedNoTrue if the recipient is on your own do-not-contact list.
company_nameNoThe recipient's company or organisation name if you know it, for example from your CRM. For UK recipients it is used to search Companies House when the domain alone does not find the company. A company is only used when other evidence links it to the recipient, such as one of its officers matching the recipient or the website naming it.
address_sourceNoWhere the address came from: published (on their website, profile or a directory), bought (a purchased list), scraped (collected by a tool), given (the person gave it to you) or unknown. It affects the verdict, so do not assume published. Default unknown.
company_numberNoUK company number if known (8 characters), so the register can confirm the company.
pitch_relevantNoTrue if the pitch relates to the recipient's job or business, false if it does not.
recipient_nameNoThe recipient's full name if you know it, for example Jane Smith. For UK recipients it is matched against a company's current officers at Companies House. Precleared does not store it.
sender_countryNoCountry the sending business is based in: GB, US, AE (United Arab Emirates) or CA (Canada). Canadian senders must also meet CASL. Not the recipient's country. Default GB.
recipient_emailNoThe recipient's email address. Give this or recipient_domain.
recipient_domainNoThe recipient's domain when you have no email address, for example acme.co.uk.
existing_customerNoTrue if the recipient has bought from you before. Default false.
recipient_countryNoTwo-letter country code of the recipient if known, for example GB or DE. Otherwise it is worked out from the domain, company records and the company's website.
default_recipient_countryNoTwo-letter country code to use only when the recipient's country can't be worked out from recipient_country, the domain, company records or the company's website, for example US if all your prospects are in the US. recipient_country always wins.

Output Schema

NameRequiredDescriptionDefault
factsNoFacts gathered about the recipient.
usageNoAllowance left for the caller.
chargedNo
reasonsNoThe rule that matched, with its text and source, then any notes.
receiptNoSigned receipt for this check.
verdictYesThe answer for this recipient.
next_stepNoWhat to do next.
confidenceNohigh, medium or low.
disclaimerNoFixed disclaimer line.
email_checkNoPresent when you sent email: whether the draft's footer has what the rule needs.
footer_textNoWhat the email's footer must include, if the rule sets requirements.
held_becauseNo
rules_appliedNoRule keys used.
rules_versionNoVersion of the rule set used.
free_recheck_ofNo
possible_companyNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / email
      Added value: +{
      +  "description": "The draft email, if you want the answer to say whether its footer meets the rule for the recipient's country. The body is not stored.",
      +  "properties": {
      +    "body": {
      +      "description": "Body, plain text or HTML, including the footer and any merge tags such as {{unsubscribe}}.",
      +      "maxLength": 20000,
      +      "type": "string"
      +    },
      +    "from_email": {
      +      "description": "Sending address.",
      +      "maxLength": 254,
      +      "type": "string"
      +    },
      +    "from_name": {
      +      "description": "Sender name shown to the recipient.",
      +      "maxLength": 120,
      +      "type": "string"
      +    },
      +    "subject": {
      +      "description": "Subject line.",
      +      "maxLength": 300,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "body"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / email_check
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present when you sent email: whether the draft's footer has what the rule needs.",
      +  "properties": {
      +    "country": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "footer_text": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "missing": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "requirements": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "detail": {
      +            "type": "string"
      +          },
      +          "key": {
      +            "type": "string"
      +          },
      +          "met": {
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "required": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "key",
      +          "required",
      +          "met",
      +          "detail"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "status": {
      +      "enum": [
      +        "pass",
      +        "fail"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "status",
      +    "country",
      +    "requirements",
      +    "missing",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  2. Changed6 schema fields changed
    • changedInput schema / properties / sender_country / description
      Previous value: -"Country the sending business is based in: GB, US or AE (United Arab Emirates). Not the recipient's country. Default GB."New value: +"Country the sending business is based in: GB, US, AE (United Arab Emirates) or CA (Canada). Canadian senders must also meet CASL. Not the recipient's country. Default GB."
    • changedInput schema / properties / sender_country / enum
      Previous value: -[
      -  "GB",
      -  "US",
      -  "AE"
      -]New value: +[
      +  "GB",
      +  "US",
      +  "AE",
      +  "CA"
      +]
    • addedOutput schema / properties / charged
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / free_recheck_of
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / held_because
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "case": {
      +      "type": "string"
      +    },
      +    "evidence": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "case",
      +    "evidence"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / possible_company
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "name": {
      +      "type": "string"
      +    },
      +    "number": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "name",
      +    "number"
      +  ],
      +  "type": "object"
      +}
  3. Changed2 schema fields changed
    • addedInput schema / properties / company_name
      Added value: +{
      +  "description": "The recipient's company or organisation name if you know it, for example from your CRM. For UK recipients it is used to search Companies House when the domain alone does not find the company. A company is only used when other evidence links it to the recipient, such as one of its officers matching the recipient or the website naming it.",
      +  "maxLength": 160,
      +  "type": "string"
      +}
    • addedInput schema / properties / recipient_name
      Added value: +{
      +  "description": "The recipient's full name if you know it, for example Jane Smith. For UK recipients it is matched against a company's current officers at Companies House. Precleared does not store it.",
      +  "maxLength": 120,
      +  "type": "string"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / sender_country / description
      Previous value: -"Country the sending business is based in, GB or US. Not the recipient's country. Default GB."New value: +"Country the sending business is based in: GB, US or AE (United Arab Emirates). Not the recipient's country. Default GB."
    • changedInput schema / properties / sender_country / enum
      Previous value: -[
      -  "GB",
      -  "US"
      -]New value: +[
      +  "GB",
      +  "US",
      +  "AE"
      +]
  5. Changed1 schema field changed
    • changedInput schema / properties / address_source / description
      Previous value: -"Where the address came from: published (on their website, profile or a directory), bought (a purchased list), scraped (collected by a tool), given (the person gave it to you) or unknown. It affects the verdict, so do not assume published."New value: +"Where the address came from: published (on their website, profile or a directory), bought (a purchased list), scraped (collected by a tool), given (the person gave it to you) or unknown. It affects the verdict, so do not assume published. Default unknown."
  6. Changed3 schema fields changed
    • addedOutput schema / properties / usage / properties / low_balance
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / usage / properties / notice
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / usage / properties / top_up_url
      Added value: +{
      +  "type": "string"
      +}
  7. Changed2 schema fields changed
    • addedInput schema / properties / default_recipient_country
      Added value: +{
      +  "description": "Two-letter country code to use only when the recipient's country can't be worked out from recipient_country, the domain, company records or the company's website, for example US if all your prospects are in the US. recipient_country always wins.",
      +  "pattern": "^[A-Za-z]{2}$",
      +  "type": "string"
      +}
    • changedInput schema / properties / recipient_country / description
      Previous value: -"Two-letter country code of the recipient if known, for example GB or DE. Otherwise it is worked out from the domain and company records."New value: +"Two-letter country code of the recipient if known, for example GB or DE. Otherwise it is worked out from the domain, company records and the company's website."
  8. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "confidence": {
      +      "description": "high, medium or low.",
      +      "type": "string"
      +    },
      +    "disclaimer": {
      +      "description": "Fixed disclaimer line.",
      +      "type": "string"
      +    },
      +    "facts": {
      +      "additionalProperties": {},
      +      "description": "Facts gathered about the recipient.",
      +      "properties": {},
      +      "type": "object"
      +    },
      +    "footer_text": {
      +      "description": "What the email's footer must include, if the rule sets requirements.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "next_step": {
      +      "description": "What to do next.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "reasons": {
      +      "description": "The rule that matched, with its text and source, then any notes.",
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "receipt": {
      +      "additionalProperties": {},
      +      "description": "Signed receipt for this check.",
      +      "properties": {
      +        "id": {
      +          "type": "string"
      +        },
      +        "verify_url": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "rules_applied": {
      +      "description": "Rule keys used.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "rules_version": {
      +      "description": "Version of the rule set used.",
      +      "type": "string"
      +    },
      +    "usage": {
      +      "additionalProperties": {},
      +      "description": "Allowance left for the caller.",
      +      "properties": {
      +        "credits_remaining": {
      +          "type": "number"
      +        },
      +        "free_remaining_today": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "verdict": {
      +      "description": "The answer for this recipient.",
      +      "enum": [
      +        "ok_to_email",
      +        "consent_needed",
      +        "blocked",
      +        "unknown"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "verdict"
      +  ],
      +  "type": "object"
      +}
  9. Changed10 schema fields changed
    • changedInput schema / properties / address_source / description
      Previous value: -"Where the address came from. Default published."New value: +"Where the address came from: published (on their website, profile or a directory), bought (a purchased list), scraped (collected by a tool), given (the person gave it to you) or unknown. It affects the verdict, so do not assume published."
    • changedInput schema / properties / company_number / description
      Previous value: -"UK company number, if known. Speeds up UK checks."New value: +"UK company number if known (8 characters), so the register can confirm the company."
    • changedInput schema / properties / existing_customer / description
      Previous value: -"Whether the recipient is already a customer. Default false."New value: +"True if the recipient has bought from you before. Default false."
    • changedInput schema / properties / pitch / description
      Previous value: -"A short description of what the email offers."New value: +"What the email offers, in a few words, for example 'bookkeeping software for dental practices'. Used to judge relevance to the recipient's role."
    • changedInput schema / properties / pitch_relevant / description
      Previous value: -"Whether the pitch relates to the recipient's role or business."New value: +"True if the pitch relates to the recipient's job or business, false if it does not."
    • changedInput schema / properties / recipient_country / description
      Previous value: -"ISO 3166 two-letter country of the recipient, if known."New value: +"Two-letter country code of the recipient if known, for example GB or DE. Otherwise it is worked out from the domain and company records."
    • changedInput schema / properties / recipient_domain / description
      Previous value: -"Recipient domain, used when there is no email address."New value: +"The recipient's domain when you have no email address, for example acme.co.uk."
    • changedInput schema / properties / recipient_email / description
      Previous value: -"Recipient email address. Give this or recipient_domain."New value: +"The recipient's email address. Give this or recipient_domain."
    • changedInput schema / properties / sender_country / description
      Previous value: -"Where the sender is based. GB or US. Default GB."New value: +"Country the sending business is based in, GB or US. Not the recipient's country. Default GB."
    • changedInput schema / properties / suppressed / description
      Previous value: -"Set true if the recipient is on your own suppression list."New value: +"True if the recipient is on your own do-not-contact list."
  10. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses live UK Companies House lookups, supported jurisdictions, possible verdicts, footer requirements, signed receipts, and that nothing is sent to the recipient. It also explains charging: one allowance check per charged call, free daily allowance, and free unknown-country or qualifying re-check answers up to a combined limit, which lets an agent predict cost and side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose question is front-loaded, and the paragraph is dense with useful constraints rather than filler. However, it is long, includes a sprawling jurisdiction list, and has some run-on sentences that could be structured more crisply.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, multi-jurisdiction compliance tool with live lookups and billing, the description covers when to use it, exclusions, cost model, data handling, and returned value. With annotations and an output schema already present, it is complete enough for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all 14 parameters and their formats. The description adds only modest extra meaning—mainly that sending the email draft yields an email_check result and that the draft is not stored—so the baseline of 3 is appropriate for a high-coverage schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific question ('Is it legal to send a cold or marketing email to this person?') and defines the resource as a per-recipient compliance check for B2B outreach. It clearly separates the tool from transactional email use and names the sibling suppress_contact, so an agent can place it among siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to check before the first email to any new lead, prospect, or non-customer contact, and it rules out transactional emails such as invoices or password resets. It also gives the one-call-per-address constraint and points to suppress_contact for opt-out lists, leaving little ambiguity about when to invoke it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.