{"server":{"name":"dev.whiteintel/whiteintel","title":"WhiteIntel — Ownership Intelligence","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://whiteintel.dev/api/mcp","type":"streamable-http"}],"version":"0.7.10","packages":[{"version":"0.7.10","transport":{"type":"stdio"},"identifier":"@whiteintel/mcp-server","runtimeHint":"npx","registryType":"npm","environmentVariables":[{"name":"WHITEINTEL_API_KEY","isSecret":true,"description":"Optional wi_ API key (whiteintel.dev, Settings, API keys). Lifts free-tier limits to your plan."},{"name":"WHITEINTEL_API_BASE","default":"https://whiteintel.dev","description":"API origin (SSRF-guarded to whiteintel.dev hosts)."}]}],"repository":{"url":"https://github.com/Hei33enberg/WhiteIntel-OS","source":"github"},"websiteUrl":"https://whiteintel.dev","description":"UBO, sanctions & ownership graph. 23 tools, 130.7M entities, 31 registries."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-08-19T22:48:11.333089Z","publishedAt":"2026-08-19T22:48:11.333089Z","statusChangedAt":"2026-08-19T22:48:11.333089Z"},"dev.protogrid/connectability":{"class":"unknown","autonomous":false,"human_steps":["unknown"],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://whiteintel.dev/api/mcp","transport":"streamable-http","templated":false,"headers":[],"auth":{"type":"none","location":null,"secret_name":null,"oauth":null},"protocol":{"supported_versions":["2025-11-25"],"stateless":true},"health":{"reachable":false,"uptime_30d":0.47826087,"latency_ms_p50":520,"consecutive_failures":12,"last_probe_at":"2026-10-19T01:15:54.017Z","last_ok_at":"2026-09-23T02:27:41.223Z"}}],"packages":[{"idx":0,"registry_type":"npm","identifier":"@whiteintel/mcp-server","version":"0.7.10","runtime_hint":"npx","transport":"stdio","secrets":["WHITEINTEL_API_KEY"],"requires_execution":true}]},"dev.protogrid/tools":[{"name":"buy_dossier","title":null,"description":"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.","annotations":{"title":"Start a dossier purchase (opens Stripe Checkout)","readOnlyHint":false,"openWorldHint":true,"idempotentHint":false,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"check_offshore_exposure","title":null,"description":"Walk the ownership chain and flag sanctioned + secrecy-jurisdiction hops — the offshore-layering lead.","annotations":{"title":"Check offshore exposure","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"claim_dossier","title":null,"description":"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.","annotations":{"title":"Redeem a paid session for an access token","readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"find_similar","title":null,"description":"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.","annotations":{"title":"Find similar entities","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"get_company_details","title":null,"description":"Registered profile for a company: address, status, SIC, incorporation, plus filing/compliance (overdue, charges, former names).","annotations":{"title":"UK filing & compliance detail","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"get_dossier","title":null,"description":"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.","annotations":{"title":"Build a cited dossier","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"get_entity","title":null,"description":"Full record for one entity id + its direct relationships, with provenance.","annotations":{"title":"Get an entity record","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"get_financials","title":null,"description":"Filed financials year-over-year: turnover, profit, net assets, cash, employees (Companies House iXBRL).","annotations":{"title":"UK filed financials","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"get_payment_link","title":null,"description":"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.","annotations":{"title":"Get permanent payment links","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"get_pricing","title":null,"description":"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.","annotations":{"title":"Price list & how an agent buys","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"get_pulse","title":null,"description":"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).","annotations":{"title":"Recent corpus activity","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"get_sanctions","title":null,"description":"An entity's sanctions exposure (OFAC/EU/UN/UK) for it and its resolved cluster siblings, each cited.","annotations":{"title":"Screen sanctions & risk signals","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"graph_neighbourhood","title":null,"description":"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.","annotations":{"title":"Walk the ownership neighbourhood","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"graph_path","title":null,"description":"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.","annotations":{"title":"Find how two entities connect","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"list_asset_coverage","title":null,"description":"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 }.","annotations":{"title":"Asset-ownership coverage map","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"list_jurisdictions","title":null,"description":"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 }.","annotations":{"title":"Jurisdiction coverage map","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"lookup_by_identifier","title":null,"description":"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).","annotations":{"title":"Resolve a registry identifier","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"lookup_company","title":null,"description":"UK company by Companies House number → record + ready-built ownership graph.","annotations":{"title":"Look up a UK company","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"purchase_dossier","title":null,"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 (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.","annotations":{"title":"Buy a dossier from your wallet (charges €2)","readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"resolve","title":null,"description":"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.","annotations":{"title":"Batch-resolve names & identifiers","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"search_companies","title":null,"description":"Free-text UK Companies House company-name search → registration number.","annotations":{"title":"Search UK company names","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"search_entities","title":null,"description":"Search every node in the corpus — companies AND people — by name. Returns entity ids for get_dossier / trace_ownership_path.","annotations":{"title":"Search the corpus (companies & people)","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"semantic_search","title":null,"description":"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.","annotations":{"title":"Meaning-based entity search","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"},{"name":"trace_ownership_path","title":null,"description":"Walk ownership upward from a root entity to the ultimate beneficial owner(s).","annotations":{"title":"Trace ownership to the beneficial owner","readOnlyHint":true,"openWorldHint":true,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-09-23T02:27:41.223Z"}],"dev.protogrid/trust":{"score":63,"components":{"hygiene":100,"liveness":0,"freshness":85,"provenance":85},"drivers":["+repository","+dns-namespace","+website","-unreachable(12 failures)","~updated-61d-ago"],"flags":[],"blocked":false,"computed_at":"2026-10-20T06:14:24.617Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":81,"label":"good","components":{"auth":null,"hygiene":93,"protocol":75,"stability":null,"dependencies":67},"checks":[{"id":"protocol.modern","detail":"newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28","status":"warn","category":"protocol"},{"id":"protocol.stateless","detail":"only applies to 2026-07-28 servers","status":"na","category":"protocol"},{"id":"protocol.transport","detail":"streamable HTTP","status":"pass","category":"protocol"},{"id":"protocol.list_ttl","detail":"only applies to 2026-07-28 servers","status":"na","category":"protocol"},{"id":"auth.prm","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.as_metadata","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.cimd","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"every tool has a description","status":"pass","category":"hygiene"},{"id":"tools.description_length","detail":"2 tools have descriptions over 1,024 characters, which crowds the context","status":"warn","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"24 of 24 tools declare readOnlyHint or destructiveHint","status":"pass","category":"hygiene"},{"id":"tools.directory_hints","detail":"every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint","status":"pass","category":"hygiene"},{"id":"tools.token_cost","detail":"about 3,792 tokens to load every tool","status":"pass","category":"hygiene"},{"id":"tools.api_dump","detail":"tools are not a one-to-one API dump","status":"pass","category":"hygiene"},{"id":"stability.changes","detail":"tool history not recorded yet","status":"na","category":"stability"},{"id":"stability.rug_pull","detail":"tool history not recorded yet","status":"na","category":"stability"},{"id":"deps.known_vulns","detail":"no known advisory in 98 resolved packages","status":"pass","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"@modelcontextprotocol/sdk 1.29.0 has 1 known advisory (GHSA-6qxp-vccf-f47h); update @modelcontextprotocol/sdk to 1.31.0 or later","status":"fail","category":"dependencies"},{"id":"deps.resolvable","detail":"@whiteintel/mcp-server@0.7.10 resolved: 98 packages","status":"pass","category":"dependencies"}],"drivers":["-deps.mcp_sdk_version","~protocol.modern","~tools.description_length"],"flags":["outdated-mcp-sdk"],"tool_count":24,"token_estimate":3792,"tools_hash":null,"tools_changed_at":null,"computed_at":"2026-10-20T06:17:32.356Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"dev.whiteintel/whiteintel","aliases":[],"alias_count":0,"repository_key":"github:hei33enberg/whiteintel-os","owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/dev.whiteintel%2Fwhiteintel/tools","arguments":{"name":"dev.whiteintel/whiteintel"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/dev.whiteintel%2Fwhiteintel/connection?target=mcpServers","arguments":{"name":"dev.whiteintel/whiteintel","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}