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. A screening aid, not a compliance determination. MCP server.
- ✓Open-source license (Apache-2.0)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
- ✓Documented (README)
git clone https://github.com/cyanheads/sanctions-screening-mcp-server{
"mcpServers": {
"sanctions-screening": {
"command": "node",
"args": ["/path/to/sanctions-screening-mcp-server/dist/index.js"]
}
}
}MCP Servers overview
<div align="center"> <h1>@cyanheads/sanctions-screening-mcp-server</h1> <p><b>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. A screening aid, not a compliance determination.</b> <div>6 Tools • 3 Resources • 1 Prompt</div> </p> </div> <div align="center"> [](./CHANGELOG.md) [](./LICENSE) [](https://modelcontextprotocol.io/) [](https://www.typescriptlang.org/) [](https://bun.sh/) [](https://github.com/cyanheads/sanctions-screening-mcp-server/releases/latest/download/sanctions-screening-mcp-server.mcpb) [](https://cursor.com/en/install-mcp?name=sanctions-screening-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvc2FuY3Rpb25zLXNjcmVlbmluZy1tY3Atc2VydmVyIl19) [](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22sanctions-screening-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fsanctions-screening-mcp-server%22%5D%7D) [](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) </div> <div align="center"> **Public Hosted Server:** [https://sanctions-screening.caseyjhand.com/mcp](https://sanctions-screening.caseyjhand.com/mcp) </div> --- > [!IMPORTANT] > **This is a screening aid, not legal or compliance certification.** Every tool returns *potential matches* with a transparent score and source provenance — never a verdict. A hit means "review this candidate against the official source"; an empty result never means "cleared." Real sanctions compliance is a legal process — it requires human review and a qualified compliance determination. This server feeds that process; it does not perform it, and its output is not a compliance record. ## Overview `sanctions-screening-mcp-server` turns the world's open sanctions data plus the global legal-entity registry into one screening-and-resolution workflow, answered offline and fuzzy-matched. It screens a name against the consolidated US (OFAC), EU, UK, and UN sanctions lists at once, and resolves legal entities against the GLEIF Legal Entity Identifier (LEI) database with corporate-ownership tracing. All sources are bulk-downloadable, keyless, and clear for redistribution. The server mirrors them to a local SQLite + FTS5 index and serves matches from that mirror — no live API key, no per-request rate limit on the hot path. The agent sees screening verbs (`screen_name`, `resolve_entity`, `trace_ownership`); which list answered a query surfaces only as provenance on each hit. The matching model is transparent by design: strict token matching first (exact-normalized, then all-tokens-present via FTS5), with a scored Jaro-Winkler + phonetic fuzzy fallback. Approximate hits carry the **raw Jaro-Winkler similarity (0–1)** — a real measurement, never a fabricated "confidence percentage." ## Tools Six tools organized around two workflows — screen a name against the watchlists, and resolve a legal entity to its global identifier and ownership graph: | Tool | Description | |:---|:---| | `sanctions_screen_name` | Screen a name (person, company, vessel, aircraft) against all loaded watchlists at once — OFAC SDN + Consolidated, EU, UK, UN — alias- and fuzzy-aware. Returns scored potential matches with source list, program, designation date, and the matched alias. | | `sanctions_get_designation` | Fetch the full record for one sanctions designation by source list + entry ID: all aliases, identifiers, addresses, dates/places of birth, nationalities, program, legal basis, and designation date. | | `sanctions_resolve_entity` | Resolve a company / organization name (+ optional jurisdiction) to ranked candidate GLEIF LEIs. Turns a free-text counterparty name into a stable global identifier. | | `sanctions_get_entity` | Fetch the full GLEIF Level 1 record for one LEI — legal name, trading names, addresses, registration status, jurisdiction — plus a sanctions cross-reference screened on the legal name. | | `sanctions_trace_ownership` | Trace the GLEIF Level 2 corporate-ownership graph for an LEI (parents and/or children, BFS to a bounded depth), optionally screening every node for beneficial-ownership screening. | | `sanctions_list_sources` | List the loaded watchlists and GLEIF datasets with record counts, source URLs, licenses, and the mirror's readiness and as-of timestamps. | ### `sanctions_screen_name` The 80% entry point — "is this entity on a watchlist?" - Fans out across all four sanctions lists (OFAC SDN + Consolidated, EU, UK, UN) in one call; the source surfaces only as provenance per hit - Alias-aware: matches against every published primary name, a.k.a., and f.k.a., not just the canonical name - Strict mode (default): exact-normalized equality, then all-tokens-present via FTS5 — handles word-order swaps and missing interior words with no fuzzy library - Fuzzy mode (opt-in, or automatic when strict finds nothing): adds Jaro-Winkler similarity and Double-Metaphone phonetic matching for transliteration-class misses - Hits labeled `exact` / `strong` / `approximate`; approximate hits carry the raw Jaro-Winkler score (0–1) plus `queryTokenCoverage` — how many query tokens the candidate explains, which ranks candidates that one shared exact token pins at the same score - Filter by entity type, source list subset, similarity floor (`minScore`), and result limit - Paged: `totalAvailable` and `hasMore` report matches beyond the returned page and `nextOffset` retrieves them, with `totalAvailableBasis` marking that count exact (strict) or a scanned-set floor (fuzzy) - On an empty result, returns guidance on how to broaden — and states explicitly that no match is **not** a clearance --- ### `sanctions_get_designation` The drill-in after `sanctions_screen_name` surfaces a candidate. - Full normalized record by `source` + `entryId` (the `sourceEntryId` from a screen hit) - All published aliases, structured identifiers (passport / national ID / tax / registration), addresses, dates and places of birth, nationalities, sanctioning program, legal basis, and designation date - Preserves source sparsity — missing fields mean the source omitted them; the record is never padded with fabricated data --- ### `sanctions_resolve_entity` The bridge from a free-text counterparty name to a stable LEI that the entity tools key off. - Resolves a company / organization name to ranked GLEIF LEI candidates - Optional ISO 3166-1 alpha-2 jurisdiction filter and registration-status filter (`issued` default, `lapsed`, or `any`) - Same strict-then-fuzzy matching model as name screening; approximate hits carry the raw Jaro-Winkler score and the same `queryTokenCoverage` count - Matches against legal names and published other/trading names - Paged on the same contract as `sanctions_screen_name` — `totalAvailable`, `totalAvailableBasis`, `hasMore`, `nextOffset` --- ### `sanctions_get_entity` Who is this legal entity — plus a watchlist cross-reference in the same call. - Full GLEIF Level 1 record: legal name, other/trading names, legal and headquarters addresses, registration status, jurisdiction, registration authority and ID, last-update date - Cross-references the entity's legal name against all loaded watchlists (strict match only — auto-fuzzy on a generic legal name would flood the result with single-common-token false positives) - `screeningStatus` says whether that cross-reference actually ran: an empty hit list under `not_ready` means the sanctions mirror was unavailable, not that nothing matched - A screened entity carries `sanctionsScreen` — `totalAvailable`, `totalAvailableBasis`, `hasMore` — since the hit list is capped at twenty-five; re-screen the legal name with `sanctions_screen_name` for the full set - LEI input is regex-validated (20 chars: 18 alphanumerics + 2 check digits) --- ### `sanctions_trace_ownership` Beneficial-ownership screening — the cross-source workflow that single-list tools can't do. - Traverses the GLEIF Level 2 ownership graph breadth-first to a bounded depth (1–5) - `direction`: walk `parents` (who owns it), `children` (what it owns), or `both` - Returns nodes (with role and depth) and directed ownership edges with relationship type - `screenNodes: true` screens every entity in the graph against all watchlists — "is anyone in this ownership chain sanctioned?" - Per-node screen is strict-only and reports `screenedNodeCount` / `flaggedNodeCount` so a caller can see coverage at a glance - Reports whether the graph is the full known picture: `complete`, `truncated` (further relationships exist past the requested depth), and `missingEntityLeis` (nodes with no GLEIF Level 1 record, which carry their LEI where a legal name would be) - `screeningStatus` separates a completed node screen from one never requested and one the sanctions mirror could not run; each screened node carries `sanctionsScreen` — `totalAvailable`, `totalAvailableBasis`, `hasMore` — since its hit list is capped at ten --- ## Resources and prompts | Type | Name | Description | |:---|:---|:---| | Resource | `sanction
What people ask about sanctions-screening-mcp-server
What is cyanheads/sanctions-screening-mcp-server?
+
cyanheads/sanctions-screening-mcp-server is mcp servers for the Claude AI ecosystem. 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. A screening aid, not a compliance determination. MCP server. It has 1 GitHub stars and its last recorded update is dated 2026-08-25.
How do I install sanctions-screening-mcp-server?
+
You can install sanctions-screening-mcp-server by cloning the repository (https://github.com/cyanheads/sanctions-screening-mcp-server) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is cyanheads/sanctions-screening-mcp-server safe to use?
+
Our security agent has analyzed cyanheads/sanctions-screening-mcp-server and assigned a Trust Score of 95/100 (tier: Verified). See the full breakdown of passed checks and flags on this page.
Who maintains cyanheads/sanctions-screening-mcp-server?
+
cyanheads/sanctions-screening-mcp-server is maintained by cyanheads. The last recorded GitHub activity is dated 2026-08-25, with 9 open issues.
Are there alternatives to sanctions-screening-mcp-server?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy sanctions-screening-mcp-server to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/cyanheads-sanctions-screening-mcp-server)<a href="https://claudewave.com/repo/cyanheads-sanctions-screening-mcp-server"><img src="https://claudewave.com/api/badge/cyanheads-sanctions-screening-mcp-server" alt="Featured on ClaudeWave: cyanheads/sanctions-screening-mcp-server" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!