MCP server for searching UK companies and retrieving their filings from Companies House
Strong foundation with 8 well-named tools using clear verb_noun patterns (search_, get_, list_, fetch_, extract_, clear_). All tools have descriptions (avg 180 chars, within 10-1024 baseline). Input schemas are fully visible with proper JSON Schema types and descriptions. Output schemas are documented in descriptions. Key gaps: no enum constraints on category/type parameters, no explicit error recovery guidance, no tool annotations (readOnlyHint/destructiveHint), and clear_cache lacks confirmation pattern despite destructive nature.
Delete downloaded filing documents from the local cache. Pass ch_number to clear one company; omit it to clear everything. Returns {deleted_files, freed_bytes, db_records_removed}. document_ids from list_filings remain valid after a clear.
Parse a cached iXBRL .xhtml file and return structured financial facts as JSON. Use the local_path from fetch_filing or get_latest when content_type is application/xhtml+xml, or any .xhtml entry local_path from list_zip_contents. Returns {facts, count, truncated, render_type, warnings?}. render_type is "native_ixbrl" or "pdf_rendered"; when "pdf_rendered", the warnings array explains that narrative text is not reliably accessible and lists any alternative formats available in the archive. When truncated is true the document contained more facts than the cap — use name_prefix to narrow the query and retrieve the facts you need.
Download a specific filing document to the local cache. Use the document_id from list_filings or get_latest output. Returns {document_id, local_path, content_type, file_size_bytes, source, is_archive?, total_in_archive?, truncated?}. When is_archive is true the filing was delivered as a zip archive; call list_zip_contents with the same ch_number and document_id to see all extracted files. When truncated is true the archive contained more files than could be extracted; total_in_archive shows the full count.
Get the profile of a UK company by its Companies House number. Returns name, status, type, SIC codes, registered address, and date of incorporation.
clear_cache is destructive but lacks confirmation/dry-run pattern. No explicit warning that deletion is irreversible or guidance on recovery.
category parameter in list_filings and get_latest accepts free-form strings ('accounts', 'confirmation-statement') but no enum constraint. LLMs may hallucinate invalid categories.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. Clients cannot infer safety properties without reading descriptions.
Error handling descriptions are absent. No guidance on what to do if a company is not found, filing is corrupted, or cache is full.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Fetch the most recent filing of a given category for a UK company. Combines list_filings and fetch_filing in a single call. Returns the same fields as fetch_filing: {document_id, local_path, content_type, file_size_bytes, source, is_archive?, total_in_archive?, truncated?}. When is_archive is true the filing was delivered as a zip archive; call list_zip_contents with the same ch_number and document_id to see all extracted files.
List the filing history for a UK company. Returns [{document_id, type, description, date}] — pass document_id to fetch_filing or list_zip_contents. Filings without a downloadable document are excluded.
List all documents extracted from a zip archive filing. Use this when fetch_filing or get_latest returns is_archive: true; requires a prior fetch_filing or get_latest call. Returns {entries: [{filename, local_path, content_type, file_size_bytes, is_primary}], total_in_archive?, truncated?}. The primary document (is_primary true) is the one whose local_path was returned by fetch_filing or get_latest; other entries (e.g. a PDF alongside an iXBRL) can be read directly via their local_path. Results are capped at 20 entries per archive; when truncated is true, total_in_archive shows the full count before the cap.
Search for a UK company by name. Returns a list of matching companies with their Companies House numbers.
extract_xbrl_facts returns complex nested output (facts array with truncation flags) but no guidance on handling truncated results or pagination strategy.