Skip to main content
Glama

screen_sanctions

Read-onlyIdempotent

Screen one or more person or company names against UN, EU, OFAC and PEP sanctions lists (768K+ entries 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, 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.
namesYesArray of person or company names to screen. Max 1000 names per call.
min_scoreNoMinimum fuzzy match score, 0-1. Default 0.7. Lower values return more (lower-confidence) matches.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
totalNoNumber of names screened.
matchedNoNumber of names with matched=true.
resultsNoOne entry per input name, in submission order.
disclaimerNo
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. 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"
      +  ]
      +}
  2. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds substantial context beyond those: it discloses the return structure (per-name match lists, fuzzy scores, source attribution, risk topics, disclaimer) and, crucially, sets expectations that matches are 'informational decision-support... not legal or compliance advice' and that a match 'requires verification, not a confirmed listing.' This is exactly the kind of behavioral caveat agents need and that annotations cannot express.

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

Conciseness5/5

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

Four tight sentences with zero filler. The core purpose is front-loaded, followed by use case, return format, and the decision-support caveat. Every sentence earns its place and nothing is redundant with the schema or annotations.

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 an output schema present, return-value explanation is unnecessary, and the description still sketches the output fields. Combined with 100% schema coverage and full annotations (read-only, idempotent, non-destructive, open-world), the description covers purpose, usage, behavior, and limitations. Nothing an agent needs to invoke this 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% — names, fuzzy, and min_score each have meaningful descriptions in the schema itself. The tool description references fuzzy match scores but adds no syntax or formatting detail beyond what the schema already documents. The baseline of 3 applies correctly since the schema carries the parameter-semantics burden.

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 a specific verb+resource: 'Screen one or more person or company names against UN, EU, OFAC and PEP sanctions lists'. It names the exact list sources (UN, EU, OFAC, PEP) and the data provider (OpenSanctions, 768K+ entries), making it clearly distinguishable from sibling tools like lookup_company, lookup_lei, or validate_vat, which serve different counterparty-check purposes.

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?

The description gives an explicit typical use case — 'counterparty checks before onboarding or processing a payment' — which tells an agent when to reach for this tool. It does not, however, explicitly name alternative tools or state when NOT to use it, leaving some routing to inference. Given the siblings include overlapping due-diligence tools (kyb_full, company_enriched, lookup_company), an explicit exclusion would have pushed this to 5.

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.