mcpbeat Sign in

Sanctions Screening MCP Server

answering

Sanctions Screening is answering right now. Last checked 7 min ago. It exposes 8 tools. Last commit 1 Sep 2026.

Sanctions screening against OFAC SDN, the EU Consolidated list and the UK Sanctions List.

Uptime history 61 hours of history
61 hours agonow
100.0%
Uptime 24h
91 of 91 checks
8
Tools
read from the server
425 ms
Response time
average over 24h
1
Stars
last commit 1 Sep 2026

Nothing serious here today

Today is the operative word: we check Sanctions Screening every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 7 min ago.

run in your terminal
claude mcp add sanctions-screening --transport http https://hatchloop.dev/mcp/sanctions-screening
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "sanctions-screening": {
      "url": "https://hatchloop.dev/mcp/sanctions-screening"
    }
  }
}
~/.codex/config.toml
[mcp_servers.sanctions-screening]
url = "https://hatchloop.dev/mcp/sanctions-screening"
.cursor/mcp.json
{
  "mcpServers": {
    "sanctions-screening": {
      "url": "https://hatchloop.dev/mcp/sanctions-screening"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "sanctions-screening": {
      "url": "https://hatchloop.dev/mcp/sanctions-screening"
    }
  }
}

Available tools 8

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

compliance
check_compliance
Free, instant pre-flight for the compliance gate. Runs the SAME TCPA / GDPR / CASL / CAN-SPAM / 10DLC gate that send_message and call_business run — but in preview mode, so NO message is sent and NO state changes. Tells you whether a (recipient, channel, message_type, content) send would be permitted BEFORE you pay for it, and if not, names the exact rule and how to remediate. Use it to de-risk a paid send the same way check_booking_link de-risks a paid booking. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Is it legal to text this US number a 20%-off promo?" -> call check_compliance({"recipient_id": "+14045550200", "content": "20% off this week only!", "channel": "sms", "message_type": "marketing", "country_code": "US"}) user: "Before you email the dentist, make sure it's allowed" -> call check_compliance({"recipient_id": "[email protected]", "content": "Do you accept Cigna? Following up on my request.", "message_type": "follow_up"}) -> then send_message({"recipient": {"id_type": "email", "id_value": "[email protected]"}, "message_type": "follow_up", "content": {"body": "Do you accept Cigna? Following up on my request."}}) WHEN TO USE: Call this the moment before send_message or call_business when there is any chance the send is regulated — anything tagged marketing, any SMS to a US number (10DLC), any message to an EU/UK (GDPR) or Canadian (CASL) recipient, or any content you are unsure about. It is free and sub-100ms, so run it as a guard: if legal=true, proceed to send_message with confidence; if legal=false, fix the cited blocker instead of burning a paid, rejected send. WHEN NOT TO USE: Do not treat a legal=true as a permanent license — the gate re-runs at send time, so a fresh opt-out between preview and send still blocks. Do not use it to check two-party voice recording consent (that is evaluated at call time in the voice adapter, not here). It is not a substitute for send_message; it never delivers anything. COST: free - no key required LATENCY: ~15ms
map
map_trade_restriction
Free cross-border trade screening of the DESTINATION and the PARTIES. IT DOES NOT CLASSIFY THE PRODUCT: the product argument is recorded and echoed back, never checked against any export-control list, so a controlled item to an unrestricted destination returns no findings and reason_code 'partial' -- never 'clear'. This is not an export-control clearance; classify the item (HS/ECCN) against BIS/EU/UK controls yourself. Given a product and destination country (and optionally an HS code, origin country, and a list of parties to screen), returns: (a) whether the destination or any party hits an export-control or sanctions restriction, (b) the destination risk level (comprehensive_embargo / sectoral_sanctions / elevated_scrutiny / standard), (c) HS code hint if the caller provided one, (d) honest tariff guidance + official links without fabricated rates, and (e) party sanctions screening against OFAC SDN (US Treasury), the EU Consolidated list (European Commission) and the UK Sanctions List (FCDO). Acts as a MIDDLEMAN -- unifies the OFAC comprehensive-embargo map, our own indexed copies of the EU and UK lists, and OFAC SDN into one clean call. Never fabricates a tariff rate, a clear, or a restricted status. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Can we ship laptops to Iran?" -> call map_trade_restriction({"product": "laptop computers", "destination_country": "IR"}) user: "Screen this supplier before we import from them: Mahan Air, Iran" -> call map_trade_restriction({"product": "aircraft parts", "destination_country": "US", "parties": ["Mahan Air"]}) user: "Is exporting hydraulic pumps to Russia restricted?" -> call map_trade_restriction({"product": "hydraulic pumps", "hs_code": "8413.50", "destination_country": "RU"}) user: "Check if we can sell medical devices to Germany, supplier is ACME GmbH" -> call map_trade_restriction({"product": "medical devices", "origin_country": "US", "destination_country": "DE", "parties": ["ACME GmbH"]}) WHEN TO USE: Use before any cross-border trade to flag embargoed destinations, screen exporters/importers/freight forwarders against sanctions lists, and get authoritative links to the applicable tariff databases. Call this as a pre-flight check before quoting, invoicing, or shipping internationally. Covers OFAC comprehensively-embargoed countries (Iran, North Korea, Cuba, Syria) and significant advisory countries (Russia, Belarus, Ukraine Crimea/DNR/LNR regions). WHEN NOT TO USE: Do NOT use as a substitute for a licensed export compliance review. Do NOT use to obtain authoritative tariff rates (this tool returns guidance links, never fabricated rates). Do NOT use for purely domestic shipments where no cross-border movement is involved. COST: free within the daily quota, then $0.02 per call LATENCY: ~3000ms
outcome
get_outcome
Retrieve the final OutcomeReceipt for a completed operation. WHEN TO USE: Use after get_status returns success/failure/partial to retrieve the full result with cost and reason codes. WHEN NOT TO USE: Do not use for operations still in pending/executing state — use get_status first. COST: free - no key required LATENCY: ~50ms
preview
preview_cost
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. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "How much will this SMS cost me?" -> call preview_cost({"operation": "send_message", "params": {"preferred_channel": "sms"}}) user: "Estimate the cost of booking via voice fallback" -> call preview_cost({"operation": "schedule_appointment", "params": {"preferred_channel": "voice"}}) WHEN TO USE: Use before any operation when the agent is operating under a budget constraint and needs to decide whether to proceed. WHEN NOT TO USE: Do not use in a hot loop — cache the result for at least 60 seconds if repeating the same preview. COST: free - no key required LATENCY: ~100ms
screen
screen_sanctions
Free screening of a name or entity against official sanctions lists, each fetched from the authority that issues it: the OFAC SDN list from the US Treasury (SDN.CSV plus ALT.CSV for alternate spellings), the EU consolidated financial sanctions list from the European Commission, and the UK Sanctions List from the FCDO. THE UN CONSOLIDATED LIST IS NOT SCREENED -- it carries no licence permitting commercial redistribution, so we do not claim it. ALWAYS check lists_screened on the response: it names the lists that actually ran ON THAT CALL, and a list that failed to load appears in sources_unavailable instead. reason_code is 'partial_screening' whenever any source was unavailable, never 'clear'. Returns screening_status ('hit' | 'clean' | 'candidates' | 'not_screened' -- branch on THIS, not on matched, because matched:false is also false when nothing could be screened), matched: bool, a list of matches with score, program, and source URL, and which lists were screened. Never fabricates a match or a clear -- if no match is found, explicitly names which lists were checked. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Screen this vendor before we pay them: ACME Trading LLC, Russia" -> call screen_sanctions({"name": "ACME Trading LLC", "country": "RU", "type": "entity"}) user: "Is Kim Jong-un on the OFAC list?" -> call screen_sanctions({"name": "Kim Jong-un", "country": "KP", "type": "person"}) user: "Run a sanctions check on this person before onboarding" -> call screen_sanctions({"name": "Ivan Petrov", "country": "RU", "type": "person"}) user: "Do a compliance check -- is this company sanctioned?" -> call screen_sanctions({"name": "Mahan Air", "country": "IR", "type": "entity"}) WHEN TO USE: Use before onboarding a counterparty, processing a payment, engaging a vendor, or doing any due-diligence step that requires knowing whether a person or entity appears on official sanctions lists. Essential for agents doing business formation, vendor qualification, payments onboarding, trade compliance, or any workflow where a sanctioned counterparty is a legal or reputational risk. WHEN NOT TO USE: Do not use as a substitute for full KYC/AML screening -- this covers sanctions lists only, not PEP (Politically Exposed Person) databases, adverse media, or credit risk. Do not treat a negative result as a compliance clearance; it is informational only. Do not use for bulk screening of large lists -- each call is a live API query. COST: free within the daily quota, then $0.02 per call LATENCY: ~2000ms
self
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. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Run a health check before I send the broadcast" -> call self_test({}) WHEN TO USE: Use at agent startup, before high-stakes task sequences, or after receiving unexpected errors to check if the service is degraded. WHEN NOT TO USE: Do not call more than once per minute in production. COST: free - no key required LATENCY: ~200ms
status
get_status
Query the current state of any in-flight async operation by operation_id. WHEN TO USE: Use to poll the state of a pending_async operation when no webhook callback has arrived or to check progress. WHEN NOT TO USE: Do not poll more frequently than once per 10 seconds — use webhook delivery for real-time updates instead. COST: free - no key required LATENCY: ~50ms
verify
verify_company_record
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. EXAMPLE USER QUERIES THAT MATCH THIS TOOL: user: "Is Apple Inc a real registered company?" -> call verify_company_record({"name": "Apple Inc", "country": "US"}) user: "Look up the LEI for Volkswagen AG" -> call verify_company_record({"name": "Volkswagen AG", "country": "DE"}) user: "Verify this LEI: 529900HNOAA1KXQJUQ27" -> call verify_company_record({"name": "Volkswagen AG", "lei": "529900HNOAA1KXQJUQ27"}) WHEN TO USE: Use when you need to verify that a company exists as a registered legal entity and retrieve its official registry details -- before signing a contract, qualifying a vendor, validating a counterparty, or populating a due-diligence record. Accepts a legal name plus optional country filter or a direct LEI for a precise lookup. WHEN NOT TO USE: Do not use to verify private companies not registered with GLEIF or SEC. Do not use as an exhaustive fraud-detection tool; this is a first-pass existence check against free public registries, not a full KYC screen. COST: free within the daily quota, then $0.02 per call LATENCY: ~800ms

Endpoints

URLTransportStateLatencyChecked
https://hatchloop.dev/mcp/sanctions-screening streamable-http answering 736 ms 7 min ago

Alternatives to Sanctions Screening

same job, measured the same way
Sanctions Screening
by pipeworx-io

Screen names against the US Consolidated Screening List: OFAC SDN, BIS Entity List +10 more lists

34 tools answering
SanctionsAI
by kindrat86

OFAC sanctions screening for AI agents: screen names, wallets, entities against the SDN list.

3 tools answering
Sanctions Screening MCP Server
by cyanheads

Screen names against OFAC, EU, UK, UN sanctions lists; resolve entities via GLEIF. Screening aid.

284 installs/wk 6 tools answering
C
OFACScreen Sanctions Screening
by ofacscreen

Screen names against OFAC SDN and 7 more global sanctions lists. Free, no account required.

1 tools answering
OFAC SDN Screening
by bonissystems

Screen a name against the U.S. Treasury OFAC SDN list. Information, not a compliance determination.

2 tools answering
Clearscreen
by lvsmanhole

Screen people & companies against 12 US sanctions & exclusion lists (OFAC, LEIE, SAM, Medicaid).

answering
Orchestraprime
by orchestraprime

Regulatory intelligence (FDA, ICH, EMA) and sanctions screening (OFAC, EU, UK) for Claude

65 installs/wk local only
Sanctions
by cz-agents

Sanctions screening for KYC/AML — EU FSF + OFAC SDN checks for Czech companies & individuals.

239 installs/wk 6 tools answering

Sanctions Screening — questions

Answers built from our own checks of this server.

What can Sanctions Screening do?
It exposes 8 tools, read directly from the server on our last check. Among them: check_compliance, get_outcome, get_status, map_trade_restriction, preview_cost, screen_sanctions and 2 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is Sanctions Screening working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 425 ms. The bar chart above shows every period we have measured.
How do I connect Sanctions Screening?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Sanctions Screening need an API key?
No. Sanctions Screening completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 8 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Sanctions Screening?
It answers our handshake in 425 ms on average, which is faster than 42% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is Sanctions Screening open source?
Yes — it is published under the MIT licence, written in Python, 1 stars on GitHub and 1 open issue. The source link is on this page, so you can read exactly what it does with your data before you connect it.