Skip to main content
Glama

capabilities

List UK company filing history from Companies House

company_uk_filings
Read-onlyIdempotent

Return the filing history of a UK company from the Companies House register — accounts, confirmation statements, officer appointments, address and capital changes, resolutions and mortgages — most recent first, optionally filtered by category, with date, form type (AA, CS01, AP01, TM01), the readable register description, registrar annotations and a document_url for every filed image. Use when: What has this UK company filed recently? Not for: You need the current directors themselves rather than the filing events — use company.uk.directors. Price: USD 0.005/call (x402), 0.004 (account key).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum filings to return per page (1-100). Default 5.
detailNoHow much of each filing to return. Default summary: the readable description, its source, the register's annotations, the form type and the document URL. `full` adds the register's raw description_key and description_values for reconciliation against a register capture.
offsetNoZero-based index into the register's filing list for the applied category filter. Nothing is filtered out after reading, so page.has_more is simply offset + returned < page.total; pass back page.next_offset.
categoryNoOptional comma-separated register categories to include (e.g. accounts, address, annual-return, capital, change-of-name, incorporation, liquidation, miscellaneous, mortgage, officers, resolution, confirmation-statement). The applied value is echoed back as query.category.
company_numberYesCompanies House company number. 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.filings
metaYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / company_number / description
      Previous value: -"Companies House company number. 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. 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. 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. 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. Changed11 schema fields changed
    • changedInput schema / properties / category / description
      Previous value: -"Optional comma-separated register categories to include (e.g. accounts, address, annual-return, capital, change-of-name, incorporation, liquidation, miscellaneous, mortgage, officers, resolution, confirmation-statement). The applied value is echoed back as category_filter."New value: +"Optional comma-separated register categories to include (e.g. accounts, address, annual-return, capital, change-of-name, incorporation, liquidation, miscellaneous, mortgage, officers, resolution, confirmation-statement). The applied value is echoed back as query.category."
    • addedInput schema / properties / detail
      Added value: +{
      +  "description": "How much of each filing to return. Default summary: the readable description, its source, the register's annotations, the form type and the document URL. `full` adds the register's raw description_key and description_values for reconciliation against a register capture.",
      +  "enum": [
      +    "summary",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum filings to return per page (1-100). Default 25."New value: +"Maximum filings to return per page (1-100). Default 5."
    • changedInput schema / properties / offset / description
      Previous value: -"Zero-based index into the register's filing list for the applied category filter. Nothing is filtered out after reading, so for this list offset + filings.length < total_count is the end-of-list test."New value: +"Zero-based index into the register's filing list for the applied category filter. Nothing is filtered out after reading, so page.has_more is simply offset + returned < page.total; pass back page.next_offset."
    • 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.filings"
    • removedOutput schema / properties / data / properties
      Removed value: -{
      -  "category_filter": {
      -    "because total_count depends on it.": null,
      -    "description": "Derived; the category filter actually applied to this response (the normalised input value)",
      -    "or null when no filter was applied. Makes a logged or cached response self-describing": null,
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "company_number": {
      -    "type": "string"
      -  },
      -  "filing_history_status": {
      -    "description": "The register's own statement about this company's filing history, passed through unchanged (e.g. filing-history-available). It qualifies a short or empty list: without it, 'no filings match this filter' and 'the register holds no filing history for this company' look identical. Null when the register omits it.",
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "filings": {
      -    "description": "The register's own filing order, passed through unchanged — reverse chronological (most recent first) in practice. Eckari applies no sort of its own and guarantees no ordering; sort on date yourself if your logic depends on it.",
      -    "items": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "annotations": {
      -          "description": "Registrar annotations attached to this filing, verbatim and in register order; empty when there are none. The register renders them beneath the filing's own description (e.g. \"Purchase of own shares. ANNOTATION Clarification …\"), so a consumer reading description alone is not reading what the register says about the filing. Annotations are the registrar's after-the-fact clarifications and corrections.",
      -          "items": {
      -            "additionalProperties": false,
      -            "properties": {
      -              "annotation": {
      -                "description": "The annotation text as published by the register.",
      -                "type": "string"
      -              },
      -              "date": {
      -                "description": "The date the annotation was added as published by the register (ISO date or date-time; passed through unchanged). Null when the register omits it.",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "description": {
      -                "description": "The register's own description key for the annotation entry (e.g. annotation). Null when the register omits it.",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "annotation",
      -              "date",
      -              "description"
      -            ],
      -            "type": "object"
      -          },
      -          "type": "array"
      -        },
      -        "category": {
      -          "type": "string"
      -        },
      -        "date": {
      -          "description": "Date the filing was processed by the register.",
      -          "format": "date",
      -          "type": "string"
      -        },
      -        "description": {
      -          "description": "Human-readable description of the filing, rendered from the Companies House filing_history_descriptions enumeration with the register's own description_values merged in (e.g. \"Confirmation statement made on 2026-06-18 with no updates\"). Never invented: an unrecognised key is rendered as a readable form of the key itself and flagged by description_source. Registrar annotations are NOT merged into this text — read annotations[] as well to see everything the register shows for the filing.",
      -          "type": "string"
      -        },
      -        "description_key": {
      -          "description": "Raw register description key for the filing (e.g. capital-return-purchase-own-shares), stable for machine matching.",
      -          "type": "string"
      -        },
      -        "description_source": {
      -          "description": "\"enumeration\" when description_key matched the published Companies House enumeration; \"fallback\" when it did not and the key itself was made readable.",
      -          "enum": [
      -            "enumeration",
      -            "fallback"
      -          ],
      -          "type": "string"
      -        },
      -        "description_values": {
      -          "addresses": null,
      -          "capital figures). Passed through unmodified; null when the register supplies none.": null,
      -          "description": "Placeholder values supplied by the register for the description template (dates",
      -          "officer names": null,
      -          "type": [
      -            "object",
      -            "null"
      -          ]
      -        },
      -        "has_document": {
      -          "description": "Derived; true when the register exposes document metadata for this filing, meaning a filed image exists on the Companies House document service. It is a statement about the register, not a promise from Eckari: this capability never returns the document itself and provides no download URL.",
      -          "type": "boolean"
      -        },
      -        "pages": {
      -          "type": [
      -            "integer",
      -            "null"
      -          ]
      -        },
      -        "paper_filed": {
      -          "type": [
      -            "boolean",
      -            "null"
      -          ]
      -        },
      -        "subcategory": {
      -          "type": [
      -            "string",
      -            "null"
      -          ]
      -        },
      -        "transaction_id": {
      -          "type": "string"
      -        },
      -        "type": {
      -          "AP01": null,
      -          "CS01": null,
      -          "TM01).": null,
      -          "description": "Register filing type code (e.g. AA",
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "transaction_id",
      -        "date",
      -        "category",
      -        "type",
      -        "description",
      -        "description_key",
      -        "description_values",
      -        "description_source"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "offset": {
      -    "description": "The register index this page started at (the requested offset).",
      -    "type": "integer"
      -  },
      -  "total_count": {
      -    "description": "Total filings for this company after the category filter in category_filter — register-wide for that filter, not a count of the returned page. It is filter-dependent, so read it together with category_filter.",
      -    "type": "integer"
      -  }
      -}
    • removedOutput schema / properties / data / required
      Removed value: -[
      -  "company_number",
      -  "total_count",
      -  "category_filter",
      -  "offset",
      -  "filings"
      -]
    • 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.7/5.0
Behavior5/5

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

Beyond annotations that mark it read-only and idempotent, the description adds real behavioral detail: results sorted most-recent-first, optional category filtering, output fields, and document URLs for every filed image. It also discloses pricing, which is useful for call decisions.

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

Conciseness5/5

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

The description is compact and front-loaded: the core returning behavior comes first, followed by crisp selection guidance and pricing. No wasted words.

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

Completeness5/5

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

Together with the fully described schema and output schema, the description covers what the tool returns, when to use it, what it is not for, and cost. Nothing material is missing for an agent to invoke it correctly.

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?

Input schema coverage is 100%, and each parameter already has detailed descriptions including validation patterns, defaults, and page semantics. The description adds context about category filtering and form types, but does not need to explain parameters further; baseline 3 is appropriate.

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 names a specific verb ('Return'), a precise resource ('filing history of a UK company from the Companies House register'), and a concrete scope with examples of covered filing types. It also differentiates itself from company_uk_directors by clarifying it returns filing events rather than current directors.

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

Usage Guidelines5/5

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

Includes explicit 'Use when' and 'Not for' guidance, giving a representative query and naming the sibling tool to use instead for director lists. This removes ambiguity about when to select this tool.

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.

Resources