OpenCompanies

OpenCompanies MCP server

OpenCompanies is also available as a Model Context Protocol (MCP) server. AI assistants such as Claude, ChatGPT, Cursor and VS Code can use it to search UK companies, look up officers and people with significant control, trace ownership, find connections and read accounts figures. It only reads the data (but for sending feedback, when you agree), needs no key, account or sign-in, and serves the same data, under the same licence, as the rest of this site.

Server URL
https://opencompanies.uk/mcp
Transport
Streamable HTTP
Authentication
None
Version
1.0.0

Connect

Every client needs only the server URL. When a client asks how to authenticate, choose no authentication.

Claude (claude.ai, Desktop and mobile)

Add OpenCompanies to Claude opens the Add custom connector dialog with the name and URL filled in; check them and click Add.

To add it by hand, go to Customize, then Connectors, and click Add custom connector. Enter the name OpenCompanies and the URL https://opencompanies.uk/mcp, and if the dialog asks about authentication, choose No sign-in. The connector then works in the Claude apps on desktop and mobile too. On Team and Enterprise plans an Owner adds it for everyone under Organization settings, Connectors, Add, Custom, Web (or with the prefilled admin link).

Claude Code

claude mcp add --transport http opencompanies https://opencompanies.uk/mcp

Add --scope project to share it through the project's .mcp.json, which looks like this:

{
  "mcpServers": {
    "opencompanies": {
      "type": "http",
      "url": "https://opencompanies.uk/mcp"
    }
  }
}

Prompts appear as slash commands such as /mcp__opencompanies__who_owns, and resources can be attached with @opencompanies:.

ChatGPT

Turn on developer mode under Settings, Security and login, Developer mode. Then go to chatgpt.com/plugins, select the plus button, give it a name and description, enter https://opencompanies.uk/mcp as the connection URL with no authentication, and create it. The search and fetch tools follow OpenAI's contract, so deep research can use them and cite opencompanies.uk pages.

Cursor

Add to Cursor, or put this in ~/.cursor/mcp.json (or .cursor/mcp.json in a project):

{
  "mcpServers": {
    "opencompanies": {
      "url": "https://opencompanies.uk/mcp"
    }
  }
}

VS Code

Install in VS Code, or add it to .vscode/mcp.json (the top-level key is servers):

{
  "servers": {
    "opencompanies": {
      "type": "http",
      "url": "https://opencompanies.uk/mcp"
    }
  }
}

From a terminal:

code --add-mcp '{"name":"opencompanies","type":"http","url":"https://opencompanies.uk/mcp"}'

OpenAI Codex

codex mcp add opencompanies --url https://opencompanies.uk/mcp

or in ~/.codex/config.toml:

[mcp_servers.opencompanies]
url = "https://opencompanies.uk/mcp"

Codex uses tools only, not prompts or resources.

Gemini CLI

gemini mcp add --transport http opencompanies https://opencompanies.uk/mcp

or in ~/.gemini/settings.json, where httpUrl (not url) selects Streamable HTTP:

{
  "mcpServers": {
    "opencompanies": {
      "httpUrl": "https://opencompanies.uk/mcp"
    }
  }
}

Windsurf (Devin Desktop)

Add it to mcp_config.json, which is at ~/.config/devin/mcp_config.json on macOS and Linux and %APPDATA%\devin\mcp_config.json on Windows:

{
  "mcpServers": {
    "opencompanies": {
      "serverUrl": "https://opencompanies.uk/mcp"
    }
  }
}

Zed

Use Settings, AI, MCP Servers, Add Server, Add Remote Server, or add it to your settings file:

{
  "context_servers": {
    "opencompanies": {
      "url": "https://opencompanies.uk/mcp"
    }
  }
}

Zed uses tools and prompts.

Goose

Run goose configure and add a remote extension (Streamable HTTP), or add it to ~/.config/goose/config.yaml:

extensions:
  opencompanies:
    name: OpenCompanies
    type: streamable_http
    uri: https://opencompanies.uk/mcp
    enabled: true
    timeout: 300

For one session only:

goose session --with-streamable-http-extension "https://opencompanies.uk/mcp"

MCP Inspector

To explore the server by hand, start the Inspector, choose Streamable HTTP and paste the URL:

npx @modelcontextprotocol/inspector

or use its command line (add --protocol-era modern to try the 2026-07-28 protocol):

npx @modelcontextprotocol/inspector --cli --transport http --server-url https://opencompanies.uk/mcp --method tools/list

Clients that only run local servers

A client that can only start local (stdio) servers can reach OpenCompanies through mcp-remote:

{
  "mcpServers": {
    "opencompanies": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://opencompanies.uk/mcp",
        "--transport",
        "http-only"
      ]
    }
  }
}

Things to ask

Tools

24 tools, all read-only except send_feedback, which sends a note to the people who run OpenCompanies (see feedback). Each returns structured data, repeated as JSON text, with opencompanies.uk links to cite. Tools marked heavy share a small number of slots (see limits).

ToolWhat it does
Search companies
search_companies heavy
Find UK companies by name, former name or company number, or browse by filters: status, company type, SIC code or section, registered postcode (full, sector or district) and incorporation date.
Get company
get_company
Get one UK company by its Companies House number: name, status, type, incorporation and dissolution dates, registered office (with how many companies share it), SIC codes, former names, accounts and confirmation statement deadlines with overdue flags, current officers and people with significant control (first 10 of each, with totals), the latest accounts headline figures, corporate group, and links to charity or political donation records on sibling sites. detail 'full' adds directors' other companies, other companies at the same address and subsidiaries (10 of each).
Get several companies
get_companies
Get summary records for up to 25 companies in one call by Companies House number: name, status, type, incorporation date, SIC codes, registered postcode, officer and controller counts, corporate group and, with include_financials, the two latest accounts periods' headline figures for side-by-side comparison.
List company officers
list_company_officers
List a company's officers (directors, secretaries, LLP members and others) with role, appointment and resignation dates and a person_id for each, current officers first.
List people with significant control
list_company_owners
List the people with significant control and registrable overseas owners of a company, current first: individuals, UK companies (with their company_number), overseas or unregistered entities (with their registration details) and legal persons, plus any statements the company filed instead, such as that no registrable person exists.
Trace ownership
get_ownership heavy
Trace control through chains of companies using the PSC register. direction 'up' (default) follows every current corporate owner upwards until it reaches individuals, an overseas or unregistered entity, a statement that no registrable person exists, or a company with no PSC data, and lists those ultimate controllers with the route to each; use it for questions like who ultimately owns a company. direction 'down' walks the companies it controls up to three levels; a company controlling more than 50 others is summarised with a count.
List subsidiaries
list_subsidiaries heavy
List the companies a company directly controls according to their PSC registers, with each subsidiary's status and the nature of control, current first.
Get corporate group
get_corporate_group heavy
Show the corporate group a company belongs to: the UK companies joined by company-to-company control on the PSC register, how many there are, the top company and its own controllers, and either a paged member list or a tree from the top company down.
Get accounts figures
get_company_financials
Get figures from a company's electronically filed accounts, one row per accounting period, newest first: turnover, profit, net assets, cash, debtors, creditors, employees and any of about 25 balance sheet and profit and loss items, plus the change between the two latest periods.
Run company checks
run_company_checks heavy
Run factual checks on one company for supplier, customer or due diligence screening and report each as ok, info, attention or unknown with its evidence: register status, presence in the latest register snapshot, age, overdue accounts or confirmation statement, whether accounts are held and the latest net assets, registration-agent address, officers present and recent officer changes, whether controllers are identified, overseas or unregistered owners, possible director disqualification matches, current directors' other companies now in insolvency, corporate group and sibling-site links.
Search people
search_people heavy
Find company officers and people with significant control by name, optionally narrowed by birth year and month.
Get person
get_person
Get one person by person_id or by Companies House officer_id: name, birth month and year, nationality, how their identity is established, counts, their first 25 officer appointments or control holdings (current first; officer and control records are always separate), a track record of their companies by current status including companies dissolved while they were in office, possible disqualification matches, and other records that are possibly the same person because name and birth month and year match.
List a person's roles
list_person_appointments
Page through everything one person is recorded as: officer appointments (kind 'officer') or control holdings as a person with significant control (kind 'control'), current first, with each company's name, number and status.
Check director disqualifications
check_disqualifications
Check a person against the director disqualification records OpenCompanies holds.
Search addresses
search_addresses heavy
Find registered office and service addresses by postcode (full, sector or district, such as 'N1 7GU', 'N1 7' or 'N1') or by the first line of the address.
List what is at an address
get_address heavy
List what is at one address, by address_id: companies whose registered office is there (filter by status, SIC code and incorporation date; sort by name or newest), or officers or people with significant control who give it as their address.
Search SIC codes
search_sic_codes
Find UK SIC 2007 industry codes by keyword (for example 'software' or 'dental') or by code prefix (for example '620'), or list the codes in one section, with each code's description, section and how many active and dissolved companies use it.
Find shared connections
find_shared_connections heavy
Find what two to five companies have in common, or two to five people.
Find how two entities are connected
find_connection_path heavy
Find the shortest chains of links between two companies, two people, or a company and a person, through officer appointments, significant control and company-to-company ownership, and optionally through shared non-hub registered addresses and unconfirmed possibly-the-same-person matches.
Get network graph
get_network heavy
Get the bounded network around a company or a person as nodes and edges (officers, control and optionally shared registered address), up to 2 steps out and at most 100 nodes; any person or company with more than 50 links at a step is collapsed into a hub node carrying the count.
Get data status
get_dataset_status
Report how current and complete OpenCompanies' data is: record counts, when each source was last loaded (the register snapshot, the daily PSC snapshot, accounts, officers, live update feeds, nightly aggregates and person matching) and known coverage gaps.
Search (connector)
search heavy
Search OpenCompanies for UK companies by name or number and for people (officers and people with significant control) by name.
Fetch record (connector)
fetch
Fetch the full record for an id from search or other results: company:{number}, person:{id}, address:{id}, group:{id}, sic:{code} or accounts:{number}:{yyyy-mm-dd}.
Send feedback
send_feedback
Ask the user first: show them the note as you will send it, and send it only once they agree, with user_agreed true.

Prompts

Prompts are ready-made research tasks that your client may offer as commands. Each one asks the assistant to use the tools above, cite its sources and list what it could not check.

PromptWhat it doesArguments
Company due diligence report
company_due_diligence
A structured due diligence report on one UK company: identity and status, ownership and control, officers and their track records, finances, filing compliance, connections and points needing attention, citing OpenCompanies links. company
purpose (optional)
Who owns this company?
who_owns
Work out who ultimately owns or controls a UK company, layer by layer through any parent companies, and where the trail stops. company
Director background check
director_background
A background summary of an officer or person with significant control: current and past roles, what happened to those companies, control holdings, possible disqualification matches and records that may be the same person. person
birth_year (optional)
birth_month (optional)
How are these connected?
how_connected
Find how two companies or people are connected: shared officers, owners and addresses, then longer chains, with dates and caveats. first
second
New companies in an industry
sector_new_companies
List UK companies recently incorporated in an industry, optionally in one postcode area, grouped by registered postcode with registration-agent addresses pointed out. industry
days (optional)
area (optional)
Who is at this address?
address_investigation
Investigate a UK address: the companies registered there and the people who give it as their address, whether it is a registration hub, and what the companies do. address
Compare companies
compare_companies
Compare two to five UK companies side by side: status, age, type, industry, officer and controller counts and the latest two years' headline accounts figures. companies

Resources

Resources are documents a client can attach to a conversation. Their addresses are the same https URLs a browser opens, and reading one returns what the site serves, except that links in Markdown are made absolute.

Reference documents

ResourceWhat it holds
OpenCompanies data guide
https://opencompanies.uk/mcp/guide.md
What the data holds and how it is organised, identifiers and identity policy, where to start, caveats (freshness, limits, what is not held), the licence and feedback.
Data status
https://opencompanies.uk/mcp/status.json
Record counts and when each source was last loaded.
SIC codes
https://opencompanies.uk/mcp/reference/sic-codes.csv
Every SIC 2007 code in the Companies House condensed list with section and company counts.
Natures of control
https://opencompanies.uk/mcp/reference/natures-of-control.md
PSC nature-of-control codes in plain English with their share and voting bands.
Company statuses
https://opencompanies.uk/mcp/reference/company-statuses.md
Raw Companies House status values and the status groups OpenCompanies derives from them.
PSC statements
https://opencompanies.uk/mcp/reference/psc-statements.md
Statements a company can file instead of naming a person with significant control, explained.
Accounts figures
https://opencompanies.uk/mcp/reference/accounts-figures.md
What each accounts figure means, grouped as balance sheet and profit and loss, with coverage caveats.

Records by identifier

TemplateWhat it holds
Company record (Markdown)
https://opencompanies.uk/company/{company_number}.md
One UK company by Companies House number, as Markdown: details, officers, people with significant control, accounts figures and connections.
Company record (JSON)
https://opencompanies.uk/company/{company_number}.json
One UK company by Companies House number, as JSON: details, up to 500 officers, people with significant control and recent accounts.
Company officers (JSON)
https://opencompanies.uk/company/{company_number}/officers.json
Every officer of one UK company, current officers first, as JSON. A company with thousands of officers is too large to read in one go.
People with significant control (JSON)
https://opencompanies.uk/company/{company_number}/psc.json
Everyone recorded with significant control over one UK company, current first, as JSON.
Accounts filing (JSON)
https://opencompanies.uk/company/{company_number}/accounts/{made_up_date}.json
Figures from one electronically filed set of accounts, by company number and made-up date (yyyy-mm-dd), as JSON.
Person record (Markdown)
https://opencompanies.uk/person/{person_id}.md
One officer or person with significant control by OpenCompanies person_id, with their appointments and holdings, as Markdown.
Person record (JSON)
https://opencompanies.uk/person/{person_id}.json
One officer or person with significant control by OpenCompanies person_id, with their appointments and holdings, as JSON.
Registered address (JSON)
https://opencompanies.uk/address/{address_id}.json
One address by OpenCompanies address_id, with up to 200 of the companies registered there (none listed at a registration hub), as JSON.
Corporate group (JSON)
https://opencompanies.uk/group/{group_id}.json
One corporate group by OpenCompanies group_id, with its member companies, as JSON. A group of about a thousand companies or more is too large to read in one go.
SIC code (JSON)
https://opencompanies.uk/sic/{code}.json
One SIC 2007 code with its company counts and the 50 newest active companies using it, as JSON.

Try it with curl

The server is stateless, so every request stands on its own. A modern (2026-07-28) request carries its protocol version and client capabilities in params._meta and repeats the version, method and tool name in headers. A legacy client starts with initialize; later requests name the agreed version in the MCP-Protocol-Version header and need no session id, because none is ever issued.

Modern (2026-07-28): ask the server what it supports

curl -s https://opencompanies.uk/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'MCP-Protocol-Version: 2026-07-28' \
  -H 'Mcp-Method: server/discover' \
  -d '{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{},"io.modelcontextprotocol/clientInfo":{"name":"curl","version":"1.0.0"}}}}'

Modern (2026-07-28): call get_company for 00445790

curl -s https://opencompanies.uk/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'MCP-Protocol-Version: 2026-07-28' \
  -H 'Mcp-Method: tools/call' \
  -H 'Mcp-Name: get_company' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_company","arguments":{"company_number":"00445790"},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{},"io.modelcontextprotocol/clientInfo":{"name":"curl","version":"1.0.0"}}}}'

Legacy (2025-11-25): the initialize handshake

curl -s https://opencompanies.uk/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Legacy (2025-11-25): list the tools (no session to carry over)

curl -s https://opencompanies.uk/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'MCP-Protocol-Version: 2025-11-25' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

Each of these answers is a single JSON response.

Limits and fair use

Data caveats

Only identifiers issued by Companies House establish that two records are the same person or company. Where Companies House issues none, as for people with significant control, filings are grouped into records instead, as described below.

The data guide explains them in full, with how people and companies are identified, and status.json says how current each part is.

Feedback

send_feedback lets an assistant send the people who run OpenCompanies a short note about these tools: something no tool could answer, an answer that was wrong or confusing, or an error that did not say what would work. Its description tells the assistant to show you the note and send it only once you agree.

What is kept: the note, its kind, the tool it names, the client's name and version, the protocol and server versions, and the time. Never your IP address: only a keyed hash of it, to limit each address to 10 notes a day. A note holding an email address, an IP address or a web address with a query string is refused. Notes are read only by the people who run OpenCompanies, and deleted after 365 days.

Protocol

Instructions the server gives the assistant
OpenCompanies is an open, read-only map of UK companies from Companies House data (Open Government Licence v3.0). Companies are identified by company_number, people by person_id. Identity: only Companies House identifiers establish that two records are the same. Records described as possibly the same person share a name and birth month and year but are unconfirmed; present them as possible matches, not facts. A company is dissolved only when Companies House records it. Missing data is not proof of absence.

It holds companies (live and dissolved), officers, people with significant control (PSC), company ownership, corporate groups, registered addresses, SIC codes and accounts figures.

Coverage: control data only covers holders of more than 25% of shares or votes, or with the right to appoint most directors or significant influence; smaller shareholders usually do not appear. Accounts figures exist only for electronic filings from 2008, and a blank figure means not reported, not zero. Disqualification records are partial. Charges, insolvency notices, shareholdings of 25% or less, sanctions and credit data are not held.

Scale: some addresses host thousands of companies (formation agents) and some people hold thousands of appointments (nominee directors), so lists are capped and paged; pass next_cursor back as cursor for more.

Start with search_companies or search_people to get a company_number or person_id. Describe a company's state with status_group; is_active only means it is still on the register. The guide (https://opencompanies.uk/mcp/guide.md) explains these, identity_basis and the limits.

Cite the opencompanies.uk links in results. The official Companies House register is authoritative where they differ. Attribution: Contains public sector information licensed under the Open Government Licence v3.0. Source: Companies House.

If no tool can answer what the user asked, or an answer looks wrong, offer to tell OpenCompanies with send_feedback, and send it only once the user agrees.

Licence and attribution

The data comes from Companies House and is reused under the Open Government Licence v3.0. When you publish something built from it, include this attribution: Contains public sector information licensed under the Open Government Licence v3.0. Source: Companies House. Tool results carry the same attribution in every answer.

OpenCompanies is an independent project and is not affiliated with Companies House. The official register is the authoritative source: where anything here differs from it, Companies House's own entry takes precedence.

OpenCommons

OpenCompanies is one of the OpenCommons sites. Their MCP servers keep one contract (identity, paging, results, errors and feedback), so an assistant connected to more than one finds the same conventions in each. Where a record has a counterpart on another of the sites, its result links to it under external_links.