companies-house-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@companies-house-mcpGet company profile for 01234567"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
companies-house-mcp
A STDIO-based MCP server that exposes the UK Companies House public data API as tools for MCP clients (Claude Desktop, Claude Code, etc.).
Setup
Get an API key. Register at https://developer.company-information.service.gov.uk/, create an application, and generate a key of type REST.
Install dependencies (using uv, already configured for this project):
uv sync(Or with plain
pipin a virtualenv:pip install -e .)Set the API key in your environment:
export COMPANIES_HOUSE_API_KEY=your-key-hereSee
.env.examplefor reference — this project does not auto-load.envfiles; set the variable in your shell or in your MCP client's server config.
Related MCP server: companieswise
Running
Directly over stdio:
uv run companies-house-mcpWith the MCP Inspector for interactive testing:
uv run mcp dev src/companies_house_mcp/server.pyRegistering with Claude Code / Claude Desktop
Claude Code:
claude mcp add companies-house \
-e COMPANIES_HOUSE_API_KEY=your-key-here \
-- uv --directory /Users/michaelhughes/companies-house-mcp run companies-house-mcpClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"companies-house": {
"command": "uv",
"args": [
"--directory",
"/Users/michaelhughes/companies-house-mcp",
"run",
"companies-house-mcp"
],
"env": {
"COMPANIES_HOUSE_API_KEY": "your-companies-house-rest-api-key"
}
}
}
}Tools
Tool | Description |
| Search for companies by name or company number |
| Search for officers (directors, secretaries, etc.) by name |
| Full profile of a company (status, SIC codes, incorporation date, etc.) |
| A company's registered office address |
| Officers of a company, current and past |
| A company's filing history |
| Detail of a single filing history item |
| Persons with significant control (PSCs) over a company |
| Charges (mortgages) registered against a company |
| Detail of a single charge |
| Insolvency practice information, if any |
| UK establishments linked to a company (overseas companies) |
Company numbers may be passed with or without leading zeros (e.g. 123456 is
normalized to 00123456); alphanumeric-prefixed numbers (e.g. SC123456) are
left as-is (upper-cased). Company numbers, charge IDs, and filing transaction
IDs are all validated to contain only letters and digits before being used in
a request — anything else (e.g. stray /, .., ?) is rejected with a clear
error rather than silently altering the request.
get_insolvency, list_charges, list_persons_with_significant_control, and
list_uk_establishments return a clear empty result (e.g.
{"cases": [], "message": "No insolvency data for this company"}) rather than
an error when a company simply has none of that data — Companies House 404s
these endpoints both for "no data" and for a nonexistent company, so this
distinction is made by double-checking the company profile before treating a
404 as "empty."
Companies House rate-limits API keys to 600 requests per 5 minutes; a 429
response is surfaced as a clear tool error including the Retry-After value.
Testing
uv run pytestAvailable Tools
12 toolsget_chargeB
Get the detail of a single charge (mortgage) registered against a company.
| Name | Required | Description | Default |
|---|---|---|---|
| charge_id | Yes | ||
| company_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| etag | No | |
| links | No | |
| status | No | |
| created_on | No | |
| acquired_on | No | |
| charge_code | No | |
| particulars | No | |
| resolved_on | No | |
| delivered_on | No | |
| satisfied_on | No | |
| transactions | No | |
| charge_number | No | |
| classification | No | |
| secured_details | No | |
| insolvency_cases | No | |
| persons_entitled | No | |
| scottish_alterations | No | |
| assets_ceased_released | No | |
| covering_instrument_date | No | |
| more_than_four_persons_entitled | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only indicates a read operation ('Get'). It lacks details on authentication, rate limits, or any side effects beyond the obvious non-destructive nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. However, it could be improved by adding brief parameter context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and the minimal description, the tool is under-documented. Even with an output schema, the description does not explain the return value or any edge cases, making it incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention or explain any parameters, and the input schema has no descriptions (0% coverage). The tool requires two parameters, but no context is provided for their format or usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves details of a single charge (mortgage) for a company, using a specific verb and resource, which distinguishes it from sibling tools like list_charges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for fetching a specific charge, but it provides no explicit guidance on when to use it versus alternatives (e.g., list_charges) or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_profileA
Get the full profile of a company (status, SIC codes, incorporation date, address, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| etag | No | |
| type | No | |
| links | No | |
| subtype | No | |
| accounts | No | |
| can_file | No | |
| sic_codes | No | |
| has_charges | No | |
| company_name | No | |
| jurisdiction | No | |
| annual_return | No | |
| company_number | No | |
| company_status | No | |
| service_address | No | |
| date_of_creation | No | |
| date_of_cessation | No | |
| has_been_liquidated | No | |
| company_status_detail | No | |
| branch_company_details | No | |
| confirmation_statement | No | |
| has_insolvency_history | No | |
| partial_data_available | No | |
| previous_company_names | No | |
| foreign_company_details | No | |
| registered_office_address | No | |
| last_full_members_list_date | No | |
| external_registration_number | No | |
| is_community_interest_company | No | |
| registered_office_is_in_dispute | No | |
| undeliverable_registered_office_address | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It accurately describes the tool as a read operation retrieving a company profile, which is adequate for this simple query. However, it omits potential need for authentication or company number validity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the tool's purpose and key data included. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter) and the presence of an output schema (not shown but noted), the description covers the essential purpose and data types. It omits return format details, but the output schema likely provides that. Slightly more context on parameter origin could improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It fails to explain the 'company_number' parameter beyond its literal name. While the parameter is self-explanatory, the description could specify it is the unique identifier (e.g., Companies House registration number).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a company's full profile, listing specific data points like status, SIC codes, incorporation date, and address. It distinguishes itself from sibling tools (e.g., get_charge, get_filing_history_item) that focus on specific aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like get_registered_office_address or list_company_officers. Users must infer from the tool's general purpose, which may lead to confusion or misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_filing_history_itemB
Get the detail of a single filing history item for a company.
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes | ||
| transaction_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | No | |
| type | No | |
| links | No | |
| pages | No | |
| barcode | No | |
| category | No | |
| annotations | No | |
| description | No | |
| paper_filed | No | |
| resolutions | No | |
| subcategory | No | |
| transaction_id | No | |
| associated_filings | No | |
| description_values | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only states 'Get the detail,' implying a safe read operation, but does not disclose authorization needs, rate limits, or any side effects. With zero annotations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It is appropriately concise for a simple retrieval tool, though could benefit from slightly more detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 required parameters, no annotations, and 0% schema coverage, the description is too sparse. It does not explain how to obtain transaction_id or any prerequisites. The output schema exists but the description provides no context about return values or error scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the schema provides no parameter descriptions. The description mentions 'company_number' and 'transaction_id' but adds no additional meaning beyond the parameter names. It does not clarify formats, sources, or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the detail of a single filing history item for a company.' It uses a specific verb (Get) and resource (filing history item), distinguishing it from sibling tools like list_filing_history which lists multiple items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or when not to use this tool. The description implies it's for a single item when a transaction_id is available, but does not mention alternatives or prerequisites. Score reflects the lack of usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insolvencyB
Get insolvency practice information for a company, if any.
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| etag | No | |
| cases | No | |
| status | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only states 'if any' implying optional existence, but fails to disclose behavior on missing company (e.g., 404) or any side effects. Lacks detail on idempotency or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with key action, no redundant words. Efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimal but acceptable for a simple read operation with an output schema. However, lacks guidance on error handling and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds no meaning beyond the parameter name 'company_number'. No format, example, or constraints provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and resource 'insolvency practice information' for a company. It distinguishes from sibling tools like get_charge and get_company_profile by specifying the unique resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. Does not mention prerequisites, error cases, or scenarios where other tools might be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_registered_office_addressC
Get a company's registered office address.
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| po_box | No | |
| region | No | |
| care_of | No | |
| country | No | |
| locality | No | |
| premises | No | |
| postal_code | No | |
| address_line_1 | No | |
| address_line_2 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only operation via the verb 'Get', but no behavioral traits are disclosed (e.g., authentication requirements, rate limits, idempotency). Since no annotations are provided, the description carries the full burden and fails to add meaningful transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—a single sentence with no wasted words. It is front-loaded with the core purpose, earning its place without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown), the description need not explain return values. However, the lack of annotations and usage guidance means the tool is incomplete for an agent to decide when to invoke it reliably. It is minimally adequate for a simple getter but lacks contextual cues.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the company_number parameter. It adds no meaning beyond the schema's type and required status, leaving the agent to infer the parameter's role without guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the specific resource 'a company's registered office address', which distinguishes it from sibling tools like get_company_profile that may return more comprehensive data. However, it does not specify the scope or any filtering criteria, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as get_company_profile or list_uk_establishments. There are no exclusions, prerequisites, or context for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chargesC
List charges (mortgages) registered against a company.
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| etag | No | |
| items | No | |
| message | No | |
| total_count | No | |
| satisfied_count | No | |
| unfiletered_count | No | |
| part_satisfied_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It only states that the tool lists charges, but omits behavioral details such as pagination, filtering, ordering, rate limits, or any potential side effects. Minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 8 words, no redundancy or filler. Front-loaded with key action and resource. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema, the description is incomplete. It lacks parameter explanation and behavioral context. The output schema covers return values, but the description itself is insufficient for confident use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fails to explain the sole parameter 'company_number' (e.g., format, valid range). No meaning is added beyond the schema's field name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('list charges'), defines the resource ('charges (mortgages)'), and specifies the scope ('registered against a company'). It distinguishes from siblings like 'get_charge' (single charge) and 'list_filing_history' (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'list_filing_history' or 'list_company_officers'. The description implies a company number is needed but lacks context on prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_company_officersB
List current and past officers (directors, secretaries, etc.) of a company.
| Name | Required | Description | Default |
|---|---|---|---|
| order_by | No | ||
| start_index | No | ||
| register_type | No | ||
| register_view | No | ||
| company_number | Yes | ||
| items_per_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| etag | No | |
| kind | No | |
| items | No | |
| links | No | |
| start_index | No | |
| active_count | No | |
| total_results | No | |
| inactive_count | No | |
| items_per_page | No | |
| resigned_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It only states the purpose but does not mention that it is read-only, whether it returns all officers or paginated, or any ordering defaults. The minimal description leaves significant unknowns for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that directly states the tool's function with no unnecessary words. It is front-loaded with the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, no schema descriptions, no annotations, and an output schema exists (which might document return values), the description is insufficient. It doesn't explain pagination, ordering, or the effect of optional parameters. The agent lacks crucial context for proper invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 6 parameters with 0% description coverage, meaning the schema provides no explanations. The description adds no information about what each parameter (e.g., order_by, start_index, register_type, register_view, items_per_page) does or how to use them. The agent would have no guidance on parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List', the resource 'officers of a company', and specifies scope (current and past) with examples (directors, secretaries, etc.). It effectively distinguishes from sibling tools like search_officers which is search-based.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you need officers for a specific company (since company_number is required), but does not provide explicit guidance on when to use this tool versus alternatives like search_officers or when not to use it. No exclusions or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filing_historyC
List a company's filing history (annual returns, accounts, resolutions, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | ||
| start_index | No | ||
| company_number | Yes | ||
| items_per_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| etag | No | |
| kind | No | |
| items | No | |
| start_index | No | |
| total_count | No | |
| items_per_page | No | |
| filing_history_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden for behavioral disclosure. It identifies the action as listing but fails to mention it is read-only, how pagination works, or error handling for invalid inputs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at one sentence, but it lacks structure and does not fully justify its brevity given the need for parameter explanation. It is front-loaded with the main action but is too minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and siblings (e.g., get_filing_history_item), the description provides insufficient context for correct invocation. It fails to address pagination, filtering by category, or distinguish from the single-item retrieval sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds no meaning to any of the 4 parameters (category, start_index, company_number, items_per_page). The description only mentions the general resource, leaving parameters entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and resource 'company's filing history' with examples of included document types. However, it does not explicitly differentiate from sibling tool get_filing_history_item, which retrieves a single filing item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like get_filing_history_item, nor any prerequisites (e.g., valid company_number) or context for pagination parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_persons_with_significant_controlC
List persons with significant control (PSCs) over a company.
| Name | Required | Description | Default |
|---|---|---|---|
| start_index | No | ||
| register_view | No | ||
| company_number | Yes | ||
| items_per_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| etag | No | |
| kind | No | |
| items | No | |
| links | No | |
| message | No | |
| start_index | No | |
| active_count | No | |
| ceased_count | No | |
| total_results | No | |
| items_per_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as pagination, rate limits, authentication requirements, or data freshness. The schema implies pagination via start_index and items_per_page, but this is not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, making it concise. However, it is too brief to cover essential information, but for conciseness alone it scores well.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks information about parameters (no explanations), usage context, and prerequisites. It is insufficient for an agent to use this tool correctly, given four parameters and no schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning parameter descriptions are absent from the schema. The tool description does not explain any parameters (company_number, start_index, register_view, items_per_page), leaving the agent without necessary context for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists persons with significant control over a company, matching the tool name. It distinguishes from siblings like list_company_officers, though it lacks specificity about the legal context (e.g., UK Companies House).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like list_company_officers. The description only states what it does, not when it is appropriate or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_uk_establishmentsC
List UK establishments linked to a company (relevant for overseas companies).
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| etag | No | |
| kind | No | |
| items | No | |
| links | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states 'List' implying read-only, but does not confirm safety, side effects, data volume, or response format. For a tool with no annotations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the key information without any extraneous words. It is appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (not provided), the description does not explain what UK establishments are or what the output contains. However, for a simple listing tool with one parameter, the description is minimally adequate for an agent to understand the basic function.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one required parameter (company_number) with 0% description coverage. The description does not explain the parameter's meaning, format, or constraints. It only mentions 'linked to a company' loosely, which does not compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'UK establishments', and provides context that it is relevant for overseas companies. Although it doesn't explicitly distinguish from sibling tools, the siblings are all different resources (charges, officers, etc.), so the purpose is sufficiently clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a hint about relevance for 'overseas companies', but does not specify when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. There is no guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesC
Search for companies by name or company number.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | ||
| start_index | No | ||
| restrictions | No | ||
| items_per_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| etag | No | |
| kind | No | |
| items | No | |
| start_index | No | |
| total_results | No | |
| items_per_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It mentions 'Search' implying a read operation but provides no details about pagination, rate limits, authentication, or other behavioral traits. Input schema hints at pagination via 'start_index' and 'items_per_page', but the description does not address this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with no unnecessary words. However, brevity comes at the cost of completeness. It earns a high score for conciseness but not for structure, as it lacks any auxiliary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no annotations, and an output schema exists, the description is too brief. It does not cover pagination, filtering options, or result structure, leaving the agent with insufficient context for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It partially explains the 'q' parameter ('by name or company number') but provides no information about 'start_index', 'restrictions', or 'items_per_page'. With 4 parameters, this is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Search) and resource (companies), with specific search criteria (by name or company number). It implicitly distinguishes from sibling tools like search_officers by focusing on companies, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no conditions or exclusions mentioned. The description only states what it does without providing context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_officersC
Search for company officers (directors, secretaries, etc.) by name.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | ||
| start_index | No | ||
| items_per_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | |
| items | No | |
| start_index | No | |
| total_results | No | |
| items_per_page | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only mentions searching by name but does not disclose behavioral traits such as read-only nature, pagination behavior, rate limits, or whether results are ordered. The description is minimal and lacks important operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise but functional. It could be expanded to include more detail without becoming overly verbose. It adequately conveys the core purpose but nothing more.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is an output schema and the tool has 3 parameters, the description is incomplete. It doesn't mention what the response contains (e.g., a list of officers with details), pagination, or that it's a read-only operation. The description leaves too many gaps for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 3 parameters with 0% description coverage. The description only addresses the 'q' parameter (search by name), but does not explain 'start_index' or 'items_per_page'. It adds marginal value beyond the schema's property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for company officers by name, specifying the resource (officers) and action (search). It distinguishes from sibling tools like search_companies (searches for companies) and list_company_officers (lists officers for a specific company). However, it could be more specific about the scope (e.g., across all companies).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, it doesn't mention that this tool searches across all companies, while list_company_officers is for a specific company. No when-not-to-use or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.0- First observed
get_charge - First observed
get_company_profile - First observed
get_filing_history_item - First observed
get_insolvency - First observed
get_registered_office_address - First observed
list_charges - First observed
list_company_officers - First observed
list_filing_history - First observed
list_persons_with_significant_control - First observed
list_uk_establishments - First observed
search_companies - First observed
search_officers
TDQS
Scored across 12 tools
Every tool targets a distinct entity (company profile, charges, officers, filing history, PSCs, UK establishments, insolvency, registered address) or search type (companies, officers), with no overlap in purpose.
All tools follow a consistent verb_noun pattern using snake_case (e.g., get_company_profile, list_charges, search_companies), with uniform prefixes for single resources (get_), collections (list_), and searches (search_).
12 tools is well-scoped for a company information API, covering core data types without being excessive or too few.
The tool surface covers all major Companies House data types: profile, officers, charges, filing history, PSCs, insolvency, establishments, and address, plus search for companies and officers. No obvious gaps for a read-only API.
Maintenance
Related MCP Connectors
UK company records from Companies House, with alerts on new filings, officer and status changes.
UK company register lookups plus US, EU and UN sanctions screening. Every answer cites source.
Companies House MCP — UK statutory company registry (BYO key)
UK company data: profiles, iXBRL financials, directors, PSC chains, ECCTA. Hosted, no key.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables 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.15 npm13MIT

companieswiseofficial
AlicenseAqualityDmaintenanceProvides 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.327 npmApache 2.0- AlicenseAqualityCmaintenanceEnables AI assistants to search and retrieve UK Companies House data including company profiles, officers, and filing history via the official API.470 npm1MIT
- FlicenseNot gradedqualityBmaintenanceMCP server exposing the full UK Companies House Public Data API, enabling natural language queries for company profiles, search, officers, filing history, charges, insolvency, and persons with significant control, as well as downloading and reading PDF documents.-