For SI agents
UK company data in your SI assistant
The CompanyStack MCP server lets Claude, Cursor and other assistants that support the Model Context Protocol look up UK companies for you: search the register, read officers and beneficial owners, pull filings and financials, check a health score and run a KYB check, all from a chat.
You need a CompanyStack API key. Create one free: the Free plan covers search, company profiles and lists (1,000 requests a day, 30 a minute).
Connect
The server is hosted, so there is nothing to install: point your client at https://api.companystack.co.uk/mcp (Streamable HTTP) and send your key in an X-Api-Key header, or as Authorization: Bearer.
Claude Code
claude mcp add --transport http companystack https://api.companystack.co.uk/mcp \
--header "X-Api-Key: cs_your_key"Claude Desktop
Add this to claude_desktop_config.json (Settings → Developer → Edit Config), then quit and reopen Claude Desktop. Claude Desktop's config file starts local programs only, so this uses mcp-remote, an open-source bridge (not made by CompanyStack), to reach the hosted server with your key. It needs Node.js 18 or later.
{
"mcpServers": {
"companystack": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://api.companystack.co.uk/mcp",
"--header", "X-Api-Key:${COMPANYSTACK_API_KEY}"
],
"env": { "COMPANYSTACK_API_KEY": "cs_your_key" }
}
}
}Cursor
Add to ~/.cursor/mcp.json for every project, or .cursor/mcp.json for one, and set COMPANYSTACK_API_KEY in your environment.
{
"mcpServers": {
"companystack": {
"url": "https://api.companystack.co.uk/mcp",
"headers": { "X-Api-Key": "${env:COMPANYSTACK_API_KEY}" }
}
}
}Any other client, or your own agent
Use the hosted URL with an X-Api-Key header from any MCP client library. The server is stateless, so a single request works too:
curl -s https://api.companystack.co.uk/mcp \
-H "X-Api-Key: cs_your_key" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-06-18" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_company","arguments":{"company_number":"00445790"}}}'Clients that only support OAuth sign-in, such as ChatGPT connectors and custom connectors on claude.ai, cannot send an API key header, so they cannot connect yet.
What you can ask
- “Find the company number for Greggs plc and tell me when its next accounts are due.”
- “Who are the directors and beneficial owners of 06450847? Has anything changed recently?”
- “Which other companies is the first director of 06450847 involved in?”
- “Show me the last five years of net assets and cash for this company, and flag anything that looks wrong.”
- “What's the health score for SC586124, and which signals pull it down?”
- “Run a KYB check on 00445790 for client reference CL-0042. The customer says it is Tesco PLC.”
- “Make a list called Suppliers and add 00445790 and 06450847 to it.”
- “Which companies on my 'Suppliers' list have overdue filings?”
- “Which companies with SIC code 62 and a Leeds (LS) postcode joined the register this week?”
The assistant chooses the tools and chains them, for example searching for a company number and then fetching its officers. Ask it to check that a search found the right company: name searches do not always put the company you mean first.
Tools
Each tool wraps one API endpoint and returns compact JSON, plus structuredContent matching its output schema. The plan column shows the lowest API plan that includes it. With a Free key, the other tools reply with an upgrade link rather than data.
| Tool | What it does | Plan |
|---|---|---|
| search_companies | Find companies by name words, status, SIC code, postcode or town, and get their company numbers. On Free, only the first page (up to 10 results). | Free |
| get_company | Register profile: status, type, incorporation date, registered office, SIC codes, accounts and confirmation statement due dates, previous names. | Free |
| get_officers | Current and resigned directors, secretaries and LLP members. | Starter |
| get_officer_appointments | A person’s other appointments, grouped by company. The whole Companies House register of officers is searched by name, so namesakes come back together: each appointment says which person it belongs to, with their month and year of birth. | Starter |
| get_persons_with_significant_control | The PSC register: who owns or controls the company, and how. | Starter |
| get_filing_history | Companies House filings, newest first, filterable by category. | Starter |
| get_financial_history | Figures parsed from filed accounts, with ratios, trends and signals. Money values are whole pounds (GBP) as filed. | Starter |
| get_health_score | A rules-based 0–100 indicator with grade, risk level and the signals behind it. It is not a credit rating. | Starter |
| get_accounts | Every year of filed accounts figures we hold, newest first, with where each year came from (filed, scanned or a later year's comparative) and the group or company basis. | Starter |
| screen_companies | The financial screener: companies by filed figures and growth, SIC code, region, town or local authority, incorporation date, overdue filings, Gazette notices and charges. | Starter |
| screen_sanctions | A company's name, owners and officers against the official sanctions lists, with each potential match for a person to review. A name match is not a finding that anyone is sanctioned. | Starter |
| run_kyb_check | Know-your-business check: pass, refer, fail or unable to check, with reason codes. Uses quota and stores a record on your account. | Starter |
| list_kyb_checks | KYB checks already run on your account, without running any more. | Starter |
| get_changes | The register change feed: companies added, updated and dissolved, filterable by SIC code and postcode. | Starter |
| get_lists | Your company lists, with counts, health grades, overdue filings and alerts. | Free |
| create_list | Create a named list: clients, suppliers, a portfolio or prospects. | Free |
| get_list_companies | The companies on one of your lists, filterable and sortable. | Free |
| add_companies_to_list | Add companies to a list, so they are monitored for changes. With no list given, they go on your default list, which is created if you have none. | Free |
Usage and limits
Every tool call is one API request against your plan's quota, exactly as if your own code had called the API, and it appears in your dashboard's usage. The one exception is adding companies without naming a list, which makes two requests (finding or creating your default list first). Protocol messages that fetch no data (such as listing the tools) are not charged, but are capped at 120 a minute per key. Plans and limits are on the pricing page.
When a limit is reached the tool tells the assistant how many seconds to wait. When a tool is not on your plan it says so, with the upgrade link.
About the data
The answers come from public registers, mainly Companies House, as CompanyStack holds them, and they can be incomplete or out of date. The health score is an indicator, not a credit rating, and a KYB check supports your own due diligence rather than replacing it. See the data sources.
Assistants can make mistakes when they summarise. Check anything important against the register before you rely on it.