MCPサーバー

WhiteIntel — Ownership Intelligence

dev.whiteintel/whiteintel

このMCPでできること

Resolves companies and people and maps ownership, beneficial ownership, sanctions, offshore exposure, financials, corporate filings, and related asset records.

buy_dossier
Start a one-off dossier purchase via guest Stripe Checkout — no WhiteIntel account needed (Stripe collects an email for delivery). Pick a tier ('standard' €39: full UBO chain + financial history · 'premium' €99: additionally itemised assets) and optionally a bulk pack ('5'/'25'), plus the entity_id the report is for. Returns checkout_url + next_steps: open the URL to pay, then feed the session_id to claim_dossier. See get_pricing for the full list.
外部アクセスあり
入力スキーマ
{'type': 'object', 'required': ['tier'], 'properties': {'pack': {'enum': ['single', '5', '25'], 'type': 'string'}, 'tier': {'enum': ['standard', 'premium'], 'type': 'string'}, 'entity_id': {'type': 'string'}, 'entity_name': {'type': 'string'}}}
check_offshore_exposure
Walk the ownership chain and flag sanctioned + secrecy-jurisdiction hops — the offshore-layering lead.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}, 'max_depth': {'type': 'number'}}}
claim_dossier
Redeem a paid Stripe Checkout session for a dossier access token. Pass the session_id (cs_…) from the post-payment redirect after buy_dossier. Returns { token, entity_id, tier } — pass the token to get_dossier as its `token` input. Idempotent; fails with 402 not_paid until payment completes, so wait for the human to finish Checkout then call again.
外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['session_id'], 'properties': {'session_id': {'type': 'string'}}}
find_similar
Entities most similar to a given one — the nearest corpus dossier cards ('more like this') for peer discovery. Pass an entity id from search_entities / semantic_search. COVERAGE IS PARTIAL — only entities in the embedded risk-scored subset (~1.9% of the corpus and growing) return peers; an entity outside it returns empty for now, not an error.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['entity_id'], 'properties': {'k': {'type': 'number'}, 'entity_id': {'type': 'string'}}}
get_company_details
Registered profile for a company: address, status, SIC, incorporation, plus filing/compliance (overdue, charges, former names).
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}}}
get_dossier
Structured, fully-cited dossier for one entity: cross-source identity, ownership/UBO chain, risk signals, filed financials, provenance. Pass the `token` from claim_dossier to unlock the full paid depth you purchased for this entity.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}, 'token': {'type': 'string', 'description': 'Optional dossier access token from claim_dossier — unlocks the full paid depth (UBO chain, assets, financial history) for this entity.'}}}
get_entity
Full record for one entity id + its direct relationships, with provenance.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}}}
get_financials
Filed financials year-over-year: turnover, profit, net assets, cash, employees (Companies House iXBRL).
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}}}
get_payment_link
PERMANENT, shareable Stripe payment links for the one-off dossiers — use this instead of buy_dossier when you need something you can HAND TO A HUMAN. buy_dossier mints a cs_live_ Checkout Session that is single-use and expires in 24h, so it is useless in a report or a message the human reads tomorrow; these links never expire and can be reused. Append ?client_reference_id=<entity uuid from search_entities> to bind the purchase to one company — without it the buyer gets a dossier credit, spendable on any entity later. No API key needed, no WhiteIntel account needed.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
get_pricing
WhiteIntel's price list + the exact machine flow for buying access: one verified dossier (€29, one price, everything), subscriptions (Pro €99/mo, Scale €499/mo) and the metered API. Returns how_an_agent_buys — buy_dossier opens a Stripe Checkout, claim_dossier mints the token, get_dossier with that token returns the unlocked report. Static, no network — check it before recommending a purchase.
読み取り専用 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
get_pulse
The corpus activity feed — recent ownership-change and filed-accounts events, cited. Pass since=<next_since> to stream only new events. The default (unfiltered) feed returns only events that carry a source URL. `watchlist` (OpenSanctions PEP listings) is opt-in via kind=watchlist and is currently uncited (source-url NULL for every row).
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {'kind': {'enum': ['ownership', 'filing', 'watchlist'], 'type': 'string'}, 'limit': {'type': 'number'}, 'since': {'type': 'string'}}}
get_sanctions
An entity's sanctions exposure (OFAC/EU/UN/UK) for it and its resolved cluster siblings, each cited.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}}}
graph_neighbourhood
Every ownership/control edge within a bounded number of hops of one entity, in BOTH directions — who it controls, who controls it, and their neighbours. Hard-capped in the database: depth 3, 300 edges, and at most 25 edges followed per entity per direction per hop. When the edge budget runs out the response sets `truncated: true` and says so — the corpus contains single entities with more than 22,000 edges, so a truncated view is normal for hubs, not an error.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['root'], 'properties': {'root': {'type': 'string', 'description': 'Entity uuid from search_entities / resolve.'}, 'depth': {'type': 'number', 'description': "Hops, 1–3 (default 2). Also capped by the caller's plan."}, 'edges': {'type': 'number', 'description': 'Edge budget, 10–300 (default 120).'}}}
graph_path
How two entities are connected: the ordered hops of a bounded breadth-first search over ownership and control edges in both directions. ⚠️ BOUNDED, NOT EXHAUSTIVE — at most 15 edges are followed per entity, per direction, per hop, so `found: false` means NO PATH WAS FOUND WITHIN THOSE BOUNDS and is NOT evidence that the two entities are unconnected. The response always carries `exhaustive: false`; never report a negative result as a clean bill of health.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'description': 'Entity uuid.'}, 'from': {'type': 'string', 'description': 'Entity uuid.'}, 'max_depth': {'type': 'number', 'description': 'Hops, 1–4 (default 3). Depth 4 is measurably slower on densely connected entities — ask for it deliberately.'}}}
list_asset_coverage
The WhiteIntel ASSET-ownership coverage map — who owns the plane / yacht / property, and HOW we hold that link. The companion to list_jurisdictions for physical assets. Each row is one asset class × area with a `tier`: `deep` = we ingest a bulk source that ties the asset to an OWNER (e.g. FAA US aircraft, HM Land Registry UK property) · `indexed` = held only via leaks/sanctions (e.g. a yacht reached through an offshore SPV in the ICIJ leaks) · `on_demand` = the source is closed/paid, so the record is procured from source on a paid request · `community` = SnitchBoard crowd tips. Also `links_to_owner` — CRITICAL, because many asset registries publish only the registration mark and NOT the owner: an offshore aircraft register (Isle of Man, Bermuda) names the SPV/owner-trust, not the human behind it, so `deep` there is still the SPV layer, and piercing to the beneficial owner is an `on_demand` bizjet-ownership buy. Read this before claiming we do or do not hold ownership for an aircraft/vessel/real-estate entity. No vendor or price is exposed. Returns { assets, count, classes, tiers, note }.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
list_jurisdictions
The WhiteIntel coverage map — every jurisdiction we hold and HOW we hold it. Read this before telling anyone a country is or is not covered, because 'covered' means three different things. Each row carries `tier`: `deep` = we loaded the country's WHOLE national registry, so a name/number search resolves ANY company registered there; `indexed` = we hold only the leak / sanctions / GLEIF subset, so the entities that surfaced in a leak or on a sanctions list are searchable but the rest of that country's companies are NOT in the corpus; `on_demand` = the registry is closed or paid, so the specific record is procured from source when a dossier is purchased. Also `scope` (full = whole registry · subset = fragment), `depth` (`ownership` = owners/beneficial owners on the record · `officers` = directors · `identity` = name/number/address/status, owners procured on request) and `registry` (our loader, for deep tiers). So a `deep`+`full`+`ownership` row (e.g. gb, lv, ua, br) means you can trace owners for any company there; a `subset` row (e.g. cn, kr, most secrecy havens) means an empty search is 'not in the held subset', NOT 'does not exist' — the full record is bought on request. No per-record price or vendor is exposed. Returns { jurisdictions, count, tiers, note }.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'properties': {}}
lookup_by_identifier
Resolve a corpus entity by a strong identifier — lei | ofac | eu | un | uk | uen | sec | krs | gb-coh | siren | br-cnpj (Brazil RFB CNPJ, 8-digit root or full 14-digit).
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['scheme', 'value'], 'properties': {'value': {'type': 'string'}, 'scheme': {'enum': ['lei', 'ofac', 'eu', 'un', 'uk', 'uen', 'sec', 'krs', 'gb-coh', 'siren', 'br-cnpj'], 'type': 'string'}}}
lookup_company
UK company by Companies House number → record + ready-built ownership graph.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['number'], 'properties': {'number': {'type': 'string'}}}
purchase_dossier
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 (Authorization: Bearer wi_…). 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 the call returns HTTP 402 with a machine-readable payment requirement + a top-up URL — hand the top-up to a human once, then retry; the agent spends from the balance thereafter with no browser in the loop. Get the id from search_entities / resolve. This is the AGENT-NATIVE purchase path; buy_dossier is the human/browser (Stripe Checkout) path.
外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'Entity id (uuid) from search_entities / resolve.'}}}
resolve
Batch-resolve a list of company names or scheme:value identifiers (lei/siren/br-cnpj/gb-coh/uen/sec/ofac/eu/un/uk/krs) to canonical WhiteIntel entity ids + confidence in ONE call. Enrich a whole supplier/counterparty list without one lookup per row. Up to 25 anon / 100 keyed.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['queries'], 'properties': {'queries': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Names or scheme:value identifiers.'}}}
search_companies
Free-text UK Companies House company-name search → registration number.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['q'], 'properties': {'q': {'type': 'string'}, 'limit': {'type': 'number'}}}
search_entities
Search every node in the corpus — companies AND people — by name. Returns entity ids for get_dossier / trace_ownership_path.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['q'], 'properties': {'q': {'type': 'string'}, 'risk': {'enum': ['HIGH', 'MED', 'LOW'], 'type': 'string'}, 'type': {'enum': ['company', 'person', 'asset'], 'type': 'string'}, 'juris': {'type': 'string'}, 'limit': {'type': 'number'}}}
semantic_search
Meaning-based entity search (BGE-M3 vector ANN over the resolved dossier cards). Finds companies/people whose profile is semantically closest to a natural-language query even without a keyword match. Optional kind + jurisdiction filters. COVERAGE IS PARTIAL — the risk-scored subset of the corpus is embedded so far (~1.9% and growing with the backfill); a thin or empty result is NOT proof the entity is unknown, so pair with search_entities (lexical/name) before concluding an entity does not exist.
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['query'], 'properties': {'k': {'type': 'number'}, 'kind': {'type': 'string'}, 'query': {'type': 'string'}, 'jurisdiction': {'type': 'string'}}}
trace_ownership_path
Walk ownership upward from a root entity to the ultimate beneficial owner(s).
読み取り専用 外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['root'], 'properties': {'root': {'type': 'string'}, 'max_depth': {'type': 'number'}}}
追加
claim_dossier
2026年9月17日12:39
追加
get_payment_link
2026年9月17日12:39
追加
buy_dossier
2026年9月17日12:39
追加
get_pricing
2026年9月17日12:39
追加
find_similar
2026年9月17日12:39
追加
semantic_search
2026年9月17日12:39
追加
search_companies
2026年9月17日12:39
追加
lookup_company
2026年9月17日12:39
追加
get_pulse
2026年9月17日12:39
追加
get_financials
2026年9月17日12:39
追加
get_company_details
2026年9月17日12:39
追加
check_offshore_exposure
2026年9月17日12:39
追加
get_sanctions
2026年9月17日12:39
追加
lookup_by_identifier
2026年9月17日12:39
追加
graph_path
2026年9月17日12:39
追加
graph_neighbourhood
2026年9月17日12:39
追加
trace_ownership_path
2026年9月17日12:39
追加
purchase_dossier
2026年9月17日12:39
追加
get_dossier
2026年9月17日12:39
追加
get_entity
2026年9月17日12:39
追加
list_asset_coverage
2026年9月17日12:39
追加
list_jurisdictions
2026年9月17日12:39
追加
search_entities
2026年9月17日12:39
追加
resolve
2026年9月17日12:39