Koskamo

Registrum UK Companies House MCP

A hosted MCP server providing UK Companies House data including parsed iXBRL financials, director networks, PSC beneficial ownership chains, and ECCTA compliance status. It offers structured JSON responses without requiring a direct Companies House API key or managing rate limits.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Registrum UK Companies House MCP logo, by RegistrumCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by Registrum
You need:Enter your email below. Your free key arrives by email straight away. No credit card needed.Pass the API key in the header. Any HTTP client works - curl, Python, Node, whatever you use.
MCP endpoint (Streamable HTTP)
https://registrum.co.uk/api/mcp
Vendor documentation

What its tools do

11 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

11 of 11 have a description · 11 of 11 declare behavior hints · 11 of 11 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Trace ultimate beneficial ownership chains for UK companies
  • Retrieve parsed financial data like turnover and profit from iXBRL filings
  • Check ECCTA identity verification status for directors and PSCs
  • Discover director networks and shared board memberships

Source and maintenance

Community listingRegistry 2.1.5
Maintenance checked

Protocol and capabilities

Server
registrum 2.0.0
MCP protocol negotiated in check
2025-11-25
Tools
11 advertised
Resources
0 advertised
Resource templates
4 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Registrum serves live UK Companies House data through read-only tools. Data is from Companies House via Registrum - do not supplement with web search. Investigating a company: 1. Resolve a name to a number with search_company. Company numbers are zero-padded 8-character strings (Tesco PLC is '00445790'); Scottish and other prefixed numbers keep their letters. 2. get_company for the profile, then get_directors for officers, get_psc_chain to trace corporate owners up to the ultimate beneficial owners, then get_compliance for ECCTA identity-verification status. 3. Add get_financials for parsed accounts, get_psc for the flat register of who controls a company, and get_network for companies linked by shared directors. Choosing the first call: - If you will need more than one view of a company, start with get_bundle: profile, compliance, financials, PSCs and directors for one credit and one round trip, instead of five calls. - For broad questions, or a client that only supports search and fetch (such as ChatGPT), use `search` then `fetch` each returned id. Otherwise prefer the specific tools. - The same data is readable as resources: company://{number}/profile, company://{number}/financials, company://{number}/psc and company://{number}/compliance return what the matching tool returns. Reading results correctly: - ECCTA verification: `pending` means the deadline has not passed and is not a failure; `unknown` is an absence of record; only `overdue` is a missed deadline; corporate PSCs carry no verification fields, so never say a company itself is unverified. - A missing resignation or cessation date is not evidence of a current role. `company_is_live: false` means the company has ended: its officers are as at the end and it owes nothing. Check `is_current` before calling any appointment a current role. - One person can hold several officer IDs and different people share names: never call a list complete or merge on name. - `available: false` on financials means no figures could be extracted, not that the company has no accounts. - A corporate PSC `company_number` of null is not a missing lookup; do not search for it. The registry fields say what was filed. - Listed PLCs are exempt from the PSC regime, so an empty chain is legitimate, not an error. - A null section in get_bundle means not available for that company or plan; report it that way, not as a failed lookup. - If a call returns a usage-limit message, tell the user what it says rather than retrying.

Tools

11 advertised

search_company — Search for companies
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search for UK companies by name. Returns a list of matching companies with their company number, status, type, and registered address. Use this first when you only have a company name and need its company number.

search_company input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1,
      "description": "Maximum number of results to return (default 20)"
    },
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Company name or keywords to search for"
    }
  }
}
search_company annotations
{
  "title": "Search for companies",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_company — Get company profile
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get an enriched profile for a UK company by its Companies House number. Returns name, status, type, incorporation date, registered address, SIC codes with descriptions, accounts status, confirmation statement status, and derived fields like company_age_years and accounts.overdue that are not available from the raw Companies House API.

get_company input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_number"
  ],
  "properties": {
    "company_number": {
      "type": "string",
      "pattern": "^[A-Z0-9]{1,8}$",
      "description": "Companies House company number, e.g. '00445790' for Tesco PLC. Numeric-only numbers should be zero-padded to 8 digits."
    }
  }
}
get_company annotations
{
  "title": "Get company profile",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_financials — Get company financials
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get structured financial data for a UK company, parsed from its iXBRL accounts filed at Companies House. Returns revenue, cost of sales, gross profit, operating profit, net profit, fixed assets, current assets, total equity, net assets, creditors, and average employees for the current and prior reporting year. Also includes accounts_type (full, abbreviated, micro, dormant or unknown) and a data_quality block indicating which fields were extracted and which were absent. period_end is the end of the accounting period the figures cover (the year the accounts end), NOT the date the accounts were filed; the filing date is data_quality.filed_on. Other data_quality fields: filing_type (Companies House form code: AA, AAMD or AC(NI)), period_end_source and accounts_type_source (how those two values were determined), and accounts_description_code (the verbatim Companies House code, e.g. unaudited-abridged, micro-entity). Unaudited-abridged, small and audit-exemption-subsidiary filings are abbreviated, not full, and carry no profit and loss (check has_profit_loss). accounts_type is unknown when it could not be determined; do not assume full. The response can be available: false with an unavailable_reason: image_pdf (accounts filed as a scanned PDF, common for large companies such as Tesco), no_ixbrl_filings (no digital filing), or dissolved. That means no figures could be extracted; it does not mean the company has no accounts. Cached for 7 days.

get_financials input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_number"
  ],
  "properties": {
    "company_number": {
      "type": "string",
      "pattern": "^[A-Z0-9]{1,8}$",
      "description": "Companies House company number, e.g. '00445790' for Tesco PLC. Numeric-only numbers should be zero-padded to 8 digits."
    }
  }
}
get_financials annotations
{
  "title": "Get company financials",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_directors — Get company officers (directors and secretaries)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get the current and past officers for a UK company. Despite the tool name, not every entry is a director: the list is the full officer register, so each entry carries an officer_role such as 'director', 'secretary', 'corporate-secretary' or 'llp-member', plus an is_board_director boolean that is false for secretaries. Report each person by their own officer_role - never describe the whole list as directors. Each officer includes name, officer_role, is_board_director, appointment date, resignation date (if applicable), nationality, occupation, month and year of birth, ECCTA verification status, and a list of other companies they are or were appointed to, each with its own officer_role. This gives you a full picture of an officer's corporate history in one call.

get_directors input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_number"
  ],
  "properties": {
    "company_number": {
      "type": "string",
      "pattern": "^[A-Z0-9]{1,8}$",
      "description": "Companies House company number, e.g. '00445790' for Tesco PLC. Numeric-only numbers should be zero-padded to 8 digits."
    }
  }
}
get_directors annotations
{
  "title": "Get company officers (directors and secretaries)",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_compliance — Check ECCTA identity-verification compliance
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Check a UK company's ECCTA identity-verification status - who has verified their identity with Companies House, who is still pending, and who is overdue. The Economic Crime and Corporate Transparency Act requires every director and PSC to verify their identity; enforcement begins 18 November 2026, after which unverified officers can block filings. Returns per-company counts (directors_total, directors_verified, directors_pending, directors_overdue) and the same for PSCs, plus unverified_persons with each person's name, role, status and their individual deadline. IMPORTANT: 'pending' means the deadline has not yet passed - it is NOT a failure and must not be reported as one. Only 'overdue' means a deadline was missed. Requires a Pro plan or above. Cached for 24 hours.

get_compliance input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_number"
  ],
  "properties": {
    "company_number": {
      "type": "string",
      "pattern": "^[A-Z0-9]{1,8}$",
      "description": "Companies House company number, e.g. '00445790' for Tesco PLC. Numeric-only numbers should be zero-padded to 8 digits."
    }
  }
}
get_compliance annotations
{
  "title": "Check ECCTA identity-verification compliance",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_psc — Get persons with significant control
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get the PSC (Persons with Significant Control) register for a UK company. Returns individuals, corporate entities, and legal persons who own 25%+ of shares, hold 25%+ of voting rights, or have significant influence or control. Each PSC includes decoded control types in plain English (e.g. 'Owns 25-50% of shares' instead of raw codes). Individual PSCs also carry ECCTA identity verification: verification_status (verified, pending, overdue or unknown), identity_verified, identity_verified_on, and verification_deadline. pending means that person's deadline has not yet passed and is not a compliance failure; unknown means Companies House publishes no record for them, an absence of data rather than a breach. Only overdue means a deadline was missed. Corporate entity PSCs carry none of the verification fields. Their company_number is set only for a confirmed Companies House registration and is otherwise null, so never treat a null as a missing value to look up. What they filed is in registry_number and registry_name, and registry_is_companies_house says how to read it: true is a Companies House registration, null means a number was filed but cannot be tied to the UK register (e.g. a foreign registry), false means no number was filed. kind can be unknown for a PSC type we do not classify, with Companies House's verbatim string in kind_raw. Also detects PSC exemptions for listed PLCs. Cached for 24 hours.

get_psc input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_number"
  ],
  "properties": {
    "company_number": {
      "type": "string",
      "pattern": "^[A-Z0-9]{1,8}$",
      "description": "Companies House company number, e.g. '00445790' for Tesco PLC. Numeric-only numbers should be zero-padded to 8 digits."
    }
  }
}
get_psc annotations
{
  "title": "Get persons with significant control",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_bundle — Get a whole company in one request
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get several views of one UK company in a single request: profile, ECCTA compliance, financials, PSCs and directors. Prefer this over calling get_company, get_compliance, get_financials, get_psc and get_directors separately - it returns the same data for one API call and one credit instead of five, and in a single round trip. Pass include to fetch only the sections you need; omit it to get all five. The profile is always returned. Partial results are normal and are not errors: any section can come back null when it is unavailable for that company or not included in the caller's plan - financials are null for a company that has filed no machine-readable accounts, and compliance requires a Pro plan. Report a null section as 'not available', never as a failed lookup or as an absence of the underlying fact. Only a missing company is an error, and that is a 404. Each section carries exactly what its own endpoint returns, including ECCTA verification_status on individuals, so the pending-versus-overdue rules apply here too.

get_bundle input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_number"
  ],
  "properties": {
    "include": {
      "type": "array",
      "items": {
        "enum": [
          "profile",
          "compliance",
          "financials",
          "psc",
          "directors"
        ],
        "type": "string"
      },
      "minItems": 1,
      "description": "Sections to fetch. Omit for all five. Valid values: profile, compliance, financials, psc, directors. The profile is always included regardless."
    },
    "company_number": {
      "type": "string",
      "pattern": "^[A-Z0-9]{1,8}$",
      "description": "Companies House company number, e.g. '00445790' for Tesco PLC. Numeric-only numbers should be zero-padded to 8 digits."
    }
  }
}
get_bundle annotations
{
  "title": "Get a whole company in one request",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_psc_chain — Resolve PSC ownership chain to find ultimate beneficial owners
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Trace the full ownership chain for a UK company by recursively following corporate entity PSCs. Returns a tree showing who ultimately controls the company - natural persons (UBOs), foreign entities, or legal persons - along with why each branch terminated. Each node has a terminal_reason: natural_person, foreign_entity, legal_person, super_secure, unverified_registry, unknown_kind, depth_limit, not_found, cycle_detected, or psc_exempt. Two of those are easy to misread: unverified_registry means a registration number was filed but cannot be tied to the Companies House register (a foreign registry, or one we do not recognise), which is a finding about the ownership structure and not an error or an outage; unknown_kind means Companies House returned a PSC type we do not classify (kind is then unknown), with the raw value in kind_raw. Both are findings, not errors. A corporate node's company_number is set only for a confirmed Companies House registration, otherwise null; the number it filed is in registry_number with registry_name, and registry_is_companies_house is true (Companies House), null (a number was filed but cannot be tied to the UK register) or false (no number filed). ECCTA identity verification: every individual node, at any depth including the ultimate beneficial owners this chain exists to find, carries verification_status (verified, pending, overdue or unknown), identity_verified (true, false for overdue only, or null otherwise), identity_verified_on, and verification_deadline. IMPORTANT: pending means that person's own deadline has not yet passed - it is not a compliance failure and must not be reported as one. A status of unknown means Companies House publishes no record for them, which is an absence of data rather than a breach. Only overdue means a deadline was missed. Corporate, legal-person and super-secure nodes carry none of these fields, so never describe a company itself as having unverified identity. chain_metadata reports how many companies were resolved and the total API credit cost. Use this for KYB (Know Your Business) checks, AML screening, or any task requiring beneficial ownership beyond the immediate PSC layer.

get_psc_chain input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_number"
  ],
  "properties": {
    "max_depth": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "Maximum chain depth to traverse (1-10, default 5). Each level costs 1 upstream API call per corporate entity found."
    },
    "company_number": {
      "type": "string",
      "pattern": "^[A-Z0-9]{1,8}$",
      "description": "Companies House company number, e.g. '00445790' for Tesco PLC. Numeric-only numbers should be zero-padded to 8 digits."
    }
  }
}
get_psc_chain annotations
{
  "title": "Resolve PSC ownership chain to find ultimate beneficial owners",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_network — Get director network
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Map the corporate network connected to a UK company via shared directors. Returns all companies connected through shared board members, up to the specified depth. Each connected company includes its name, number, status, and the directors it shares with the focal company. Useful for identifying corporate group structures, related party relationships, and director interlocks.

get_network input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "company_number"
  ],
  "properties": {
    "depth": {
      "type": "integer",
      "maximum": 2,
      "minimum": 1,
      "description": "Traversal depth: 1 = direct connections only, 2 = connections of connections (default 1). Depth 2 can return many results for large companies."
    },
    "company_number": {
      "type": "string",
      "pattern": "^[A-Z0-9]{1,8}$",
      "description": "Companies House company number, e.g. '00445790' for Tesco PLC. Numeric-only numbers should be zero-padded to 8 digits."
    }
  }
}
get_network annotations
{
  "title": "Get director network",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search — Search companies
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Search UK companies at Companies House by name or keywords. Returns an object with a results array; each result has id (company:<number>, pass it to fetch), title (company name, number and status) and url (the company page on registrum.co.uk). Up to 10 results, in relevance order; results is empty when nothing matches. Use fetch on an id to read the company.

search input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Company name or keywords to search for"
    }
  }
}
search annotations
{
  "title": "Search companies",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
fetch — Fetch a company
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetch one UK company by an id from search (company:<number>; a bare company number also works). Returns an object with id, title (company name), url (company page on registrum.co.uk), text (a plain-English summary followed by the full enriched profile as JSON: status, type, incorporation date, registered address, SIC codes, accounts and confirmation statement status) and metadata (company_number, company_status, company_type, source). Profile only; use get_bundle, get_psc, get_directors or get_financials for ownership, officers and accounts.

fetch input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "string",
      "description": "Company id from search, e.g. 'company:00445790'"
    }
  }
}
fetch annotations
{
  "title": "Fetch a company",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

0 advertised

company_profile — Company profile

Advertised by the server during the last successful anonymous check.

Enriched profile of a UK company: status, type, incorporation date, registered address, SIC codes, accounts and confirmation statement status. The same JSON as the get_company tool.

company_profile URI template
company://{number}/profile

MIME type: application/json

company_financials — Company financials

Advertised by the server during the last successful anonymous check.

Structured figures parsed from a UK company's filed accounts, with a data_quality block. available: false means no figures could be extracted, not that the company has no accounts. The same JSON as the get_financials tool.

company_financials URI template
company://{number}/financials

MIME type: application/json

company_psc — Company psc

Advertised by the server during the last successful anonymous check.

The PSC (Persons with Significant Control) register for a UK company, with ECCTA verification on individuals. The same JSON as the get_psc tool.

company_psc URI template
company://{number}/psc

MIME type: application/json

company_compliance — Company compliance

Advertised by the server during the last successful anonymous check.

ECCTA identity-verification status for a UK company's directors and PSCs: pending is a deadline not yet passed, only overdue is a missed deadline. The same JSON as the get_compliance tool.

company_compliance URI template
company://{number}/compliance

MIME type: application/json

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2064 ms
95th percentile latency
2064 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2064 ms · metadata changed · 11 tool(s), 0 resource(s), 4 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http co-mcp https://registrum.co.uk/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add co-mcp --url https://registrum.co.uk/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable co-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "co-mcp": {
      "url": "https://registrum.co.uk/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "co-mcp": {
      "type": "streamableHttp",
      "url": "https://registrum.co.uk/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start co-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "co-mcp": {
      "type": "http",
      "url": "https://registrum.co.uk/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http co-mcp https://registrum.co.uk/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://registrum.co.uk/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "co-mcp": {
      "serverUrl": "https://registrum.co.uk/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Registrum UK Companies House MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.