@easysolutions906/mcp-ofac 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/FUNDING.yml +1 -0
- package/README.md +143 -0
- package/logo.svg +11 -0
- package/package.json +5 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
github: easysolutions906
|
package/README.md
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# MCP OFAC Sanctions Screening
|
|
2
|
+
|
|
3
|
+
A [Model Context Protocol](https://modelcontextprotocol.io) (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.
|
|
4
|
+
|
|
5
|
+
## Why this exists
|
|
6
|
+
|
|
7
|
+
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.
|
|
8
|
+
|
|
9
|
+
## Tools (5 total)
|
|
10
|
+
|
|
11
|
+
| Tool | Description |
|
|
12
|
+
|------|-------------|
|
|
13
|
+
| `ofac_screen` | Screen a name with fuzzy matching. Returns scored matches with confidence levels (exact/strong/partial/weak). Optionally filter by type, DOB, and country. |
|
|
14
|
+
| `ofac_screen_batch` | Screen up to 100 names in one call. Each name can include type, DOB, and country for improved accuracy. |
|
|
15
|
+
| `ofac_entity` | Get full details of an SDN entry by UID — aliases, addresses, IDs, programs, DOB, nationalities, vessel info. |
|
|
16
|
+
| `ofac_search` | Search/browse the SDN list by keyword, entity type, or sanctions program. |
|
|
17
|
+
| `ofac_stats` | List statistics — entries by type, program, top countries, data freshness. |
|
|
18
|
+
|
|
19
|
+
## Data
|
|
20
|
+
|
|
21
|
+
- **18,712 entries** from the OFAC SDN list (published 03/13/2026)
|
|
22
|
+
- **Entity types**: 9,521 entities, 7,394 individuals, 1,455 vessels, 342 aircraft
|
|
23
|
+
- **73 sanctions programs** (RUSSIA, SDGT, IRAN, CUBA, DPRK, CYBER2, etc.)
|
|
24
|
+
- Data updates available via `npm run build-data`
|
|
25
|
+
|
|
26
|
+
## Matching Algorithm
|
|
27
|
+
|
|
28
|
+
Multi-strategy fuzzy matching pipeline:
|
|
29
|
+
|
|
30
|
+
1. **Jaro-Winkler similarity** (40%) — handles transpositions and typos
|
|
31
|
+
2. **Token-set matching** (30%) — handles word reordering ("BANK OF IRAN" vs "IRAN BANK")
|
|
32
|
+
3. **Double Metaphone phonetic** (20%) — catches spelling variations of same-sounding names
|
|
33
|
+
4. **Exact substring** (10%) — partial name containment
|
|
34
|
+
5. **Exact token boost** — single-name queries like "PUTIN" match "Vladimir Vladimirovich PUTIN"
|
|
35
|
+
6. **DOB/country boost** — cross-reference date of birth and nationality to reduce false positives
|
|
36
|
+
|
|
37
|
+
Every result includes a confidence score, match type classification, and detailed breakdown explaining why it matched.
|
|
38
|
+
|
|
39
|
+
## Install
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npx @easysolutions906/mcp-ofac
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Claude Desktop
|
|
46
|
+
|
|
47
|
+
Add to your `claude_desktop_config.json`:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"mcpServers": {
|
|
52
|
+
"ofac": {
|
|
53
|
+
"command": "npx",
|
|
54
|
+
"args": ["-y", "@easysolutions906/mcp-ofac"]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Cursor
|
|
61
|
+
|
|
62
|
+
Add to `.cursor/mcp.json`:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"mcpServers": {
|
|
67
|
+
"ofac": {
|
|
68
|
+
"command": "npx",
|
|
69
|
+
"args": ["-y", "@easysolutions906/mcp-ofac"]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## REST API
|
|
76
|
+
|
|
77
|
+
Set `PORT` env var to run as an HTTP server:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
PORT=3000 STRIPE_SECRET_KEY=sk_live_... ADMIN_SECRET=your_secret node src/index.js
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
| Method | Endpoint | Description |
|
|
84
|
+
|--------|----------|-------------|
|
|
85
|
+
| POST | `/screen` | Screen a single name |
|
|
86
|
+
| POST | `/screen/batch` | Screen multiple names (max 100) |
|
|
87
|
+
| GET | `/entity/:uid` | Get full SDN entry details |
|
|
88
|
+
| GET | `/search` | Search/browse the SDN list |
|
|
89
|
+
| GET | `/programs` | List all sanctions programs |
|
|
90
|
+
| GET | `/stats` | Data statistics |
|
|
91
|
+
| POST | `/checkout` | Create Stripe checkout session for paid plans |
|
|
92
|
+
| GET | `/data-info` | Data freshness and record counts |
|
|
93
|
+
|
|
94
|
+
### Example
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
curl -X POST https://your-server.com/screen \
|
|
98
|
+
-H 'Content-Type: application/json' \
|
|
99
|
+
-d '{"name": "PUTIN", "country": "Russia"}'
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"matchCount": 1,
|
|
105
|
+
"matches": [{
|
|
106
|
+
"entity": {
|
|
107
|
+
"name": "Vladimir Vladimirovich PUTIN",
|
|
108
|
+
"sdnType": "Individual",
|
|
109
|
+
"programs": ["RUSSIA-EO14024"],
|
|
110
|
+
"title": "President of the Russian Federation"
|
|
111
|
+
},
|
|
112
|
+
"score": 0.86,
|
|
113
|
+
"matchType": "strong",
|
|
114
|
+
"matchedOn": "alias",
|
|
115
|
+
"matchedName": "Vladimir PUTIN"
|
|
116
|
+
}],
|
|
117
|
+
"listVersion": "03/13/2026",
|
|
118
|
+
"screenedAt": "2026-03-15T17:27:07.651Z"
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Pricing
|
|
123
|
+
|
|
124
|
+
| Plan | Screens/day | Batch | Rate | Price |
|
|
125
|
+
|------|------------|-------|------|-------|
|
|
126
|
+
| Free | 10 | 5 | 5/min | $0 |
|
|
127
|
+
| Starter | 100 | 25 | 15/min | $4.99/mo |
|
|
128
|
+
| Pro | 1,000 | 50 | 60/min | $29.99/mo |
|
|
129
|
+
| Business | 5,000 | 100 | 200/min | $99.99/mo |
|
|
130
|
+
| Enterprise | 50,000 | 100 | 500/min | $299.99/mo |
|
|
131
|
+
|
|
132
|
+
## Audit Trail
|
|
133
|
+
|
|
134
|
+
Every response includes `listVersion` (OFAC publish date) and `screenedAt` (ISO timestamp) for compliance documentation.
|
|
135
|
+
|
|
136
|
+
## Transport
|
|
137
|
+
|
|
138
|
+
- **stdio** (default) — for local use with Claude Desktop and Cursor
|
|
139
|
+
- **HTTP** — set `PORT` env var for Streamable HTTP mode on `/mcp`
|
|
140
|
+
|
|
141
|
+
## Disclaimer
|
|
142
|
+
|
|
143
|
+
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.
|
package/logo.svg
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500">
|
|
2
|
+
<rect width="500" height="500" rx="60" fill="#991b1b"/>
|
|
3
|
+
<!-- Shield -->
|
|
4
|
+
<path d="M250 80 L370 140 L370 280 Q370 360 250 420 Q130 360 130 280 L130 140 Z" fill="none" stroke="#ffffff" stroke-width="20" stroke-linejoin="round"/>
|
|
5
|
+
<!-- Magnifying glass inside shield -->
|
|
6
|
+
<circle cx="240" cy="230" r="55" fill="none" stroke="#ffffff" stroke-width="16"/>
|
|
7
|
+
<line x1="278" y1="270" x2="320" y2="315" stroke="#ffffff" stroke-width="18" stroke-linecap="round"/>
|
|
8
|
+
<!-- Check mark -->
|
|
9
|
+
<polyline points="210,230 235,255 275,200" fill="none" stroke="#ffffff" stroke-width="14" stroke-linecap="round" stroke-linejoin="round"/>
|
|
10
|
+
<text x="250" y="460" text-anchor="middle" font-family="Arial, Helvetica, sans-serif" font-weight="bold" font-size="42" fill="#ffffff">OFAC</text>
|
|
11
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@easysolutions906/mcp-ofac",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "OFAC SDN sanctions screening API with fuzzy matching - screen names against the Treasury Department SDN list",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -28,5 +28,9 @@
|
|
|
28
28
|
"fast-xml-parser": "^5.2.0",
|
|
29
29
|
"stripe": "^20.4.1",
|
|
30
30
|
"zod": "^3.24.0"
|
|
31
|
+
},
|
|
32
|
+
"funding": {
|
|
33
|
+
"type": "github",
|
|
34
|
+
"url": "https://github.com/sponsors/easysolutions906"
|
|
31
35
|
}
|
|
32
36
|
}
|