KYC workflow · 6 min read

A complete KYC dossier in five MCP calls

Published 2026-04-29 · Permalink

A "KYC dossier" sounds heavy: legal-name + registered-address verification, director identity + adverse-media screening, beneficial-owner disclosure, filing currency check, security-interest review. In practice on an MCP client wired to OpenRegistry, it's five tool calls against the same UK company number, all returning verbatim from Companies House.

This walkthrough uses Monzo Bank Limited (Companies House 09446231) as the example. Monzo is a useful test subject precisely because it's well- governed: it's a UK retail bank, FCA-regulated, with an active and noisy filing history. If a workflow fails on Monzo, it fails on most companies.

1. Resolve the company

search_companies("GB", "monzo bank")
// → 09446231 — Monzo Bank Limited — active — incorporated 2015-02-06

Search rather than guessing the number. Companies House publishes historical / dissolved / re-registered companies; an agent that hardcodes a number can hit a stale record. The first active-status hit on the canonical name is what most workflows want.

2. Profile

get_company_profile("GB", "09446231")

{
  "company_id": "09446231",
  "company_name": "MONZO BANK LIMITED",
  "status": "active",
  "incorporation_date": "2015-02-06",
  "registered_address": "Broadwalk House, 5 Appold Street, London EC2A 2AG",
  "jurisdiction_data": { ... 30+ verbatim CH fields ... }
}

The jurisdiction_data object contains every field Companies House publishes — SIC codes, accounts schedule, confirmation-statement schedule, previous names, jurisdiction (England and Wales), insolvency-history flag. OpenRegistry doesn't normalise these fields; if a downstream KYC tool needs a standardised industry classifier it builds it from this raw data.

3. Officers

get_officers("GB", "09446231")
// → 17 records: directors, secretaries, current + resigned
[
  { "name": "ANIL, TS", "role": "director", "is_active": true,  "appointed_on": "2020-09-01" },
  { "name": "WALSH, GARY", "role": "director", "is_active": true, ... },
  ... 15 more
]

For PEP screening or adverse-media, the agent typically follows up with get_officer_appointments on each active director — a separate Companies House endpoint that returns every other UK company that person is or has been a director of. The full appointment history per officer is out of scope for this walkthrough but is a core part of a KYB workflow.

4. Persons with significant control (PSC)

get_persons_with_significant_control("GB", "09446231")

[
  {
    "name": "REDACTED — UK CH residential-suppression rule",
    "natures_of_control": ["ownership-of-shares-25-to-50-percent"],
    "is_active": true,
    "notified_on": "2024-..."
  },
  ... more
]

PSC is not the shareholder list. UK PSC captures any natural person or registrable legal entity controlling more than 25% of voting / shares / appointment rights, or exercising significant influence. A 10% direct shareholder doesn't appear here. A corporate trustee with appointment rights does.

5. Recent filings + charges

list_filings("GB", "09446231", { limit: 25 })
// → most-recent 25 filings; AR01/CS01 cadence + last accounts

get_charges("GB", "09446231")
// → registered fixed/floating charges; persons entitled, status,
//   creation date, satisfaction date

Filing currency tells the analyst whether the company is up-to-date on its statutory obligations (AR01, CS01, accounts). Charges show secured-creditor relationships — useful for credit-risk analysis and for spotting relationships between counterparties.

What the agent emits

The agent typically renders the dossier as a single structured response:

Five tool calls. A few hundred milliseconds per call. Sub-second total latency once the agent has resolved the company number. The bottleneck is the agent's own LLM tokens, not the registry.

What this replaces. Bureau van Dijk Orbis sells a similar UK dossier as part of a $30k-50k/year subscription. OpenCorporates sells a paid API for cleaned-up versions of the same data. Companies House publishes the underlying data for free. OpenRegistry is the transport that lets an AI agent consume it without writing a custom HTTP client.

Reproducing this

Connect any MCP client to https://openregistry.sophymarine.com/mcp, free anonymous tier (20 req/min/IP). Or point at the same data on the web at /company/gb/09446231 — the Directors / PSC / Filings / Charges tabs are paid-tier on the web UI but the underlying data is free via MCP.