Skip to main content
Glama

screen_sanctions

Read-onlyIdempotent

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. Attaches a compliance_receipt: an Ed25519-signed, hash-bound record of what was checked, when, against which sources, and what it returned - verifiable OFFLINE against the public key published at https://hatchloop.dev/agents.md, so you can hand it to an auditor as evidence the check really ran.

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

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesFull name of the person or entity to screen, e.g. 'Kim Jong-un' or 'ACME Trading LLC'. Use the most complete name available for best accuracy.
typeNoOptional entity type hint. 'person' for individuals, 'entity' for organizations/companies. Omit to screen both.
countryNoOptional ISO 3166-1 alpha-2 country code or country name (e.g. 'IR', 'Iran'). It ANNOTATES AND RANKS results; it never removes any. Each EU/UK match carries country_match: true, false, or null when the listing records no country. Nothing is dropped on a mismatch, because the country we hold is the address/nationality on the listing rather than everywhere a party operates - excluding on it would return a clean screen for someone who IS listed.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

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

The description goes well beyond annotations: it discloses that the UN list is intentionally excluded for licensing reasons, instructs checking lists_screened and sources_unavailable, explains reason_code='partial_screening', and warns that screening_status—not matched—must be branched on because matched:false also occurs when nothing could be screened. It also details the compliance_receipt and states that matches/clears are never fabricated. These behaviors are not visible from readOnlyHint or idempotentHint, and there is no contradiction with annotations.

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 description is long but well-structured with sections for purpose, caveats, return behavior, examples, when/not-to-use, cost, and latency. Every sentence serves a purpose; there is no filler. The four example queries are slightly repetitive but pragmatically useful, which prevents a perfect 5 given the overall length.

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?

Without an output schema, the description compensates by enumerating all returned fields (screening_status, matched, matches with score/program/source URL, lists_screened, sources_unavailable, compliance_receipt) and explaining failure semantics. It also covers the partial-screening reason_code, the instruction to branch on screening_status, and offline verifiability of the receipt. Combined with the detailed input schema, nothing essential is missing for correct invocation.

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% and the schema already documents all three parameters thoroughly, including the critical behavior of country (annotates/ranks results, never removes them). The description adds example queries and framing for country_match, but it mostly relies on the schema to carry parameter meaning. Per the baseline rule for high schema coverage, a 3 is appropriate.

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 'Free screening of a name or entity against official sanctions lists' and enumerates specific lists (OFAC SDN, EU consolidated, UK Sanctions List). It names the resource precisely, the action clearly, and distinguishes itself from broader compliance by stating it covers sanctions only. It is not a tautology and differentiates from siblings like check_compliance by scope.

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?

The 'WHEN TO USE' section lists concrete scenarios (onboarding, payment, vendor engagement, due-diligence) and the 'WHEN NOT TO USE' section gives exclusions (not a KYC/AML substitute, no PEP/adverse media/credit risk, no bulk screening). While it does not name sibling tools directly, it provides unambiguous conditions that let an agent decide when to apply this tool and when to avoid 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.

TDQS

A4.4/5.0
Disambiguation3/5

Most tools target distinct actions, but screen_sanctions and map_trade_restriction both screen parties against OFAC/EU/UK sanctions lists, so the same party-screening request could plausibly route to either. check_compliance also uses a broad 'compliance' name, though its messaging-specific parameters help separate it. The detailed descriptions largely mitigate the ambiguity, but the overlap is real.

Naming Consistency4/5

Seven of eight tools follow a clear snake_case verb_noun pattern (check_compliance, get_status, screen_sanctions, verify_company_record). self_test breaks the pattern as a noun-style name rather than an imperative verb_noun, but it remains lowercase and readable. Overall naming is predictable and consistent.

Tool Count5/5

Eight tools is a well-scoped size for a compliance/screening service, and each tool has a distinct operational role. The supporting helpers (get_status, get_outcome, preview_cost, self_test) are justifiable parts of the full workflow rather than padding.

Completeness4/5

Core due-diligence workflows are covered: sanctions screening, trade-restriction mapping, company verification, and messaging-compliance pre-flight. Notable exclusions such as the UN Consolidated List, PEP/adverse media, and bulk screening are explicitly disclosed rather than hidden, so agents can work around them. The gaps are more like optional enhancements than dead ends.