GCC Sanctions & Terror-List Screener
Server Details
Screen names vs OFAC, UN, EU, UK and UAE terrorist lists with Arabic-aware matching.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
Most tools are clearly distinct: screen_name handles a single subject, screen_batch handles multiple subjects, explain_match explains scoring, and list_status reports snapshot metadata. However, audit_report and screen_batch both screen multiple subjects and could be confused by an agent choosing between structured batch results and a formatted HTML audit file.
Four of five names follow a clear verb_noun snake_case pattern: screen_name, screen_batch, explain_match, list_status. audit_report is noun_noun and slightly breaks the pattern, but it remains readable and consistent in style.
Five tools is well-scoped for a sanctions screening server. Each tool covers a distinct part of the workflow: single screening, batch screening, match explanation, list metadata, and audit reporting.
The surface covers the core AML screening lifecycle: checking list freshness, screening one or many subjects, explaining matches, and producing an audit report. A minor gap is the absence of a refresh/update-list operation, even though list_status can warn about stale snapshots.
Available Tools
5 toolsaudit_reportProduce an HTML audit report of a screeningARead-onlyIdempotentInspect
Screens 1–50 subjects and returns a self-contained HTML report (result.html): timestamp, each list with its version / fetched-at / SHA-256, the inputs, every hit with its explanation, and an explicit no-match statement for clear subjects — suitable for the client's AML file (open in a browser, print to PDF). One charge per report. Example: subjects [{name:'Qusay Saddam Hussein', dob:'1966'}], case_reference 'KYC-2026-0412', prepared_by 'MLRO'. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| lists | No | Subset of lists to screen (default all): ofac_sdn, ofac_cons, un, eu, uk, uae. | |
| subjects | Yes | 1 to 50 subjects to include in one report. | |
| min_score | No | Minimum score (0–100) for a hit to be returned; default 85. 80 widens the net for onboarding, 92 for alert review. | |
| prepared_by | No | Name / role of the compliance officer, printed on the report. | |
| case_reference | No | Your case / client file reference, printed on the report. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the readOnly/idempotent/closed-world annotations, it discloses commercial and operational traits an agent would otherwise not know: one charge per report, names are never logged, matching is deterministic (no AI) and runs offline against a bundled snapshot, and stale snapshots surface as warnings. The full response envelope (result, data_confidence, estimated_items, sources, data_version, warnings, disclaimer) is spelled out.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and output artifact, then progressively adds commercial terms, response shape, and list coverage — a sensible ordering. It is dense and the run-on middle clause enumerating report contents could be tightened, but almost every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a billing-relevant screening tool with an output schema, the description covers what is produced, what a clear result looks like, privacy handling, offline determinism, cost, and failure signalling via warnings. Nothing material for correct invocation or interpretation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter meaning is already carried structurally, and the description largely restates the list enum and threshold semantics already present in the schema. The worked example (subjects array with name/dob, case_reference, prepared_by) adds modest value by showing shape in practice, but no new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause gives a concrete verb and resource — screens 1–50 subjects and returns a self-contained HTML report named result.html — which tells an agent exactly what artifact it gets. It doesn't name the sibling tools (screen_batch, screen_name, explain_match), so the differentiation from screen_batch in particular is left implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is implied usage context ("suitable for the client's AML file") and threshold guidance is carried by the schema, but the description never says when to choose this over screen_batch or screen_name. An agent must infer the routing decision from the report-output phrasing rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_matchShow why two names do or don't matchARead-onlyIdempotentInspect
Normalises both names step by step (Unicode, Arabic letter folding, honorifics/particles dropped, merged 'Abdul…' forms split, romanisation variants folded) and returns every score component (token_sort, token_set, Jaro-Winkler, subset, or the cross-script skeleton) and the resulting score / strength. Free. Example: name_a 'Abd al-Rahman Al Shaikh', name_b 'عبدالرحمن الشيخ'. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| name_a | Yes | First name to compare (Latin or Arabic). | |
| name_b | Yes | Second name to compare (Latin or Arabic). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, the description discloses that names are never logged, matching is deterministic with no AI, it runs offline against a bundled snapshot, and free. It also explains warning behavior for stale list snapshots and names the supported lists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loads the core behavior (normalization and score components) before returning output details, lists, and privacy notes. It earns its length given the tool's complexity, though the single-paragraph format could be slightly more scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though an output schema exists, the description adds useful completeness: it names the score components, lists supported sanctions lists, mentions data_confidence and warnings, and discloses deterministic/offline behavior. That is more than enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description improves on that with a concrete cross-script example (Latin 'Abd al-Rahman Al Shaikh' vs Arabic 'عبدالرحمن الشيخ') that clarifies accepted input forms and normalization expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb-and-resource framing: it normalises both names step by step and returns every score component plus the resulting score. It is specific about the mechanics and output, but does not explicitly differentiate itself from siblings such as screen_name or screen_batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'explain' and the detailed score-component list, suggesting this is for understanding a match rather than bulk screening. However, there is no explicit when-to-use/when-not guidance and no named alternative such as screen_name for plain scoring.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_statusFreshness and provenance of every bundled listARead-onlyIdempotentInspect
Per list: entries (individuals / entities / vessels / aircraft), aliases, fetched_at, days_since_fetch (stale flag when older than 7 days), official source URL and page, SHA-256 of the downloaded file, licence/terms, and any failures of the last refresh. Free. Call it before relying on a 'clear' result in a regulated process. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world. The description adds meaningful context beyond that: the 7-day staleness threshold and stale flag, warnings[] surfacing stale snapshots, the fact that names are never logged, and that matching is deterministic/offline with no AI. That is real behavioral disclosure, not restatement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the per-list payload, then the response envelope, then the covered lists, then the usage trigger and privacy note — a sensible ordering. It is dense and slightly run-on (a comma-separated inventory in the opening sentence), but almost every clause carries actionable information, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only status tool with rich annotations and an output schema, nothing an agent needs is missing: it knows the covered lists, the staleness rule, the warning mechanism, and when to consult it. The response-field enumeration mildly duplicates the output schema but reinforces rather than omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to convey and the baseline of 4 applies. Nothing in the description is needed to clarify inputs, and nothing misleads.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (freshness and provenance of every bundled list) and enumerates exactly what is reported per list: entries, aliases, fetched_at, days_since_fetch, source URL, SHA-256, licence, and refresh failures. This reads as metadata/status, clearly distinct from the screening siblings (screen_name, screen_batch, explain_match).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger: 'Call it before relying on a "clear" result in a regulated process.' That is a concrete when-to-use condition. It does not, however, name alternatives or state when not to call it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_batchScreen up to 500 names in one callARead-onlyIdempotentInspect
Each subject may carry dob, nationality, entity_type, id_number and your reference. Identical rows are screened once (charged once). Returns per-subject decision_hint, hit_count, top_score and the top 5 hits, plus summary counts (clear / review / likely_match). Charged per unique name. Example: subjects [{name:'Ali Kony', reference:'C-17'}, {name:'شركة الأمل للتجارة', entity_type:'entity'}], default_nationality 'AE'. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| lists | No | Subset of lists to screen (default all): ofac_sdn, ofac_cons, un, eu, uk, uae. | |
| subjects | Yes | Up to 500 subjects (name + optional dob / nationality / entity_type / id_number / reference). Identical rows are screened once. | |
| min_score | No | Minimum score (0–100) for a hit to be returned; default 85. 80 widens the net for onboarding, 92 for alert review. | |
| default_nationality | No | ISO2 applied to rows without a nationality. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/offline annotations, the description adds meaningful operational context: charging per unique name, dedupe of identical rows, no logging of names, deterministic offline matching, snapshot warnings, and response fields such as data_confidence and sources. This materially helps an agent understand cost, privacy, and freshness behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and somewhat paragraph-heavy, but nearly every sentence carries useful operational detail about subjects, returns, charging, lists, and privacy. It could be better front-loaded with a direct purpose statement, but it avoids fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and annotations, the description covers the important batch-screening behavior, charging, output shape, and data-freshness warnings. The main gap is sibling routing and explicit min_score guidance, though both are partly mitigated by structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents subjects, lists, min_score, and default_nationality. The description reinforces subject fields and default_nationality with an example, but it omits min_score and adds little semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name and title clearly identify a batch screening tool for up to 500 names, and the body reinforces this with subject fields, dedupe behavior, and per-subject results. However, it never explicitly names the single-name sibling screen_name, so the boundary is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use, when-not-to-use, or alternative-tool guidance. It gives an example and default_nationality behavior, but does not say when an agent should choose screen_batch over screen_name or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_nameScreen one name against sanctions and terror listsARead-onlyIdempotentInspect
Screen a person, company, vessel or aircraft name against OFAC SDN + Consolidated, UN, EU, UK and the UAE Local Terrorist List. Returns up to 20 hits sorted by score with list, listed_name, aliases_matched, score, match_strength (exact / strong / possible / weak), matched_on (which alias, which normalisation, DOB / nationality / type agreement), programs, listed_on, DOBs, nationalities, id_numbers, reference and source_url, plus decision_hint. Example: name 'Mohamed Hussein Al-Tikriti', dob '1966', nationality 'IQ', entity_type 'individual'. Response: result plus data_confidence, estimated_items[], sources[] (official list pages), data_version (snapshot id), warnings[] (e.g. a list snapshot older than 7 days) and a disclaimer. Lists: ofac_sdn, ofac_cons, un, eu, uk, uae. Names are never logged; matching is deterministic (no AI) and runs offline against the bundled snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| dob | No | Date of birth 'YYYY', 'YYYY-MM' or 'YYYY-MM-DD'. Year match adds, mismatch subtracts; omit if unknown. | |
| name | Yes | Full name to screen, Latin or Arabic script (e.g. 'Mohamed Al Rashid' or 'محمد الراشد'). | |
| lists | No | Subset of lists to screen (default all): ofac_sdn, ofac_cons, un, eu, uk, uae. | |
| id_number | No | Passport / national ID / registration number. An exact match on a listed number is reported as 'exact' (score 100). | |
| min_score | No | Minimum score (0–100) for a hit to be returned; default 85. 80 widens the net for onboarding, 92 for alert review. | |
| entity_type | No | individual | entity | vessel | aircraft | any (default). Disagreement with the listed type costs 20 points. | any |
| nationality | No | Nationality / country of incorporation as ISO 3166-1 alpha-2 ('AE', 'IR', 'GB'). Omit if unknown. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive/closed-world, and the description adds real context beyond them: no name logging, deterministic offline matching against a bundled snapshot, hit cap of 20 sorted by score, data_version snapshot ids, and warnings for stale snapshots. This is exactly the extra behavioral disclosure the annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and scope are front-loaded, and the middle section is dense but useful. The extensive return-field enumeration (list, listed_name, aliases_matched, score, programs, etc.) is largely redundant given a declared output schema, costing some efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter screening tool with full schema coverage, annotations and an output schema, the description covers everything needed to call it correctly, including the privacy/offline caveat and stale-snapshot warnings. Only the lack of explicit sibling routing keeps it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents dob, lists, id_number, min_score, entity_type and nationality, including the scoring effects (exact = 100, type disagreement = -20). The description mostly restates these and adds only a combined example; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource ('Screen a person, company, vessel or aircraft name') and enumerates the exact lists covered (OFAC SDN + Consolidated, UN, EU, UK, UAE LTL), which cleanly separates it from the batch sibling. An agent can identify the operation and scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example invocation and the min_score tuning note ('80 widens the net for onboarding, 92 for alert review') give concrete context for correct use. However, it never explicitly routes away from siblings such as screen_batch or explain_match, leaving the single-vs-batch choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- First observed
audit_report - First observed
explain_match - First observed
list_status - First observed
screen_batch - First observed
screen_name
Related MCP Connectors
Screen a name or entity against OFAC SDN, the EU Consolidated list and the UK list.
Fuzzy-screen people and company names against OFAC SDN, EU, UK and UN sanctions lists.
Checks names against OFAC, UK, EU, UN and more sanctions lists; returns scored possible matches.
Screen a name against OFAC's SDN and Consolidated Sanctions lists before a transaction.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceScreens names against the US Consolidated Screening List including OFAC SDN and BIS Entity List, keyless.5 npmMIT
- AlicenseNot gradedqualityAmaintenanceScreen names against consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities via GLEIF, with offline fuzzy matching.342 npm3Apache 2.0
- FlicenseNot gradedqualityDmaintenanceScreens names and companies against OFAC, EU, UK, and UN sanctions lists with fuzzy-match scores, supporting bulk lookups for AML/KYC checks. Data is sourced directly from official government lists and cached for fast repeat checks.-
- AlicenseAqualityAmaintenanceEnables agents to fuzzy-screen person and company names against the OFAC SDN/Consolidated, EU, UK and UN sanctions lists downloaded fresh from official sources, returning potential-match statuses, 0–100 scores and listing details via a billed screening tool, plus a free local tool that lists covered sources, score scale and disclaimer.3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.