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
- Who ultimately owns Tesco PLC?
- What other companies have the directors of 00445790 run, and which have been dissolved?
- Which software companies (SIC 62012) were incorporated in the last 30 days in the M1 postcode district?
- Compare the last two years of accounts figures for Tesco PLC and J Sainsbury plc.
- What is registered at the postcode EC1V 2NX, and is it a registration hub?
- How are Tesco PLC and Tesco Stores Limited connected?
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).
| Tool | What it does |
|---|---|
Search companiessearch_ 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 companyget_ |
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 companiesget_ |
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 officerslist_ |
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 controllist_ |
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 ownershipget_ 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 subsidiarieslist_ 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 groupget_ 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 figuresget_ |
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 checksrun_ 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 peoplesearch_ heavy |
Find company officers and people with significant control by name, optionally narrowed by birth year and month. |
Get personget_ |
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 roleslist_ |
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 disqualificationscheck_ |
Check a person against the director disqualification records OpenCompanies holds. |
Search addressessearch_ 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 addressget_ 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 codessearch_ |
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 connectionsfind_ heavy |
Find what two to five companies have in common, or two to five people. |
Find how two entities are connectedfind_ 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 graphget_ 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 statusget_ |
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 feedbacksend_ |
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.
| Prompt | What it does | Arguments |
|---|---|---|
Company due diligence reportcompany_ |
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. | companypurpose (optional) |
Who owns this company?who_ |
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 checkdirector_ |
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. | personbirth_ (optional)birth_ (optional) |
How are these connected?how_ |
Find how two companies or people are connected: shared officers, owners and addresses, then longer chains, with dates and caveats. | firstsecond |
New companies in an industrysector_ |
List UK companies recently incorporated in an industry, optionally in one postcode area, grouped by registered postcode with registration-agent addresses pointed out. | industrydays (optional)area (optional) |
Who is at this address?address_ |
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 companiescompare_ |
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
| Resource | What it holds |
|---|---|
OpenCompanies data guidehttps:// |
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 statushttps:// |
Record counts and when each source was last loaded. |
SIC codeshttps:// |
Every SIC 2007 code in the Companies House condensed list with section and company counts. |
Natures of controlhttps:// |
PSC nature-of-control codes in plain English with their share and voting bands. |
Company statuseshttps:// |
Raw Companies House status values and the status groups OpenCompanies derives from them. |
PSC statementshttps:// |
Statements a company can file instead of naming a person with significant control, explained. |
Accounts figureshttps:// |
What each accounts figure means, grouped as balance sheet and profit and loss, with coverage caveats. |
Records by identifier
| Template | What it holds |
|---|---|
Company record (Markdown)https:// |
One UK company by Companies House number, as Markdown: details, officers, people with significant control, accounts figures and connections. |
Company record (JSON)https:// |
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:// |
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:// |
Everyone recorded with significant control over one UK company, current first, as JSON. |
Accounts filing (JSON)https:// |
Figures from one electronically filed set of accounts, by company number and made-up date (yyyy-mm-dd), as JSON. |
Person record (Markdown)https:// |
One officer or person with significant control by OpenCompanies person_id, with their appointments and holdings, as Markdown. |
Person record (JSON)https:// |
One officer or person with significant control by OpenCompanies person_id, with their appointments and holdings, as JSON. |
Registered address (JSON)https:// |
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:// |
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:// |
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
- Lists come a page at a time. Pass the
next_cursorfrom one page ascursorto get the next. Searches and lists that cross many records stop after 1,000 rows, one company's officers or owners after 5,000, and one person's roles after 2,000; narrow the query to go further. - Totals stop counting at 1,000 unless a nightly count exists, and
total_is_cappedsays so. - Each database query may run for 8 seconds, and each tool call for 20 seconds in all. A query that runs out of time returns a message suggesting how to narrow it.
- Tools marked heavy in the tools table run at most 2 at a time across the whole site. When they are all busy you get a short "busy" message; try again a few seconds later.
- A tool result is at most 60,000 characters, a resource at most 1 MiB, and a request body at most 64 KiB. A legacy batch holds at most 10 messages.
- Please keep automated use gentle, a few requests a second at most. Heavy traffic may be rate limited.
- Please cache what you fetch. For work across the whole register, use the bulk data rather than paging through the MCP server.
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.
- Officers. An officer record is keyed on an identifier Companies House issues to officers, so its officer appointments are confirmed as belonging to one officer record.
- People with significant control. A control record groups control filings that share the same name and birth month and year. Companies House issues no identifier for people with significant control, so the grouping is a strong lead rather than proof: two people with a common name and the same birth month and year would share one record.
- Possibly the same person: same name and birth month and year. Unconfirmed; people with common names often share these. Results label each possible match with how it was found and whether anyone has reviewed it.
- Dissolution. A company is treated as dissolved only when Companies House has recorded it, through its status or a dissolution date. Missing from a register snapshot is not dissolution, and dissolution is not failure: many solvent companies are struck off voluntarily.
- Disqualifications. Disqualification records come from Companies House's live disqualification feed since OpenCompanies began collecting it, not the full register. Possible matches are unconfirmed: match_basis says whether a record shares the name and birth month and year (name_and_birth_date), the name and birth year (name_and_birth_year) or only words of the name (name_only). No match does not mean a person is not disqualified; check the official register.
- Control. The register of people with significant control only covers holdings of more than 25% of shares or votes, the right to appoint or remove a majority of the board, and significant influence or control, so most shareholders with 25% or less never appear.
- Accounts. Figures come only from accounts filed electronically since 2008. A blank figure means it was not reported, not that it was zero, and figures are as filed, not verified.
- Not held. Charges, insolvency notices, shareholdings of 25% or less, sanctions and credit data. Missing data is not proof of absence.
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
- One endpoint,
https://opencompanies.uk/mcp, speaking Streamable HTTP over POST. - Modern clients use protocol version 2026-07-28: no handshake, per-request
_meta,server/discover, and theMCP-Protocol-Version,Mcp-MethodandMcp-Nameheaders. - Legacy clients use
initializewith 2025-11-25, 2025-06-18 or 2025-03-26. A legacy request without theMCP-Protocol-Versionheader is treated as 2025-03-26, the only revision that allows batches (up to 10 messages). Older revisions never see fields added after them. - Stateless: no sessions, no
Mcp-Session-Id, no cookies and no GET stream. A GET from an MCP client gets 405; a browser gets this page. - Every answer is a single JSON response but one: a modern client's
subscriptions/listengets a short event stream that acknowledges it and ends at once, since nothing is ever pushed. - Tools, resources, prompts and completions. No logging, resource subscriptions, change notifications, sampling, elicitation or tasks.
- No OAuth and no API keys: the server never asks a client to sign in. Requests from every origin are allowed (CORS).
- Discovery documents: the server card and the AI catalog. The site's source also holds a
server.jsonfor the official MCP Registry.
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.
- OpenCharities, UK charities from the three regulators' registers: England and Wales, Scotland and Northern Ireland:
https://opencharities.uk/mcp - OpenPostcodes, every live UK postcode from the ONS Postcode Directory, with its location, geographies and nearest services:
https://openpostcodes.uk/mcp - OpenProperties, residential property sales in England and Wales from HM Land Registry's Price Paid Data:
https://openproperties.uk/mcp