New:Socket for Asana Is Now Available.Learn more
Get Started

@whiteintel/mcp-server

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@whiteintel/mcp-server - npm Package Compare versions

Comparing version
0.7.10
to
0.7.11
+48
-3
index.js

@@ -10,6 +10,6 @@ #!/usr/bin/env node

*
* Data: ~130.7M entities fused across 31 public/semi-public registries — OpenOwnership,
* Data: ~171.2M entities fused across 41 public/semi-public registries — OpenOwnership,
* GLEIF, ICIJ Offshore Leaks, SEC EDGAR, Cyprus DRCOR, sanctions/PEP lists and more —
* cross-source resolved onto one cited identity spine, plus live UK Companies House
* lookups. Entity count read from /api/public/stats on 2026-08-16 (130,735,728, itself a
* lookups. Entity count read from /api/public/stats on 2026-08-23 (171,207,760, itself a
* planner estimate); the live figure is always at whiteintel.dev/api/public/stats, whose

@@ -600,2 +600,46 @@ * source map is rebuilt by counting registries — new sources appear there on their own.

},
// ── Agent-native purchase (the wallet path) ───────────────────────────────────
{
name: "purchase_dossier",
description:
"BUY the full dossier for one entity programmatically — no browser, no Stripe Checkout. Debits your prepaid wallet €2 and returns the complete premium dossier (full UBO chain, filed financials, itemised assets, provenance) in the SAME response. Requires a funded API key (set WHITEINTEL_API_KEY). Idempotent per (buyer, entity): buying the same entity again returns it with NO second charge, so a retry is safe. If the wallet balance is too low you get a structured payment_required result with a top-up URL — a human tops up once at whiteintel.dev/pricing, then you retry and spend from the balance. Get the id from search_entities / resolve. This is the AGENT-NATIVE purchase path; buy_dossier is the human/browser (Stripe Checkout) path.",
inputSchema: {
type: "object",
properties: { id: { type: "string", maxLength: 80, description: "Entity id (uuid) from search_entities / resolve." } },
required: ["id"],
},
handler: async (a) => {
const id = String(a.id ?? "").trim();
if (!id) throw new Error("purchase_dossier needs an entity id (from search_entities / resolve).");
if (!API_KEY) {
return { error: "unauthorized", note: `Set WHITEINTEL_API_KEY to a key whose wallet is funded (top up at ${API_BASE.replace(/\/$/, "")}/pricing). buy_dossier is the browser/Stripe path if no wallet is set up.` };
}
const ctrl = new AbortController();
const timer = setTimeout(() => ctrl.abort(), REQUEST_TIMEOUT_MS);
let res, text;
try {
res = await fetch(`${API_BASE}/api/public/dossier/${encodeURIComponent(id)}/buy`, {
method: "POST",
headers: { accept: "application/json", "content-type": "application/json", "user-agent": "whiteintel-mcp-server", authorization: `Bearer ${API_KEY}` },
body: "{}",
signal: ctrl.signal,
});
text = await res.text();
} catch (e) {
throw new Error(e?.name === "AbortError" ? `request timed out after ${REQUEST_TIMEOUT_MS}ms` : `network error: ${e?.message ?? e}`);
} finally {
clearTimeout(timer);
}
let body;
try { body = JSON.parse(text); } catch { body = text; }
// 402: hand the structured payment requirement back (top-up URL) — do NOT throw; the agent
// or its operator acts on it, then retries. Anything else non-2xx is a real error.
if (res.status === 402) return (body && typeof body === "object") ? body : { error: "payment_required", detail: text };
if (!res.ok) {
const detail = body && typeof body === "object" ? (body.error || body.detail || body.message) : text;
throw new Error(`purchase_dossier failed (${res.status}${detail ? `: ${detail}` : ""}).`);
}
return body;
},
},
];

@@ -627,2 +671,3 @@

get_dossier: { title: "Build a cited dossier", ...READ },
purchase_dossier: { title: "Buy a dossier from your wallet (charges €2)", readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
trace_ownership_path: { title: "Trace ownership to the beneficial owner", ...READ },

@@ -654,3 +699,3 @@ graph_neighbourhood: { title: "Walk the ownership neighbourhood", ...READ },

// npx -y github:Hei33enberg/WhiteIntel-OS
{ name: "whiteintel-mcp-server", version: "0.7.10" },
{ name: "whiteintel-mcp-server", version: "0.7.11" },
{ capabilities: { tools: {} } },

@@ -657,0 +702,0 @@ );

+4
-2
{
"name": "@whiteintel/mcp-server",
"version": "0.7.10",
"version": "0.7.11",
"mcpName": "dev.whiteintel/whiteintel",

@@ -23,3 +23,5 @@ "description": "Model Context Protocol server for WhiteIntel — corporate & offshore ownership intelligence. Look up companies, search entities (companies + people), screen sanctions, and trace ownership chains to the ultimate beneficial owner. Freemium: anonymous free tier, or set WHITEINTEL_API_KEY for your plan.",

"test": "node --test test/lib.test.js test/manifests.test.js",
"smoke": "node test/smoke.mjs"
"smoke": "node test/smoke.mjs",
"check:corpus": "node scripts/sync-corpus.mjs --check",
"sync:corpus": "node scripts/sync-corpus.mjs --sync"
},

@@ -26,0 +28,0 @@ "keywords": [

+27
-10

@@ -9,2 +9,7 @@ <div align="center">

<!-- Cursor one-click install (anonymous remote endpoint, no key) -->
<a href="https://cursor.com/install-mcp?name=whiteintel&config=eyJ1cmwiOiJodHRwczovL3doaXRlaW50ZWwuZGV2L2FwaS9tY3AifQ%3D%3D"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/deeplink/mcp-install-dark.png"><img alt="Add whiteintel MCP server to Cursor" src="https://cursor.com/deeplink/mcp-install-light.png"></picture></a>
[![Add to Replit](https://replit.com/badge?caption=Add%20WhiteIntel%20to%20Replit)](https://replit.com/integrations?mcp=eyJkaXNwbGF5TmFtZSI6IldoaXRlSW50ZWwiLCJiYXNlVXJsIjoiaHR0cHM6Ly93aGl0ZWludGVsLmRldi9hcGkvbWNwIn0%3D)
The corporate-ownership & sanctions intelligence layer for AI agents — built for the agentic era. WhiteIntel turns public-registry and offshore-leak data into MCP-native intelligence primitives — **entity search, semantic discovery, ownership-path traversal, sanctions screening, offshore-exposure detection, and fully cited dossiers** — so any AI agent can investigate a company, trace its ultimate beneficial owner, and flag risk in one conversation. Your agent isn't querying a database — it's conducting an investigation.

@@ -18,5 +23,5 @@

[![MCP](https://img.shields.io/badge/MCP-compatible-7c3aed.svg)](https://modelcontextprotocol.io)
[![Tools](https://img.shields.io/badge/tools-21%20live-00ff7f)](https://whiteintel.dev/developers)
[![Corpus](https://img.shields.io/badge/corpus-130.7M%20entities-2f7d4f)](https://whiteintel.dev/coverage)
[![Sources](https://img.shields.io/badge/sources-31%20fused-2f7d4f)](https://whiteintel.dev/sources)
[![Tools](https://img.shields.io/badge/tools-24%20live-00ff7f)](https://whiteintel.dev/developers)
[![Corpus](https://img.shields.io/badge/corpus-171.2M%20entities-2f7d4f)](https://whiteintel.dev/coverage)
[![Sources](https://img.shields.io/badge/sources-41%20fused-2f7d4f)](https://whiteintel.dev/sources)
[![whiteintel.dev](https://img.shields.io/badge/site-whiteintel.dev-5af082)](https://whiteintel.dev)

@@ -36,3 +41,3 @@

…starts an MCP server with **23 tools** that give any AI agent — Claude Desktop, Cursor, Cline, Windsurf, or your own runtime — **full corporate-ownership intelligence**: search by name or meaning, trace ownership chains to the UBO, screen sanctions across OFAC/EU/UN/UK, detect offshore layering, pull fully cited dossiers with financials and asset layers, and even purchase deeper intelligence through agent-initiated Stripe checkout. Every claim cited to its source, every edge traced to a registry record.
…starts an MCP server with **24 tools** that give any AI agent — Claude Desktop, Cursor, Cline, Windsurf, or your own runtime — **full corporate-ownership intelligence**: search by name or meaning, trace ownership chains to the UBO, screen sanctions across OFAC/EU/UN/UK, detect offshore layering, pull fully cited dossiers with financials and asset layers, and even purchase deeper intelligence through agent-initiated Stripe checkout. Every claim cited to its source, every edge traced to a registry record.

@@ -49,2 +54,4 @@ | Tool | What it does | Category |

| `resolve` | Batch-resolve names or `scheme:value` ids → canonical entity ids + confidence | 📋 Lookup |
| `list_jurisdictions` | Coverage map per country — tier, scope and record depth we hold | 🗺️ Coverage |
| `list_asset_coverage` | Coverage map per asset class — aircraft, vessels, real estate | 🗺️ Coverage |
| `get_dossier` | Structured, fully-cited dossier: identity, ownership/UBO chain, risk, provenance | 📊 Intelligence |

@@ -64,3 +71,3 @@ | `trace_ownership_path` | Walk ownership upward to the ultimate beneficial owner | 📊 Intelligence |

**21 callable tools** — 4 Discovery + 4 Lookup + 4 Intelligence + 2 Graph + 2 Risk + 3 Commerce + 1 Feed + 1 Pricing. All read-only except `buy_dossier` (opens Stripe — money moves only when a human completes it) and `claim_dossier` (redeems an already-paid session). Ids flow between tools: search → get_dossier → trace_ownership_path → get_sanctions.
**24 callable tools** — 4 Discovery + 4 Lookup + 2 Coverage + 4 Intelligence + 2 Graph + 2 Risk + 4 Commerce + 1 Feed + 1 Pricing. All read-only except `buy_dossier` (opens Stripe — money moves only when a human completes it) and `claim_dossier` (redeems an already-paid session). Ids flow between tools: search → get_dossier → trace_ownership_path → get_sanctions.

@@ -126,5 +133,5 @@ ## Quickstart (60 seconds)

**~130.7M entities across 31 fused registries** — every claim cited, every edge traced.
**~171.2M entities across 41 fused registries** — every claim cited, every edge traced.
*Measured 2026-08-16 from [whiteintel.dev/api/public/stats](https://whiteintel.dev/api/public/stats) (`entities` = 130,735,728, itself a planner estimate). That endpoint rebuilds its source map by counting registries, so it is always the authority — and a new source shows up there without anyone editing this file.*
*Measured 2026-08-23 from [whiteintel.dev/api/public/stats](https://whiteintel.dev/api/public/stats) (`entities` = 171,207,760, itself a planner estimate). That endpoint rebuilds its source map by counting registries, so it is always the authority — and a new source shows up there without anyone editing this file.*

@@ -144,3 +151,3 @@ | Source | What | Coverage |

| **OFAC / EU / UN / UK** | Consolidated sanctions lists | 🌍 Live |
| **+ 15 more** | registries, sanctions lists & UBO registers | 🌍 Growing |
| **+ 26 more** | registries, sanctions lists & UBO registers | 🌍 Growing |

@@ -176,3 +183,3 @@ ### Cyprus — what it is, and what it is not

- **Live corpus:** ~130.7M entities across 31 fused registries (measured 2026-08-16). Live counts, always authoritative over this file: [whiteintel.dev/api/public/stats](https://whiteintel.dev/api/public/stats).
- **Live corpus:** ~171.2M entities across 41 fused registries (measured 2026-08-23). Live counts, always authoritative over this file: [whiteintel.dev/api/public/stats](https://whiteintel.dev/api/public/stats).
- **Sources are not uniformly deep.** A registry in the list means we hold *what that registry publishes* — which for some jurisdictions is the officer layer, not ownership. Cyprus is the clearest case (see the scope note above). Never read presence in the source table as ownership coverage.

@@ -209,3 +216,3 @@ - An absent edge means "not yet observed", not "does not exist".

```bash
npx -y @whiteintel/mcp-server # 23 tools, any MCP agent
npx -y @whiteintel/mcp-server # 24 tools, any MCP agent
```

@@ -227,4 +234,14 @@

## Privacy Policy
https://whiteintel.dev/privacy
The WhiteIntel MCP server runs locally and calls only `https://whiteintel.dev` (SSRF-guarded).
It sends the query terms you pass to a tool and, if set, your `WHITEINTEL_API_KEY`. It does not
read your files, your conversation history, or your environment beyond `WHITEINTEL_API_KEY`
and `WHITEINTEL_API_BASE`. Query logs are retained for abuse prevention and are not sold or
shared with third parties. Contact: hello@whiteintel.dev
## License
[MIT](./LICENSE) © whiteintel.dev