Skip to main content
Glama

screen_sanctions

Read-onlyIdempotent

Screen one or more person or company names against the UN, EU, UK (FCDO UK Sanctions List) and US OFAC sanctions lists plus PEPs (745K+ entries, UN direct and the rest via OpenSanctions). Typical use: counterparty checks before onboarding or processing a payment. Returns per-name match lists with fuzzy match scores, source-list attribution and risk topics, 'sourcesUsed' (each list actually screened, with its publisher's last-updated date), plus a 'disclaimer' field. Matches are informational decision-support from public sources, not legal or compliance advice — a match indicates a potential hit that requires verification, not a confirmed listing.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fuzzyNoEnable fuzzy matching. Default true.
namesYesNames to screen, max 1000 per call. Each item is a plain name, or { name, entity_type, birth_year } to say per name whether it is a company or a person (e.g. a company plus its key persons in one call).
min_scoreNoMinimum fuzzy score for a candidate to be returned, 0-1. Default 0.85. Lower values return more low-confidence candidates; only candidates ≥ 0.95 can ever be classified as a match.
birth_yearNoDefault birth year for all names that do not set their own. Only meaningful when screening one person.
entity_typeNoDefault entity type for all names that do not set their own: 'company', 'person' or 'auto' (default). Set 'company' when screening a company name — a hit on a listed individual is then never 'confirmed'.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
totalNoNumber of names screened.
matchedNoNumber of names with matched=true.
resultsNoOne entry per input name, in submission order.
disclaimerNo
sourcesUsedNoThe lists this answer was actually screened against: key (un / eu_fsf / gb_fcdo / us_ofac_sdn / peps), name, publisher, entries, listUpdated (the list's own last change), loadedAt, stale. Quote this, not a fixed list, when stating what was screened.
indexUpdatedNoISO-8601 last refresh per source list.
sourcesUnavailableNoLists that could not be checked on this call; non-empty means the screening is incomplete.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / properties / results / items / properties / hits / items / properties / source / description
      Previous value: -"Source list (UN, EU FSF, US OFAC SDN, OpenSanctions PEPs)."New value: +"Source list (UN, EU FSF, UK Sanctions List (FCDO), US OFAC SDN, OpenSanctions PEPs)."
    • addedOutput schema / properties / sourcesUsed
      Added value: +{
      +  "description": "The lists this answer was actually screened against: key (un / eu_fsf / gb_fcdo / us_ofac_sdn / peps), name, publisher, entries, listUpdated (the list's own last change), loadedAt, stale. Quote this, not a fixed list, when stating what was screened.",
      +  "items": {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
  2. Changed9 schema fields changed
    • addedInput schema / properties / birth_year
      Added value: +{
      +  "$ref": "#/properties/names/items/anyOf/1/properties/birth_year",
      +  "description": "Default birth year for all names that do not set their own. Only meaningful when screening one person."
      +}
    • addedInput schema / properties / entity_type
      Added value: +{
      +  "$ref": "#/properties/names/items/anyOf/1/properties/entity_type",
      +  "description": "Default entity type for all names that do not set their own: 'company', 'person' or 'auto' (default). Set 'company' when screening a company name — a hit on a listed individual is then never 'confirmed'."
      +}
    • removedInput schema / properties / min_score / default
      Removed value: -0.7
    • changedInput schema / properties / min_score / description
      Previous value: -"Minimum fuzzy match score, 0-1. Default 0.7. Lower values return more (lower-confidence) matches."New value: +"Minimum fuzzy score for a candidate to be returned, 0-1. Default 0.85. Lower values return more low-confidence candidates; only candidates ≥ 0.95 can ever be classified as a match."
    • changedInput schema / properties / names / description
      Previous value: -"Array of person or company names to screen. Max 1000 names per call."New value: +"Names to screen, max 1000 per call. Each item is a plain name, or { name, entity_type, birth_year } to say per name whether it is a company or a person (e.g. a company plus its key persons in one call)."
    • addedInput schema / properties / names / items / anyOf
      Added value: +[
      +  {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "birth_year": {
      +        "description": "Birth year of the screened person, if known. When the listed person's birth year is known and differs, the hit is never 'confirmed' (same name, different person).",
      +        "maximum": 2100,
      +        "minimum": 1850,
      +        "type": "integer"
      +      },
      +      "entity_type": {
      +        "description": "What the screened party is. 'company': a hit on a listed individual is never 'confirmed' (a company is not a natural person). 'person': a hit on a listed entity is never 'confirmed'. 'auto' (default): a legal form in the name (A/S, Ltd, GmbH, AB, Oy …) marks it as a company.",
      +        "enum": [
      +          "company",
      +          "person",
      +          "auto"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / names / items / minLength
      Removed value: -1
    • removedInput schema / properties / names / items / type
      Removed value: -"string"
    • addedOutput schema / properties / results / items / properties / queryEntityType
      Added value: +{
      +  "description": "How the name was treated: company / person / unknown (from entity_type, or a legal form in the name).",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  3. Changed16 schema fields changed
    • removedOutput schema / properties / checked_at
      Removed value: -{
      -  "description": "ISO-8601 timestamp of the screening.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / disclaimer
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / indexUpdated
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "ISO-8601 last refresh per source list.",
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / matched
      Added value: +{
      +  "description": "Number of names with matched=true.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / classification
      Added value: +{
      +  "description": "Outcome for this name: none / potential_match / confirmed.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / count
      Added value: +{
      +  "description": "Number of fuzzy candidates returned, including unflagged low-confidence ones — not a match count.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / flaggedCount
      Added value: +{
      +  "description": "Number of hits classified as a match.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / hits
      Added value: +{
      +  "description": "Fuzzy candidates, each with its own classification ('none' = not flagged).",
      +  "items": {
      +    "additionalProperties": true,
      +    "properties": {
      +      "classification": {
      +        "description": "none / potential_match / confirmed.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "countries": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": [
      +          "array",
      +          "null"
      +        ]
      +      },
      +      "name": {
      +        "description": "Listed entity name.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "programs": {
      +        "description": "Sanctions programmes.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": [
      +          "array",
      +          "null"
      +        ]
      +      },
      +      "score": {
      +        "description": "Fuzzy match score 0-1.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "source": {
      +        "description": "Source list (UN, EU FSF, US OFAC SDN, OpenSanctions PEPs).",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "type": {
      +        "description": "individual / entity.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / matched
      Added value: +{
      +  "description": "The screening outcome for this name: true only if at least one hit is classified as a match.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / results / items / properties / matches
      Removed value: -{
      -  "description": "Matched sanctioned / PEP entities, ranked by score descending.",
      -  "items": {
      -    "additionalProperties": true,
      -    "properties": {
      -      "datasets": {
      -        "description": "Source lists (UN, EU, OFAC, PEP, ...).",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "name": {
      -        "description": "Matched entity name.",
      -        "type": "string"
      -      },
      -      "schema": {
      -        "description": "OpenSanctions schema, e.g. Person, Company.",
      -        "type": "string"
      -      },
      -      "score": {
      -        "description": "Fuzzy match score 0-1.",
      -        "type": "number"
      -      },
      -      "topics": {
      -        "description": "Risk topics tagged on the entity.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • changedOutput schema / properties / results / items / properties / query / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / results / items / properties / requiresManualReview
      Added value: +{
      +  "description": "True when hits need human verification.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / topScore
      Added value: +{
      +  "description": "Highest fuzzy score among candidates; null when there are none. A high score alone is not a match — see classification.",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / results / type
      Previous value: -"array"New value: +[
      +  "array",
      +  "null"
      +]
    • addedOutput schema / properties / sourcesUnavailable
      Added value: +{
      +  "description": "Lists that could not be checked on this call; non-empty means the screening is incomplete.",
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / total
      Added value: +{
      +  "description": "Number of names screened.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
  4. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description still adds real behavioral context: source lists and their publishers, fuzzy-match confidence semantics, and the caveat that a match is an unverified potential hit and not compliance advice. It stops short of auth, rate limit or cost disclosure.

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?

Front-loaded with capability and scope, then usage, then returns, then the disclaimer caveat. Efficient overall, though the return-field enumeration ('sourcesUsed', 'disclaimer') is slightly redundant given an output schema exists.

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?

For a screening tool with a rich input schema, full annotations and an output schema, the description supplies everything needed: scope, sources, freshness, intended use and the verification caveat. Nothing required to invoke it correctly is missing.

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%, so the schema already explains names, fuzzy, min_score, birth_year and entity_type in detail. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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?

States a specific verb (screen) and resource (names against sanctions/PEP lists), names the exact lists covered (UN, EU, FCDO UK, OFAC, PEPs) and the data volume. No sibling tool does screening, so there is no ambiguity to resolve.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete triggering scenario: 'counterparty checks before onboarding or processing a payment.' That is clear usage context, but it offers no exclusions or explicit routing against siblings like kyb_full or company_enriched, which an agent may also consider for onboarding checks.

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.