Connects to five UK government registers for corporate due diligence without paywalls. Pulls company profiles, director appointments, beneficial ownership chains, and disqualification records from Companies House. Checks charity financials and trustees via the Charity Commission API. Queries HMLR for property ownership through SPARQL, scrapes insolvency notices from The Gazette's linked data feed, and validates VAT numbers against HMRC. Includes three orchestration prompts that chain searches across registers. Useful for KYC checks, investor due diligence, or flagging phoenix company patterns. The hosted endpoint needs no API keys, but local installs require free Companies House and Charity Commission credentials. Covers England and Wales only for land registry queries.
claude mcp add --transport http uk-due-diligence-mcp https://uk-due-diligence-mcp.fly.dev/mcpRun in your terminal. Add --scope user to make it available in every project.
Review the command, arguments, and environment values before installing — MCP servers run with your local permissions.
Verified live against the running server on Jun 10, 2026.
company_searchSearch the Companies House register by company name or keyword. Returns a paginated list of matching companies with name, number, status, SIC codes, incorporation date, and registered address. Use company_profile for the full record once you have the company number. Re-call wi...5 paramsSearch the Companies House register by company name or keyword. Returns a paginated list of matching companies with name, number, status, SIC codes, incorporation date, and registered address. Use company_profile for the full record once you have the company number. Re-call wi...
query*stringstart_indexintegercompany_typevaluecompany_statusvalueitems_per_pageintegercompany_profileFetch the full Companies House profile for a company number. Returns status, registered address, SIC codes, filing compliance (overdue accounts and confirmation statement flags), and whether the company has outstanding charges. Use company_search first to find the company number.1 paramsFetch the full Companies House profile for a company number. Returns status, registered address, SIC codes, filing compliance (overdue accounts and confirmation statement flags), and whether the company has outstanding charges. Use company_search first to find the company number.
company_number*stringcompany_officersFetch active officers for a Companies House company number. Returns directors, secretaries, and other active officers with appointment dates, nationality, and country of residence. Resigned officers are excluded. Pagination is handled internally — do NOT pass items_per_page or...3 paramsFetch active officers for a Companies House company number. Returns directors, secretaries, and other active officers with appointment dates, nationality, and country of residence. Resigned officers are excluded. Pagination is handled internally — do NOT pass items_per_page or...
start_indexvaluecompany_number*stringitems_per_pagevaluecompany_pscFetch Persons with Significant Control (beneficial ownership) for a company. Returns PSC entries with natures of control, nationality, and country of residence. Flags overseas corporate PSC entries as a beneficial ownership risk signal. Returns an explanatory note for widely-h...1 paramsFetch Persons with Significant Control (beneficial ownership) for a company. Returns PSC entries with natures of control, nationality, and country of residence. Flags overseas corporate PSC entries as a beneficial ownership risk signal. Returns an explanatory note for widely-h...
company_number*stringcharity_searchSearch the Charity Commission register of England and Wales by name or keyword. Returns matching charities with registration number, status, and registration date. Use charity_profile for full details once you have the charity number. The upstream `searchCharityName` endpoint...3 paramsSearch the Charity Commission register of England and Wales by name or keyword. Returns matching charities with registration number, status, and registration date. Use charity_profile for full details once you have the charity number. The upstream `searchCharityName` endpoint...
limitintegerquery*stringoffsetintegercharity_profileFetch the full Charity Commission profile for a charity number. Returns trustees, latest income/expenditure, insolvency flags, governing document type, classifications, and countries of operation. Use charity_search first to find the charity number.1 paramsFetch the full Charity Commission profile for a charity number. Returns trustees, latest income/expenditure, insolvency flags, governing document type, classifications, and countries of operation. Use charity_search first to find the charity number.
charity_number*stringdisqualified_searchCheck whether a named individual is banned from acting as a UK company director. Use this tool when asked to check disqualified, banned, or barred directors. Query must be an individual's name (e.g. "Richard Howson") — NOT a company name, which always returns zero results. Ret...3 paramsCheck whether a named individual is banned from acting as a UK company director. Use this tool when asked to check disqualified, banned, or barred directors. Query must be an individual's name (e.g. "Richard Howson") — NOT a company name, which always returns zero results. Ret...
query*stringstart_indexintegeritems_per_pageintegerdisqualified_profileFetch the full disqualification record for a director by officer ID. Returns all disqualification orders: reason, Act/section cited, disqualification period, and associated company names. Use disqualified_search first to find the officer ID.1 paramsFetch the full disqualification record for a director by officer ID. Returns all disqualification orders: reason, Act/section cited, disqualification period, and associated company names. Use disqualified_search first to find the officer ID.
officer_id*stringland_title_searchSearch HM Land Registry Price Paid Index by postcode or address. Returns up to 10 recent sale transactions for the postcode: price, date, address, property type, and tenure (Freehold/Leasehold). Covers England and Wales only. Postcode gives the most reliable results — a full a...1 paramsSearch HM Land Registry Price Paid Index by postcode or address. Returns up to 10 recent sale transactions for the postcode: price, date, address, property type, and tenure (Freehold/Leasehold). Covers England and Wales only. Postcode gives the most reliable results — a full a...
address_or_postcode*stringgazette_noticeFetch the full legal wording of a Gazette notice by numeric notice ID. Returns the complete JSON-LD linked-data record for the notice: parties, legal basis, court, and full text. Use gazette_insolvency first to find notice_numeric_id values.1 paramsFetch the full legal wording of a Gazette notice by numeric notice ID. Returns the complete JSON-LD linked-data record for the notice: parties, legal basis, court, and full text. Use gazette_insolvency first to find notice_numeric_id values.
notice_id*stringgazette_insolvencySearch The Gazette's insolvency notice index by entity name. Searches the Gazette's insolvency endpoint which covers corporate notice codes: winding-up orders (2443), administration orders (2448), liquidator appointments (2452), striking-off notices (2460), and more. Results a...5 paramsSearch The Gazette's insolvency notice index by entity name. Searches the Gazette's insolvency endpoint which covers corporate notice codes: winding-up orders (2443), administration orders (2448), liquidator appointments (2452), striking-off notices (2460), and more. Results a...
end_datevaluestart_datevalueentity_name*stringmax_noticesintegernotice_typevaluevat_validateValidate a UK VAT number against the HMRC register. Returns the trading name and address as registered with HMRC for VAT purposes. The VAT-registered trading address often differs from the Companies House registered address — that discrepancy is a due diligence signal worth no...1 paramsValidate a UK VAT number against the HMRC register. Returns the trading name and address as registered with HMRC for VAT purposes. The VAT-registered trading address often differs from the Companies House registered address — that discrepancy is a due diligence signal worth no...
vat_number*stringsearchSearch across all UK due diligence registers simultaneously. Searches Companies House, Charity Commission, disqualified directors, and Gazette insolvency notices in parallel. Returns a list of result IDs — use fetch with each ID to retrieve the full record.1 paramsSearch across all UK due diligence registers simultaneously. Searches Companies House, Charity Commission, disqualified directors, and Gazette insolvency notices in parallel. Returns a list of result IDs — use fetch with each ID to retrieve the full record.
query*stringfetchFetch the full record for an ID returned by search. Routes by prefix to the appropriate register: - company:{number} → Companies House full profile - charity:{number} → Charity Commission full profile - disqualification:{officer_id} → Disqualified director full record - notice...1 paramsFetch the full record for an ID returned by search. Routes by prefix to the appropriate register: - company:{number} → Companies House full profile - charity:{number} → Charity Commission full profile - disqualification:{officer_id} → Disqualified director full record - notice...
id*stringlist_promptsList all available prompts. Returns JSON with prompt metadata including name, description, and optional arguments.List all available prompts. Returns JSON with prompt metadata including name, description, and optional arguments.
No parameters — call it with no arguments.
get_promptGet a prompt by name with optional arguments. Returns the rendered prompt as JSON with a messages array. Arguments should be provided as a dict mapping argument names to values.2 paramsGet a prompt by name with optional arguments. Returns the rendered prompt as JSON with a messages array. Arguments should be provided as a dict mapping argument names to values.
name*stringargumentsvalueTools across five UK public registers. Zero paywalls. All official APIs.
Give an agent a company name and it pulls corporate status, filing compliance, director networks, beneficial ownership chains, disqualification checks, insolvency notices, VAT validation, and property transactions.
Every data source is a legally-mandated register with a free official API.
| Register | API | Auth |
|---|---|---|
| Companies House | api.company-information.service.gov.uk | API key (free) |
| Charity Commission | api.charitycommission.gov.uk | API key (free) |
| HMLR Land Registry | landregistry.data.gov.uk (SPARQL + REST) | None |
| The Gazette | thegazette.co.uk/all-notices (Linked Data) | None |
| HMRC VAT | api.service.hmrc.gov.uk | None |
| Tool | Register | Description |
|---|---|---|
company_search | Companies House | Search by name/keyword with status/type filters |
company_profile | Companies House | Full profile: status, filing compliance, charges |
company_officers | Companies House | Directors with high-appointment-count risk flag |
company_psc | Companies House | Beneficial owners, PSC chain, offshore flags |
disqualified_search | Companies House | Search disqualified directors by name |
disqualified_profile | Companies House | Full disqualification record, period, Act, companies |
charity_search | Charity Commission | Search by name, filter by registration status |
charity_profile | Charity Commission | Full record: trustees, finances, governing doc |
land_title_search | HMLR | Property ownership via SPARQL PPI query |
gazette_insolvency | The Gazette | Corporate insolvency notices (codes 2441-2460) |
gazette_notice | The Gazette | Full legal wording of a specific insolvency notice |
vat_validate | HMRC VAT | Trading name + address as registered for VAT |
search | All registers | Fan-out search across all registers — returns IDs for ChatGPT deep research |
fetch | All registers | Fetch a structured record by ID returned from search |
Three workflow prompts orchestrate multi-step investigations. Available via get_prompt on tool-only clients (ChatGPT) and natively on protocol-aware clients (Claude, Inspector).
| Prompt | Description |
|---|---|
due_diligence | Full DD check — company, officers, PSC, gazette, disqualification |
charity_due_diligence | Charity profile + insolvency check |
director_check | Disqualification status check for an individual |
{
"mcpServers": {
"uk-due-diligence": {
"type": "http",
"url": "https://uk-due-diligence-mcp.fly.dev/mcp"
}
}
}
export CH_API_KEY=your_key
export CHARITY_API_KEY=your_key
{
"mcpServers": {
"uk-due-diligence": {
"type": "stdio",
"command": "uvx",
"args": ["uk-due-diligence-mcp"]
}
}
}
| Key | Where to get it |
|---|---|
CH_API_KEY | developer.company-information.service.gov.uk — free |
CHARITY_API_KEY | api-portal.charitycommission.gov.uk — free |
HMLR, Gazette, and HMRC VAT require no API key.
Run due diligence on Carillion PLC
The agent calls company_search to resolve the company number, then company_profile, company_officers, company_psc, and gazette_insolvency — reasoning across all five registries to surface risk signals.
uk-due-diligence-mcp/
├── server.py # FastMCP init, tool registration, transport config
├── companies_house.py # company_search, company_profile, company_officers, company_psc
├── disqualified.py # disqualified_search, disqualified_profile
├── charity.py # charity_search, charity_profile
├── land_registry.py # land_title_search (SPARQL + REST)
├── gazette.py # gazette_insolvency (JSON-LD, notice codes 2441-2460)
├── hmrc_vat.py # vat_validate
├── http_client.py # Shared httpx clients, retry backoff, error formatting
├── inputs.py # Pydantic v2 input models
├── fly.toml
├── Dockerfile
├── pyproject.toml
└── .env.example
REST+RDF linked-data pattern. Corporate insolvency notice codes span 2441-2460. The read API is unauthenticated; auth is write-only (for placing notices).
Free endpoint at api.landregistry.data.gov.uk. Returns RDF/Turtle by default —
the SPARQL endpoint is used for Price Paid Index queries. Covers England and Wales only.
Directors with 10+ other active appointments are flagged. A director on 40+ companies is a common pattern in nominee director operations and phoenix company structures.
MIT