Compliance Check
Preview a TCPA/GDPR/CASL/10DLC gate result before spending a paid send. No key needed.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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-httpWhat it can do
Tool inventory
Tools (8)
π’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
Evidence