OFAC Sanctions Screening — Fuzzy SDN List Matching

Created By
easysolutions9063 months ago
Screen names against the US Treasury OFAC SDN list with advanced fuzzy matching. 18,700+ sanctioned entities. Jaro-Winkler, phonetic, and token-set algorithms. Essential for KYC/AML compliance.
Overview

MCP OFAC Sanctions Screening

A Model Context Protocol (MCP) server for screening names against the US Treasury OFAC SDN (Specially Designated Nationals) list. Production-grade fuzzy matching with Jaro-Winkler, phonetic, and token-set algorithms.

Why this exists

Every company processing USD transactions is legally required to screen against the OFAC sanctions list. Penalties for non-compliance start at $356,579 per violation. Enterprise screening tools cost $10,000-100,000/year. This server gives you the same capability for a fraction of the cost.

Tools (5 total)

ToolDescription
ofac_screenScreen a name with fuzzy matching. Returns scored matches with confidence levels (exact/strong/partial/weak). Optionally filter by type, DOB, and country.
ofac_screen_batchScreen up to 100 names in one call. Each name can include type, DOB, and country for improved accuracy.
ofac_entityGet full details of an SDN entry by UID — aliases, addresses, IDs, programs, DOB, nationalities, vessel info.
ofac_searchSearch/browse the SDN list by keyword, entity type, or sanctions program.
ofac_statsList statistics — entries by type, program, top countries, data freshness.

Data

  • 18,712 entries from the OFAC SDN list (published 03/13/2026)
  • Entity types: 9,521 entities, 7,394 individuals, 1,455 vessels, 342 aircraft
  • 73 sanctions programs (RUSSIA, SDGT, IRAN, CUBA, DPRK, CYBER2, etc.)
  • Data updates available via npm run build-data

Matching Algorithm

Multi-strategy fuzzy matching pipeline:

  1. Jaro-Winkler similarity (40%) — handles transpositions and typos
  2. Token-set matching (30%) — handles word reordering ("BANK OF IRAN" vs "IRAN BANK")
  3. Double Metaphone phonetic (20%) — catches spelling variations of same-sounding names
  4. Exact substring (10%) — partial name containment
  5. Exact token boost — single-name queries like "PUTIN" match "Vladimir Vladimirovich PUTIN"
  6. DOB/country boost — cross-reference date of birth and nationality to reduce false positives

Every result includes a confidence score, match type classification, and detailed breakdown explaining why it matched.

Install

npx @easysolutions906/mcp-ofac

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "ofac": {
      "command": "npx",
      "args": ["-y", "@easysolutions906/mcp-ofac"]
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "ofac": {
      "command": "npx",
      "args": ["-y", "@easysolutions906/mcp-ofac"]
    }
  }
}

REST API

Set PORT env var to run as an HTTP server:

PORT=3000 STRIPE_SECRET_KEY=sk_live_... ADMIN_SECRET=your_secret node src/index.js
MethodEndpointDescription
POST/screenScreen a single name
POST/screen/batchScreen multiple names (max 100)
GET/entity/:uidGet full SDN entry details
GET/searchSearch/browse the SDN list
GET/programsList all sanctions programs
GET/statsData statistics
POST/checkoutCreate Stripe checkout session for paid plans
GET/data-infoData freshness and record counts

Example

curl -X POST https://your-server.com/screen \
  -H 'Content-Type: application/json' \
  -d '{"name": "PUTIN", "country": "Russia"}'
{
  "matchCount": 1,
  "matches": [{
    "entity": {
      "name": "Vladimir Vladimirovich PUTIN",
      "sdnType": "Individual",
      "programs": ["RUSSIA-EO14024"],
      "title": "President of the Russian Federation"
    },
    "score": 0.86,
    "matchType": "strong",
    "matchedOn": "alias",
    "matchedName": "Vladimir PUTIN"
  }],
  "listVersion": "03/13/2026",
  "screenedAt": "2026-03-15T17:27:07.651Z"
}

Pricing

PlanScreens/dayBatchRatePrice
Free1055/min$0
Starter1002515/min$4.99/mo
Pro1,0005060/min$29.99/mo
Business5,000100200/min$99.99/mo
Enterprise50,000100500/min$299.99/mo

Audit Trail

Every response includes listVersion (OFAC publish date) and screenedAt (ISO timestamp) for compliance documentation.

Transport

  • stdio (default) — for local use with Claude Desktop and Cursor
  • HTTP — set PORT env var for Streamable HTTP mode on /mcp

Disclaimer

This tool is provided for informational and screening purposes only. It does not constitute legal advice. Compliance decisions remain the responsibility of the user. Always consult qualified legal counsel for sanctions compliance matters.

Server Config

{
  "mcpServers": {
    "ofac": {
      "command": "npx",
      "args": [
        "-y",
        "@easysolutions906/mcp-ofac"
      ]
    }
  }
}
Project Info
Created At
3 months ago
Updated At
3 months ago
Author Name
easysolutions906
Star
-
Language
-
License
-
Category

Recommend Servers

View All
Bring your real authenticated browser session to AI coding agents. Local-first MCP server + Chrome MV3 extension. No cloud. No telemetry.
@Cubenest

peek records the user's actual logged-in browser (DOM via rrweb, console events, network metadata, optional response bodies via opt-in Deep capture) through a Chrome MV3 extension. The extension ships events through a native-messaging stdio bridge to a local MCP server (peek-mcp), which persists them to a SQLite database at ~/.peek/sessions.db. AI coding agents (Claude Code, Cursor, Cline, Windsurf) read sessions from the database via 10 MCP tools: Tool What it does list_recent_sessions List recently recorded sessions (id, origin, ts, event count). get_session_summary LLM-readable narrative summary of a session. get_session_console_errors Console errors recorded in a session. get_session_network_errors Failed/notable network requests in a session. get_user_action_before_error Last N user actions before a console error. generate_playwright_repro Generate a runnable Playwright test from a session. get_dom_snapshot Reconstruct the DOM at a given timestamp. query_dom_history Timeline of attribute/text changes for a selector. request_authorization Side-panel consent for write actions (Level 3). execute_action Dispatch a UI action (gated by permission level + destructive blocklist). Why local-first matters Every other "browser session for AI" tool ships to a vendor cloud. peek's SQLite + extension live on the user's machine — no remote endpoints, no telemetry. The privacy policy (docs/peek/PRIVACY_POLICY.md) is the source of truth. Install # 1. Add the MCP server to Claude Code claude mcp add peek -- npx -y @peekdev/mcp # 2. Install the Chrome extension from the Chrome Web Store # (link added once the CWS listing is approved)

a day ago
Crevio

2 days ago