Serveur MCP

sanctions-screening-mcp-server

io.github.cyanheads/sanctions-screening-mcp-server
Juridique et conformité Sécurité Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Screens names and identifiers against OFAC, EU, UK, and UN sanctions lists and resolves entities and ownership through GLEIF data.

sanctions_get_designation
sanctions-screening-mcp-server: get designation
Fetch the full record for one sanctions designation by source list + entry ID or the list's published reference number — the drill-in after sanctions_screen_name or sanctions_screen_identifier surfaces a candidate, or the lookup for a reference a notice cites (UN QDe.004, EU EU.27.28, UK OFSI Group ID). Returns all published aliases, identifiers (passport, national ID, tax and registration numbers, SWIFT/BIC codes, digital-currency addresses, vessel call signs, aircraft tail and serial numbers, phone numbers, email addresses, websites), addresses, dates and places of birth at the precision the source published, nationalities, sanctioning program, legal basis, and designation date. The record reflects exactly what the source published; missing fields mean the source omitted them. This is a screening aid — the designation record supports a compliance review, it is not itself a determination.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['source', 'entryId'], 'properties': {'source': {'enum': ['ofac_sdn', 'ofac_consolidated', 'eu', 'uk', 'un'], 'type': 'string', 'description': 'Which source list the entry belongs to.'}, 'entryId': {'type': 'string', 'minLength': 1, 'description': "The source list's own entry ID (the sourceEntryId from sanctions_screen_name), or the reference number the list publishes for the entry (UN QDe.004, EU EU.27.28, UK OFSI Group ID 14196). Matched trimmed and case-insensitive, entry ID first."}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['source', 'sourceLabel', 'sourceEntryId', 'entityType', 'primaryName', 'aliases', 'identifiers', 'addresses', 'datesOfBirth', 'nationalities', 'caveat']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['designation_not_found', 'reference_ambiguous', 'mirror_not_ready'], 'description': 'Machine-readable failure mode. Declared by this tool: `designation_not_found`: No designation in the given source has that entry ID or reference number in the mirror. `reference_ambiguous`: The entry ID is a reference number more than one designation in the source publishes. `mirror_not_ready`: The sanctions mirror has never completed an initial sync. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'caveat': {'type': 'string', 'description': 'Decision-support caveat â\x80\x94 this is a screening aid, not a compliance determination.'}, 'source': {'enum': ['ofac_sdn', 'ofac_consolidated', 'eu', 'uk', 'un'], 'type': 'string', 'description': 'Source list the entry belongs to.'}, 'aliases': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'nameType'], 'properties': {'name': {'type': 'string', 'description': 'Alias as published.'}, 'nameType': {'enum': ['primary', 'aka', 'fka', 'low-quality-aka'], 'type': 'string', 'description': 'Alias provenance: a.k.a., f.k.a., or a low-quality a.k.a.'}}, 'description': 'One published alias.', 'additionalProperties': False}, 'description': 'All published aliases / name variants.'}, 'program': {'type': 'string', 'description': 'Sanctioning program / regime, when published.'}, 'remarks': {'type': 'string', 'description': 'Free-form remarks published by the source, when present.'}, 'addresses': {'type': 'array', 'items': {'type': 'object', 'required': ['full'], 'properties': {'full': {'type': 'string', 'description': 'Single-line rendering of the address.'}, 'country': {'type': 'string', 'description': 'Country, when published.'}}, 'description': 'One published address.', 'additionalProperties': False}, 'description': 'Published addresses.'}, 'entityType': {'enum': ['person', 'organization', 'vessel', 'aircraft', 'unknown'], 'type': 'string', 'description': 'Entity classification as published.'}, 'legalBasis': {'type': 'string', 'description': 'Statutory / regulatory basis, when published.'}, 'identifiers': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'value'], 'properties': {'type': {'type': 'string', 'description': 'Identifier category as the source labels it (e.g. Passport, National ID, SWIFT/BIC, Digital Currency Address - XBT, Phone Number, Website).'}, 'value': {'type': 'string', 'description': 'Identifier value exactly as published, letter case included.'}, 'country': {'type': 'string', 'description': 'Issuing country/authority, when published.'}}, 'description': 'One structured identifier.', 'additionalProperties': False}, 'description': 'Published identifiers: identity documents (passport, national ID, tax, registration) and, where the source publishes them, SWIFT/BIC codes, digital-currency addresses, vessel call signs, aircraft tail and serial numbers, phone numbers, email addresses, and websites.'}, 'primaryName': {'type': 'string', 'description': 'Primary published name.'}, 'sourceLabel': {'type': 'string', 'description': 'Human-readable name of the source list.'}, 'datesOfBirth': {'type': 'array', 'items': {'type': 'object', 'properties': {'date': {'type': 'string', 'description': 'Date of birth in ISO 8601 at the precision the source published: YYYY-MM-DD, YYYY-MM, or YYYY. A range is an interval whose ends keep their own precision (1955/1957); an open end is .. (../1980). A value with no ISO form is kept as published.'}, 'circa': {'type': 'boolean', 'const': True, 'description': 'Present when the source flags the date as approximate; never without date.'}, 'place': {'type': 'string', 'description': 'Place of birth, when published.'}}, 'description': 'One date/place of birth.', 'additionalProperties': False}, 'description': 'Published dates and places of birth (persons).'}, 'nationalities': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Published nationalities / citizenships.'}, 'sourceEntryId': {'type': 'string', 'description': "The source list's own entry ID."}, 'designationDate': {'type': 'string', 'description': "The source's own designation date as YYYY-MM-DD; absent when unpublished."}, 'referenceNumber': {'type': 'string', 'description': "The list's published reference number (UN, EU, UK OFSI Group ID); absent when the list publishes none for the entry. OFAC publishes none â\x80\x94 its entry ID is its published number."}}, 'additionalProperties': False}
sanctions_get_entity
sanctions-screening-mcp-server: get entity
Fetch the full GLEIF Level 1 record for one LEI: legal name, other/trading names, legal and headquarters addresses, registration status, jurisdiction, registration authority and ID, and last-update date — plus any sanctions hits screened against the same legal name across all loaded watchlists. The screening cross-reference is a screening AID: a hit is a candidate to verify against the official source, and no hit is not a clearance. screeningStatus says whether that cross-reference actually ran — an empty sanctionsHits under not_ready means the sanctions mirror was unavailable, not that nothing matched. sanctionsScreen says whether the hit list is the whole set: it reports how many potential matches existed before the cap, so a capped cross-reference is distinguishable from a complete one. LEI must be a 20-character GLEIF identifier (18 alphanumerics + 2 check digits).
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['lei'], 'properties': {'lei': {'type': 'string', 'pattern': '^[A-Z0-9]{18}[0-9]{2}$', 'description': 'The 20-character GLEIF Legal Entity Identifier to look up.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['lei', 'legalName', 'otherNames', 'alternateNames', 'sanctionsHits', 'screeningStatus', 'caveat']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'lei': {'type': 'string', 'description': 'The 20-character GLEIF Legal Entity Identifier.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['lei_not_found', 'mirror_not_ready'], 'description': 'Machine-readable failure mode. Declared by this tool: `lei_not_found`: No GLEIF entity exists for the given LEI in the mirror. `mirror_not_ready`: The GLEIF (LEI) mirror has never completed an initial sync. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'caveat': {'type': 'string', 'description': 'Decision-support caveat â\x80\x94 the screening cross-reference is an aid, not a determination.'}, 'status': {'type': 'string', 'description': 'Registration status (e.g. ISSUED, LAPSED).'}, 'legalName': {'type': 'string', 'description': 'Registered legal name.'}, 'lastUpdate': {'type': 'string', 'description': 'ISO 8601 last-update timestamp from the LEI record.'}, 'otherNames': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Other names published in the LEI record (trading, previous, and alternative-language legal names), as plain strings.'}, 'jurisdiction': {'type': 'string', 'description': 'Legal jurisdiction (ISO code), when published.'}, 'legalAddress': {'type': 'string', 'description': 'Single-line legal address, when published.'}, 'sanctionsHits': {'type': 'array', 'items': {'type': 'object', 'required': ['source', 'sourceLabel', 'sourceEntryId', 'primaryName', 'matchedName', 'matchType'], 'properties': {'score': {'type': 'number', 'description': 'Raw Jaro-Winkler similarity (0â\x80\x931) for approximate hits only.'}, 'source': {'enum': ['ofac_sdn', 'ofac_consolidated', 'eu', 'uk', 'un'], 'type': 'string', 'description': 'Watchlist the candidate is on.'}, 'matchType': {'enum': ['exact', 'strong', 'approximate'], 'type': 'string', 'description': 'exact / strong / approximate match classification.'}, 'matchedName': {'type': 'string', 'description': "The name/alias that matched the entity's legal name."}, 'primaryName': {'type': 'string', 'description': 'Primary published name of the designation.'}, 'sourceLabel': {'type': 'string', 'description': 'Human-readable source list name.'}, 'sourceEntryId': {'type': 'string', 'description': 'Source entry ID â\x80\x94 pass to sanctions_get_designation.'}}, 'description': "A potential watchlist match on the entity's legal name â\x80\x94 verify, do not assume.", 'additionalProperties': False}, 'description': "Sanctions screening cross-reference on the entity's legal name."}, 'alternateNames': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'description': 'The name as published.'}, 'type': {'type': 'string', 'description': "GLEIF name type: PREVIOUS_LEGAL_NAME (a former legal name, not the current one), TRADING_OR_OPERATING_NAME, ALTERNATIVE_LANGUAGE_LEGAL_NAME, PREFERRED_ASCII_TRANSLITERATED_LEGAL_NAME, AUTO_ASCII_TRANSLITERATED_LEGAL_NAME, or UNKNOWN for a name the mirror stored without GLEIF's type."}}, 'description': 'One name GLEIF publishes beside the legal name.', 'additionalProperties': False}, 'description': 'Every other and transliterated name with its type, in the order published â\x80\x94 the typed view of otherNames plus the ASCII transliterations of a legal name in another script.'}, 'sanctionsScreen': {'type': 'object', 'required': ['totalAvailable', 'totalAvailableBasis', 'hasMore'], 'properties': {'hasMore': {'type': 'boolean', 'description': 'True when the potential matches were capped â\x80\x94 screen the legal name with sanctions_screen_name to page through the rest.'}, 'totalAvailable': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Potential matches the cross-reference screen found before the cap was applied.'}, 'totalAvailableBasis': {'enum': ['exact', 'lower_bound'], 'type': 'string', 'description': 'How to read totalAvailable: exact = the complete strict match set for this legal name; lower_bound = a bounded scan produced it, so more may exist.'}}, 'description': "Disclosure for the cross-reference screen: how many potential matches existed before the cap, and whether sanctionsHits is the complete set. Present only when screeningStatus is 'screened'.", 'additionalProperties': False}, 'screeningStatus': {'enum': ['screened', 'not_ready'], 'type': 'string', 'description': "Whether the cross-reference ran: screened = the legal name was screened against every loaded watchlist; not_ready = the sanctions mirror has never synced, so no screening ran and the empty sanctionsHits says nothing about this entity. Read sanctionsHits only when this is 'screened'."}, 'headquartersAddress': {'type': 'string', 'description': 'Single-line headquarters address, when published.'}, 'registrationAuthorityId': {'type': 'string', 'description': 'Registration authority (RA) code, when published.'}, 'registrationAuthorityEntityId': {'type': 'string', 'description': "The entity's ID at its registration authority, when published."}}, 'additionalProperties': False}
sanctions_list_sources
sanctions-screening-mcp-server: list sources
List the sanctions watchlists (OFAC SDN + Consolidated, EU, UK, UN) and GLEIF datasets currently loaded in the local mirror, each with its record count, source URL, license, and the mirror's readiness and as-of timestamp — for GLEIF, also whether its reporting exceptions are loaded and how many. Use this for provenance and freshness on any result — results are only as current as the last mirror refresh, and a not-ready mirror means screening cannot run yet. Attribution: UK data is under the Open Government Licence v3.0; all sources are cited here.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['sanctionsReady', 'leiReady', 'reportingExceptionsLoaded', 'sources']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'description': 'Machine-readable failure mode.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'leiAsOf': {'type': 'string', 'description': 'ISO 8601 timestamp of the last completed GLEIF sync, when available.'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'label', 'recordCount', 'url', 'license'], 'properties': {'url': {'type': 'string', 'description': 'Upstream source URL the mirror harvests from.'}, 'code': {'type': 'string', 'description': 'Source code (ofac_sdn, eu, â\x80¦, or gleif).'}, 'label': {'type': 'string', 'description': 'Human-readable source name.'}, 'license': {'type': 'string', 'description': 'Redistribution license / terms for this source.'}, 'recordCount': {'type': 'number', 'description': 'Records currently loaded for this source (Level 1 entities for gleif).'}, 'reportingExceptionCount': {'type': 'number', 'description': 'GLEIF reporting-exception records loaded (gleif only). Absent when the dataset has never been loaded â\x80\x94 never read as zero.'}}, 'description': 'One loaded source with count, provenance, and license.', 'additionalProperties': False}, 'description': 'All loaded sources, sanctions lists then the GLEIF dataset.'}, 'leiReady': {'type': 'boolean', 'description': 'True once the GLEIF (LEI) mirror has completed at least one full sync.'}, 'sanctionsAsOf': {'type': 'string', 'description': 'ISO 8601 timestamp of the last completed sanctions sync, when available.'}, 'sanctionsReady': {'type': 'boolean', 'description': 'True once the sanctions mirror has completed at least one full sync.'}, 'reportingExceptionsLoaded': {'type': 'boolean', 'description': 'Whether GLEIF reporting exceptions are loaded. When false, sanctions_trace_ownership reads a parent level with no published relationship as unknown.'}}, 'additionalProperties': False}
sanctions_resolve_entity
sanctions-screening-mcp-server: resolve entity
Resolve a company or organization name (with an optional jurisdiction: a country code, which includes its subdivisions, or an ISO 3166-2 subdivision code) to candidate GLEIF Legal Entity Identifiers (LEIs), ranked. This turns a free-text counterparty name into a stable global identifier that sanctions_get_entity and sanctions_trace_ownership key off. Every name GLEIF publishes takes part: the legal name, previous legal names, trading names, alternative-language legal names, and ASCII transliterations of a legal name in another script — each candidate reports the name it matched on and that name's type, one candidate per LEI. Strict mode (default) matches exact-normalized then all-tokens-present; fuzzy mode (or auto when strict is empty) adds Jaro-Winkler scoring labeled approximate with a raw 0–1 score plus the count of query tokens the matched name covers, which orders candidates that tie on score. Results are paged: totalAvailable and hasMore report candidates beyond the returned page, and nextOffset retrieves them. Returns potential matches to confirm against the GLEIF record — name resolution is a candidate ranking, not an authoritative identification.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'minLength': 1, 'description': 'The company / organization name to resolve to an LEI, in any script. It must contain at least one letter or digit, and at most 64 words and 1024 characters.'}, 'limit': {'type': 'integer', 'default': 10, 'maximum': 50, 'minimum': 1, 'description': 'Maximum LEI candidates to return in one page.'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based index of the first LEI candidate to return. Re-call with the returned nextOffset to page through every candidate when hasMore is true; an offset past the end returns an empty page, not an error.'}, 'status': {'enum': ['any', 'issued', 'lapsed'], 'type': 'string', 'default': 'issued', 'description': "Registration status filter. issued (default) matches ISSUED; lapsed matches exactly LAPSED; any applies no filter and is the only value that reaches the other states (RETIRED, DUPLICATE, ANNULLED, PENDING_TRANSFER, PENDING_ARCHIVAL, MERGED) â\x80\x94 each candidate's status field names its state."}, 'minScore': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': "Jaro-Winkler floor for fuzzy hits (0â\x80\x931); defaults to the server's configured floor."}, 'matchMode': {'enum': ['strict', 'fuzzy'], 'type': 'string', 'default': 'strict', 'description': 'strict (default): exact then all-tokens-present. fuzzy: also scored Jaro-Winkler.'}, 'jurisdiction': {'anyOf': [{'type': 'string', 'const': ''}, {'type': 'string', 'pattern': '^[A-Za-z]{2}(-[A-Za-z0-9]{1,3})?$', 'description': 'ISO 3166-1 alpha-2 country code (e.g. US) or ISO 3166-2 subdivision code (e.g. US-DE), case-insensitive.'}], 'description': 'Optional legal-jurisdiction filter. A country code ("US") matches that country and every subdivision under it (US-DE, US-CA); a subdivision code ("US-DE") matches exactly. Case-insensitive. Empty string disables it.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['matches', 'normalizedQuery', 'matchModeUsed', 'totalCount', 'totalAvailable', 'totalAvailableBasis', 'hasMore']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['name_not_searchable', 'name_too_long', 'mirror_not_ready'], 'description': 'Machine-readable failure mode. Declared by this tool: `name_not_searchable`: The name contains no letter or digit, so nothing in it can be matched. `name_too_long`: The name is longer than 64 words or 1024 characters. `mirror_not_ready`: The GLEIF (LEI) mirror has never completed an initial sync. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': "Guidance when no LEI matched and how to broaden, when the requested offset sits past the end of the result set, or when the mirror has not indexed GLEIF's other and transliterated names yet, so only legal names were searched."}, 'hasMore': {'type': 'boolean', 'description': 'True when LEI candidates remain beyond this page â\x80\x94 re-call with nextOffset.'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['lei', 'legalName', 'matchedName', 'matchedNameType', 'matchType'], 'properties': {'lei': {'type': 'string', 'description': '20-character GLEIF Legal Entity Identifier.'}, 'score': {'type': 'number', 'description': 'Raw Jaro-Winkler similarity (0â\x80\x931) for approximate hits only â\x80\x94 a real measurement.'}, 'status': {'type': 'string', 'description': 'Registration status (e.g. ISSUED, LAPSED).'}, 'legalName': {'type': 'string', 'description': 'Registered legal name of the entity.'}, 'matchType': {'enum': ['exact', 'strong', 'approximate'], 'type': 'string', 'description': 'exact = normalized equality; strong = all tokens present; approximate = fuzzy.'}, 'matchedName': {'type': 'string', 'description': 'The name that matched the query â\x80\x94 the legal name or one of the other or transliterated names GLEIF publishes for the entity.'}, 'jurisdiction': {'type': 'string', 'description': 'Legal jurisdiction (ISO code), when published.'}, 'matchedNameType': {'type': 'string', 'description': "Type of matchedName: LEGAL_NAME, PREVIOUS_LEGAL_NAME (a former legal name, not the current one), TRADING_OR_OPERATING_NAME, ALTERNATIVE_LANGUAGE_LEGAL_NAME, PREFERRED_ASCII_TRANSLITERATED_LEGAL_NAME, AUTO_ASCII_TRANSLITERATED_LEGAL_NAME, or UNKNOWN for a name the mirror stored without GLEIF's type."}, 'queryTokenCoverage': {'type': 'object', 'required': ['covered', 'total'], 'properties': {'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Total tokens in the normalized query.'}, 'covered': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Query tokens individually matched by one of the matched name's tokens at the applied score floor."}}, 'description': 'How much of the query the matched name explains, as a literal token count â\x80\x94 a second real measurement, never folded into score. It is the tie-break applied after score, because one shared exact token pins several candidates at the same score. Absent for exact/strong matches.', 'additionalProperties': False}}, 'description': 'One LEI candidate â\x80\x94 confirm against the GLEIF record before relying on it.', 'additionalProperties': False}, 'description': 'LEI candidates, ranked by match type, then score, then how much of the query each matched name explains.'}, 'nextOffset': {'type': 'number', 'description': 'The offset to request next. Present only when hasMore is true.'}, 'totalCount': {'type': 'number', 'description': 'Number of LEI candidates returned in this page.'}, 'matchModeUsed': {'type': 'string', 'description': 'The match mode actually applied (strict may upgrade to fuzzy).'}, 'totalAvailable': {'type': 'number', 'description': 'LEI candidates available across all pages, before limit and offset were applied.'}, 'normalizedQuery': {'type': 'string', 'description': 'The name as the server folded it for matching.'}, 'totalAvailableBasis': {'enum': ['exact', 'lower_bound'], 'type': 'string', 'description': 'How to read totalAvailable: exact = the complete strict candidate set; lower_bound = a bounded scan produced it (every fuzzy pass, and any strict pass that hit the raw-row scan cap), so more may exist.'}}, 'additionalProperties': False}
sanctions_screen_identifier
sanctions-screening-mcp-server: screen identifier
Look up an identifier — a vessel IMO number, a SWIFT/BIC code, a digital-currency wallet address, a passport or national ID number, or any other identifier a list publishes — against all loaded sanctions watchlists at once: OFAC SDN + Consolidated, EU, UK, and UN. Exact match after normalization, with no fuzzy or partial matching and no score: spacing, letter case, and the separators - . / are ignored, an IMO number matches with or without its IMO prefix, a SWIFT/BIC code compares on its first eight characters so a branch code matches its institution, and a wallet address folds case only where its encoding is case-insensitive (hex, bech32, cashaddr — never base58). Returns every designation that publishes a matching identifier, one per designation, with the identifiers that matched as published; sanctions_get_designation pulls the full record. This is a screening AID for a human/compliance review, NOT a compliance determination: a hit means "review this candidate against the official source," and an empty result never means "cleared" — an identifier a list prints only in free-text remarks, or bundled with other numbers in one field, does not match.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['value'], 'properties': {'type': {'enum': ['any', 'imo', 'swift_bic', 'digital_currency_address', 'passport', 'national_id'], 'type': 'string', 'default': 'any', 'description': 'Restrict to one identifier category, matched on the label each list publishes, or "any" (default) to search every published identifier, including categories with no name here (MMSI, call signs, tail numbers, tax and registration numbers, email, websites).'}, 'value': {'type': 'string', 'minLength': 1, 'description': 'The identifier to look up, as you hold it (e.g. "IMO 7406784", "DCBKKPPY", a wallet address, a passport number). Must contain at least one character other than whitespace and - . /'}, 'sources': {'type': 'array', 'items': {'enum': ['ofac_sdn', 'ofac_consolidated', 'eu', 'uk', 'un'], 'type': 'string'}, 'description': 'Restrict to specific source lists. Omit to search all loaded lists.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['hits', 'caveat', 'totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hits': {'type': 'array', 'items': {'type': 'object', 'required': ['source', 'sourceLabel', 'sourceEntryId', 'primaryName', 'entityType', 'matchedIdentifiers'], 'properties': {'source': {'enum': ['ofac_sdn', 'ofac_consolidated', 'eu', 'uk', 'un'], 'type': 'string', 'description': 'Which watchlist this candidate is on â\x80\x94 its provenance.'}, 'program': {'type': 'string', 'description': 'Sanctioning program / regime, when published by the source.'}, 'entityType': {'enum': ['person', 'organization', 'vessel', 'aircraft', 'unknown'], 'type': 'string', 'description': 'Entity classification as published by the source.'}, 'primaryName': {'type': 'string', 'description': 'Primary published name of the designated entity.'}, 'sourceLabel': {'type': 'string', 'description': 'Human-readable name of the source list.'}, 'sourceEntryId': {'type': 'string', 'description': "The list's own entry ID â\x80\x94 pass to sanctions_get_designation for the full record."}, 'matchedIdentifiers': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'value'], 'properties': {'type': {'type': 'string', 'description': 'Identifier label as the list publishes it (e.g. Vessel Registration Identification, IMO Number, SWIFT BIC, Digital Currency Address - ETH, Passport).'}, 'value': {'type': 'string', 'description': 'Identifier value exactly as published, letter case included.'}, 'country': {'type': 'string', 'description': 'Issuing country/authority, when published.'}}, 'description': 'One published identifier that matched the lookup.', 'additionalProperties': False}, 'description': 'Every identifier this designation publishes that matched, as published â\x80\x94 several when the list prints one number more than one way.'}}, 'description': 'One designation that publishes a matching identifier â\x80\x94 a candidate to verify.', 'additionalProperties': False}, 'description': 'Designations that publish a matching identifier, one per designation, ordered by source list then entry ID. Not paged â\x80\x94 the most widely shared published identifiers map to about a dozen designations.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['identifier_not_searchable', 'mirror_not_ready'], 'description': 'Machine-readable failure mode. Declared by this tool: `identifier_not_searchable`: The value is left with nothing to compare once whitespace and the separators - . / are removed (or, for type imo, a bare IMO prefix). `mirror_not_ready`: The sanctions mirror has never completed an initial sync. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'caveat': {'type': 'string', 'description': 'Decision-support caveat â\x80\x94 this is a screening aid, not a compliance determination.'}, 'notice': {'type': 'string', 'description': 'Guidance when no designation matched â\x80\x94 what to try next, and what an empty result does NOT mean.'}, 'totalCount': {'type': 'number', 'description': 'Number of designations returned.'}}, 'additionalProperties': False}
sanctions_screen_name
sanctions-screening-mcp-server: screen name
Screen a name (person, company, vessel, aircraft) against all loaded sanctions watchlists at once — OFAC SDN + Consolidated, EU, UK, and UN — alias- and fuzzy-aware. Returns scored potential matches with the source list, sanctioning program, designation date, and the matched alias. Strict mode (default) matches exact-normalized then all-tokens-present; fuzzy mode (or auto when strict is empty) adds Jaro-Winkler and phonetic matching and labels hits approximate with a raw 0–1 similarity score plus the count of query tokens the candidate covers, which orders candidates that tie on score. Results are paged: totalAvailable and hasMore report matches beyond the returned page, and nextOffset retrieves them. This is a screening AID for a human/compliance review, NOT a compliance determination: a hit means "review this candidate against the official source," and an empty result never means "cleared."
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'minLength': 1, 'description': 'The name to screen (person, organization, vessel, or aircraft), in any script. It must contain at least one letter or digit, and at most 64 words and 1024 characters.'}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1, 'description': 'Maximum number of potential matches to return in one page.'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based index of the first potential match to return. Re-call with the returned nextOffset to page through every match when hasMore is true; an offset past the end returns an empty page, not an error.'}, 'sources': {'type': 'array', 'items': {'enum': ['ofac_sdn', 'ofac_consolidated', 'eu', 'uk', 'un'], 'type': 'string'}, 'description': 'Restrict to specific source lists. Omit to screen all loaded lists.'}, 'minScore': {'type': 'number', 'maximum': 1, 'minimum': 0, 'description': "Score floor for fuzzy hits (0â\x80\x931), applied uniformly to every fuzzy candidate regardless of how it was matched (Jaro-Winkler, token, or phonetic). No hit below this score is returned. Applies to fuzzy mode only; defaults to the server's configured floor."}, 'matchMode': {'enum': ['strict', 'fuzzy'], 'type': 'string', 'default': 'strict', 'description': 'strict (default): exact-normalized then all-tokens-present. fuzzy: also scored Jaro-Winkler + phonetic. Strict auto-falls-back to fuzzy when it finds nothing.'}, 'entityType': {'enum': ['any', 'person', 'organization', 'vessel', 'aircraft'], 'type': 'string', 'default': 'any', 'description': 'Restrict to one entity class, or "any" (default) to screen across all.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['hits', 'caveat', 'normalizedQuery', 'matchModeUsed', 'totalCount', 'totalAvailable', 'totalAvailableBasis', 'hasMore']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'hits': {'type': 'array', 'items': {'type': 'object', 'required': ['source', 'sourceLabel', 'sourceEntryId', 'entityType', 'primaryName', 'matchedName', 'matchedNameType', 'matchType'], 'properties': {'score': {'type': 'number', 'description': 'Raw Jaro-Winkler similarity (0â\x80\x931) for approximate hits only â\x80\x94 a real measurement, not a confidence verdict. Absent for exact/strong hits.'}, 'source': {'enum': ['ofac_sdn', 'ofac_consolidated', 'eu', 'uk', 'un'], 'type': 'string', 'description': 'Which watchlist this candidate is on â\x80\x94 its provenance.'}, 'program': {'type': 'string', 'description': 'Sanctioning program / regime, when published by the source.'}, 'matchType': {'enum': ['exact', 'strong', 'approximate'], 'type': 'string', 'description': 'exact = normalized name equality; strong = all query tokens present; approximate = fuzzy/phonetic.'}, 'entityType': {'enum': ['person', 'organization', 'vessel', 'aircraft', 'unknown'], 'type': 'string', 'description': 'Entity classification as published by the source.'}, 'matchedName': {'type': 'string', 'description': 'The specific name or alias string that matched the query.'}, 'primaryName': {'type': 'string', 'description': 'Primary published name of the designated entity.'}, 'sourceLabel': {'type': 'string', 'description': 'Human-readable name of the source list.'}, 'sourceEntryId': {'type': 'string', 'description': "The list's own entry ID â\x80\x94 pass to sanctions_get_designation for the full record."}, 'designationDate': {'type': 'string', 'description': "The source's own designation date as YYYY-MM-DD; absent when unpublished."}, 'matchedNameType': {'enum': ['primary', 'aka', 'fka', 'low-quality-aka'], 'type': 'string', 'description': 'Provenance of the matched name: primary, a.k.a., f.k.a., or a low-quality a.k.a.'}, 'referenceNumber': {'type': 'string', 'description': "The list's published reference number (UN, EU, UK OFSI Group ID); absent when the list publishes none for the entry."}, 'queryTokenCoverage': {'type': 'object', 'required': ['covered', 'total'], 'properties': {'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Total tokens in the normalized query.'}, 'covered': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Query tokens individually matched by one of this candidate's tokens at the applied score floor."}}, 'description': 'How much of the query this candidate explains, as a literal token count â\x80\x94 a second real measurement, never folded into score. It is the tie-break applied after score, because one shared exact token pins several candidates at the same score. Absent for exact/strong hits.', 'additionalProperties': False}}, 'description': 'One potential match â\x80\x94 a candidate to verify, never a determination.', 'additionalProperties': False}, 'description': 'Potential matches, ranked by match type, then score, then how much of the query each candidate explains.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['name_not_searchable', 'name_too_long', 'mirror_not_ready'], 'description': 'Machine-readable failure mode. Declared by this tool: `name_not_searchable`: The name contains no letter or digit, so nothing in it can be matched. `name_too_long`: The name is longer than 64 words or 1024 characters. `mirror_not_ready`: The sanctions mirror has never completed an initial sync. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'caveat': {'type': 'string', 'description': 'Decision-support caveat â\x80\x94 this is a screening aid, not a compliance determination.'}, 'notice': {'type': 'string', 'description': 'Guidance when no candidate matched â\x80\x94 how to broaden, and what an empty result does NOT mean â\x80\x94 or when the requested offset sits past the end of the result set.'}, 'hasMore': {'type': 'boolean', 'description': 'True when potential matches remain beyond this page â\x80\x94 re-call with nextOffset.'}, 'nextOffset': {'type': 'number', 'description': 'The offset to request next. Present only when hasMore is true.'}, 'totalCount': {'type': 'number', 'description': 'Number of potential matches returned in this page.'}, 'matchModeUsed': {'type': 'string', 'description': 'The match mode actually applied (strict may auto-upgrade to fuzzy on empty).'}, 'totalAvailable': {'type': 'number', 'description': 'Potential matches available across all pages, before limit and offset were applied.'}, 'normalizedQuery': {'type': 'string', 'description': 'The name as the server folded it for matching.'}, 'totalAvailableBasis': {'enum': ['exact', 'lower_bound'], 'type': 'string', 'description': 'How to read totalAvailable: exact = the complete strict match set; lower_bound = a bounded scan produced it (every fuzzy pass, and any strict pass that hit the raw-row scan cap), so more may exist.'}}, 'additionalProperties': False}
sanctions_trace_ownership
sanctions-screening-mcp-server: trace ownership
Trace the GLEIF Level 2 corporate-ownership graph for an LEI: direct and ultimate parents and/or children, traversed breadth-first to a bounded depth, with relationship type for each edge. Set screenNodes to also screen every entity in the graph against all loaded watchlists — resolving "is anyone in this ownership chain sanctioned." Each per-node screen is a screening AID: hits are candidates to verify, and an empty result for a node is not a clearance of that node. Each node whose parents were walked carries parentStatus for its direct and ultimate parent: a published relationship, a reporting exception with the reasons the entity gave (such as NATURAL_PERSONS or NON_CONSOLIDATING), none, or unknown when reporting exceptions are not loaded. The response says what it could not do: complete/truncated/missingEntityLeis report whether the loaded relationship graph within the depth is fully shown, screeningStatus reports whether the cross-reference actually ran, and each screened node reports whether its own hit list was capped. Requires a valid 20-character LEI (use sanctions_resolve_entity to obtain one).
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['lei'], 'properties': {'lei': {'type': 'string', 'pattern': '^[A-Z0-9]{18}[0-9]{2}$', 'description': 'The 20-character GLEIF LEI at the root of the ownership graph.'}, 'depth': {'type': 'integer', 'default': 3, 'maximum': 5, 'minimum': 1, 'description': 'Maximum traversal depth from the root entity (1â\x80\x935).'}, 'direction': {'enum': ['parents', 'children', 'both'], 'type': 'string', 'default': 'both', 'description': 'Walk parents (who owns it), children (what it owns), or both (default).'}, 'screenNodes': {'type': 'boolean', 'default': False, 'description': "When true, screen every node's legal name against all watchlists â\x80\x94 the ownership-chain cross-reference."}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['rootLei', 'nodes', 'edges', 'complete', 'truncated', 'reportingExceptionsLoaded', 'missingEntityLeis', 'screeningStatus', 'screenedNodeCount', 'flaggedNodeCount', 'caveat']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'edges': {'type': 'array', 'items': {'type': 'object', 'required': ['childLei', 'parentLei', 'relationshipType'], 'properties': {'childLei': {'type': 'string', 'description': 'LEI of the owned (child) entity.'}, 'parentLei': {'type': 'string', 'description': 'LEI of the owning (parent) entity.'}, 'relationshipType': {'type': 'string', 'description': 'GLEIF relationship type (e.g. IS_DIRECTLY_CONSOLIDATED_BY).'}, 'relationshipStatus': {'type': 'string', 'description': 'Relationship status, when published.'}}, 'description': 'One directed ownership edge (child is consolidated by parent).', 'additionalProperties': False}, 'description': 'Directed ownership edges between the nodes.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['lei_not_found', 'mirror_not_ready'], 'description': 'Machine-readable failure mode. Declared by this tool: `lei_not_found`: No GLEIF entity exists for the root LEI in the mirror. `mirror_not_ready`: The GLEIF (LEI) mirror has never completed an initial sync. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'nodes': {'type': 'array', 'items': {'type': 'object', 'required': ['lei', 'legalName', 'depth', 'role'], 'properties': {'lei': {'type': 'string', 'description': "The node's LEI."}, 'role': {'enum': ['root', 'parent', 'child'], 'type': 'string', 'description': 'Position relative to the traversal.'}, 'depth': {'type': 'number', 'description': 'Breadth-first depth from the root (root = 0).'}, 'status': {'type': 'string', 'description': 'GLEIF registration status, when known.'}, 'legalName': {'type': 'string', 'description': "The node's legal name (the LEI itself if not hydrated)."}, 'jurisdiction': {'type': 'string', 'description': 'Jurisdiction (ISO code), when known.'}, 'parentStatus': {'type': 'object', 'required': ['direct', 'ultimate'], 'properties': {'direct': {'type': 'object', 'required': ['status'], 'properties': {'status': {'enum': ['relationship', 'exception', 'none', 'unknown'], 'type': 'string', 'description': 'relationship = a Level 2 relationship at this level is published (see edges); exception = the entity filed a GLEIF reporting exception instead of naming this parent; none = GLEIF publishes neither; unknown = no relationship is published and reporting exceptions are not loaded in the mirror, so whether one was filed is unknown.'}, 'exceptionReasons': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Every reason given in the reporting exception (e.g. NATURAL_PERSONS, NON_CONSOLIDATING, NO_KNOWN_PERSON). Present only when status is exception.'}}, 'description': 'What GLEIF publishes about the direct parent.', 'additionalProperties': False}, 'ultimate': {'type': 'object', 'required': ['status'], 'properties': {'status': {'enum': ['relationship', 'exception', 'none', 'unknown'], 'type': 'string', 'description': 'relationship = a Level 2 relationship at this level is published (see edges); exception = the entity filed a GLEIF reporting exception instead of naming this parent; none = GLEIF publishes neither; unknown = no relationship is published and reporting exceptions are not loaded in the mirror, so whether one was filed is unknown.'}, 'exceptionReasons': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Every reason given in the reporting exception (e.g. NATURAL_PERSONS, NON_CONSOLIDATING, NO_KNOWN_PERSON). Present only when status is exception.'}}, 'description': 'What GLEIF publishes about the ultimate parent.', 'additionalProperties': False}}, 'description': "What GLEIF publishes about this node's direct and ultimate accounting-consolidation parents. Present only on nodes whose parents the traversal read â\x80\x94 every node short of the depth limit when direction is parents or both; absent on a children walk.", 'additionalProperties': False}, 'sanctionsHits': {'type': 'array', 'items': {'type': 'object', 'required': ['source', 'sourceLabel', 'sourceEntryId', 'primaryName', 'matchedName', 'matchType'], 'properties': {'score': {'type': 'number', 'description': 'Raw Jaro-Winkler similarity (0â\x80\x931) for approximate hits only.'}, 'source': {'enum': ['ofac_sdn', 'ofac_consolidated', 'eu', 'uk', 'un'], 'type': 'string', 'description': 'Watchlist the candidate is on.'}, 'matchType': {'enum': ['exact', 'strong', 'approximate'], 'type': 'string', 'description': 'Match classification.'}, 'matchedName': {'type': 'string', 'description': 'The name/alias that matched this node.'}, 'primaryName': {'type': 'string', 'description': 'Primary published name of the designation.'}, 'sourceLabel': {'type': 'string', 'description': 'Human-readable source list name.'}, 'sourceEntryId': {'type': 'string', 'description': 'Source entry ID â\x80\x94 pass to sanctions_get_designation.'}}, 'description': 'A potential watchlist match on this node â\x80\x94 verify, do not assume.', 'additionalProperties': False}, 'description': 'Per-node screening results, present only when screenNodes is true.'}, 'sanctionsScreen': {'type': 'object', 'required': ['totalAvailable', 'totalAvailableBasis', 'hasMore'], 'properties': {'hasMore': {'type': 'boolean', 'description': "True when this node's potential matches were capped â\x80\x94 screen its legal name with sanctions_screen_name to page through the rest."}, 'totalAvailable': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Potential matches this node's screen found before the per-node cap was applied."}, 'totalAvailableBasis': {'enum': ['exact', 'lower_bound'], 'type': 'string', 'description': 'How to read totalAvailable: exact = the complete strict match set for this node; lower_bound = a bounded scan produced it, so more may exist.'}}, 'description': "Disclosure for this node's cross-reference screen: how many potential matches existed before the per-node cap, and whether sanctionsHits is the complete set. Present only when the node was screened.", 'additionalProperties': False}}, 'description': 'One entity in the ownership graph.', 'additionalProperties': False}, 'description': 'All entities reached in the traversal, including the root.'}, 'caveat': {'type': 'string', 'description': 'Decision-support caveat â\x80\x94 node screening is an aid, not a determination.'}, 'rootLei': {'type': 'string', 'description': 'The LEI the traversal started from.'}, 'complete': {'type': 'boolean', 'description': "True when the loaded Level 2 relationships within the requested depth are all shown (nothing was cut off by depth) AND every node resolved to a GLEIF Level 1 record. It does not say every parent is known â\x80\x94 most entities publish no parent relationship; read each node's parentStatus for what GLEIF publishes instead. False means the graph below is a partial view â\x80\x94 read truncated and missingEntityLeis for which."}, 'truncated': {'type': 'boolean', 'description': 'True when further ownership relationships exist beyond the requested depth â\x80\x94 re-run with a higher depth to see them. False means the traversal reached the edge of the loaded relationship corpus.'}, 'screeningStatus': {'enum': ['screened', 'not_requested', 'not_ready'], 'type': 'string', 'description': 'Whether the per-node cross-reference ran: screened = every node was screened; not_requested = screenNodes was false; not_ready = screening was requested but the sanctions mirror has never synced, so NO node was screened and the absence of hits says nothing about any node.'}, 'flaggedNodeCount': {'type': 'number', 'description': 'How many screened nodes had at least one potential watchlist match.'}, 'missingEntityLeis': {'type': 'array', 'items': {'type': 'string'}, 'description': 'LEIs published in the relationship corpus but absent from the GLEIF Level 1 entity mirror. Their nodes carry the LEI in place of a legal name and no jurisdiction/status â\x80\x94 never read that LEI as a legal name, and note any per-node screen for them ran against the LEI string.'}, 'screenedNodeCount': {'type': 'number', 'description': 'How many nodes were screened (0 when screenNodes is false).'}, 'reportingExceptionsLoaded': {'type': 'boolean', 'description': "Whether GLEIF reporting exceptions are loaded in the mirror. When false, a node's parent level with no published relationship reads unknown rather than exception or none."}}, 'additionalProperties': False}
Modifié
sanctions_trace_ownership
27 September 2026 02:44
Modifié
sanctions_get_entity
27 September 2026 02:44
Modifié
sanctions_resolve_entity
27 September 2026 02:44
Modifié
sanctions_list_sources
27 September 2026 02:44
Modifié
sanctions_get_designation
27 September 2026 02:44
Ajouté
sanctions_screen_identifier
27 September 2026 02:44
Modifié
sanctions_screen_name
27 September 2026 02:44
Ajouté
sanctions_trace_ownership
17 September 2026 12:41
Ajouté
sanctions_get_entity
17 September 2026 12:41
Ajouté
sanctions_resolve_entity
17 September 2026 12:41
Ajouté
sanctions_list_sources
17 September 2026 12:41
Ajouté
sanctions_get_designation
17 September 2026 12:41
Ajouté
sanctions_screen_name
17 September 2026 12:41