@whiteintel/mcp-server
Advanced tools
+48
-3
@@ -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> | ||
| [](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 @@ | ||
| [](https://modelcontextprotocol.io) | ||
| [](https://whiteintel.dev/developers) | ||
| [](https://whiteintel.dev/coverage) | ||
| [](https://whiteintel.dev/sources) | ||
| [](https://whiteintel.dev/developers) | ||
| [](https://whiteintel.dev/coverage) | ||
| [](https://whiteintel.dev/sources) | ||
| [](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 |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
106176
5.34%824
6.05%238
7.69%4
33.33%