Several tools take care to separate absence from error: no insolvency record, no PSC record and no statutory register record are each reported as absences with the reason, and get_officer_disqualifications states plainly that an empty result covers one officer id rather than the person behind it. The same caution shapes the framing of due_diligence_check — it reports what is on the register and what it could not check, and an absence of adverse entries only means nothing adverse has been filed. Everything reads and nothing writes; download_filing_document checks size first and refuses oversized content rather than streaming it at you.
A client for the Companies House public register: 18 tools spanning company records, officer records, ownership, charges, filing history and the filed documents. Requests go from your machine straight to Companies House on your own key, with no hosted backend in between.
- One call that assembles a company's core record — profile, officers in post, persons with significant control, charges, recent filings and any insolvency record — and states how much of each list it managed to retrieve (company_report).
- Company detail on its own: register entry with status detail, SIC codes and previous names; where the statutory registers are kept; disclosure exemptions; and the UK establishments of an overseas company (get_company_profile, get_company_registers, get_exemptions, get_uk_establishments).
- Officer research across the whole register: search by name for officer ids, list every appointment an id holds current and past, map that officer's company network, and check the disqualified directors register (search_officers, get_appointments, officer_network, get_officer_disqualifications).
- Ownership and security: persons with significant control with natures of control and ceased dates, and registered charges whose outstanding, part-satisfied and satisfied totals come from Companies House aggregate counts rather than from the page you were served (get_ownership, get_charges).
- Filing history where each entry carries a transaction id and, where a document exists, a document id — then the document itself, PDF and other binary formats embedded as a binary resource, XHTML, XML and JSON as text (get_filings, get_filing_document, download_filing_document).
- Company search by name with filters for status, type, incorporation date, location and SIC code, which switches to the advanced search endpoint when any filter is supplied (search_companies).
- A screening pass that surfaces the entries a reviewer looks for: register status and status detail, insolvency, outstanding charges, overdue accounts and confirmation statements, registered office disputes and officer changes (due_diligence_check).
- The insolvency record itself when there is one — cases, case type, key dates, appointed practitioners and notes (get_insolvency).
A free Companies House API key, registered at developer.company-information.service.gov.uk, passed as COMPANIES_HOUSE_API_KEY. Launch with `npx -y companies-house-mcp` over stdio; a Cloudflare Worker you deploy into your own account is the optional route for reaching it remotely. Companies House allows 600 requests per five minutes per key, and the client queues to stay inside that. Officer tools want an officer_id from search_officers, and document retrieval wants a document_id from get_filings.
One command plus a key — npx -y companies-house-mcp, then supply credentials
