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:
- Identity — legal name, registration number, registered address, incorporation date, status, SIC codes (from
get_company_profile) - Governance — current directors + secretaries, with appointment dates (from
get_officers) - Beneficial ownership — current PSCs + nature of control (from
get_persons_with_significant_control) - Filing currency — last AR01/CS01 + last accounts (from
list_filings) - Encumbrances — outstanding charges + creditors (from
get_charges)
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.
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.