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.7/5.0
Behavior5/5

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

The description reveals substantial behavioral detail beyond the annotations: it explains that the tool never fabricates results, reports partial screening via reason_code, discloses which lists actually ran, and returns an Ed25519-signed compliance receipt. This strongly aligns with readOnlyHint and idempotentHint and adds safety-relevant context.

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

Conciseness3/5

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

The description is well-structured with clear sections, but it is longer than necessary: four example user queries are largely redundant, and the source-list and UN-exclusion points are repeated several times. Every section contributes value, yet trimming would improve focus.

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?

Despite having no output schema, the description fully characterizes the response: screening_status priorities, matched semantics, match fields, lists_screened, sources_unavailable, reason_code, and compliance_receipt. It also covers failure behavior and tells the agent exactly what to branch on, so nothing needed for correct invocation is missing.

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

Parameters4/5

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

The input schema already provides full parameter descriptions (100% coverage), so the baseline is 3. The description adds value with real example user queries mapped to exact parameter values and clarifies that country annotates and ranks results rather than filtering them, which is meaningful semantic nuance.

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 clearly identifies a free sanctions-screening tool with an explicit verb ('screening') and resource ('a name or entity against official sanctions lists'). It further distinguishes itself by naming the exact source lists, excluding the UN list, and differentiating from siblings like get_status or verify_company_record.

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?

Dedicated WHEN TO USE and WHEN NOT TO USE sections specify concrete contexts such as onboarding, payment processing, vendor engagement, and due diligence. It also explicitly excludes KYC/AML, PEP screening, adverse media, and bulk screening, which gives an agent clear routing guidance.

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.1/5.0
Disambiguation4/5

The three company-verification tools (verify_company_record, screen_sanctions, lookup_us_contracts) are clearly distinct by data source and purpose. get_status and get_outcome are the main potential confusion, but their lifecycle boundary (pending vs completed) is explicitly described.

Naming Consistency2/5

Naming mixes multiple verb styles: get_outcome/get_status, lookup_us_contracts, preview_cost, screen_sanctions, self_test, verify_company_record. There is no consistent verb_noun or resource-oriented pattern across the set.

Tool Count4/5

Seven tools is a reasonable count for a company-verification/due-diligence server. However, three of them (get_status, get_outcome, preview_cost) are generic infrastructure that feel bolted on rather than part of the core verification workflow.

Completeness3/5

The core verification surface covers company registry existence, sanctions screening, and US federal contracts, which addresses common due-diligence queries. The set is incomplete as a whole because get_status/get_outcome depend on async operations that no included tool can initiate, and preview_cost references operations unrelated to company verification.