Skip to main content
Glama
uk-company-check
by AxRS37

uk-company-check — UK Companies House as MCP agent tools

An MCP server that turns the free, official Companies House API (the UK company registry — profiles, officers, filing history for every UK company) into four tools your AI agent can call.

Every UK B2B seller doing prospect research needs this data: is the prospect still trading, who are its directors, what industry codes is it under. Non-UK (US included) lead-gen and KYB sellers need it too — UK registry data is public, in English, and every company number is a join key.

  • Audience: B2B prospect researchers, lead-gen sellers, KYB/due-diligence workflows, any agent that needs UK company facts.

  • Cost: £0. The API key is free (2-minute signup, no credit card). The server has no other dependencies beyond the official MCP SDK.

  • No API key? It still runs. The server starts, lists its tools, and returns a plain-English "here's how to get the free key" message instead of crashing (agents can read that to the user).

What it does — the four tools

Tool

What it answers

search_companies(query)

"Find me UK companies named X" → name, company number, status, incorporation date, address

get_company(company_number)

Full registry profile: status (active/dissolved/…), incorporation date, registered office, SIC codes with plain-English descriptions, current officers (directors & secretary) with appointment dates and occupations

get_filing_history(company_number)

What the company filed and when — confirmation statements, accounts, officer changes

explain_sic_code(code)

Decode any UK SIC code to its official plain-English description. Works offline (embedded official list) — no key, no network

get_company calls two registry endpoints (profile + officers) and returns one merged answer, so an agent doesn't have to orchestrate. Company numbers are accepted with or without leading zeros (123456 → 00123456), case-insensitively for SC/NI prefixes.

Related MCP server: companieswise

5-minute setup

Requirements: Python 3.10+ and either uv or pip. Nothing else — no Node, no database, no paid services.

1. Get your free Companies House API key (2 minutes, no card).

Go to https://developer.company-information.service.gov.uk/signin and register an account. Sign in, open Applications, create a new application, and copy the API key it shows you. That's the whole signup. (Do not commit the key anywhere — see the .env.example.)

Companies House documents the limit as 600 requests per 5-minute window per key — orders of magnitude more than prospect research needs. This server also caches answers for an hour, so repeat questions cost no quota.

2. Install.

# with uv (fastest):
uv venv && uv pip install -e .
# or with plain pip:
python3 -m venv .venv && .venv/bin/pip install -e .

3. Test the install (30 seconds).

.venv/bin/python -m pytest tests/ -q

You'll see 43 passed — all tests run offline against a pretend registry on localhost, so they never spend your API quota or need the network.

4. Wire it into your MCP client.

Example for Claude Desktop / Cursor / any MCP client that uses JSON config:

{
  "mcpServers": {
    "uk-company-check": {
      "command": "/ABSOLUTE/PATH/TO/uk-company-check/.venv/bin/python",
      "args": ["-m", "uk_company_check"],
      "env": { "CH_API_KEY": "your_real_api_key" }
    }
  }
}

(Any MCP client works the same way: launch python -m uk_company_check on stdio with CH_API_KEY in the environment. Alternative env name: COMPANIES_HOUSE_API_KEY.)

5. Try it. In your client, ask:

Find UK companies called "Driver Plumbing" and tell me whether the top one is active, who its directors are, and what its SIC codes mean.

The agent will call search_companies → get_company → explain_sic_code and answer with sourced registry facts.

Example tool calls and responses

These are real outputs from this server's test suite (run against a pretend registry whose fixture company mirrors the live API's exact field shapes — see tests/fake_ch.py). With your API key, the live Companies House returns the same shapes with real data.

search_companies("driver plumbing") →

{
  "query": "driver plumbing",
  "total_results": 2,
  "companies": [
    {
      "company_number": "00123456",
      "company_name": "DRIVER PLUMBING & HEATING LTD",
      "company_status": "active",
      "incorporated": "2015-03-10",
      "address": "28 London Road, Great Glen, Leicestershire, LE8 9FL",
      "nature_of_business": "43220"
    },
    {
      "company_number": "08765432",
      "company_name": "OLD ROOFS LTD",
      "company_status": "dissolved",
      "incorporated": "2001-01-01",
      "address": "1 Old Street, Leicester, LE1 1AA",
      "nature_of_business": null
    }
  ]
}

get_company("123456") → (officers listed newest appointment first; resigned officers filtered out)

{
  "company_name": "DRIVER PLUMBING & HEATING LTD",
  "company_number": "00123456",
  "status": "active",
  "type": "ltd",
  "incorporated": "2015-03-10",
  "ceased": null,
  "registered_office": "28 London Road, Great Glen, Leicestershire, LE8 9FL, United Kingdom",
  "sic_codes": [
    { "code": "43220", "description": "Plumbing, heat and air-conditioning installation" },
    { "code": "99999", "description": "Dormant Company" }
  ],
  "has_charges": false,
  "has_insolvency_history": false,
  "officers": [
    {
      "name": "Acme Corporate Services Limited",
      "role": "corporate-secretary",
      "appointed_on": "2020-01-01",
      "occupation": null,
      "nationality": null,
      "year_of_birth": null
    },
    {
      "name": "John Driver",
      "role": "director",
      "appointed_on": "2015-03-10",
      "occupation": "Plumber",
      "nationality": "British",
      "year_of_birth": 1980
    }
  ],
  "note": null
}

get_filing_history("00123456") →

{
  "company_number": "00123456",
  "total_count": 2,
  "filings": [
    {
      "date": "2025-06-01",
      "type": "CS01",
      "category": "confirmation-statement",
      "description": "confirmation statement (2025-05-10)",
      "description_values": { "made_up_to": "2025-05-10" }
    },
    {
      "date": "2024-12-15",
      "type": "AA",
      "category": "accounts",
      "description": "legacy (group of companies' accounts made up to 31 March 2024)",
      "description_values": { "description": "group of companies' accounts made up to 31 March 2024" }
    }
  ]
}

explain_sic_code("43220") →

{ "code": "43220", "description": "Plumbing, heat and air-conditioning installation" }

How it's tested (and why you can trust the README)

43 tests in three layers — all offline, no network, no API quota:

  1. Client unit tests (tests/test_ch_api.py) — company-number normalisation, caching (a cached call provably makes zero HTTP requests), friendly errors for 401/404/429, SIC descriptions.

  2. Tool layer tests (tests/test_server_tools.py) — each tool's output shape, resigned-officer filtering, SIC enrichment, all four tools registered, every tool has a docstring (agent-visible descriptions).

  3. Protocol tests (tests/test_protocol.py) — launch the real server as a subprocess, speak MCP JSON-RPC over stdio (initialize → tools/list → tools/call), and verify responses. Also proves zero-key mode starts and self-explains instead of crashing.

The fake registry (tests/fake_ch.py) mirrors the exact Companies House response field names (company_name, company_status, sic_codes, officer_role, appointed_on, …) as documented on the official reference pages.

Run them yourself:

.venv/bin/python -m pytest tests/ -v

Works with both MCP SDK generations

The official Python SDK renamed its main class between versions: 1.x exposes mcp.server.fastmcp.FastMCP, 2.x renamed it to mcp.server.mcpserver.MCPServer. This server imports whichever is installed, so pip install mcp can give you either and it still runs. The protocol tests pass against both. (Tested against 1.14.0 and 2.2.0, on Python 3.12 and 3.14.)

Who it's for

  • B2B sellers and agencies doing UK prospect research (segment by SIC code, verify a company is active before outreach).

  • US and non-UK lead-gen sellers — UK registry data is public, in English, structured; the company number is a stable join key for enrichment.

  • KYB / due-diligence agents — status, officers, and filing history are the three core checks.

  • Any MCP client user who just wants UK company facts on tap.

Licence

MIT for the code (see LICENSE). The embedded SIC code descriptions in src/uk_company_check/sic_data.py are official UK SIC 2007 condensed-list data from Companies House, under the Open Government Licence v3.0 — Crown copyright preserved. Companies House data returned at runtime belongs to the UK Crown / Companies House and is used under OGL v3.0.

Available Tools

4 tools
explain_sic_codeA

Decode a UK SIC code (the 5-digit 'nature of business' code on every company record) into its official plain-English description. Works offline from the official UK SIC 2007 condensed list — no API key needed. Example: explain_sic_code('43220') -> 'Plumbing, heat and air-conditioning installation'.

Args: code: The SIC code, e.g. "43220". Leading zeros are kept.

Inputs: code (required). Returns: object

get_companyB

Full profile of one UK company from its official registry record: status (active/dissolved/...), incorporation date, registered office, SIC codes with plain-English descriptions, and current officers (directors and secretary) with appointment dates and occupations.

Args: company_number: The 8-character Companies House number, e.g. "00123456", "123456", "SC123456" or "NI123456" — leading zeros optional.

Inputs: company_number (required). Returns: object

get_filing_historyA

The most recent filings a company has made at Companies House (confirmation statements, accounts, officer changes...). Useful for spotting dormancy (nothing filed for years), late accounts, or a change of directors last week.

Args: company_number: The Companies House number (leading zeros optional). items_per_page: How many filings to return (1-100, default 10).

Inputs: company_number (required), items_per_page. Returns: object

search_companiesA

Search the UK company register by name. Returns matches with company number, status, address snippet and incorporation date — use the company_number from the best match with get_company.

Args: query: Company name or part of it, e.g. "Driver Plumbing" or "TESCO". items_per_page: How many matches to return (1-100, default 10).

Inputs: query (required), items_per_page. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4/5.0

    Scored across 4 tools

    Disambiguation5/5

    Each tool has a clearly distinct purpose: name search, full company profile, filing history, and SIC code decoding. There is no overlap in function or ambiguity about when to use each.

    Naming Consistency5/5

    All names use snake_case and follow a verb_noun pattern: search_companies, get_company, get_filing_history, explain_sic_code. The convention is consistent and readable.

    Tool Count5/5

    Four tools are well-scoped for a read-only UK company lookup service. Each tool earns its place without redundancy or excessive granularity.

    Completeness4/5

    The set covers the core due-diligence workflow: find a company, get its profile including officers, check filings, and decode SIC codes. Minor gaps exist, such as no dedicated PSC/charges lookup or advanced search filters, but agents can work around them for basic checks.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables looking up UK companies, officers, ownership, filings, and running due diligence checks via the Companies House API, usable from AI tools like Claude or Cursor.
      12 npm
      39
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Provides verified UK company lookup and number validation for AI agents using official Companies House data. Enables lookup of registered details by number, validation of company number format, and search by company name.
      3
      51 npm
      Apache 2.0
    • A
      license
      A
      quality
      D
      maintenance
      Enables AI assistants to search and retrieve UK Companies House data including company profiles, officers, and filing history via the official API.
      4
      196 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables querying UK company data including search, profiles, officers, filings, and persons with significant control via Companies House API.
      196 npm
      MIT