Financial Crime Screening MCP Server
Financial crime screening MCP server that connects your AI agent or compliance workflow to 13 live data sources for AML/CFT due diligence. Give it an entity name and it returns a structured AML Risk Tier — LOW, MEDIUM, HIGH, or PROHIBITED — with dimensional scores, SAR filing recommendations, and supporting evidence. Purpose-built for banks, crypto exchanges, money service businesses, and compliance teams that need audit-ready risk classifications on demand.
Maintenance Pulse
90/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| entity-screen | Full AML/CFT screening across sanctions, watchlists, and corporate registries. | $0.15 |
| sanctions-deep-check | Deep sanctions verification against OFAC SDN and OpenSanctions. | $0.08 |
| criminal-watchlist | Scan Interpol Red Notices and FBI Most Wanted databases. | $0.08 |
| pep-analysis | Check FARA foreign agent registrations and FEC campaign finance for PEP indicators. | $0.08 |
| shell-detection | Analyze company for shell indicators, nominee directors, and haven jurisdictions. | $0.10 |
| fi-verify | Verify FDIC insurance status and regulatory standing. | $0.08 |
| proximity-score | Calculate adverse signal convergence across all databases. | $0.15 |
| aml-classification | Full 13-actor AML risk tier classification (LOW/MEDIUM/HIGH/PROHIBITED). | $0.30 |
Example: 100 events = $15.00 · 1,000 events = $150.00
Connect to your AI agent
Add this MCP server to Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.
https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp{
"mcpServers": {
"financial-crime-screening-mcp": {
"url": "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp"
}
}
}Documentation
Financial crime screening MCP server that connects your AI agent or compliance workflow to 13 live data sources for AML/CFT due diligence. Give it an entity name and it returns a structured AML Risk Tier — LOW, MEDIUM, HIGH, or PROHIBITED — with dimensional scores, SAR filing recommendations, and supporting evidence. Purpose-built for banks, crypto exchanges, money service businesses, and compliance teams that need audit-ready risk classifications on demand.
The server runs on Apify's Standby infrastructure and exposes 8 MCP tools via a persistent /mcp endpoint. Each tool dispatches parallel requests to the underlying actor fleet — sanctions databases, criminal watchlists, foreign agent registries, corporate registries, and financial regulators — then applies a five-dimensional AML scoring engine to produce quantified, explainable risk output. No subscriptions. No monthly minimums. You pay per tool call.
What data can you access?
| Data Point | Source | Example |
|---|---|---|
| 📋 US Treasury SDN and blocked persons | OFAC Sanctions | "Meridian Trade LLC" — exact match, score 1.00 |
| 🌐 Global sanctions, PEPs, and watchlists | OpenSanctions (100+ lists) | EU consolidated list, UN Security Council |
| 🚨 International wanted persons | Interpol Red Notices | Charges: wire fraud, money laundering |
| 🔴 US federal wanted persons | FBI Most Wanted | Fugitive status, last known location |
| 🏛️ Foreign agent registrations | FARA DOJ Registry | Foreign principal, country of origin |
| 🗳️ Political contribution records | FEC Campaign Finance | $485,000 in contributions — PEP indicator |
| 🏢 Corporate registry (140+ jurisdictions) | OpenCorporates (200M+ records) | Jurisdiction: VG, status: dissolved |
| 🔑 Legal entity identification | GLEIF LEI Database | LEI: 549300ABCD1234567890 |
| 🤝 Nonprofit 990 financial data | ProPublica Nonprofit Explorer | IRS revocation status |
| ⚠️ Consumer financial complaints | CFPB Complaint Database | 73 complaints — pattern of harm |
| 🏦 US bank institution verification | FDIC Bank Data | Active/inactive insurance status |
| 📑 SEC regulatory filings | SEC EDGAR | 8-K, SC 13D, enforcement filings |
| 📈 Insider transaction disclosures | SEC Form 4 Insider Trading | Sale/buy ratio — 87% sales |
Why use Financial Crime Screening MCP Server?
Manual AML screening for a single entity requires opening six or more government portals, running name searches with spelling variants, recording results in a spreadsheet, and repeating the process periodically. A trained compliance analyst spends 45-90 minutes per entity on initial onboarding. With high-volume customer pipelines or transaction monitoring queues, that throughput does not scale.
Vendors like Dow Jones Risk and Refinitiv World-Check charge $15,000-60,000 per year for subscription access to similar data. This MCP gives you programmatic access to the same primary sources — OFAC, Interpol, FBI, FARA, OpenSanctions, SEC, FDIC, CFPB — for a few dollars per screen, with no minimum commitment.
- Scheduling — run periodic re-screening on watchlist changes or on a compliance calendar via Apify's built-in scheduler
- API access — trigger screenings from Python, JavaScript, Claude Desktop, Cursor, or any MCP-compatible client
- Parallel execution — all actor calls within each tool run in parallel, returning results in seconds rather than minutes
- Monitoring — get Slack or email alerts when screening runs complete or return unexpected results
- Integrations — connect results to case management systems, Google Sheets, HubSpot, or webhooks
Features
- Eight focused MCP tools covering the full AML screening workflow: entity screen, sanctions deep check, criminal watchlist scan, PEP analysis, shell detection, financial institution verification, proximity scoring, and full AML classification
- 13 live data sources queried in real time — results always reflect the current published state of each database, not a cached copy
- Five-dimensional AML scoring engine allocating points across Sanctions Exposure (0-35), Corporate Transparency (0-25), Political Exposure (0-20), Financial Regulatory Standing (0-10), and Proximity to Crime (0-10) for a total score of 0-100
- Automatic PROHIBITED escalation — any direct sanctions match with confidence >= 0.95 triggers PROHIBITED tier regardless of the composite score, with a SAR filing mandate
- Fuzzy name matching — OFAC and OpenSanctions hits are separated into exact matches (score >= 0.95) and fuzzy matches (0.50-0.95) for prioritized review queues
- Shell company detection using seven textual indicators (registered agent, nominee, bearer shares, trust company, corporate services, shelf company, formation agent) across OpenCorporates records
- Shell haven jurisdiction check against 12 known offshore jurisdictions: Panama (PA), British Virgin Islands (VG), Cayman Islands (KY), Belize (BZ), Seychelles (SC), Samoa (WS), Vanuatu (VU), Marshall Islands (MH), Bermuda (BM), Jersey (JE), Guernsey (GG), Isle of Man (IM)
- Proximity-to-crime convergence scoring — each adverse signal category that activates adds 17 points to a 0-100 convergence score; four or more categories converging triggers CRITICAL classification
- PEP detection via FEC threshold logic — campaign contributions above $10,000 trigger potential PEP flag; above $100,000 trigger confirmed PEP classification
- FARA foreign agent mapping — identifies registered foreign agents with their foreign principals and country of origin
- Nonprofit money laundering flag — IRS-revoked nonprofit status is treated as a distinct AML red flag
- Spending limit enforcement — every tool checks
Actor.charge()before execution and returns a structured error if the per-run budget ceiling is reached - Stateless Streamable HTTP transport — each POST to
/mcpinstantiates a freshMcpServerwith no session state, enabling horizontal scaling
Use cases for financial crime screening
Bank customer onboarding and KYC
Compliance teams at banks and credit unions use comprehensive_entity_screen at account opening to check new applicants against OFAC, OpenSanctions, Interpol, and FBI simultaneously. The structured output feeds directly into the onboarding case file, reducing analyst time from 60 minutes to under 5 minutes per customer while producing an auditable record.
Crypto exchange AML and FinCEN compliance
Cryptocurrency exchanges subject to FinCEN's MSB rules and the EU's MiCA regulation use aml_risk_classification before enabling withdrawals or high-value trading. The PROHIBITED tier output, combined with the sarRequired flag and SAR narrative guidance, satisfies recordkeeping obligations under the Bank Secrecy Act.
Correspondent banking due diligence
Respondent banks seeking to establish correspondent relationships require enhanced due diligence under FATF Recommendation 13. financial_institution_verify cross-checks FDIC insurance status, corporate registration, and CFPB complaint density to surface institutions that may be impersonating regulated banks or have patterns of consumer harm.
Transaction monitoring and SAR investigation
Compliance investigators using proximity_to_crime_score can triage transaction monitoring alerts by convergence level before committing analyst time to full investigation. A CRITICAL convergence score (four or more adverse signal categories) escalates directly to SAR preparation; a NONE score clears the alert without manual review.
PEP screening for high-value accounts
Private banks and wealth managers required to identify politically exposed persons use pep_influence_analysis to check FARA registrations and FEC contribution totals. The tool returns a PEP classification with supporting evidence and a recommendation for enhanced due diligence, source-of-wealth verification, and senior management approval.
Shell company investigation and beneficial ownership
Corporate investigators and FinCEN examiners use corporate_shell_detection to identify potential layering structures before processing wire transfers. The tool produces a shell risk score (0-100) with itemized indicator findings, supporting beneficial ownership documentation requests under the CDD Rule.
How to screen an entity for financial crime
- Connect your MCP client — Add the server URL
https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcpto Claude Desktop, Cursor, Windsurf, or any MCP-compatible AI agent. - Choose the right tool — Start with
comprehensive_entity_screenfor initial onboarding, oraml_risk_classificationwhen you need a full documented risk determination with dimensional scores. - Run the screening — Pass the entity name and type (individual/company). The server dispatches up to 13 parallel actor calls and typically returns results within 30-90 seconds.
- Review the AML Risk Tier — The response includes a tier (LOW/MEDIUM/HIGH/PROHIBITED), a numeric score, dimensional breakdowns, a SAR recommendation, and all supporting evidence for your compliance file.
Input parameters
This is an MCP server — there are no traditional actor input fields. Each tool accepts its own parameters as defined below.
Tool parameters
| Tool | Parameter | Type | Required | Default | Description |
|---|---|---|---|---|---|
comprehensive_entity_screen | entity_name | string | Yes | — | Name of the person or company to screen |
comprehensive_entity_screen | entity_type | enum | No | unknown | individual, company, or unknown |
comprehensive_entity_screen | country | string | No | — | Two-letter country code hint (e.g. US, GB) |
sanctions_deep_check | entity_name | string | Yes | — | Name to check against OFAC and OpenSanctions |
sanctions_deep_check | include_aliases | boolean | No | true | Search known aliases and transliterations |
criminal_watchlist_scan | name | string | Yes | — | Name to search in Interpol and FBI databases |
criminal_watchlist_scan | nationality | string | No | — | Nationality hint to narrow Interpol search |
pep_influence_analysis | name | string | Yes | — | Person or organization name |
pep_influence_analysis | include_campaign_finance | boolean | No | true | Include FEC campaign finance records |
corporate_shell_detection | company_name | string | Yes | — | Company name to analyze for shell indicators |
corporate_shell_detection | jurisdiction | string | No | — | Known jurisdiction of the company |
financial_institution_verify | institution_name | string | Yes | — | Name of the financial institution |
financial_institution_verify | include_complaints | boolean | No | true | Include CFPB consumer complaint analysis |
proximity_to_crime_score | entity_name | string | Yes | — | Entity to score for signal convergence |
proximity_to_crime_score | entity_type | enum | No | unknown | individual, company, or unknown |
aml_risk_classification | entity_name | string | Yes | — | Entity name to classify |
aml_risk_classification | entity_type | enum | No | unknown | individual, company, or unknown |
aml_risk_classification | country | string | No | — | Country code hint |
Connection configuration examples
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"financial-crime-screening": {
"url": "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
}
}
}
Cursor / Windsurf / Cline (.cursor/mcp.json or equivalent):
{
"mcpServers": {
"financial-crime-screening": {
"url": "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
}
}
}
Direct HTTP call for individual tool:
curl -X POST "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "aml_risk_classification",
"arguments": {
"entity_name": "Meridian Trade & Finance LLC",
"entity_type": "company",
"country": "PA"
}
},
"id": 1
}'
Usage tips
- Match entity type to the search — pass
entity_type: "individual"for persons to skip LEI, OpenCorporates, and FDIC lookups, which reduces cost and latency. - Use
comprehensive_entity_screenfor initial onboarding and reserveaml_risk_classificationfor final risk determinations that require a documented dimensional score. - Country code hints narrow results — passing
country: "VG"when you already know an entity is BVI-registered improves match precision across corporate registries. - Batch via the Apify API — for high-volume screening queues, call the MCP tools programmatically from Python or JavaScript with
Promise.allacross multiple entities. - Store the full JSON response — the structured output with dimensional scores is designed to serve as the analytical record in a compliance case file.
Output example
Below is a representative response from aml_risk_classification for a hypothetical high-risk entity.
{
"entity": "Meridian Trade & Finance LLC",
"entityType": "company",
"amlRiskTier": "PROHIBITED",
"riskScore": 82,
"directSanctionsMatch": true,
"sarRequired": true,
"dimensions": {
"sanctionsWatchlist": {
"score": 35,
"max": 35,
"findings": [
"1 EXACT sanctions match — OFAC/OpenSanctions. PROHIBITED.",
"3 fuzzy sanctions match(es) — manual review required"
]
},
"corporateTransparency": {
"score": 20,
"max": 25,
"findings": [
"Shell company indicators detected: registered agent, nominee",
"Registered in known shell company jurisdiction: VG",
"Entity incorporated only 2 months ago — high-risk age for AML"
]
},
"politicalExposure": {
"score": 12,
"max": 20,
"findings": [
"Registered foreign agent under FARA — principals: Government of Ruritania"
]
},
"financialRegulatory": {
"score": 5,
"max": 10,
"findings": [
"FDIC record shows INACTIVE/CLOSED institution — entity may be impersonating a bank"
]
},
"proximityCrime": {
"score": 10,
"max": 10,
"findings": [
"CRITICAL CONVERGENCE: 4 adverse signal categories (sanctions, foreign agent, shell indicators, consumer complaints) — strong proximity to financial crime"
]
}
},
"recommendation": "TRANSACTION MUST BE BLOCKED. File Suspicious Activity Report (SAR) within 30 days. Do not tip off the subject. Escalate to BSA/AML officer immediately.",
"actorsUsed": 13
}
Output fields
| Field | Type | Description |
|---|---|---|
entity | string | Entity name as submitted |
entityType | string | individual, company, or unknown |
amlRiskTier | string | LOW, MEDIUM, HIGH, or PROHIBITED |
riskScore | number | Composite AML score 0-100 |
directSanctionsMatch | boolean | True if any sanctions hit has confidence >= 0.95 or exact match |
sarRequired | boolean | True for HIGH and PROHIBITED tiers |
dimensions.sanctionsWatchlist.score | number | Points scored in sanctions dimension (max 35) |
dimensions.sanctionsWatchlist.findings | array | Human-readable finding strings for each signal |
dimensions.corporateTransparency.score | number | Points scored in corporate transparency dimension (max 25) |
dimensions.corporateTransparency.findings | array | Shell indicators, jurisdiction flags, status issues |
dimensions.politicalExposure.score | number | Points scored in PEP dimension (max 20) |
dimensions.politicalExposure.findings | array | FARA registrations, FEC contribution totals |
dimensions.financialRegulatory.score | number | Points scored in regulatory standing dimension (max 10) |
dimensions.financialRegulatory.findings | array | FDIC status, CFPB complaint density, insider trading ratio |
dimensions.proximityCrime.score | number | Signal convergence score (max 10) |
dimensions.proximityCrime.findings | array | Convergence level and active category list |
recommendation | string | Tier-specific compliance action (block, file SAR, enhanced DD, standard processing) |
actorsUsed | number | Number of underlying actors called in this run |
For sanctions_deep_check, additional fields include blocked (boolean), summary (verdict string), exactMatches (array), and fuzzyMatches (array). For proximity_to_crime_score, additional fields include proximityScore (0-100), convergenceLevel (NONE/LOW/MODERATE/HIGH/CRITICAL), activeSignals (count), and breakdown (per-category array).
How much does it cost to screen entities for financial crime?
Financial Crime Screening MCP Server uses pay-per-event pricing — you pay $0.045 per tool call. There is no subscription, no monthly minimum, and no charge for idle standby time.
| Scenario | Tool calls | Cost per call | Total cost |
|---|---|---|---|
| Quick sanctions check | 1 | $0.045 | $0.045 |
| Initial onboarding (screen + shell + PEP) | 3 | $0.045 | $0.135 |
| Full AML classification (13 actors) | 1 | $0.045 | $0.045 |
| Daily re-screening of 100 entities | 100 | $0.045 | $4.50 |
| Monthly batch of 1,000 entities | 1,000 | $0.045 | $45.00 |
You can set a maximum spending limit per run to control costs. The server checks your budget ceiling before each tool execution and returns a structured error if the limit is reached rather than continuing to charge.
Apify's free tier includes $5 of monthly platform credits — enough to run approximately 110 full AML classifications with no payment required.
Compare this to Dow Jones Risk Center or Refinitiv World-Check at $15,000-60,000 per year for subscription access to the same primary data sources. With this MCP, most compliance teams running 500-2,000 screenings per month spend $22-$90/month with no commitment.
Financial crime screening using the API
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
# Start the MCP server actor in standby mode
actor_client = client.actor("ryanclinton/financial-crime-screening-mcp")
# Call the AML classification tool via HTTP (the actor runs as a persistent server)
import urllib.request
import json
url = "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_APIFY_TOKEN"
}
payload = {
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "aml_risk_classification",
"arguments": {
"entity_name": "Meridian Trade & Finance LLC",
"entity_type": "company",
"country": "PA"
}
},
"id": 1
}
req = urllib.request.Request(url, json.dumps(payload).encode(), headers)
with urllib.request.urlopen(req) as response:
result = json.loads(response.read())
content = json.loads(result["result"]["content"][0]["text"])
print(f"Entity: {content['entity']}")
print(f"AML Risk Tier: {content['amlRiskTier']}")
print(f"Risk Score: {content['riskScore']}/100")
print(f"SAR Required: {content['sarRequired']}")
print(f"Recommendation: {content['recommendation']}")
JavaScript
const MCP_URL = "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp";
const API_TOKEN = "YOUR_API_TOKEN";
async function screenEntity(entityName, entityType = "unknown") {
const response = await fetch(MCP_URL, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${API_TOKEN}`
},
body: JSON.stringify({
jsonrpc: "2.0",
method: "tools/call",
params: {
name: "aml_risk_classification",
arguments: { entity_name: entityName, entity_type: entityType }
},
id: 1
})
});
const envelope = await response.json();
const result = JSON.parse(envelope.result.content[0].text);
console.log(`Entity: ${result.entity}`);
console.log(`AML Risk Tier: ${result.amlRiskTier} (score: ${result.riskScore}/100)`);
console.log(`Direct Sanctions Match: ${result.directSanctionsMatch}`);
console.log(`SAR Required: ${result.sarRequired}`);
console.log(`Recommendation: ${result.recommendation}`);
for (const [dim, data] of Object.entries(result.dimensions)) {
console.log(` ${dim}: ${data.score}/${data.max} — ${data.findings[0]}`);
}
return result;
}
await screenEntity("Meridian Trade & Finance LLC", "company");
cURL
# Screen an entity for AML risk
curl -X POST "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "aml_risk_classification",
"arguments": {
"entity_name": "Meridian Trade & Finance LLC",
"entity_type": "company"
}
},
"id": 1
}'
# Run a quick sanctions check only
curl -X POST "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "sanctions_deep_check",
"arguments": {
"entity_name": "Viktor Petrov",
"include_aliases": true
}
},
"id": 2
}'
# List all available tools
curl -X POST "https://ryanclinton--financial-crime-screening-mcp.apify.actor/mcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-d '{"jsonrpc": "2.0", "method": "tools/list", "params": {}, "id": 3}'
How Financial Crime Screening MCP Server works
Actor fleet and parallel dispatch
The MCP server is implemented in TypeScript using @modelcontextprotocol/sdk version 1.17.5 with Express 5 as the HTTP host. When a tool call arrives at the /mcp endpoint, getServer() instantiates a fresh McpServer and StreamableHTTPServerTransport in stateless mode (no sessionIdGenerator). This allows horizontal scaling without shared session state.
Each tool calls runActorsParallel() from actor-client.ts, which wraps Promise.all() over an array of runActor() calls. Each runActor() invokes ApifyClient.actor(name).call(input, { waitSecs: 120, memory: 256 }) and extracts the default dataset. Failed actor calls return empty arrays rather than throwing, so a single source outage does not abort the entire screen. The 13 underlying actors cover: ofac-sanctions-search, opensanctions-search, interpol-red-notices, fbi-wanted-search, fara-foreign-agents, fec-campaign-finance, opencorporates-search, gleif-lei-lookup, nonprofit-explorer, edgar-filing-search, sec-insider-trading, cfpb-consumer-complaints, and fdic-bank-search.
Five-dimensional AML scoring engine
scoring.ts implements computeAMLRisk() which scores five independent dimensions and sums them to a capped total of 100 points.
Dimension 1 — Sanctions and Watchlist Exposure (max 35 points): Exact sanctions matches (confidence >= 0.95 or match === "exact") add 30 points and set directSanctionsMatch = true. Fuzzy matches add up to 15 additional points (5 per match). Interpol Red Notice hits add 15 points. FBI Most Wanted hits add 15 points. Any direct match triggers automatic PROHIBITED tier override regardless of the composite total.
Dimension 2 — Corporate Transparency (max 25 points): Missing corporate records for non-individuals score 12 points. Shell company textual indicators in OpenCorporates records (checked via case-insensitive JSON.stringify scan against 7 terms) score 8 points. Registration in one of 12 shell haven jurisdictions scores 6 points. Dissolved or inactive company status scores 5 points. Companies incorporated within the last 3 months score 5 points; within 12 months score 2 points. Missing LEI for registered companies scores 4 points. IRS-revoked nonprofit status scores 6 points.
Dimension 3 — Political Exposure (max 20 points): FARA registration scores 12 points plus 4 additional points for more than 3 foreign principal records. FEC contributions above $100,000 score 10 points; above $10,000 score 5 points; any FEC record scores 2 points. The totalDonations figure is computed by summing amount, contribution_receipt_amount, or total fields across all FEC records.
Dimension 4 — Financial Regulatory Standing (max 10 points): More than 5 SEC filings of enforcement-interest form types (8-K, SC 13D, 10-K/A) score 3 points. An insider trading portfolio where more than 80% of transactions are sales scores 4 points as a potential flight or front-running signal. More than 50 CFPB complaints score 3 points; more than 10 score 1 point. An inactive or closed FDIC record scores 5 points as a bank impersonation indicator.
Dimension 5 — Proximity to Crime (max 10 points): Counts how many of 6 adverse signal categories are active (sanctions, Interpol, FBI, FARA, >20 CFPB complaints, shell indicators) and converts convergence count to score: 1 category = 2 pts, 2 = 4 pts, 3 = 7 pts, 4+ = 10 pts. This dimension captures that co-occurrence of multiple weak signals is a stronger AML indicator than any single strong signal.
Risk tier thresholds and SAR logic
tierFromScore() maps the composite total to a tier: >= 71 or directSanctionsMatch === true → PROHIBITED; >= 46 → HIGH; >= 21 → MEDIUM; else LOW. sarRequired is set to true for both PROHIBITED and HIGH tiers. Each tier maps to a specific compliance recommendation string, with PROHIBITED returning the full BSA obligation text including the 30-day SAR filing window and the prohibition on tipping off the subject.
Tips for best results
-
Screen at onboarding and re-screen on events. Initial screening catches known bad actors. Schedule
comprehensive_entity_screenon a 90-day cycle and triggersanctions_deep_checkimmediately when OFAC publishes a new SDN update. -
Use entity type to reduce latency and cost. Passing
entity_type: "individual"skips corporate registry lookups (OpenCorporates, GLEIF, FDIC, Nonprofit Explorer), cutting the actor pool from 13 to 9 and reducing response time by 20-40%. -
Treat fuzzy sanctions matches as review required, not cleared. The
sanctions_deep_checktool separates exact matches from fuzzy matches with confidence 0.50-0.95. Fuzzy matches require manual analyst review — do not auto-clear them. -
Combine with the Sanctions Network Analysis MCP for ownership graphs. This server screens the named entity directly. For detecting sanctions exposure through beneficial ownership chains and corporate intermediaries, pipe the output into ryanclinton/sanctions-evasion-network-mcp.
-
Use
proximity_to_crime_scorefor triage,aml_risk_classificationfor final determination. The proximity tool runs 6-7 actors and returns a convergence score in 15-30 seconds. Reserve the full classification (13 actors, 30-90 seconds) for entities that fail triage or require a documented decision. -
Log the full JSON response, not just the tier. Regulatory examiners and auditors expect to see the supporting evidence for AML decisions. The dimensional scores and findings arrays constitute the analytical record.
-
Set a spending limit for bulk runs. When screening large batches programmatically, set
maxTotalChargeUsdin your Apify run configuration. The server checks the limit before each tool call and exits cleanly when reached.
Combine with other Apify actors
| Actor | How to combine |
|---|---|
| Sanctions Network Analysis MCP | Pass entity names from HIGH-tier screens into the network MCP to trace sanctions exposure through ownership chains and corporate intermediaries |
| Export Control Screening MCP | Combine with financial crime screening for dual-use technology exporters requiring both AML and EAR/OFAC trade compliance clearance |
| OFAC Sanctions Search | Run direct OFAC queries with custom parameters when you need raw SDN data without the AML scoring layer |
| OpenSanctions Search | Query the 100+ consolidated watchlists directly for bulk screening pipelines that pre-filter before calling the full MCP |
| Interpol Red Notices | Pull Interpol Red Notice details directly for law enforcement and investigative workflows outside the AML context |
| GLEIF LEI Lookup | Verify LEI registration and ownership hierarchy for corporate counterparties before initiating wire transfers |
| FARA Foreign Agents | Map foreign agent networks and foreign principal relationships for geopolitical risk assessments |
Limitations
- US-centric regulatory coverage. FDIC, CFPB, FEC, and FARA are US government sources. Non-US financial institutions and foreign PEPs may have limited coverage. Supplement with country-specific regulator checks for cross-border transactions.
- No real-time OFAC API integration. The underlying actor queries published OFAC data. There is a latency between an SDN list update and when the actor reflects that change. For true real-time OFAC compliance at the transaction level, pair this tool with a dedicated OFAC API subscription.
- Fuzzy matching requires human review. Matches with confidence 0.50-0.95 are returned for review but not auto-escalated. The tool cannot determine on its own whether a fuzzy match represents the same person or a coincidental name similarity.
- Not a substitute for legal counsel. The SAR filing recommendation is a compliance guidance string based on the AML scoring output. Actual SAR filing obligations are determined by applicable law and institutional policy, not by this tool's output alone.
- Corporate transparency limited to OpenCorporates coverage. OpenCorporates covers 200M+ records across 140 jurisdictions but some jurisdictions have limited or delayed data. Entities registered in jurisdictions not covered by OpenCorporates will trigger the "no corporate record found" scoring penalty.
- No biometric or document verification. This tool works with entity names only. It does not perform identity document verification, photo matching, or biometric checks required for full KYC under some regulatory frameworks.
- Parallel actor calls are capped at 120-second timeout. If a slow underlying actor (e.g., EDGAR during peak load) times out, that dimension returns empty results rather than failing the entire screen. The output will note
actorsUsedwhich may be less than expected. - Not designed for natural-person privacy-restricted jurisdictions. Querying individuals in jurisdictions with strong natural person data privacy laws (e.g., certain EU member states) through OpenCorporates and GLEIF may surface limited results. OFAC and OpenSanctions queries are compliant with applicable sanctions screening exemptions.
Integrations
- Apify API — Trigger screenings programmatically, manage spending limits, and retrieve run history from your compliance platform
- Webhooks — Post screening results to your case management system, compliance workflow engine, or alerting platform when each run completes
- Zapier — Route PROHIBITED-tier results to a Slack channel or Jira ticket for immediate analyst review
- Make — Build automated periodic re-screening workflows that trigger on watchlist update events
- Google Sheets — Log screening results to a compliance register spreadsheet for audit trail purposes
- LangChain / LlamaIndex — Use this MCP as a compliance tool within AI agent pipelines for automated onboarding, transaction review, or investigation workflows
Troubleshooting
-
Tool returns empty dimension data despite a known high-risk entity — One or more underlying actors may have timed out. Check
actorsUsedin the response. If it is less than expected, retry the run. The 120-second per-actor timeout is a hard limit — slow government APIs during peak hours occasionally exceed it. -
Fuzzy sanctions matches appearing for a common name — Common names (e.g., "John Smith") will generate many false positives in fuzzy matching. Narrow the search with a country code hint (
country: "US") or usesanctions_deep_checkwithinclude_aliases: falseto reduce noise. The compliance decision on fuzzy matches always requires human review. -
spending limit reachederror on first call — Your Apify account'smaxTotalChargeUsdfor the run is set too low. Increase the spending limit in your Apify run settings or programmatic call parameters. Each tool call costs $0.045. -
Server returns 405 on GET requests — The MCP endpoint only accepts POST requests per the JSON-RPC 2.0 spec. Use POST for all tool calls and
tools/listdiscovery. GET to/mcpintentionally returns a 405 with an instructional error message. -
Results differ between two runs for the same entity — All databases are queried live. OFAC updates the SDN list without notice. OpenSanctions ingests new source data continuously. Results reflect the state of each database at query time, so variation between runs is expected and by design.
Responsible use
- This server accesses only publicly available government data: OFAC, OpenSanctions, Interpol, FBI, FARA, FEC, SEC, CFPB, FDIC, GLEIF, and OpenCorporates.
- AML screening results are analytical aids, not legal determinations. Compliance decisions must be made by qualified personnel under applicable law.
- Comply with GDPR, CCPA, and applicable data protection law when storing screening results that include personal information.
- Do not use this tool to screen individuals for purposes unrelated to legitimate compliance, due diligence, or risk management workflows.
- SAR filing obligations and timelines are governed by BSA/FinCEN regulations, not by the recommendation strings returned by this tool.
- For guidance on web scraping legality, see Apify's guide.
FAQ
How does financial crime screening with this MCP differ from paid compliance platforms like World-Check or Dow Jones Risk Center? This MCP queries the same primary sources (OFAC SDN, Interpol, FBI, FARA, FEC, OpenSanctions) that commercial platforms aggregate, at a fraction of the cost. Commercial platforms add proprietary editorial content, enhanced data linkage, and SLA guarantees. This tool is best suited for teams that need programmatic, AI-integrated AML screening without a six-figure annual contract.
How accurate is the fuzzy name matching for sanctions screening?
OFAC matching uses the built-in fuzzy matching in the underlying ofac-sanctions-search actor, which applies Levenshtein distance and transliteration to catch variant spellings. Hits with confidence >= 0.95 are classified as exact matches. Hits between 0.50 and 0.95 are returned as fuzzy matches requiring human review. The false positive rate for common names is non-trivial and manual review is always required for fuzzy results.
How current are the watchlist databases? All databases are queried live at the time of each tool call. There is no cached snapshot. Results reflect the published state of OFAC, OpenSanctions, Interpol, FBI, and other sources at query time. OFAC typically updates the SDN list within hours of a new designation.
Can I use financial crime screening results as the basis for a SAR filing?
The aml_risk_classification tool returns dimensional scores, evidence findings, and a compliance recommendation that form the analytical basis for a SAR narrative. The tool explicitly surfaces sarRequired: true for HIGH and PROHIBITED tiers. However, the actual SAR filing must be prepared and submitted by a qualified BSA/AML officer in accordance with FinCEN Form 114 requirements.
Is it legal to use this tool for AML compliance screening? Yes. This tool queries publicly available government databases and is designed to support legitimate compliance workflows. OFAC screening is a legal obligation for US financial institutions under the Bank Secrecy Act. For guidance on data access legality, see Apify's guide on web scraping legality.
How many entities can I screen per hour? Each tool call runs up to 13 actors in parallel and typically completes in 30-90 seconds. In practice, 40-80 full AML classifications per hour is achievable from a single client. For higher throughput, run multiple concurrent MCP calls using the Apify API.
Does this MCP support batch screening of multiple entities?
The MCP protocol is designed for single-entity tool calls. For batch screening, use the Apify API to dispatch multiple concurrent HTTP requests to the MCP endpoint. A Python asyncio loop or JavaScript Promise.all across entity lists is the recommended pattern.
What happens when an underlying actor is unavailable or times out?
Each runActor() call is wrapped in a try-catch that returns an empty array on failure. A timed-out actor does not abort the overall screening. The response includes actorsUsed so you can see how many sources contributed. If a critical dimension (e.g., sanctions) returns empty due to timeout, treat the result as inconclusive and rerun.
Can I schedule periodic re-screening for ongoing monitoring? Yes. Use Apify's scheduler to trigger re-screening runs on a daily, weekly, or custom calendar. Combine with webhooks to push results to your case management system automatically when screenings complete.
Does the shell company detection cover beneficial ownership?
The corporate_shell_detection tool identifies shell company indicators in publicly available corporate records — nominee directors, registered agents, bearer shares, shell haven jurisdictions. It does not resolve the full beneficial ownership chain. For structured ownership mapping and UBO research, supplement with ryanclinton/sanctions-evasion-network-mcp.
What does the PROHIBITED tier mean in practice? PROHIBITED is triggered by a direct sanctions match (OFAC or OpenSanctions confidence >= 0.95) or a composite risk score above 70. The recommendation text mirrors BSA obligations: block the transaction, file a SAR within 30 days, do not tip off the subject, escalate to the BSA/AML officer immediately.
How is the proximity-to-crime score different from the overall AML risk score?
The proximity score (0-100, from proximity_to_crime_score tool) measures only signal convergence — how many of 6 adverse categories are simultaneously active — weighted at 17 points per category. The AML risk score (0-100, from aml_risk_classification) is a weighted composite across all 5 dimensions where sanctions exposure carries the most weight (max 35 points). The proximity score is a faster, cheaper triage signal; the AML risk score is the full documented determination.
Help us improve
If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:
- Go to Account Settings > Privacy
- Enable Share runs with public Actor creators
This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.
Support
Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom data source additions, enterprise integrations, or white-label compliance deployments, reach out through the Apify platform.
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
Bulk Email Verifier
Verify email deliverability at scale. MX record validation, SMTP mailbox checks, disposable and role-based detection, catch-all flagging, and confidence scoring. No external API costs.
GitHub Repository Search
Search GitHub repositories by keyword, language, topic, stars, forks. Sort by stars, forks, or recently updated. Returns metadata, topics, license, owner info, URLs. Free API, optional token for higher limits.
Website Content to Markdown
Convert any website to clean Markdown for RAG pipelines, LLM training, and AI apps. Crawls pages, strips boilerplate, preserves headings, tables, and code blocks. GFM support.
Website Tech Stack Detector
Detect 100+ web technologies on any website. Identifies CMS, frameworks, analytics, marketing tools, chat widgets, CDNs, payment systems, hosting, and more. Batch-analyze multiple sites with version detection and confidence scoring.
Ready to try Financial Crime Screening MCP Server?
Start for free on Apify. No credit card required.
Open on Apify Store