companies-house — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited companies-house (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You have access to the companies-house MCP server, which provides tools for querying the UK Companies House API. Use this skill to help users research UK companies, officers, ownership, and corporate history.
Start broad, go deep:
search_companies to get the company number. Numbers are eight characters, zero-padded (00445790). Scotland uses SC, Northern Ireland NI, LLPs OC, overseas companies FC. Shorter all-digit numbers are padded automatically.company_report. One call returns the profile, officers in post, PSCs, charges, recent filings and any insolvency record, plus a coverage section saying how much of each list it retrieved. Start here for most requests.get_ownershipget_appointments with the officer idofficer_networkdue_diligence_checkget_filings with a categoryget_chargesdownload_filing_document| Tool | Use When |
|---|---|
search_companies | Finding a company by name. Supports filters: status, type, SIC code, location, incorporation date. |
search_officers | Finding a person across all companies. Returns officer IDs for deeper queries. |
get_company_profile | Getting detailed profile for a known company number. |
get_officers | Listing directors and secretaries. Returns officers in post by default; include_resigned: true for the full history. |
get_appointments | Seeing all companies an officer is/was associated with. Needs officer ID. |
get_ownership | PSCs — who owns/controls the company. Individual, corporate, and legal person PSCs. |
get_filings | Filing history. Filter by category: accounts, officers, mortgage, capital, etc. |
get_charges | Mortgages/debentures. Outstanding vs satisfied charges. |
get_insolvency | Insolvency cases, practitioners, proceedings. |
company_report | Recommended starting point. One call returns profile, officers in post, PSCs, charges, recent filings and insolvency, with a coverage statement. |
due_diligence_check | Screening summary of the public register. Reports observations, the checks it ran, the checks it could not run, and what the register cannot establish. Not a verdict. |
officer_network | Map all appointments for an officer. Takes name or officer ID. |
get_company_registers | Where the company keeps its statutory registers. |
get_exemptions | Company exemptions (rare). |
get_uk_establishments | UK branches of overseas companies. |
get_officer_disqualifications | Look up one officer id in the disqualified directors register. An empty result is not proof the person was never disqualified. |
get_filing_document | Metadata for a specific filing (needs transaction ID from get_filings). |
download_filing_document | Retrieve the filed document itself. Returns it as an attached resource; metadata_only inspects size and formats first. |
00445790, 13861484SC prefix: SC123456NI prefix: NI012345OC prefix: OC301234FC prefix: FC012345SE prefix (European companies)Always pad numbers to 8 digits when needed (e.g., 445790 → 00445790).
| Status | Meaning |
|---|---|
active | Trading normally |
dissolved | No longer exists — removed from register |
liquidation | Being wound up — assets being sold |
receivership | Under control of a receiver |
administration | Under protection from creditors, restructuring |
voluntary-arrangement | Reached agreement with creditors |
converted-closed | Converted to another type or closed |
insolvency-proceedings | Insolvency proceedings active |
62011 — Computer programming activities62012 — Business and domestic software development62020 — IT consultancy activities62090 — Other IT activities70229 — Management consultancy activities64110 — Central banking64191 — Banks64205 — Financial holding companies68100 — Buying/selling of own real estate68209 — Other letting of own property82990 — Other business support activities47910 — Retail via internet56101 — Licensed restaurantsUse with get_filings category parameter:
accounts — Annual accountsannual-return — Annual returns (pre-2016)confirmation-statement — Confirmation statements (post-2016)officers — Director/secretary appointments, resignations, changesmortgage — Charge registrations and satisfactionscapital — Share allotments, capital changesincorporation — Formation documentschange-of-name — Name change certificatesliquidation — Winding up documentsresolution — Shareholder resolutionsmiscellaneous — Everything elsedue_diligence_checkIt returns observations (things on the register worth a look), checks_performed (including any it could not run), and coverage (how much of each list it read). There is no overall verdict, and there must not be one in your summary either.
Higher significance — worth investigating:
active-proposal-to-strike-off, which can appear on a company the register still shows as activeModerate — worth noting, rarely conclusive:
Contextual:
How to report it. Say what is on the register and what was not checked. Never say a company is clear, sound, in good standing, low risk, or verified. Companies House does not verify what companies file, so an absence of adverse entries means only that nothing adverse has been filed. If any check could not be performed, say so.
PSCs must register if they hold:
These can be held directly, in trust, or as a firm.
When the data warrants it and the user's context supports Mermaid rendering (Claude.ai, Claude Desktop, Obsidian, GitHub), generate diagrams from the structured data. Do not generate diagrams in terminal-only contexts (Claude Code CLI, Cursor) — describe the structure in text instead.
Only generate a diagram when it adds clarity the text alone doesn't provide. A single PSC doesn't need a flowchart. A company with one director doesn't need a network graph. Use diagrams for relationships, timelines, and comparisons — not for restating what the text already says clearly.
Use <br/> for line breaks in Mermaid node labels — never \n.
Generate from get_ownership data when there are 2+ active PSCs or corporate PSCs (layered ownership).
Default: top-down, colour-coded by PSC type.
graph TD
C["Company Name<br/>Company Number | Status"]
P1["Corporate PSC Name<br/>(Corporate PSC)"]
P2["Individual Name<br/>(Individual)"]
P1 -->|"25-50% shares<br/>25-50% votes"| C
P2 -->|"75-100% shares"| C
style C fill:#1e3a5f,color:#fff,stroke:#0d253f
style P1 fill:#7c3aed,color:#fff,stroke:#5b21b6
style P2 fill:#0d9488,color:#fff,stroke:#0f766eColours: dark blue for the target company, purple for corporate PSCs, teal for individual PSCs.
When the user asks about ownership changes or history, show ceased PSCs with dashed lines and grey styling:
X1["Former Owner<br/>Ceased Dec 2023"]:::ceased
X1 -.->|"formerly 25-50%"| C
classDef ceased fill:#94a3b8,color:#fff,stroke:#64748b,stroke-dasharray: 5 5When there are 5+ PSCs, use left-to-right layout (graph LR) to avoid a tall narrow diagram.
Generate from officer_network data when an officer has 2+ appointments.
Default: left-to-right, colour-coded by company status.
graph LR
O["Officer Name"]
C1["Company Name<br/>Company Number"]
C2["Dissolved Company<br/>Company Number"]:::dissolved
O -->|"Director<br/>(active)"| C1
O -->|"Director<br/>(resigned)"| C2
style O fill:#1e40af,color:#fff,stroke:#1e3a8a
style C1 fill:#059669,color:#fff,stroke:#047857
classDef dissolved fill:#dc2626,color:#fff,stroke:#b91c1cColours: blue for the officer, green for active companies, red for dissolved companies.
Cap at 15 companies. If there are more, show active appointments only and note "N additional resigned appointments not shown."
Generate from get_filings and get_officers data when the user asks about company history, lifecycle, or "what happened with this company."
Default: sectioned by era, curated key events only.
timeline
title Company Name — Key Events
section Formation
Month Year : Incorporated
section Growth
Month Year : Key event description
section Recent
Month Year : Key event descriptionCurate, don't dump. Select: incorporation, significant officer changes, status changes, charges, insolvency events, and major filings. Skip routine annual accounts and confirmation statements unless they're overdue or the only activity.
Generate from get_officers (with include_resigned: true) when the user asks about board history, director tenure, or "who was there when."
Default: full board history, grouped by status.
gantt
title Company Name — Director Tenure
dateFormat YYYY-MM-DD
axisFormat %Y
section Active
Director Name :active, start-date, end-date
section Resigned
Former Director :done, start-date, end-dateUse active for current officers, done for resigned. For active officers, use today's date as the end date.
For companies with 15+ officers, offer a simplified view showing only current officers and key historical figures (founders, long-serving directors).
Generate from get_charges data when a company has both outstanding and satisfied charges, or when the user asks about charge history.
gantt
title Company Name — Charges
dateFormat YYYY-MM-DD
axisFormat %Y
section Outstanding
Charge Description :active, created-date, today
section Satisfied
Charge Description :done, created-date, satisfied-dateYYYY-MM-DD strings.get_officers returns active only by default. Use include_resigned: true for full history.links.self paths: /officers/{OFFICER_ID}/appointments.ceased_on before describing anyone as a current controller.get_ownership says which applies rather than leaving it looking like a gap.officer_network refuses to guess between same-named officers. If it reports several matches, pick one and call it again with officer_id.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.