Prototype · Preview: every server in the official registry, synced every 30 minutes. Reviews and accounts come in a later step.
PopNx MCPMCP servers for people who use AI · explained in plain words

Sanctions Screening MCP Server

by cyanheadsversion 0.6.0i★ –iComputer or cloud
Registry nameio.github.cyanheads/sanctions-screening-mcp-server

Install

Overview

Description from the maker (original English)

Screen eleven sanctions/export-control lists; resolve GLEIF entities offline. Screening aid.

PopNx MCP’s three pillars

These three are never merged into one score: opinions, measurements and popularity are different things.

What you can do with it

We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.

Install

Pick the AI app you use, then copy the settings.

Before you install

  • Basic checks: 3 of 3 passed
  • Runs on the maker’s server: what you ask it goes through their server.
  • Can do 7 things (tools) sanctions_screen_name, sanctions_screen_identifier, sanctions_get_designation, sanctions_list_sources …
  • You fill in yourself: MCP_LOG_LEVEL, SANCTIONS_MIRROR_PATH, SANCTIONS_FUZZY_MIN_SCORE

You need

  • Runs in the cloudNothing to install; it connects over the internet
  • npmNode.js installed (for the npx command)

Which app do you use?

Pick your app above. We remember it, so next time the button says “Install in …”.

Works in Claude on the web, desktop and mobile:

  1. Open Settings → Connectors
  2. Press Add custom connector
  3. Paste the address below and press Add
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Add2https://…3
https://sanctions-screening.caseyjhand.com/mcp

Or run it on your computer

Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json

{
  "mcpServers": {
    "sanctions-screening": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/sanctions-screening-mcp-server"
      ],
      "env": {
        "MCP_LOG_LEVEL": "your-value",
        "SANCTIONS_MIRROR_PATH": "your-value",
        "SANCTIONS_FUZZY_MIN_SCORE": "your-value"
      }
    }
  }
}

Run this in your terminal

claude mcp add --transport http sanctions-screening https://sanctions-screening.caseyjhand.com/mcp

Or run it on your computer

claude mcp add sanctions-screening --env MCP_LOG_LEVEL=your-value --env SANCTIONS_MIRROR_PATH=your-value --env SANCTIONS_FUZZY_MIN_SCORE=your-value -- npx -y @cyanheads/sanctions-screening-mcp-server

Fill in the empty values before running it.

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "sanctions-screening": {
      "url": "https://sanctions-screening.caseyjhand.com/mcp"
    }
  }
}

Or run it on your computer

Open in Cursor

Or copy the settings yourself

Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json

{
  "mcpServers": {
    "sanctions-screening": {
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/sanctions-screening-mcp-server"
      ],
      "env": {
        "MCP_LOG_LEVEL": "your-value",
        "SANCTIONS_MIRROR_PATH": "your-value",
        "SANCTIONS_FUZZY_MIN_SCORE": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "sanctions-screening": {
      "type": "http",
      "url": "https://sanctions-screening.caseyjhand.com/mcp"
    }
  }
}

Or run it on your computer

Open in VS Code

Or copy the settings yourself

Paste into .vscode/mcp.json in your project

{
  "servers": {
    "sanctions-screening": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@cyanheads/sanctions-screening-mcp-server"
      ],
      "env": {
        "MCP_LOG_LEVEL": "your-value",
        "SANCTIONS_MIRROR_PATH": "your-value",
        "SANCTIONS_FUZZY_MIN_SCORE": "your-value"
      }
    }
  }
}

Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.

ChatGPT connects only to servers on the internet:

  1. Open ChatGPT on the web → Settings → Connectors (Apps)
  2. Press Create or Add (some plans need Developer mode under Advanced first)
  3. Paste the address below, give it a name and save
  4. If it asks you to sign in, sign in with the maker
SettingsConnectors1+ Create2https://…3
https://sanctions-screening.caseyjhand.com/mcp

Menu names can differ slightly by plan and over time.

Your choice stays on this device in a cookie; no account needed.

Values you fill in

  • MCP_LOG_LEVEL env
    Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').
  • SANCTIONS_MIRROR_PATH env
    Filesystem path for the local SQLite mirror. All sources are keyless; no API key is required. Populate the mirror out-of-band with `bun run mirror:init`.
  • SANCTIONS_FUZZY_MIN_SCORE env
    Default Jaro-Winkler similarity floor (0-1) for fuzzy matches when the caller omits minScore.

These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.

What it can do

Tool names and descriptions exactly as the server reported them on Nov 6, 2026. The maker wrote them, not us; we show them as plain text.

  • sanctions_screen_name

    Screen a name (person, company, vessel, aircraft) against loaded sanctions and export-control watchlists — OFAC SDN + Consolidated, EU, UK, UN, and the six BIS/State CSL lists — alias- and fuzzy-aware. Check sanctions_list_sources for coverage before interpreting an empty result;

  • sanctions_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 aft

  • sanctions_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.2

  • sanctions_list_sources

    List supported watchlists (OFAC SDN + Consolidated, EU, UK, UN, BIS Entity/Denied Persons/Unverified/Military End User, State ITAR Debarred/Nonproliferation) and GLEIF datasets with current mirrored counts, source URLs, licenses, readiness, and as-of timestamps. coverageNotice na

  • sanctions_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 ide

  • sanctions_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 a sanctions cross-reference against all loaded watchlists. The cross-r

  • sanctions_trace_ownership

    Trace a paged GLEIF Level 2 ownership segment from a 20-character LEI (use sanctions_resolve_entity to obtain one). Direction both walks parents and children separately from the root, never sideways into siblings or co-parents; parents-side placement wins cycles. Ultimate-parent

Basic checksi

We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026

  • ✓ Pass

    Maker matches the repo

    The registry name was verified with the GitHub account cyanheads, which owns the repo

  • … Not checked yet

    Still maintained

    We have not read this repo from GitHub yet

  • … Not checked yet

    Has a licence

    We have not read this repo from GitHub yet

  • ✓ Pass

    Endpoint responds

    Responded in 174 ms (HTTP 200)

  • – Not applicable

    Sign-in with OAuth

    No sign-in needed

  • ✓ Pass

    No hidden instructions in tool descriptions

    Read 7 tool descriptions and found no hidden instructions to the AI

Compared with others in Law & government datai

  • More stars than 0% of the other 1758 servers in this category
  • Published to the registry more recently than 80% of the other 1758 servers in this category
  • Basic checks equal to or better than 100% of the other 1758 servers in this category

Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.

Common questions

Is Sanctions Screening MCP Server safe?

It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.

What keys or codes does it need?

The registry does not list a required key, though some servers ask you to sign in on first use.

Does it run on my computer or in the cloud?

Either way works: install it on your computer or connect to the cloud version.

Is it still maintained?

The GitHub repo last changed –, and the latest version (0.6.0) reached the registry 7 days ago.

Which apps can use it?

Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.

What can I use instead?

In the same category: Miramo, Private Law Wiki, Gerro: госзакупки для ИИ / Russian public procurement

Alternatives

Servers in the same category from other makers, sorted by stars.

Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi

Miramo

French rental law for tenants and landlords: rent caps, rental zones and unfurnished lease drafts.

by miramolabsEarlyUpdated today

Runs in the cloud✓ miramo.fr

Private Law Wiki

Sourced answers, search and bank-case assessment for wiki.private.law by the Mothership runtime.

by privatelawattorneysVery newUpdated today

Runs in the cloud

README from the maker

Open the README

Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.

@cyanheads/sanctions-screening-mcp-server Screen names against eleven OFAC, EU, UK, UN, BIS, and State sanctions and export-control lists and resolve legal entities against GLEIF, matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination. 7 Tools • 4 Resources • 1 Prompt

Public Hosted Server: https://sanctions-screening.caseyjhand.com/mcp


Overview

Sanctions and export-control screening over eleven lists plus the GLEIF LEI registry, matched offline against a local mirror. Screen a name or identifier for potential watchlist hits, resolve a company to its LEI, and trace its accounting-consolidation relationships.

Source codesLists
ofac_sdn, ofac_consolidatedOFAC SDN and Consolidated
eu, uk, unEU, UK Sanctions List, UN Security Council
bis_el, bis_dpl, bis_uvl, bis_meuBIS Entity, Denied Persons, Unverified, Military End User
state_dtc, state_acnState ITAR Debarred, Nonproliferation Sanctions

The six BIS/State lists come from trade.gov's keyless Consolidated Screening List (CSL) bulk download. Treasury CSL copies are skipped; direct OFAC provenance and grouping remain unchanged.

[!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
ToolDescription
sanctions_screen_nameScreen a person, company, vessel, or aircraft name against every loaded watchlist at once
sanctions_screen_identifierLook up an IMO number, SWIFT/BIC code, wallet address, or passport or national ID number exactly across every loaded watchlist
sanctions_get_designationFetch the full record for one designation by source list and entry ID or published reference number
sanctions_resolve_entityResolve a company name, optionally within a jurisdiction, to ranked GLEIF LEI candidates
sanctions_get_entityFetch the GLEIF Level 1 record for an LEI, with a sanctions cross-reference of its names, LEI, and registration number
sanctions_trace_ownershipTrace an LEI's parents and children, optionally cross-referencing every entity in the graph
sanctions_list_sourcesList the loaded sources with record counts, licenses, and mirror freshness
Resources
ResourceDescription
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://sourcesLoaded sources with counts, plus each mirror's readiness and as-of timestamp
skill://sanctions-screening-guide/SKILL.mdConsumer guide for identity confirmation, ownership continuation, and screening uncertainty

The three sanctions:// data resources are also reachable through the tools, for clients that don't surface resources. The guide is also published in the plugin, npm package, and bundle under skills/sanctions-screening-guide/.

Prompts
PromptDescription
sanctions_vet_counterpartyRun a counterparty due-diligence pass: screen, resolve, trace ownership, summarize

Capability reference

sanctions_screen_name tool
  • name in any script (at most 64 words and 1,024 characters) plus optional sources, entityType, and minScore filters; matchMode is strict (default) or fuzzy. 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 codes uk, usa, uae, and rf. fuzzySources names the lists a fuzzy pass searched; up to 100 hits per page (limit, default 25) with offset
  • Hits carry source, sourceEntryId, the list's published referenceNumber where it has one, matchedName with its matchedNameType, and matchType (exact / strong / approximate); approximate hits add the raw Jaro-Winkler score (0–1) and queryTokenCoverage
  • 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
  • sources names 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 the source record: ofac_sdn, unless the Consolidated record matched alone or better
  • totalAvailable, hasMore, and nextOffset page the rest, and paging reaches every match counted; totalAvailableBasis marks the count exact (strict matched on every selected list) or a lower_bound (a fuzzy pass ran), and a notice asks for a more distinctive word when a list's fuzzy candidate pool reached its budget

sanctions_screen_identifier tool
  • value (an identifier as you hold it) plus optional type (any default, imo, swift_bic, digital_currency_address, passport, national_id) and sources
  • Exact match after normalization, never fuzzy and never scored: spacing, letter case, and - . / are ignored; an IMO number matches with or without its IMO prefix; 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
  • type matches on each list's published label: imo is OFAC Vessel Registration Identification, UK IMO Number, and EU IMO (vessel identification); swift_bic is SWIFT/BIC and SWIFT BIC; digital_currency_address is OFAC Digital Currency Address - ; passport and national_id cover the lists' passport and national-ID labels. any also 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 matchedIdentifiers that matched as published and its sources, 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 tool
  • source (one of the eleven codes above) and entryId: the sourceEntryId from a screening hit, or the reference number the list publishes (UN QDe.004, EU EU.27.28, UK OFSI Group ID 14196). Matched trimmed and case-insensitive, entry ID first; a reference number two designations share fails as reference_ambiguous, naming both. CSL records retain the provider's opaque id; missing entity type remains unknown
  • Returns referenceNumber beside sourceEntryId where 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 as 1955/1957), with circa: true where the source marks one approximate; designationDate is the source's own designation date as YYYY-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 for ofac_consolidated, earliest first. A party on both files can carry a different date on each
  • legalBasis is 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 none
  • features carries 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, with circa: true where OFAC marks it approximate. The EU and UN lists contribute none, and no screening tool matches a feature value. CSL features also retain published restrictions, order flags, end dates, country, notices, and provenance URLs without legal interpretation.

sanctions_resolve_entity tool
  • name in any script (same bound as sanctions_screen_name) plus optional jurisdiction, status, and minScore; matchMode is strict (default), which falls back to a fuzzy pass only when strict finds nothing, or fuzzy; up to 50 candidates per page (limit, default 10) with offset
  • jurisdiction is a country code, which matche

Only the beginning is shown; read the rest in the repo

Ask PopNx