paulieb89 avatar

UK Due Diligence

paulieb89/uk-due-diligence-mcp

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.

GitHub stars
2
tools
18
transport
STDIO, HTTP
last updated
Apr 20, 2026

Install

From registry metadata
$ npx add-mcp https://uk-due-diligence-mcp.fly.dev/mcp --name uk-due-diligence-mcp

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http uk-due-diligence-mcp https://uk-due-diligence-mcp.fly.dev/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 18 tools

Verified live against the running server on Nov 6, 2026.

company_searchSearch the Companies House register by company name or keyword. Returns a paginated list of matching companies with name, number, status, incorporation date, and registered address. SIC codes are not reliably returned by search; use company_profile for SIC codes. Use company_p...5 params

Search the Companies House register by company name or keyword. Returns a paginated list of matching companies with name, number, status, incorporation date, and registered address. SIC codes are not reliably returned by search; use company_profile for SIC codes. Use company_p...

Parameters* required
company_statusvalue
Filter by company status (e.g. 'active', 'dissolved'). Omit to search all.
company_typevalue
Filter by company type (e.g. 'ltd', 'llp'). Omit to search all.
items_per_pageinteger
Number of results to return (max 100). Default 20.default: 20
query*string
Company name or keyword to search for
start_indexinteger
Pagination offset. Default 0.default: 0
company_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 params

Fetch 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.

Parameters* required
company_number*string
Companies House company number (8 digits, e.g. '03782379'). Returned by company_search.
company_officersFetch officers for a Companies House company number. Returns directors, secretaries, and other officers with appointment dates, nationality, and country of residence. Resigned officers are excluded by default; set include_resigned=true for historical DD. Pagination is handled...4 params

Fetch officers for a Companies House company number. Returns directors, secretaries, and other officers with appointment dates, nationality, and country of residence. Resigned officers are excluded by default; set include_resigned=true for historical DD. Pagination is handled...

Parameters* required
company_number*string
Companies House company number (8 digits, e.g. '03782379'). Returned by company_search.
include_resignedboolean
Include resigned/historic officers. Default false for backwards-compatible current-officer queries.default: false
items_per_pagevalue
Ignored — pagination is handled internally. Only accepted to avoid call failures.
start_indexvalue
Ignored — pagination is handled internally. Only accepted to avoid call failures.
company_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 params

Fetch 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...

Parameters* required
company_number*string
Companies House company number (8 digits, e.g. '03782379'). Returned by company_search.
officer_appointmentsFetch a person's full company appointment history by officer ID. Returns every appointment — current and historic — with each company's number, name, status, role, and appointment/resignation dates. Use company_officers first to find an officer_id, then this tool to discover o...1 params

Fetch a person's full company appointment history by officer ID. Returns every appointment — current and historic — with each company's number, name, status, role, and appointment/resignation dates. Use company_officers first to find an officer_id, then this tool to discover o...

Parameters* required
officer_id*string
Companies House officer ID. Returned as officer_id on entries from company_officers.
company_chargesFetch the complete Companies House charge history for a company. Returns every registered charge (secured debt) — current and historic — with status, dates, secured parties, and what each charge covers (fixed/floating/negative-pledge flags and any free-text particulars). Satis...1 params

Fetch the complete Companies House charge history for a company. Returns every registered charge (secured debt) — current and historic — with status, dates, secured parties, and what each charge covers (fixed/floating/negative-pledge flags and any free-text particulars). Satis...

Parameters* required
company_number*string
Companies House company number (8 digits, e.g. '03782379'). Returned by company_search.
company_filing_historyFetch one page of a company's Companies House filing chronology. Returns the raw source facts for each filing — transaction ID, form type/category, dates, and the description_values CH uses to render its own text — as delivered upstream, not interpreted into DD conclusions. li...4 params

Fetch one page of a company's Companies House filing chronology. Returns the raw source facts for each filing — transaction ID, form type/category, dates, and the description_values CH uses to render its own text — as delivered upstream, not interpreted into DD conclusions. li...

Parameters* required
categoryvalue
Filter by CH filing category — comma-separated for multiple, e.g. 'mortgage' or 'mortgage,officers'. Omit for all categories. Common values: accounts, confirmation-statement, officers, address, cap...
company_number*string
Companies House company number (8 digits, e.g. '03782379'). Returned by company_search.
items_per_pageinteger
Results per page (Companies House caps at 100 regardless of a higher value). Default 100.default: 100
start_indexinteger
Pagination offset. Default 0. Re-call with start_index=start_index+returned while has_more is true.default: 0
company_filing_documentResolve a filing's document_metadata link to its authoritative source document. Returns a resource_link (never embedded bytes, never base64) pointing at a company-document:// MCP resource — fetch it via resources/read to get the actual PDF. This tool only reads metadata (categ...2 params

Resolve a filing's document_metadata link to its authoritative source document. Returns a resource_link (never embedded bytes, never base64) pointing at a company-document:// MCP resource — fetch it via resources/read to get the actual PDF. This tool only reads metadata (categ...

Parameters* required
document_metadata_url*string
The document_metadata URL from a filing's links.document_metadata (returned by company_filing_history) — pass it through verbatim, not a document_id. Must be an exact https://document-api.company-i...
mime_typevalue
Which content representation to select, e.g. 'application/pdf'. Omit when the document has only one representation (the near-universal case) — it is auto-selected. Required if the document has more...
charity_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 params

Search 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...

Parameters* required
limitinteger
Max items to return in this page. Default 20; raise to 100 for bulk views.default: 20
offsetinteger
Number of items to skip before this page. Default 0.default: 0
query*string
Charity name or keyword to search for
charity_profileFetch the full Charity Commission profile for a charity number. Returns trustees, latest income/expenditure, insolvency flags, classifications, and countries of operation. Use charity_search first to find the charity number.1 params

Fetch the full Charity Commission profile for a charity number. Returns trustees, latest income/expenditure, insolvency flags, classifications, and countries of operation. Use charity_search first to find the charity number.

Parameters* required
charity_number*string
Charity Commission registration number (e.g. '1234567'). Returned by charity_search.
disqualified_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...4 params

Check 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...

Parameters* required
items_per_pageinteger
Results per page (max 100). Default 20.default: 20
namevalue
Alias for query — the person's name.
queryvalue
Person's name to search for, e.g. query='Richard Howson'. NOT a company name.
start_indexinteger
Pagination offset (0-based). Default 0.default: 0
disqualified_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 params

Fetch 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.

Parameters* required
officer_id*string
Companies House officer ID. Returned by disqualified_search.
land_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 params

Search 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...

Parameters* required
address_or_postcode*string
UK property address or postcode. Postcode is most reliable: e.g. 'NG1 1AB'. Full address also accepted.
gazette_noticeFetch the full legal wording of a Gazette notice by numeric notice ID. Returns the JSON-LD linked-data record for the notice: publisher, notice code, publication date, and the party fields the Gazette supplies. Body text and court are not guaranteed; the Gazette web page has t...1 params

Fetch the full legal wording of a Gazette notice by numeric notice ID. Returns the JSON-LD linked-data record for the notice: publisher, notice code, publication date, and the party fields the Gazette supplies. Body text and court are not guaranteed; the Gazette web page has t...

Parameters* required
notice_id*string
Numeric Gazette notice ID. Returned as notice_numeric_id by gazette_insolvency.
gazette_insolvencySearch The Gazette's insolvency notice index by entity name. Searches The Gazette's corporate-insolvency notice index using the authoritative Gazette notice-code taxonomy. Results are sorted by an internal DD severity score; the notice label itself remains a source fact. Each...7 params

Search The Gazette's insolvency notice index by entity name. Searches The Gazette's corporate-insolvency notice index using the authoritative Gazette notice-code taxonomy. Results are sorted by an internal DD severity score; the notice label itself remains a source fact. Each...

Parameters* required
end_datevalue
Filter notices up to this date (YYYY-MM-DD)
entity_namevalue
Deprecated alias for name.
max_noticesinteger
Cap on notices returned, applied after severity/date sort. Default 20. The Gazette insolvency feed returns up to 100 results per search — raise to 100 to see the full set.default: 20
namevalue
Company or individual name to search for in Gazette insolvency notices
notice_typevalue
Filter by Gazette notice code (e.g. '2450' petition to wind up a company, '2452' winding-up order, '2410' appointment of administrators). Omit to search all.
queryvalue
Alias for name.
start_datevalue
Filter notices from this date (YYYY-MM-DD)
sanctions_screenScreen a name against the UK (OFSI), US (OFAC), EU and UN consolidated sanctions lists. Returns every list entry whose primary name or alias matches, with the regime, source reference and listing date where the source gives one. Use it to check whether a counterparty — or its...2 params

Screen a name against the UK (OFSI), US (OFAC), EU and UN consolidated sanctions lists. Returns every list entry whose primary name or alias matches, with the regime, source reference and listing date where the source gives one. Use it to check whether a counterparty — or its...

Parameters* required
entity_typevalue
Optional filter: 'person' or 'entity'. Omit to screen both.
name*string
Person or company/entity name to screen against the consolidated sanctions lists.
searchSearch 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. `registers_searched...1 params

Search 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. `registers_searched...

Parameters* required
query*string
Company name, charity name, director name, or keyword to search for across all UK due diligence registers
fetchFetch 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 params

Fetch 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...

Parameters* required
id*string
Prefixed record ID returned by search. Format: company:{number}, charity:{number}, disqualification:{officer_id}, or notice:{notice_id}

Sponsors

Readme

uk-due-diligence-mcp

Official-source UK due-diligence data for AI agents.

Search Companies House, Charity Commission, The Gazette and HMLR price-paid data, plus screen names against the UK (FCDO), OFAC, EU and UN sanctions lists. Exposes atomic MCP tools for company ownership, officers, cross-company appointment history, secured charges, insolvency notices and related registry evidence — the consuming agent decides how to investigate, not the server.

Every data source is a legally-mandated register with a free official API. Zero paywalls.


View the full README on GitHub

Details

Repository
github.com/paulieb89/uk-due-diligence-mcp
Website
bouch.dev
Package
uk-due-diligence-mcp
Transport
STDIO, HTTP
Registry
MCP registry, active
Tools verified
Nov 6, 2026

More from paulieb89