Compliance Check

Preview a TCPA/GDPR/CASL/10DLC gate result before spending a paid send. No key needed.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
85%
Naming quality
93%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,610Tokens (tool definitions)
~1.0 KBTypical response size
Moderate attention impact (1.26% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "compliance-check": {
      "url": "https://hatchloop.dev/mcp/compliance-check"
    }
  }
}

Remote endpoints

https://hatchloop.dev/mcp/compliance-checkstreamable-http

What it can do

Tool inventory

Tools (8)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒get_status(operation_id)

Query the current state of any in-flight async operation by operation_id. [free, no key]

Input Schema

{
  "type": "object",
  "properties": {
    "operation_id": {
      "type": "string"
    }
  },
  "required": [
    "operation_id"
  ]
}
🟒get_outcome(operation_id)

Retrieve the final OutcomeReceipt for a completed operation. [free, no key]

Input Schema

{
  "type": "object",
  "properties": {
    "operation_id": {
      "type": "string"
    }
  },
  "required": [
    "operation_id"
  ]
}
🟒preview_cost(operation, params)

Return an expected cost estimate, latency estimate, and success-probability estimate for a proposed call before execution. Returns the exact price when it is fixed, and a min/max range when the cost depends on channel or outcome. It does not promise an accuracy percentage - check cost_range. [free, no key]

Input Schema

{
  "type": "object",
  "properties": {
    "operation": {
      "type": "string"
    },
    "params": {
      "type": "object",
      "description": "The same request body you would pass to the operation"
    }
  },
  "required": [
    "operation",
    "params"
  ]
}
🟒self_test

Service health probe: runs 6 internal checks and reports how many passed. Confirms the server is up and responding - it does NOT probe each tool individually. Use to verify connectivity before production use. [free, no key]

Input Schema

{
  "type": "object",
  "properties": {}
}
🟒check_compliance(recipient_id, content, channel, message_type, country_code, ...)

Free, instant pre-flight for the compliance gate: runs the SAME TCPA/GDPR/CASL/CAN-SPAM/10DLC checks as send_message and call_business, in preview mode -- nothing is sent, nothing changes. Tells you whether a send would be permitted before you pay, and if not, names the exact rule and how to fix it. De-risks a paid send the way check_booking_link de-risks a paid booking. [free, no key]

Input Schema

{
  "type": "object",
  "properties": {
    "recipient_id": {
      "type": "string",
      "description": "Phone in E.164 (e.g. '+14045550100') or email address the message would go to."
    },
    "content": {
      "type": "string",
      "description": "The actual message body you intend to send. The gate classifies the real text,…"
    },
    "channel": {
      "type": "string",
      "enum": [
        "sms",
        "email",
        "voice"
      ],
      "description": "Delivery channel. Omit to auto-infer sms/email from recipient_id; set 'voice'…"
    },
    "message_type": {
      "type": "string",
      "description": "Intent tag: transactional, marketing, reminder, follow_up, notification.…",
      "default": "transactional"
    },
    "country_code": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 (e.g. 'US', 'DE', 'CA'). Auto-inferred from phone if…"
    },
    "state_code": {
      "type": "string",
      "description": "US state code (e.g. 'CA') for state-specific rules."
    }
  },
  "required": [
    "recipient_id",
    "content"
  ]
}
🟒verify_company_record(name, country, lei)

Free, live lookup of a company official registry record. Queries the GLEIF global LEI registry (primary, 2.6 million legal entities worldwide) and SEC EDGAR (US public companies) to return the official legal name, LEI, entity status, jurisdiction, registered address, and registry authority. Never fabricates: if the company is not found in these free registries, returns an honest not_found with the sources that were queried. [free in quota, then $0.02/call]

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Legal company name to look up, e.g. Apple Inc or Volkswagen AG."
    },
    "country": {
      "type": "string",
      "description": "Optional ISO 3166-1 alpha-2 country filter (e.g. US, DE, GB). Narrows GLEIF…"
    },
    "lei": {
      "type": "string",
      "description": "Optional 20-character Legal Entity Identifier for a direct, precise lookup."
    }
  },
  "required": [
    "name"
  ]
}
🟒screen_sanctions(name, country, type)

Free screening of a name/entity against sanctions lists: OFAC SDN (US Treasury), EU consolidated list (European Commission), UK Sanctions List (FCDO). THE UN CONSOLIDATED LIST IS NOT SCREENED -- no licence permits redistribution. Never fabricates a match or clear: check lists_screened; reason_code 'partial_screening' (never 'clear') if any source failed. [free in quota, then $0.02/call]

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Full name of the person or entity to screen, e.g. 'Kim Jong-un' or 'ACME…"
    },
    "country": {
      "type": "string",
      "description": "Optional ISO 3166-1 alpha-2 country code or country name (e.g. 'IR', 'Iran').…"
    },
    "type": {
      "type": "string",
      "enum": [
        "person",
        "entity"
      ],
      "description": "Optional entity type hint. 'person' for individuals, 'entity' for…"
    }
  },
  "required": [
    "name"
  ]
}
🟒map_trade_restriction(product, hs_code, origin_country, destination_country, parties)

Free cross-border screening of destination and parties: DOES NOT CLASSIFY THE PRODUCT: echoed back, never checked against export-control lists, so a controlled item to an unrestricted destination returns 'partial', never 'clear'. Not an export-control clearance -- classify HS/ECCN yourself. Never fabricates a tariff rate, a clear, or a restricted status. [free in quota, then $0.02/call]

Input Schema

{
  "type": "object",
  "properties": {
    "product": {
      "type": "string",
      "description": "Product name or description, e.g. 'laptop computers', 'crude oil', 'medical…"
    },
    "hs_code": {
      "type": "string",
      "description": "Optional Harmonized System code (e.g. '8471.30' for laptops). If provided,…"
    },
    "origin_country": {
      "type": "string",
      "description": "Optional ISO 3166-1 alpha-2 code for the exporting country (e.g. 'US', 'DE').…"
    },
    "destination_country": {
      "type": "string",
      "description": "ISO 3166-1 alpha-2 code for the importing country (e.g. 'IR', 'CA', 'DE').…"
    },
    "parties": {
      "type": "array",
      "maxItems": 20,
      "items": {
        "type": "string"
      },
      "description": "Optional list of party names to screen (exporter, importer, freight forwarder,…"
    }
  },
  "required": [
    "product",
    "destination_country"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded8 tools
verifiedversion not recorded8 tools