Skip to main content
Glama

Verify a Company

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.

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.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/destructive annotations, it discloses why the UN list is excluded, that lists_screened reflects only lists that actually ran, that failed sources appear in sources_unavailable, and that reason_code is 'partial_screening' if any source is unavailable. It also warns never to fabricate a match or clear and instructs the agent to branch on screening_status rather than matched.

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 well-structured with clear sections and front-loads the core purpose before caveats and examples. It is longer than strictly necessary, with four similar example queries, but the length is largely purposeful given the multiple sanctions lists, failure modes, and disclaimers that need explicit handling.

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?

With no output schema, the description takes on the burden of explaining return values and does so thoroughly: screening_status enum, matched, match details, lists_screened, sources_unavailable, reason_code, and partial-screening behavior. It also covers cost, latency, and use-case boundaries, giving an agent everything needed to call and interpret the tool correctly.

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?

The input schema already documents all three parameters with 100% coverage, so the description does not need to compensate. The example queries add illustrative mappings from natural language to parameters, but the substantive semantics, such as country annotating/ranking without removing results, come from the schema itself. Thus the description adds only marginal parameter-level value.

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 names a specific verb ('screening'), a specific resource (a name/entity against official sanctions lists), and enumerates exactly which lists are included (OFAC, EU, UK) and which is not (UN). This clearly distinguishes it from siblings like lookup_us_contracts and 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 give explicit trigger conditions (onboarding, payment, vendor engagement, due diligence) and explicit exclusions (not KYC/AML, not PEP/adverse media/credit risk, not bulk screening). It also names alternative screening domains and provides cost and latency considerations.

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
Disambiguation4/5

The core due-diligence tools are clearly distinct: registry verification, sanctions screening, and contract lookup each have separate purposes and boundaries. The only possible confusion is between get_status and get_outcome, but their descriptions clearly separate state polling from final result retrieval.

Naming Consistency4/5

Tool names mostly follow a snake_case verb_noun pattern such as get_status, preview_cost, screen_sanctions, and verify_company_record. The main deviation is self_test, and verbs vary across get, lookup, preview, screen, and verify, but there is no casing or style conflict.

Tool Count4/5

Seven tools is within the ideal range for a focused MCP server. However, several tools are generic infrastructure utilities rather than company-verification features, so the set is slightly less scoped than it could be.

Completeness3/5

The company-verification workflow is reasonably covered: legal existence, sanctions screening, and US federal contracts are all available. However, get_status and get_outcome reference async operations that no exposed tool creates, and preview_cost examples mention operations like send_message that are not present in the server, creating dead ends.