Skip to main content
Glama
kaylum54

companies-house-screening-mcp

by kaylum54

Company snapshot

company_snapshot
Read-onlyIdempotent

Retrieve a company's profile, serving officers, charges, insolvency cases, and factual signals in a single request, replacing four separate API calls and filling absent sections.

Instructions

Everything worth knowing about one company in a single call: profile, serving officers, outstanding charges and insolvency cases, plus a list of signals read off the register. Use this instead of calling get_company, get_officers, get_charges and get_insolvency separately — it costs one round trip of yours rather than four, and it fills in the sections that Companies House reports as 404 when a company simply has none. The signals are facts, not a rating: this server does not score companies, and an empty signal list means nothing on the list was found rather than that the company is sound. Check sections_included before drawing a conclusion from an absent signal.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
verboseNoAlso return the untouched Companies House payload under `raw`, alongside the shaped result. Roughly two and a half times the size; use it only when a field you need is missing from the shaped result.
company_numberYesEight-character Companies House number, such as 00000006 or SC123456. Leading zeros may be omitted. This tool does not accept a company name — call find_company first if that is all you have.
include_chargesNoInclude charges. On by default.
include_officersNoInclude serving officers. On by default; turn it off to save one request per company.
include_insolvencyNoInclude insolvency cases. On by default.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
rawNoThe untouched Companies House payload. Present only when verbose was true.
metaYesProvenance and budget for this answer.
nameYes
statusNo
chargesNo
signalsYes
accountsYes
officersNo
age_yearsNo
sic_codesYes
insolvencyNo
dissolved_onNo
company_numberYes
incorporated_onNo
type_descriptionNo
sections_includedYesWhich sections were fetched. Signals can only reflect the sections listed here.
sections_unavailableYesSections that failed. The snapshot is still returned; treat those signals as unknown.
confirmation_statementYes
registered_office_addressNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changedv0.4.0
    • changedOutput schema / properties / charges / properties / holders / description
      Previous value: -"Who holds the outstanding charges."New value: +"Holders of returned charges not recorded as fully satisfied."
    • addedOutput schema / properties / charges / properties / part_satisfied_count
      Added value: +{
      +  "type": "number"
      +}
    • changedOutput schema / properties / charges / required
      Previous value: -[
      -  "total_count",
      -  "outstanding_count",
      -  "satisfied_count",
      -  "holders"
      -]New value: +[
      +  "total_count",
      +  "outstanding_count",
      +  "satisfied_count",
      +  "part_satisfied_count",
      +  "holders"
      +]
    • changedOutput schema / properties / meta / properties / licence / description
      Previous value: -"Companies House data is Open Government Licence v3.0."New value: +"OGL v3.0 applies to eligible public-sector information. Personal data and other OGL exclusions are not licensed by this label; applicable data-protection duties still apply."
    • addedOutput schema / properties / officers / properties / pagination
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Coverage of the fetched officer page, before filtering to active officers. Follow get_officers pagination for the full list; counts describe the whole register.",
      +  "properties": {
      +    "has_more": {
      +      "description": "More records exist. Call again with start_index advanced by `returned`.",
      +      "type": "boolean"
      +    },
      +    "items_per_page": {
      +      "type": "number"
      +    },
      +    "returned": {
      +      "description": "How many records are in this response.",
      +      "type": "number"
      +    },
      +    "start_index": {
      +      "type": "number"
      +    },
      +    "total_results": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "start_index",
      +    "items_per_page",
      +    "total_results",
      +    "returned",
      +    "has_more"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / officers / required
      Previous value: -[
      -  "active"
      -]New value: +[
      +  "pagination",
      +  "active"
      +]
    • changedOutput schema / properties / signals / items / properties / code / enum
      Previous value: -[
      -  "dissolved",
      -  "insolvency_proceedings",
      -  "not_active",
      -  "insolvency_history",
      -  "accounts_overdue",
      -  "confirmation_statement_overdue",
      -  "outstanding_charges",
      -  "floating_charge_over_all_assets",
      -  "no_active_officers",
      -  "recent_officer_departures",
      -  "incorporated_within_last_year",
      -  "registered_office_in_dispute"
      -]New value: +[
      +  "dissolved",
      +  "insolvency_proceedings",
      +  "not_active",
      +  "insolvency_history",
      +  "accounts_overdue",
      +  "confirmation_statement_overdue",
      +  "outstanding_charges",
      +  "part_satisfied_charges",
      +  "floating_charge_over_all_assets",
      +  "no_active_officers",
      +  "recent_officer_departures",
      +  "incorporated_within_last_year",
      +  "registered_office_in_dispute"
      +]
  2. First observedv0.2.0

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds valuable behavior: signals are facts not ratings, empty signal list means nothing found rather than soundness, incomplete 404 sections are filled, and the caller must check sections_included before concluding absence. This goes beyond the structured hints without contradicting them.

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 dense but well organized: it opens with the core value proposition, then gives the comparison to siblings, then the interpretation caveat, then the sections_included caution. Every sentence adds information and none are redundant with the schema or annotations.

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?

Given the output schema exists and annotations carry the safety profile, the description covers what an agent needs to invoke correctly: when to use it, what it returns at a high level, how to interpret empty signals, and how to control size/cost via parameters. Nothing critical is missing for a read-only aggregation tool.

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

Parameters4/5

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

Schema description coverage is 100%, so the schema already documents all five parameters well. The description adds context beyond the schema, particularly the round-trip cost implication of include_officers and the caution about verbose payload size. It does not re-describe every parameter, which is appropriate given full schema coverage.

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 uses a strong verb phrase ('Everything worth knowing about one company in a single call') and enumerates the exact resources covered: profile, serving officers, outstanding charges, insolvency cases, and signal list. It also explicitly contrasts with sibling calls (get_company, get_officers, get_charges, get_insolvency), making differentiation unmistakable.

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?

It explicitly states when to use this tool instead of the four separate sibling tools, noting the round-trip advantage and the fact that it fills in sections that Companies House reports as 404. It also warns against misinterpreting empty signal lists and directs users to check sections_included, and implicitly routes name-only lookups to find_company via the schema description.

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