MCP server for accessing UK Companies House company data including profiles, officers, PSC information, and confirmation statements
Server has 7 tools with consistent naming (verb_noun pattern: get*) and basic schemas using Zod. All tools are READ_ONLY and well-scoped. However, descriptions are minimal (10-50 chars, well below the 194-char baseline), parameter descriptions are missing entirely, and output schemas are undocumented. Tools return raw JSON without field documentation. No error handling guidance, no pagination metadata in responses, and no field-level descriptions for parameters. Naming is clear but descriptions lack the LLM-optimization guidance required for reliable tool selection.
Search or get companies by name
Get the officers for a company
Get basic information on a company profile only when given a company number
Get the PSC for a company
Get the PSC statements for a company
Get the next made-up date for a company's confirmation statement
Parameter descriptions missing entirely. Zod schemas define types but LLMs cannot read JSON Schema, they rely on text descriptions. E.g., 'companyNumber' has no description explaining what format is expected or how to obtain it.
Tool descriptions are too brief (10-50 chars vs. 194-char baseline). Descriptions lack WHEN to use, WHAT it returns, and any prerequisites. E.g., 'Get basic information on a company profile only when given a company number' does not explain what fields are returned or when to call this vs. getCompanyOfficers.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get the PSC discrepancies for a report
Output schemas are undocumented. Tools return raw JSON.stringify() with no field documentation. LLMs cannot plan downstream calls or extract the right data without knowing what fields to expect. E.g., getCompanyOfficers returns JSON but no schema describes the structure of officers array or officer fields.
Pagination tools (getCompanyOfficers, getCompanyPscStatements) accept pageIndex and pageSize but responses do not include total count or next_cursor. LLMs cannot determine if more results exist or how to fetch them efficiently.
No error handling guidance. Tools return raw API responses without actionable recovery hints. If a company number is invalid, the LLM receives a raw error with no suggestion to try search_companies() first or validate the format.