UK Due Diligence
REMOTE · UK-DUE-DILIGENCE-MCP.FLY.DEV · 2 COMPONENTS · SCANNED SEP 20
UK due diligence — Companies House, Charity Commission, Land Registry, Gazette, HMRC VAT
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security74
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability70
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 3446 tokens (~191/item across 18 items; 18 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management78
- Stability check failed: schema churn in the 29 days we've observed: 3 tool removals, 0 breaking changes, 0 auth/transport breaks, 4 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (94% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 18 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the UK Due Diligence MCP server?
UK Due Diligence is a hosted endpoint at https://uk-due-diligence-mcp.fly.dev/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · uk-due-diligence-mcp.fly.dev
claude mcp add --transport http paulieb89-uk-due-diligence-mcp 'https://uk-due-diligence-mcp.fly.dev/mcp'
{
"mcpServers": {
"paulieb89-uk-due-diligence-mcp": {
"url": "https://uk-due-diligence-mcp.fly.dev/mcp"
}
}
} {
"servers": {
"paulieb89-uk-due-diligence-mcp": {
"type": "http",
"url": "https://uk-due-diligence-mcp.fly.dev/mcp"
}
}
} [mcp_servers.paulieb89-uk-due-diligence-mcp] url = "https://uk-due-diligence-mcp.fly.dev/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"paulieb89-uk-due-diligence-mcp": {
"type": "remote",
"url": "https://uk-due-diligence-mcp.fly.dev/mcp",
"enabled": true
}
}
} openclaw mcp add paulieb89-uk-due-diligence-mcp --url 'https://uk-due-diligence-mcp.fly.dev/mcp' --transport streamable-http
mcp_servers:
paulieb89-uk-due-diligence-mcp:
url: "https://uk-due-diligence-mcp.fly.dev/mcp" {
"McpServers": {
"paulieb89-uk-due-diligence-mcp": {
"Transport": "http",
"Url": "https://uk-due-diligence-mcp.fly.dev/mcp"
}
}
} assistant mcp add paulieb89-uk-due-diligence-mcp -t streamable-http -u 'https://uk-due-diligence-mcp.fly.dev/mcp'
{
"mcpServers": {
"paulieb89-uk-due-diligence-mcp": {
"type": "http",
"url": "https://uk-due-diligence-mcp.fly.dev/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 −1
No change was recorded against any check on this day. Stability & Change Management went from 82 to 78.
- 10 Sept 26 −1
- A breaking change shipped without a version bump: still 3.2.4 ▼ security
- Tool “vat_validate” was removed ▼ security
- The server rewrote its instructions, which are the text every model session reads security
- 4 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 84 to 88.
- 3 Sept 26 −1
No change was recorded against any check on this day. Stability & Change Management went from 88 to 84.
- 26 Aug 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 84 to 88.
- 24 Aug 26 +2
- Stability: 0.93 → fail ▼ security
- A breaking change shipped without a version bump: still 3.2.4 ▼ security
- Tool “get_prompt” was removed ▼ security
- Tool “list_prompts” was removed ▼ security
- Authorization: unverified → partial ▲ security
- The server rewrote its instructions, which are the text every model session reads security
- Tool “charity_search” rewrote its description, which is the text the model reads security
- Tool “company_officers” rewrote its description, which is the text the model reads security
- Tool “gazette_insolvency” rewrote its description, which is the text the model reads security
- Tool coverage: 100% → 95% ▼ functional
- Schema quality: 139 → 189 ▼ functional
- Prompt “charity_due_diligence” was removed ▼ functional
- Prompt “director_check” was removed ▼ functional
- Prompt “due_diligence” was removed ▼ functional
- New tool “officer_appointments” functional
- New tool “company_charges” functional
- New tool “company_filing_document” functional
- New tool “company_filing_history” functional
- “company_officers” added an optional parameter “include_resigned” cosmetic
- “company_officers” reworded the description of “start_index” cosmetic
- “gazette_insolvency” reworded the description of “notice_type” cosmetic
- 23 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Probed https://uk-due-diligence-mcp.fly.dev/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=*.fly.dev | CN=YE1,O=Let's Encrypt,C=US | 21 Aug 2026 | 19 Nov 2026 | ECDSA 256 | ECDSA-SHA384 | 688c4daf5300c51e0a5c1f6837a3a67a868 |
| SANs: *.fly.dev | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of uk-due-diligence-mcp.fly.dev. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| dev. | present | 60074 | 8 | Verified |
| fly.dev. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://uk-due-diligence-mcp.fly.dev/mcp | Verified | 200 | |
| http (plaintext) | http://uk-due-diligence-mcp.fly.dev/mcp | HTTPS enforced | 301 | https://uk-due-diligence-mcp.fly.dev/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
charity_profile Get Charity Profile ~79
Fetch the full Charity Commission profile for a charity number. Returns trustees, latest income/expenditure, insolvency flags, governing document type, classifications, and countries of operation. Use charity_search first to find the charity number.
| Name | Type | Req | Description |
|---|---|---|---|
| charity_number | string | yes | Charity Commission registration number (e.g. '1234567'). Returned by charity_search. |
| Name | Type | Req | Description |
|---|---|---|---|
| address | – | – | Registered address of the charity (joined address lines). |
| charity_co_reg_number | – | – | Companies House number for charities also registered as companies (Charitable Incorporated Organisations, etc.). |
| charity_name | – | – | Registered charity name. |
| charity_number | string | yes | Charity registration number. |
| charity_type | – | – | Charity type. |
| countries_of_operation | array | – | Countries the charity operates in (capped at 10 upstream). |
| date_of_registration | – | – | Date of first registration. |
| in_administration | boolean | – | True if the charity is in administration. |
| insolvent | boolean | – | True if the charity is flagged as insolvent. |
| latest_expenditure | – | – | Latest filed annual expenditure in GBP. |
| latest_income | – | – | Latest filed annual income in GBP. |
| reg_status | – | – | Registration status code ('R', 'RM'). |
| reg_status_label | – | – | Human-readable registration status. |
| trustee_names | array | – | Trustees on record. Truncated to 30 entries. |
| trustee_names_total | integer | – | Total trustees upstream before truncation. |
| trustee_names_truncated | boolean | – | True if the trustee list was truncated. |
| who_what_where | array | – | Who/What/Where classification entries. The list may be truncated truncated to 50 entries. |
| who_what_where_total | integer | – | Total classification entries upstream before truncation. |
| who_what_where_truncated | boolean | – | True if the classification list was truncated. |
No examples provided.
charity_search Search Charity Commission Register ~196
Search the Charity Commission register of England and Wales by name or keyword. Returns matching charities with registration number, status, and registration date. Use charity_profile for full details once you have the charity number. The upstream `searchCharityName` endpoint returns the full list in one shot — pagination is applied client-side via offset/limit. A query that matches nothing is a successful empty result (`charities: []`), not an error — the upstream endpoint signals "no matches" with an HTTP 404, which is translated back into an empty result here rather than surfaced as a not-found failure.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max items to return in this page. Default 20; raise to 100 for bulk views. |
| offset | integer | – | Number of items to skip before this page. Default 0. |
| query | string | yes | Charity name or keyword to search for |
| Name | Type | Req | Description |
|---|---|---|---|
| charities | array | – | Matching charity records. |
| has_more | boolean | yes | True if more items may exist beyond this page. Re-call with offset=offset+returned to continue. |
| limit | integer | yes | Max items requested for this page. |
| offset | integer | yes | Number of items skipped before this page (client-side). |
| query | string | yes | Search term applied. |
| returned | integer | yes | Items actually returned on this page. |
| total | integer | yes | Total matches returned by upstream. |
No examples provided.
company_charges Get Company Charges ~155
Fetch the complete Companies House charge history for a company. Returns every registered charge (secured debt) — current and historic — with status, dates, secured parties, and what each charge covers (fixed/floating/negative-pledge flags and any free-text particulars). Satisfaction is represented as satisfied_on plus a charge-satisfaction filing entry, not a separate 'release' record. company_profile.has_charges is a True/False/unknown summary derived from this same data; use this tool when the specific charges matter, not just whether any exist.
| Name | Type | Req | Description |
|---|---|---|---|
| company_number | string | yes | Companies House company number (8 digits, e.g. '03782379'). Returned by company_search. |
| Name | Type | Req | Description |
|---|---|---|---|
| charges | array | – | Every charge, current and historic. |
| company_number | string | yes | Companies House company number. |
| part_satisfied_count | – | – | Upstream count of part-satisfied charges, or null if not provided. |
| satisfied_count | – | – | Upstream count of satisfied charges, or null if not provided. |
| total_count | integer | yes | Total charges returned. |
| unfiltered_count | – | – | Upstream unfiltered charge count, or null if not provided. |
No examples provided.
company_filing_document Get Companies House Filing Document ~266
Resolve a filing's document_metadata link to its authoritative source document. Returns a resource_link (never embedded bytes, never base64) pointing at a company-document:// MCP resource — fetch it via resources/read to get the actual PDF. This tool only reads metadata (category, pages, available content types, byte size); it never downloads the document itself. Use company_filing_history first to find a filing's document_metadata URL. Requires a resource-capable MCP client to retrieve the actual bytes — a tool-only client can see this result's metadata (company, category, page count, size) but cannot obtain the file through this tool call alone.
| Name | Type | Req | Description |
|---|---|---|---|
| document_metadata_url | string | yes | The document_metadata URL from a filing's links.document_metadata (returned by company_filing_history) — pass it through verbatim, not a document_id. Must be an exact https://document-api.company-inf… |
| mime_type | – | – | Which content representation to select, e.g. 'application/pdf'. Omit when the document has only one representation (the near-universal case) — it is auto-selected. Required if the document has more t… |
No output schema declared.
No examples provided.
company_filing_history Get Company Filing History ~437
Fetch one page of a company's Companies House filing chronology. Returns the raw source facts for each filing — transaction ID, form type/category, dates, and the description_values CH uses to render its own text — as delivered upstream, not interpreted into DD conclusions. links.document_metadata on each filing is the identifier a future document-retrieval tool would need; no document content is fetched here. Unlike company_officers/company_psc/company_charges, this does NOT auto-fetch every page — a long-lived company's filing history is unbounded in practice (a decades-old PLC can carry thousands of filings). total_count/returned/has_more are always reported truthfully for whatever page and category filter was requested; nothing is silently truncated. Narrow with category= for a specific slice (e.g. category='mortgage' for charge-related filings, category='insolvency' for administration/liquidation filings) — a note is included when an unfiltered history is large. A company_number that doesn't resolve to any company returns a structured not_found error, distinct from a genuine zero-filing result — Companies House's filing-history endpoint alone cannot tell these apart, so existence is confirmed separately when the result would otherwise be empty.
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | Filter by CH filing category — comma-separated for multiple, e.g. 'mortgage' or 'mortgage,officers'. Omit for all categories. Common values: accounts, confirmation-statement, officers, address, capit… |
| company_number | string | yes | Companies House company number (8 digits, e.g. '03782379'). Returned by company_search. |
| items_per_page | integer | – | Results per page (Companies House caps at 100 regardless of a higher value). Default 100. |
| start_index | integer | – | Pagination offset. Default 0. Re-call with start_index=start_index+returned while has_more is true. |
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | The category filter applied to this query, or null if unfiltered. |
| company_number | string | yes | Companies House company number. |
| filing_history_status | – | – | Upstream filing-history status (e.g. 'filing-history-available'). |
| filings | array | – | Filings on this page. |
| has_more | boolean | yes | True if start_index + returned < total_count. |
| items_per_page | integer | yes | Page size actually used (CH caps at 100 regardless of a higher request). |
| note | – | – | Advisory note, e.g. suggesting a category filter when total_count is large and no category was applied. Informational only — never a truncation. |
| returned | integer | yes | Filings returned on this page. |
| start_index | integer | yes | Pagination offset used for this page. |
| total_count | integer | yes | Total filings matching this query (across all pages). |
No examples provided.
company_officers Get Company Officers ~156
Fetch officers for a Companies House company number. Returns directors, secretaries, and other officers with appointment dates, nationality, and country of residence. Resigned officers are excluded by default; set include_resigned=true for historical DD. Pagination is handled internally.
| Name | Type | Req | Description |
|---|---|---|---|
| company_number | string | yes | Companies House company number (8 digits, e.g. '03782379'). Returned by company_search. |
| include_resigned | boolean | – | Include resigned/historic officers. Default false for backwards-compatible current-officer queries. |
| items_per_page | – | – | Ignored — pagination is handled internally. Only accepted to avoid call failures. |
| start_index | – | – | Ignored — pagination is handled internally. Only accepted to avoid call failures. |
| Name | Type | Req | Description |
|---|---|---|---|
| company_number | string | yes | Companies House company number. |
| high_appointment_count_flag | – | – | Number of active officers with 10+ total appointments, or null if appointment counts were not fetched. Non-zero values are a nominee/phoenix director risk signal. |
| include_resigned | boolean | yes | Whether resigned officers were included in this result. |
| officers | array | – | Officer records. |
| total | integer | yes | Total officers returned (filtered by include_resigned). |
No examples provided.
company_profile Get Company Profile ~87
Fetch the full Companies House profile for a company number. Returns status, registered address, SIC codes, filing compliance (overdue accounts and confirmation statement flags), and whether the company has outstanding charges. Use company_search first to find the company number.
| Name | Type | Req | Description |
|---|---|---|---|
| company_number | string | yes | Companies House company number (8 digits, e.g. '03782379'). Returned by company_search. |
| Name | Type | Req | Description |
|---|---|---|---|
| accounts | object | – | Accounts filing status and due dates. |
| company_name | – | – | Registered company name. |
| company_number | string | yes | Companies House company number. |
| company_status | – | – | Current status (active, dissolved, in liquidation, etc.). |
| company_type | – | – | Companies House company type code. |
| confirmation_statement | object | – | Confirmation statement filing status and next due date. |
| date_of_creation | – | – | Incorporation date (ISO YYYY-MM-DD). |
| has_charges | – | – | True if the company has at least one outstanding or part-satisfied charge (secured debt) — not yet fully discharged. False if every charge on record is fully satisfied, or there are none. Null if the… |
| registered_office_address | object | – | Registered office address as returned by Companies House. |
| sic_codes | array | – | Standard Industrial Classification codes. |
No examples provided.
company_psc Get Persons with Significant Control ~99
Fetch Persons with Significant Control (beneficial ownership) for a company. Returns PSC entries with natures of control, nationality, and country of residence. Flags overseas corporate PSC entries as a beneficial ownership risk signal. Returns an explanatory note for widely-held PLCs with no registrable PSC.
| Name | Type | Req | Description |
|---|---|---|---|
| company_number | string | yes | Companies House company number (8 digits, e.g. '03782379'). Returned by company_search. |
| Name | Type | Req | Description |
|---|---|---|---|
| company_number | string | yes | Companies House company number. |
| note | – | – | Explanatory note when total=0. Typical for widely-held listed PLCs where no single person or entity holds 25%+ of shares or voting rights. |
| overseas_corporate_psc_flag | integer | – | Number of corporate PSCs registered outside the UK. Non-zero values indicate an offshore beneficial ownership chain. |
| psc | array | – | Persons with Significant Control records. |
| total | integer | yes | Total PSC entries returned for this company. |
No examples provided.
company_search Search Companies House ~181
Search the Companies House register by company name or keyword. Returns a paginated list of matching companies with name, number, status, SIC codes, incorporation date, and registered address. Use company_profile for the full record once you have the company number. Re-call with start_index=start_index+items_per_page to fetch the next page.
| Name | Type | Req | Description |
|---|---|---|---|
| company_status | – | – | Filter by company status (e.g. 'active', 'dissolved'). Omit to search all. |
| company_type | – | – | Filter by company type (e.g. 'ltd', 'llp'). Omit to search all. |
| items_per_page | integer | – | Number of results to return (max 100). Default 20. |
| query | string | yes | Company name or keyword to search for |
| start_index | integer | – | Pagination offset. Default 0. |
| Name | Type | Req | Description |
|---|---|---|---|
| has_more | boolean | yes | True if more results exist beyond this page. Re-call with start_index=start_index+items_per_page to fetch the next page. |
| items | array | – | Matching companies. Use the `company_number` field to call company_profile, company_officers, or company_psc for full detail. |
| items_per_page | integer | yes | Page size requested from the API for this call. |
| query | string | yes | The query string that was searched. |
| returned | integer | yes | Number of items actually returned on this page. |
| start_index | integer | yes | Number of results skipped before this page (upstream start_index). |
| total_results | integer | yes | Total matching companies in Companies House (server-side). |
No examples provided.
disqualified_profile Get Disqualified Director Profile ~74
Fetch the full disqualification record for a director by officer ID. Returns all disqualification orders: reason, Act/section cited, disqualification period, and associated company names. Use disqualified_search first to find the officer ID.
| Name | Type | Req | Description |
|---|---|---|---|
| officer_id | string | yes | Companies House officer ID. Returned by disqualified_search. |
| Name | Type | Req | Description |
|---|---|---|---|
| date_of_birth | – | – | Date of birth on record. |
| disqualifications | array | – | All disqualification orders attached to this officer. |
| forename | – | – | Given name, if split upstream. |
| name | – | – | Officer name. |
| nationality | – | – | Declared nationality. |
| officer_id | string | yes | Companies House officer ID looked up. |
| officer_kind | string | yes | Which CH endpoint returned the record: 'natural' (individual) or 'corporate' (legal entity). |
| surname | – | – | Family name, if split upstream. |
No examples provided.
disqualified_search Search Disqualified Directors ~171
Check whether a named individual is banned from acting as a UK company director. Use this tool when asked to check disqualified, banned, or barred directors. Query must be an individual's name (e.g. "Richard Howson") — NOT a company name, which always returns zero results. Returns names, dates of birth, disqualification period snippets, and officer IDs that can be used with disqualified_profile for full details.
| Name | Type | Req | Description |
|---|---|---|---|
| items_per_page | integer | – | Results per page (max 100). Default 20. |
| name | – | – | Alias for query — the person's name. |
| query | – | – | Person's name to search for, e.g. query='Richard Howson'. NOT a company name. |
| start_index | integer | – | Pagination offset (0-based). Default 0. |
| Name | Type | Req | Description |
|---|---|---|---|
| has_more | boolean | yes | True if more items may exist beyond this page. Re-call with start_index=start_index+items_per_page to continue. |
| items | array | – | Matching disqualified officer records. |
| items_per_page | integer | yes | Page size requested. |
| query | string | yes | Search query applied. |
| returned | integer | yes | Items actually returned on this page. |
| start_index | integer | yes | Pagination offset for this page. |
| total_results | integer | yes | Total matching records upstream at Companies House. |
No examples provided.
fetch Fetch Full Record from UK Due Diligence Register ~113
Fetch the full record for an ID returned by search. Routes by prefix to the appropriate register: - company:{number} → Companies House full profile - charity:{number} → Charity Commission full profile - disqualification:{officer_id} → Disqualified director full record - notice:{notice_id} → Gazette notice full legal text
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Prefixed record ID returned by search. Format: company:{number}, charity:{number}, disqualification:{officer_id}, or notice:{notice_id} |
Structured output declared, but exposes no named fields.
No examples provided.
gazette_insolvency Search Gazette Corporate Insolvency Notices ~274
Search The Gazette's insolvency notice index by entity name. Searches The Gazette's corporate-insolvency notice index using the authoritative Gazette notice-code taxonomy. Results are sorted by an internal DD severity score; the notice label itself remains a source fact. Each result includes a notice_numeric_id. Read the full legal wording via the notice://{notice_numeric_id} resource. The Gazette is the official UK public record. A notice here means the event has been formally published and is legally effective.
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | – | – | Filter notices up to this date (YYYY-MM-DD) |
| entity_name | – | – | Deprecated alias for name. |
| max_notices | integer | – | Cap on notices returned, applied after severity/date sort. Default 20. The Gazette insolvency feed returns up to 100 results per search — raise to 100 to see the full set. |
| name | – | – | Company or individual name to search for in Gazette insolvency notices |
| notice_type | – | – | Filter by Gazette notice code (e.g. '2450' petition to wind up a company, '2452' winding-up order, '2410' appointment of administrators). Omit to search all. |
| query | – | – | Alias for name. |
| start_date | – | – | Filter notices from this date (YYYY-MM-DD) |
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | – | – | Upper bound of the date range filter, if any. |
| entity_name | string | yes | Entity name that was searched. |
| max_notices_cap | integer | yes | The max_notices cap applied. Upstream may have more matching notices. |
| notice_type_filter | – | – | Notice code filter applied, or null if all codes searched. |
| notices | array | – | Matching notices, sorted by severity (desc) then date (desc). |
| start_date | – | – | Lower bound of the date range filter, if any. |
| total_notices | integer | yes | Total notices returned after deduplication, sorting, and cap. |
No examples provided.
gazette_notice Get Gazette Notice Full Text ~86
Fetch the full legal wording of a Gazette notice by numeric notice ID. Returns the complete JSON-LD linked-data record for the notice: parties, legal basis, court, and full text. Use gazette_insolvency first to find notice_numeric_id values.
| Name | Type | Req | Description |
|---|---|---|---|
| notice_id | string | yes | Numeric Gazette notice ID. Returned as notice_numeric_id by gazette_insolvency. |
Structured output declared, but exposes no named fields.
No examples provided.
land_title_search Search Price Paid Transactions by Postcode ~118
Search HM Land Registry Price Paid Index by postcode or address. Returns up to 10 recent sale transactions for the postcode: price, date, address, property type, and tenure (Freehold/Leasehold). Covers England and Wales only. Postcode gives the most reliable results — a full address is also accepted and the postcode is extracted automatically.
| Name | Type | Req | Description |
|---|---|---|---|
| address_or_postcode | string | yes | UK property address or postcode. Postcode is most reliable: e.g. 'NG1 1AB'. Full address also accepted. |
| Name | Type | Req | Description |
|---|---|---|---|
| postcode | string | yes | Normalised UK postcode extracted from the input. |
| total | integer | yes | Number of Price Paid transactions returned. Capped at 10 by the upstream SPARQL query. |
| transactions | array | – | Recent Price Paid transactions for the postcode, sorted newest first. |
No examples provided.
officer_appointments Get Officer Appointment History ~133
Fetch a person's full company appointment history by officer ID. Returns every appointment — current and historic — with each company's number, name, status, role, and appointment/resignation dates. Use company_officers first to find an officer_id, then this tool to discover other companies that person has been a director or secretary of, including dissolved or insolvent ones not mentioned anywhere else. Always returns full history; there is no current-only filter, since historical discovery is the point.
| Name | Type | Req | Description |
|---|---|---|---|
| officer_id | string | yes | Companies House officer ID. Returned as officer_id on entries from company_officers. |
| Name | Type | Req | Description |
|---|---|---|---|
| active_count | – | – | Upstream count of appointments Companies House categorizes as 'active' — this reflects the officer's own appointment/resignation state at that company, NOT whether the company itself is currently tra… |
| appointments | array | – | Every appointment, current and historic. |
| date_of_birth | object | – | Partial date of birth (month/year), or empty if not disclosed upstream. |
| inactive_count | – | – | Upstream count of appointments Companies House categorizes as 'inactive', passed through as-is. Exact categorization semantics have not been independently verified against per-appointment data — trea… |
| name | – | – | Officer name as recorded at CH. |
| officer_id | string | yes | Companies House officer ID. |
| resigned_count | – | – | Upstream count of resigned appointments, or null if not provided. |
| total | integer | yes | Total appointments returned. |
No examples provided.
sanctions_screen Screen a Name Against Sanctions Lists ~262
Screen a name against the UK (OFSI), US (OFAC), EU and UN consolidated sanctions lists. Returns every list entry whose primary name or alias matches, with the regime, source reference and listing date. Use it to check whether a counterparty — or its officers / persons with significant control — appears on a sanctions list. MATCHING is deterministic: normalised exact + alias match (case-, accent- and punctuation-insensitive). A company/entity legal name matches reliably; PERSON names with transliteration variants may not (e.g. 'Mohammed' vs 'Muhamad'). An empty result is therefore NOT a guarantee of clearance, and a hit on a common name may be a false positive to disambiguate. This is a screening aid, not a compliance determination. `lists_screened` reports which of OFSI/OFAC/EU/UN were actually loaded — if any is missing the result is partial. `as_at` is when the lists were last refreshed on this server.
| Name | Type | Req | Description |
|---|---|---|---|
| entity_type | – | – | Optional filter: 'person' or 'entity'. Omit to screen both. |
| name | string | yes | Person or company/entity name to screen against the consolidated sanctions lists. |
| Name | Type | Req | Description |
|---|---|---|---|
| as_at | – | – | When this server last refreshed the loaded lists (ISO timestamp). Provenance for the screen — the lists update on designation. |
| entity_type_filter | – | – | entity_type filter applied to the screen ('person'/'entity'), or null. |
| hits | array | – | Matching list entries. An empty list means no exact/alias match on the screened lists — NOT a guarantee of clearance (see the tool description on matching limits). |
| lists_screened | array | – | Which consolidated lists were loaded and actually screened for this call. A list absent here failed to load and was NOT screened — treat the result as partial if any of OFSI/OFAC/EU/UN is missing. |
| match_count | integer | yes | Number of list entries that matched the query. |
| normalized_query | string | yes | The normalised form used for matching (upper-cased, accent- and punctuation-stripped, whitespace-collapsed). |
| query | string | yes | The name that was screened. |
No examples provided.
search Search UK Due Diligence Registers ~82
Search across all UK due diligence registers simultaneously. Searches Companies House, Charity Commission, disqualified directors, and Gazette insolvency notices in parallel. Returns a list of result IDs — use fetch with each ID to retrieve the full record.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | Company name, charity name, director name, or keyword to search for across all UK due diligence registers |
Structured output declared, but exposes no named fields.
No examples provided.
What is the UK Due Diligence MCP server?
UK Due Diligence is an MCP server listed in the public MCP registry as io.github.paulieb89/uk-due-diligence-mcp. UK due diligence, Companies House, Charity Commission, Land Registry, Gazette, HMRC VAT. This page covers its hosted endpoint (https://uk-due-diligence-mcp.fly.dev/mcp).
Is the UK Due Diligence MCP server safe to use?
UK Due Diligence scores 81 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the UK Due Diligence MCP server expose?
UK Due Diligence exposes 18 tools: company_search, company_profile, company_officers, company_psc, officer_appointments, and 13 more. Their descriptions and schemas cost roughly 2,969 tokens of context every time the server is loaded.
Does the UK Due Diligence MCP server require authentication?
No. We connected to UK Due Diligence without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the UK Due Diligence MCP server still maintained?
UK Due Diligence is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.