sanctions-screening-mcp-server
Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror.
Install / Use
claude mcp add cyanheads -- npx -y github:cyanheads/sanctions-screening-mcp-serverIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
Data & AnalyticsSupported Platforms
Tags
Our assessment of sanctions-screening-mcp-server
sanctions-screening-mcp-server scores 83/100 on our quality scale, 476th of 596 Data & Analytics skills we index.
Its MCP Server is 33 KB long, well organised into 34 sections with 11 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 9 days ago, so sanctions-screening-mcp-server is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
sanctions-screening-mcp-server compared with similar skills
All 4 of these similar skills score higher than sanctions-screening-mcp-server; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| sanctions-screening-mcp-server (this skill)by cyanheads | 83 | 3 | 9d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 106.0k | 4d ago | CLAUDE.md |
| claude-memby thedotmack | 100 | 104.2k | today | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 78.2k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.7k | today | CLAUDE.md |
Frequently asked questions
- How do I install sanctions-screening-mcp-server?
- Run
claude mcp add cyanheads -- npx -y github:cyanheads/sanctions-screening-mcp-server. The install tabs above show the steps for each supported agent. - Which AI agents does sanctions-screening-mcp-server work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is sanctions-screening-mcp-server safe to use?
- It is Apache-2.0-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is sanctions-screening-mcp-server still maintained?
- The repository was last updated 9 days ago, so sanctions-screening-mcp-server is actively maintained.
Skill content
View source on GitHubPublic Hosted Server: https://sanctions-screening.caseyjhand.com/mcp
</div>Overview
Sanctions screening and legal-entity resolution over the consolidated OFAC, EU, UK, and UN lists plus the GLEIF LEI registry, matched offline against a local mirror. Screen a name for potential watchlist hits, resolve a company to its LEI, and trace its ownership chain.
[!IMPORTANT] A screening aid, not a compliance determination. Every result is a potential match with a transparent score and source provenance, never a verdict. A hit is a candidate to verify against the official source; an empty result is never a clearance. Sanctions compliance needs human review and a qualified determination. This server feeds that process and does not perform it.
Tools
| Tool | Description |
|:---|:---|
| sanctions_screen_name | Screen a person, company, vessel, or aircraft name against every loaded watchlist at once |
| sanctions_screen_identifier | Look up an IMO number, SWIFT/BIC code, wallet address, or passport or national ID number exactly across every loaded watchlist |
| sanctions_get_designation | Fetch the full record for one designation by source list and entry ID or published reference number |
| sanctions_resolve_entity | Resolve a company name, optionally within a jurisdiction, to ranked GLEIF LEI candidates |
| sanctions_get_entity | Fetch the GLEIF Level 1 record for an LEI, with a sanctions cross-reference of its names, LEI, and registration number |
| sanctions_trace_ownership | Trace an LEI's parents and children, optionally cross-referencing every entity in the graph |
| sanctions_list_sources | List the loaded sources with record counts, licenses, and mirror freshness |
Resources
| Resource | Description |
|:---|:---|
| sanctions://designation/{source}/{entryId} | One sanctions designation by source and entry ID or published reference number |
| sanctions://entity/{lei} | One GLEIF Level 1 entity by LEI |
| sanctions://sources | Loaded sources with counts, plus each mirror's readiness and as-of timestamp |
All resource data is also reachable through the tools, for clients that don't surface resources.
Prompts
| Prompt | Description |
|:---|:---|
| sanctions_vet_counterparty | Run a counterparty due-diligence pass: screen, resolve, trace ownership, summarize |
Capability reference
sanctions_screen_name <sub>tool</sub>
namein any script (at most 64 words and 1,024 characters) plus optionalsources,entityType, andminScorefilters;matchModeisstrict(default) orfuzzy. Strict runs a fuzzy pass over each selected list it finds nothing on: a full pass when it finds nothing on any list, otherwise one that adds, after the strict hits, only candidates covering every word of the name other than legal forms, articles and other function words, and the jurisdiction codesuk,usa,uae, andrf.fuzzySourcesnames the lists a fuzzy pass searched; up to 100 hits per page (limit, default 25) withoffset- Hits carry
source,sourceEntryId, the list's publishedreferenceNumberwhere it has one,matchedNamewith itsmatchedNameType, andmatchType(exact/strong/approximate); approximate hits add the raw Jaro-Winklerscore(0–1) andqueryTokenCoverage - Approximate screening compares native forms and deterministic Russian-alphabet romanizations in both directions, always keeping the name and alias type exactly as published. Derived equality remains approximate; it is neither an official alias nor an identity determination. Native candidates take priority within each list's independent 2,000-name fuzzy pool; romanized forms and first-four-code-point deletion signatures supplement remaining capacity, so typo recall is bounded
sourcesnames every selected list a hit's party is on. OFAC publishes a party on the SDN List and a non-SDN list under one entry ID in both of its files; with both OFAC lists selected that party is one hit, counted once, naming both even when the screen matched one record. Its other fields, the designation date included, come from thesourcerecord:ofac_sdn, unless the Consolidated record matched alone or bettertotalAvailable,hasMore, andnextOffsetpage the rest, and paging reaches every match counted;totalAvailableBasismarks the countexact(strict matched on every selected list) or alower_bound(a fuzzy pass ran), and anoticeasks for a more distinctive word when a list's fuzzy candidate pool reached its budget
sanctions_screen_identifier <sub>tool</sub>
value(an identifier as you hold it) plus optionaltype(anydefault,imo,swift_bic,digital_currency_address,passport,national_id) andsources- Exact match after normalization, never fuzzy and never scored: spacing, letter case, and
-./are ignored; an IMO number matches with or without itsIMOprefix; a SWIFT/BIC compares on its first eight characters, so a branch BIC11 matches its institution's BIC8; a wallet address folds case only for hex (0x…), bech32 (bc1…,ltc1…,bnb1…), and cashaddr encodings, while base58 addresses compare exactly typematches on each list's published label:imois OFACVessel Registration Identification, UKIMO Number, and EUIMO (vessel identification);swift_bicisSWIFT/BICandSWIFT BIC;digital_currency_addressis OFACDigital Currency Address - <code>;passportandnational_idcover the lists' passport and national-ID labels.anyalso reaches every label with no category (MMSI, call signs, tail numbers, tax and registration numbers, email, websites)- One hit per designation, ordered by list then entry ID, each with the
matchedIdentifiersthat matched as published and itssources, an OFAC party on both OFAC lists being one hit naming both; not paged. An identifier a list prints only in free-text remarks, or bundled with other numbers in one field, does not match
sanctions_get_designation <sub>tool</sub>
source(ofac_sdn,ofac_consolidated,eu,uk,un) andentryId: thesourceEntryIdfrom a screening hit, or the reference number the list publishes (UNQDe.004, EUEU.27.28, UK OFSI Group ID14196). Matched trimmed and case-insensitive, entry ID first; a reference number two designations share fails asreference_ambiguous, naming both- Returns
referenceNumberbesidesourceEntryIdwhere the list publishes one; OFAC publishes none, its entry ID being its published number - All published aliases, identifiers, addresses, dates and places of birth, nationalities, descriptive features, program, legal basis, and designation date; a field the source omitted is absent, never filled in
- Identifiers cover identity documents plus the SWIFT/BIC codes, digital-currency addresses, vessel call signs, aircraft tail and serial numbers, phone numbers, email addresses, and websites a list publishes, each typed with the list's own label and its value verbatim
- Dates of birth are ISO 8601 at the precision the source published (
1952-10-07,1946-08,1938, or an interval such as1955/1957), withcirca: truewhere the source marks one approximate;designationDateis the source's own designation date asYYYY-MM-DD - An OFAC party is dated from its entries on the lists its file publishes: the SDN List for
ofac_sdn, the non-SDN lists forofac_consolidated, earliest first. A party on both files can carry a different date on each legalBasisis the instrument the list cites, verbatim: OFAC's legal-basis references (Executive Order 14024 (Russia)), the EU regulation title (2024/1488 (OJ L27052024)), or the UK regime's regulations (The Russia (Sanctions) (EU Exit) Regulations 2019), several joined with;. The UN list publishes nonefeaturescarries what a list publishes to describe the party rather than identify it, each typed with the list's own label, in published order: OFAC's vessel flag, type, owner, and tonnage, aircraft model, operator, and manufacture date, title, gender, and sanctions notes (Secondary sanctions risk:See Section 11 of Executive Order 14024.), and the UK list's ship details (CurrentBelievedFlagOfShip,TypeOfShip,YearBuilt, …). A date is ISO 8601 at published precision, withcirca: truewhere OFAC marks it approximate. The EU and UN lists contribute none, and no screening tool matches a feature value
sanctions_resolve_entity <sub>tool</sub>
namein any script (same bound assanctions_screen_name) plus optionaljurisdiction,status, andminScore;matchModeisstrict(default), which falls back to a fuzzy pass only when strict finds nothing, orfuzzy; up to 50 candidates per page (limit, default 10) withoffsetjurisdictionis a country code, which matches the country and every subdivision under it (USmatchesUS-DEandUS-CA), or an ISO 3166-2 subdivision code (US-DE), matched exactly; case-insensitivestatus:issued(default) matchesISSUED,lapsedmatches exactlyLAPSED, andanyapplies no filter — the only way to reachRETIRED,DUPLICATE,ANNULLED,PENDING_TRANSFER,PENDING_ARCHIVAL, orMERGEDrecords, each candidate'sstatusnaming its state- Searches every name GLEIF publishes: the legal name, previous legal names, trading names, alternative-language legal names, and ASCII transliterations of a legal name in another script
- Candidates carry
lei,legalName, thematchedNameand itsmatchedNameType(LEGAL_NAME,PREVIOUS_LEGAL_NAME,TRADING_OR_OPERATING_NAME, …, orUNKNOWNfor a name stored without a type), andmatchType, withscoreandqueryTokenCoverageon approximate matches; one candidate per LEI, paged by the sametotalAvailable/totalAvailableBasis/hasMore/nextOffsetfields
`sanctions_
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
106.0kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
claude-mem
104.2kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
headroom
78.2kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.7kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
