# Adversarial Corporate Opacity MCP (`ryanclinton/adversarial-corporate-opacity-mcp`) Actor

Anti-concealment beneficial ownership detection for AI agents via the Model Context Protocol.

- **URL**: https://apify.com/ryanclinton/adversarial-corporate-opacity-mcp.md
- **Developed by:** [ryan clinton](https://apify.com/ryanclinton) (community)
- **Categories:** AI, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event + usage

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Adversarial Corporate Opacity MCP Server

**Anti-concealment beneficial ownership detection** for AI agents via the Model Context Protocol. This MCP server orchestrates **15 Apify actors** across **6 international company registries** and **4 sanctions watchlists** to deliver corporate ownership graph traversal, cross-lingual sanctions screening with transliteration matching, DBSCAN shell company address clustering, Weisfeiler-Leman infrastructure correlation, loopy belief propagation ownership inference, and weighted opacity scoring with **Enhanced Due Diligence (EDD) reporting**.

### What data can you access?

| Data Point | Source | Coverage |
|-----------|--------|----------|
| Global corporate registries | OpenCorporates | 140+ jurisdictions |
| UK company filings and officers | UK Companies House | All UK companies |
| Canadian federal corporations | Canada Corp Search | Federal registry |
| Australian business numbers | Australia ABN Lookup | All ABNs |
| NZ company registrations | NZ Companies Office | All NZ companies |
| Legal entity identifiers | GLEIF LEI | Global LEI database |
| US Treasury sanctions | OFAC Sanctions Search | SDN list |
| Global sanctions and PEPs | OpenSanctions Search | 100+ programs |
| International wanted persons | Interpol Red Notices | Global notices |
| US federal wanted list | FBI Most Wanted | FBI database |
| Domain registration data | WHOIS Lookup | All TLDs |
| DNS records and configuration | DNS Record Lookup | Any domain |
| IP geolocation and ASN | IP Geolocation | Global coverage |
| Certificate transparency logs | crt.sh Search | All certificates |
| Geographic coordinates | Nominatim Geocoder | Global coverage |

### MCP Tools

| Tool | Price | Description |
|------|-------|-------------|
| `unfold_ownership_graph` | $0.04 | BFS traversal of corporate ownership graph across 6 registries with jurisdictional opacity scoring (same 0.1, different 0.3, secrecy 0.5), nominee detection, and formation agent pattern identification. |
| `screen_with_transliteration` | $0.04 | 5-stage cross-lingual name matching against OFAC, OpenSanctions, Interpol, and FBI: Unicode NFKD normalization, Double Metaphone, Caverphone, Jaro-Winkler distance, and token-set ratio with phonetic bonus. |
| `cluster_shell_addresses` | $0.04 | DBSCAN spatial clustering of registered addresses to detect shell company farms. Identifies locations where many entities share the same or nearby addresses with shell probability scores. |
| `correlate_infrastructure` | $0.04 | Detect hidden entity relationships via shared digital infrastructure using Weisfeiler-Leman graph kernel similarity. Shared domains, IPs, and TLS certificates reveal common control. |
| `infer_beneficial_owner` | $0.04 | Infer beneficial owners using loopy belief propagation on a factor graph combining ownership, directorship, address co-location, infrastructure sharing, and sanctions evidence. |
| `compute_entity_opacity_score` | $0.04 | Weighted opacity scoring from 5 concealment factors: ownership depth, jurisdiction risk, address sharing, sanctions proximity, and infrastructure concealment. Returns LOW/MEDIUM/HIGH/EXTREME. |
| `generate_edd_report` | $0.04 | Enhanced Due Diligence report aggregating all findings with severity-based risk scoring across ownership structure, sanctions, registration patterns, digital infrastructure, and jurisdictional complexity. |

### Data Sources

- **OpenCorporates** -- Global corporate registry covering 140+ jurisdictions with company names, officers, and filing status
- **UK Companies House** -- UK company registrations, officers, persons with significant control, and filing history
- **Canada Corporation Search** -- Canadian federal corporate registry with directors and status
- **Australia ABN Lookup** -- Australian Business Number registry with entity types and GST status
- **NZ Companies Office** -- New Zealand company registrations, NZBN numbers, and director details
- **GLEIF LEI** -- Legal Entity Identifier database with parent/child corporate relationships
- **OFAC Sanctions Search** -- US Treasury SDN list including entity names, aliases, and identification numbers
- **OpenSanctions Search** -- Consolidated global sanctions, PEPs, and watchlists from 100+ programs
- **Interpol Red Notices** -- International wanted persons notices
- **FBI Most Wanted** -- US federal wanted persons database
- **WHOIS Lookup** -- Domain registration details for digital infrastructure correlation
- **DNS Record Lookup** -- DNS configuration revealing shared infrastructure and hosting patterns
- **IP Geolocation** -- IP address mapping for geographic infrastructure analysis
- **crt.sh Search** -- Certificate transparency logs for TLS certificate relationship discovery
- **Nominatim Geocoder** -- Address geocoding for spatial clustering analysis

### How the scoring works

The server implements five analytical frameworks targeting different concealment techniques.

**Ownership Graph Traversal** uses BFS across 6 registries with per-hop opacity penalties: 0.1 for same-jurisdiction hops, 0.3 for cross-jurisdiction hops, and 0.5 for secrecy jurisdiction hops. Circular ownership structures are detected and flagged. Nominee directors and formation agent patterns are identified from officer/director name analysis.

**Cross-Lingual Transliteration Screening** applies a 5-stage pipeline to defeat name evasion: (1) Unicode NFKD normalization with diacritic stripping, (2) Double Metaphone phonetic encoding, (3) Caverphone encoding, (4) Jaro-Winkler distance with prefix bonus, (5) token-set ratio with phonetic bonus when metaphone matches. This catches Cyrillic lookalikes, diacritic evasion, and name reordering.

**DBSCAN Address Clustering** groups registered addresses spatially to detect shell company farms -- locations where many apparently unrelated entities share the same or nearby addresses. Shell probability scores are computed per cluster.

**Weisfeiler-Leman Infrastructure Correlation** builds a graph of shared digital assets (domains, IPs, TLS certificates) and computes graph kernel similarity to identify entities under common control despite separate corporate identities.

**Loopy Belief Propagation** combines all evidence types on a factor graph to infer beneficial ownership probabilities, even when ownership chains are deliberately obscured.

| Opacity Level | Score Range | Meaning |
|--------------|------------|---------|
| LOW | 0-1.0 | Transparent structure, standard due diligence |
| MEDIUM | 1.0-2.0 | Some complexity, enhanced documentation recommended |
| HIGH | 2.0-3.0 | Significant concealment indicators, EDD required |
| EXTREME | 3.0+ | Multiple concealment techniques detected, escalate |

### How to connect this MCP server

#### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "adversarial-corporate-opacity": {
      "url": "https://adversarial-corporate-opacity-mcp.apify.actor/mcp"
    }
  }
}
````

#### Programmatic (HTTP)

```bash
curl -X POST https://adversarial-corporate-opacity-mcp.apify.actor/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"unfold_ownership_graph","arguments":{"entity_name":"Acme Holdings Ltd","jurisdiction":"KY"}},"id":1}'
```

This MCP server also works with **Cursor**, **Windsurf**, **Cline**, and any other MCP-compatible client.

### Use cases for corporate opacity intelligence

#### AML/KYC Beneficial Ownership Verification

Trace multi-layered corporate structures across jurisdictions with `unfold_ownership_graph`. Detect nominee directors, formation agent patterns, and circular ownership structures that indicate deliberate concealment.

#### Sanctions Evasion Detection

Screen entities with `screen_with_transliteration` to catch adversarial name variations that evade standard exact-match screening. The 5-stage pipeline detects Cyrillic lookalikes, diacritic evasion, and name reordering.

#### Shell Company Farm Detection

Use `cluster_shell_addresses` to identify registered agent addresses hosting suspiciously many entities. DBSCAN clustering reveals physical address farms used to create the appearance of separate businesses.

#### Hidden Relationship Discovery

Apply `correlate_infrastructure` to detect entities sharing digital infrastructure (domains, IPs, TLS certificates) despite having no visible corporate connection. Shared infrastructure often indicates common beneficial ownership.

#### Enhanced Due Diligence Reporting

Generate comprehensive EDD reports with `generate_edd_report` for compliance files. Reports aggregate ownership structure, sanctions screening, registration patterns, digital infrastructure, and jurisdictional analysis with severity-based scoring.

#### Investigative Journalism and Research

Trace offshore corporate structures and identify hidden beneficial owners using the combination of ownership traversal, infrastructure correlation, and belief propagation inference.

### How much does it cost?

This MCP server uses **pay-per-event pricing** at **$0.04 per tool call** with no subscription fees.

The **Apify Free plan** includes $5 of monthly platform credits -- enough for **125 tool calls** at no cost.

**Example costs:**

- Ownership graph traversal for a Cayman entity: $0.04
- Cross-lingual sanctions screening for 10 names: $0.04
- Complete 7-tool EDD investigation: $0.28

### How it works

1. Your AI agent calls a tool via MCP (e.g., `unfold_ownership_graph` for an entity)
2. The server dispatches parallel queries to relevant registries and watchlists (3-15 actors depending on tool)
3. Corporate records, sanctions matches, and infrastructure data are collected
4. Mathematical frameworks (BFS traversal, DBSCAN, Weisfeiler-Leman, belief propagation) process the data
5. A structured JSON response is returned with opacity scores, graph structures, and findings

Jurisdiction-specific actors are selected based on the entity's registration. Response time is 30-120 seconds.

### FAQ

**Q: How many jurisdictions are covered?**
A: Direct registry access for UK, Australia, Canada, and New Zealand. OpenCorporates extends coverage to 140+ jurisdictions. GLEIF LEI provides global entity identification.

**Q: Can this detect all beneficial owners?**
A: The system infers likely beneficial owners from available public data. Ownership structures using trusts, bearer shares, or jurisdictions with no public registry may not be fully penetrable. The opacity score quantifies how transparent the structure is.

**Q: How does transliteration screening differ from standard sanctions matching?**
A: Standard screening uses exact or basic fuzzy matching. The 5-stage transliteration pipeline catches intentional evasion techniques: diacritic variations, character substitutions, phonetic equivalents, and name reordering.

**Q: Is it legal to use this data?**
A: All data sources are publicly available government registries and open databases. See [Apify's guide on web scraping legality](https://blog.apify.com/is-web-scraping-legal/).

**Q: Does this replace compliance software?**
A: It provides investigative intelligence to supplement compliance workflows. Regulatory compliance decisions should involve qualified compliance professionals.

**Q: Can I run this on a batch of entities?**
A: Each tool call handles one entity or name list. For batch processing, use the Apify API to run multiple tool calls in parallel.

### Related MCP servers

| MCP Server | Focus |
|-----------|-------|
| [counterparty-due-diligence-mcp](https://apify.com/ryanclinton/counterparty-due-diligence-mcp) | Broad KYB screening with Counterparty Risk Score |
| [commonwealth-corporate-registry-mcp](https://apify.com/ryanclinton/commonwealth-corporate-registry-mcp) | Multi-jurisdiction registry search and cross-reference |
| [corporate-political-exposure-mcp](https://apify.com/ryanclinton/corporate-political-exposure-mcp) | Political exposure and influence mapping |

### Integrations

This MCP server runs on the **Apify platform** and supports:

- **Scheduling** -- Set up recurring ownership and sanctions monitoring via Apify Schedules
- **Webhooks** -- Trigger alerts when opacity scores change or new sanctions matches appear
- **API access** -- Call tools directly via the Apify API for compliance system integration
- **Dataset export** -- Export EDD reports as JSON for audit trail documentation

# Actor input Schema

## Actor input object example

```json
{}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("ryanclinton/adversarial-corporate-opacity-mcp").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("ryanclinton/adversarial-corporate-opacity-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call ryanclinton/adversarial-corporate-opacity-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ryanclinton/adversarial-corporate-opacity-mcp",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Adversarial Corporate Opacity MCP",
        "description": "Anti-concealment beneficial ownership detection for AI agents via the Model Context Protocol.",
        "version": "1.0",
        "x-build-id": "pbsCYQnNuiTUMoE6t"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ryanclinton~adversarial-corporate-opacity-mcp/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ryanclinton-adversarial-corporate-opacity-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ryanclinton~adversarial-corporate-opacity-mcp/runs": {
            "post": {
                "operationId": "runs-sync-ryanclinton-adversarial-corporate-opacity-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ryanclinton~adversarial-corporate-opacity-mcp/run-sync": {
            "post": {
                "operationId": "run-sync-ryanclinton-adversarial-corporate-opacity-mcp",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {}
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
