Skip to main content
Glama

capabilities

Get UK company profile from Companies House

company_uk_profile
Read-onlyIdempotent

Return the core registered profile of a UK company from the Companies House register: name, status with derived is_active and is_striking_off, type, jurisdiction, incorporation and cessation dates, SIC codes with their official UK SIC 2007 descriptions, registered office address, previous names, and the accounts and confirmation-statement summary. Use when: You have a UK company number and need the standard registered record. Not for: You only need to know if the company is active — use company.uk.status (cheaper). Price: USD 0.004/call (x402), 0.003 (account key).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
company_numberYesCompanies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataYesCapability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.profile
metaYes

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed2 schema fields changed
    • changedInput schema / properties / company_number / description
      Previous value: -"Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call."New value: +"Companies House company number, also called the company registration number (CRN). Accepted shapes are the register's own — 1-8 digits (zero-padded to 8, e.g. 445790 → 00445790), one letter + 7 digits (R0000001), two letters + 6 digits (SC002180, NI000001, OC123456, OE000001), or the registered-society suffix forms (two letters + 5 digits + 1 letter; two letters + 4 digits + 2 letters). Case-insensitive; surrounding whitespace is ignored (which is why maxLength is 10); internal spaces and punctuation are not accepted. Any other value (for example PROBE) is rejected as INVALID_INPUT before payment and before any upstream call."
    • changedInput schema / properties / company_number / pattern
      Previous value: -"^\\s*[A-Za-z0-9]{1,8}\\s*$"New value: +"^\\s*(?:[0-9]{1,8}|[A-Za-z][0-9]{7}|[A-Za-z]{2}[0-9]{6}|[A-Za-z]{2}[0-9]{5}[A-Za-z]|[A-Za-z]{2}[0-9]{4}[A-Za-z]{2})\\s*$"
  2. Changed3 schema fields changed
    • removedInput schema / properties / companyNumber
      Removed value: -{
      -  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
      -  "maxLength": 10,
      -  "minLength": 1,
      -  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
      -  "type": "string"
      -}
    • addedInput schema / properties / company_number
      Added value: +{
      +  "description": "Companies House company number, also called the company registration number (CRN). The identifier itself is 1-8 letters/digits; surrounding whitespace is ignored (which is why maxLength is 10), but the value must not contain internal spaces. Short numeric values are zero-padded to 8 characters. A whitespace-only or over-long value is rejected as INVALID_INPUT before any payment or upstream call.",
      +  "maxLength": 10,
      +  "minLength": 1,
      +  "pattern": "^\\s*[A-Za-z0-9]{1,8}\\s*$",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "companyNumber"
      -]New value: +[
      +  "company_number"
      +]
  3. Changed7 schema fields changed
    • removedOutput schema / properties / data / additionalProperties
      Removed value: -false
    • changedOutput schema / properties / data / description
      Previous value: -"Contains public sector information licensed under the Open Government Licence v3.0 (Companies House)."New value: +"Capability output; full JSON Schema at https://api.eckari.com/v1/capabilities/company.uk.profile"
    • removedOutput schema / properties / data / properties
      Removed value: -{
      -  "accounts": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "accounting_reference_date": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "day": {
      -            "type": [
      -              "integer",
      -              "null"
      -            ]
      -          },
      -          "month": {
      -            "type": [
      -              "integer",
      -              "null"
      -            ]
      -          }
      -        },
      -        "type": [
      -          "object",
      -          "null"
      -        ]
      -      },
      -      "last_accounts": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "made_up_to": {
      -            "format": "date",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "period_end_on": {
      -            "format": "date",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "period_start_on": {
      -            "format": "date",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "type": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          }
      -        },
      -        "type": [
      -          "object",
      -          "null"
      -        ]
      -      },
      -      "next_accounts": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "due_on": {
      -            "format": "date",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "overdue": {
      -            "type": [
      -              "boolean",
      -              "null"
      -            ]
      -          },
      -          "period_end_on": {
      -            "format": "date",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "period_start_on": {
      -            "format": "date",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          }
      -        },
      -        "type": [
      -          "object",
      -          "null"
      -        ]
      -      }
      -    },
      -    "type": [
      -      "object",
      -      "null"
      -    ]
      -  },
      -  "can_file": {
      -    "type": [
      -      "boolean",
      -      "null"
      -    ]
      -  },
      -  "company_name": {
      -    "type": "string"
      -  },
      -  "company_number": {
      -    "type": "string"
      -  },
      -  "confirmation_statement": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "last_made_up_to": {
      -        "format": "date",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "next_due": {
      -        "format": "date",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "next_made_up_to": {
      -        "format": "date",
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "overdue": {
      -        "type": [
      -          "boolean",
      -          "null"
      -        ]
      -      }
      -    },
      -    "type": [
      -      "object",
      -      "null"
      -    ]
      -  },
      -  "date_of_cessation": {
      -    "format": "date",
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "date_of_creation": {
      -    "format": "date",
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "jurisdiction": {
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "previous_company_names": {
      -    "items": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "ceased_on": {
      -          "format": "date",
      -          "type": "string"
      -        },
      -        "effective_from": {
      -          "format": "date",
      -          "type": "string"
      -        },
      -        "name": {
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "name",
      -        "effective_from",
      -        "ceased_on"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "registered_office_address": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "address_line_1": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "address_line_2": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "care_of": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "country": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "locality": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "po_box": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "postal_code": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "premises": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "region": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "type": [
      -      "object",
      -      "null"
      -    ]
      -  },
      -  "registered_office_is_in_dispute": {
      -    "type": [
      -      "boolean",
      -      "null"
      -    ]
      -  },
      -  "registered_office_single_line": {
      -    "description": "Derived; the registered office rendered on one line by the same deterministic renderer company.uk.registered_office uses, so the two capabilities always agree. Format: the non-empty parts joined with \", \" in the order premises + address_line_1 (themselves joined by a space), address_line_2, locality, region, postal_code, country. Empty string when the register holds no address. It is a normalised rendering and is not byte-comparable with the register's own address_snippet in company.uk.search, which places country before the postcode.",
      -    "type": "string"
      -  },
      -  "resources": {
      -    "additionalProperties": false,
      -    "description": "Which related registers exist for this company (derived from the register's resource links). Use it to decide which further capability is worth calling. This block is also the deliberate replacement for the register's three deprecated profile booleans: has_charges (→ resources.charges, and company.uk.charges for the detail), has_insolvency_history and has_been_liquidated (→ resources.insolvency). Companies House marks all three deprecated and directs consumers to the links these flags are derived from, so Eckari does not surface them (ADR-004); their absence is a decision, not an omission.",
      -    "properties": {
      -      "charges": {
      -        "description": "True when the register exposes a charges resource for this company — the live replacement for the register's deprecated has_charges flag. Read the charges themselves with company.uk.charges.",
      -        "type": "boolean"
      -      },
      -      "filing_history": {
      -        "type": "boolean"
      -      },
      -      "insolvency": {
      -        "description": "True when the register exposes an insolvency resource for this company — the live replacement for the register's deprecated has_insolvency_history and has_been_liquidated flags. Eckari does not yet publish the insolvency detail itself (ADR-004).",
      -        "type": "boolean"
      -      },
      -      "officers": {
      -        "type": "boolean"
      -      },
      -      "persons_with_significant_control": {
      -        "description": "True when the register exposes any ownership resource for this company — the PSC list, the PSC statements collection or the PSC exemptions collection. company.uk.owners answers all three, and an exempt listed company such as TESCO PLC has no PSC list but does have an exemption, so a flag derived from the PSC list alone would route an agent away from the answer.",
      -        "type": "boolean"
      -      },
      -      "persons_with_significant_control_exemptions": {
      -        "description": "True when the register exposes the PSC exemptions collection — where a listed company's exemption from the PSC regime is recorded.",
      -        "type": "boolean"
      -      },
      -      "persons_with_significant_control_statements": {
      -        "description": "True when the register exposes the PSC statements collection — the company's own filed explanation of why a PSC entry is absent.",
      -        "type": "boolean"
      -      }
      -    },
      -    "required": [
      -      "officers",
      -      "persons_with_significant_control",
      -      "persons_with_significant_control_statements",
      -      "persons_with_significant_control_exemptions",
      -      "filing_history",
      -      "charges",
      -      "insolvency"
      -    ],
      -    "type": "object"
      -  },
      -  "sic_codes": {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "status": {
      -    "description": "Companies House company_status.",
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "status_detail": {
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "subtype": {
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "type": {
      -    "description": "Companies House company type (e.g. ltd",
      -    "llp).": null,
      -    "plc": null,
      -    "type": "string"
      -  },
      -  "undeliverable_registered_office_address": {
      -    "type": [
      -      "boolean",
      -      "null"
      -    ]
      -  }
      -}
    • removedOutput schema / properties / data / required
      Removed value: -[
      -  "company_number",
      -  "company_name",
      -  "status",
      -  "type",
      -  "date_of_creation",
      -  "sic_codes",
      -  "registered_office_address",
      -  "registered_office_single_line",
      -  "previous_company_names",
      -  "resources"
      -]
    • addedOutput schema / properties / meta / properties / attribution_url
      Added value: +{
      +  "format": "uri",
      +  "type": "string"
      +}
    • addedOutput schema / properties / meta / properties / retrieved_at / format
      Added value: +"date-time"
    • addedOutput schema / properties / meta / required
      Added value: +[
      +  "capability",
      +  "version",
      +  "retrieved_at",
      +  "source",
      +  "freshness",
      +  "request_id"
      +]
  4. First observed

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the bar is lower. The description adds useful context beyond annotations: it reveals that is_active and is_striking_off are derived fields, states pricing (USD 0.004/call), and implies no write side effects. This is more than minimal and contradicts nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary purpose and output scope, followed by usage conditions and pricing. The opening sentence is a long enumeration of returned fields, but each item helps an agent judge relevance. It is slightly verbose compared to a minimal two-sentence ideal, so it earns a 4 rather than 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low parameter count, rich input schema, existing output schema, and the annotations covering safety, the description is nearly complete. It includes price, usage boundaries, and output highlights. The only minor gap is the tool-name typo in the alternative reference, which slightly reduces completeness for routing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter company_number is already documented in great detail, including accepted formats, case-insensitivity, whitespace handling, and INVALID_INPUT rejection. The tool description itself adds no parameter-level meaning beyond 'You have a UK company number', which is appropriate but not above the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Return the core registered profile of a UK company') and enumerates the exact data elements returned, distinguishing it clearly from more narrow sibling tools. It also explicitly names the alternative company_uk_status, making separation from siblings unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit 'Use when' and 'Not for' guidance, including a cost-based reason to prefer company_uk_status for simple active checks. However, the alternative is written as 'company.uk.status' rather than the actual sibling name 'company_uk_status', creating a minor ambiguity that prevents a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.4/5.0
Disambiguation4/5

Tools are largely distinct, targeting specific entities (UK company, US company, domain, LEI, FX, location, parcel, weather) or sub-aspects (e.g., accounts vs. charges vs. directors). Overlap exists between company.uk.profile and company.uk.status (both contain status info, but the latter is cheaper and focused). Also, company.uk.filings and company.us.filings_latest could be confused if an agent generalizes 'filings' across jurisdictions.

Naming Consistency5/5

All tools follow a consistent pattern: domain_entity_subject (e.g., company_uk_accounts, domain_expiry, weather_us_alerts). Underscores and lower case are used throughout. Verbs are implied by the noun (e.g., 'search' for lookup, 'detect' for identification). No mixed conventions or unpredictable names.

Tool Count4/5

24 tools is on the high side but still reasonable for a general-purpose data server spanning multiple domains (company, domain, entity, fx, location, parcel, weather). Each domain gets a cohesive set, and the documentation justifies each tool. Could be slightly leaner if some niche tools (e.g., domain_expiry vs. registration) were merged, but overall scoping is acceptable.

Completeness4/5

Each domain offers good coverage: UK company tools cover CRUD-like operations (profile, status, search, filings, charges, directors, owners, registered office); similarly for US companies (profile, filings, resolve, latest filings). Weather has forecast, observation, alerts. Parcel only detects carrier (no tracking). Missing features like advanced filtering on company filings or less common domains, but core workflows are covered.

Resources