SanctionsAI — compliance & verification toolkit for AI agents
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
> Your agent is about to send USDC to a stranger. **Is that stranger sanctioned?**
> 782 OFAC crypto wallets · 19,086 sanctioned names · 16 embargoed jurisdictions.
> No API key. No signup. 30-second setup. Free & open source.
SanctionsAI gives any AI agent three capabilities it can't provide itself:
| Layer | What | Status |
|---|---|---|
| 🛡️ **Compliance** | OFAC sanctions screen, KYA, transaction risk score, disputes | ✅ **Live — real OFAC data** |
| 📧 **Email** | Disposable verification inbox (receive OTP/magic links) | ✅ Live |
| 📱 **SMS** | Rentable phone numbers (receive SMS/OTP) | ✅ Live (mock free, 5sim/Twilio paid) |
It exposes all of these through **three surfaces** — MCP tools (for Claude Code / Cursor / Hermes), an HTTP API (for any agent), and a CLI (for you). Same core, same data.
---
Why this exists
Agents are starting to pay for things (x402, AP2, ACP, Coinbase AgentKit). But **every payment rail assumes a human is watching**. If your agent autonomously pays a wallet that's on the OFAC Specially Designated Nationals list, **that's your legal problem** — and the big payment infra players (OpenAI, Stripe, Coinbase) explicitly do not handle per-jurisdiction sanctions screening, Know-Your-Agent, or agent-transaction fraud signals. That's the gap this fills.
---
Quick start (30 seconds)
Option A — use it from an MCP client (Claude Code / Cursor)
Now your agent can call sanctions_check, risk_score, kya_verify, dispute_open, create_inbox, fetch_code, create_number, fetch_sms, release_number, list_inboxes.
> **Note:** the PyPI package is sanctions-mcp (the name SanctionsAI was taken). The Python import name is still SanctionsAI.
Option B — use it as an HTTP API
Option C — use it from the CLI
---
The compliance layer (the part that matters)
Four tools, called **before** an agent trusts or pays a counterparty:
| Tool | When to call | Returns |
|---|---|---|
| sanctions_check(name, wallet, country) | Cheapest check. Call first. | {matches, clean} |
| risk_score(counterparty, amount, ...) | Right before authorizing payment | {score 0-100, recommendation: allow/review/decline} |
| kya_verify(agent_id, evidence) | Before trusting another agent | {trust_score, verified, flags} |
| dispute_open(transaction_id, reason) | When a paid transaction went bad | {dispute_id, escalation_at} |
Where the data comes from (all public, free, no key)
| Source | What | Refresh |
|---|---|---|
| **vile/ofac-sdn-list** (GitHub releases) | 782 multi-chain crypto addresses (ETH/USDT/TRX/XBT/...) | daily |
| **US Treasury OFAC sdn.csv** | 19,086 sanctioned individuals & entities | as published |
| Embargoed jurisdictions set | 16 ISO-2 codes under comprehensive OFAC/UN/EU sanctions | tracked manually |
Lists are cached locally (~/.agentmail/cache/, 24h TTL) and refresh from source. If the network is down, a stale cache is used and status() reports degraded: true so you **know** screening is against older data rather than failing silently.
Providers (swappable backend)
The osint provider does exact + token-subset name matching, exact case-insensitive wallet matching, and ISO-2 country matching. Every match carries a confidence so you can decide how hard to block.
---
The other two layers (verification toolkit)
**Email** — a disposable inbox an agent can use to sign up and receive OTP/magic-link verifications (backed by Mail.tm). create_inbox() → address → fetch_code() → OTP.