uk-due-diligence-mcp
Official-source UK due-diligence data for AI agents.
Search Companies House, Charity Commission, The Gazette and HMLR price-paid data, plus screen names against the OFSI, OFAC, EU and UN sanctions lists. Exposes atomic MCP tools for company ownership, officers, cross-company appointment history, secured charges, insolvency notices and related registry evidence — the consuming agent decides how to investigate, not the server.
Every data source is a legally-mandated register with a free official API. Zero paywalls.
Data sources
| Register | API | Auth | Coverage |
|---|---|---|---|
| Companies House | api.company-information.service.gov.uk |
API key (free) | UK-wide |
| Charity Commission | api.charitycommission.gov.uk |
API key (free) | England & Wales |
| HMLR Land Registry | landregistry.data.gov.uk (SPARQL) |
None | England & Wales |
| The Gazette | thegazette.co.uk (Linked Data) |
None (read) | UK-wide |
| OFSI / OFAC / EU / UN sanctions | consolidated list files | None | International |
Quick start
Hosted (no install)
{
"mcpServers": {
"uk-due-diligence": {
"type": "http",
"url": "https://uk-due-diligence-mcp.fly.dev/mcp"
}
}
}
Local (uvx)
{
"mcpServers": {
"uk-due-diligence": {
"type": "stdio",
"command": "uvx",
"args": ["uk-due-diligence-mcp"]
}
}
}
See Configuration for the environment variables it needs.
Tools
Companies House
| Tool | Description |
|---|---|
company_search |
Search by name/keyword, filter by status/type |
company_profile |
Status, filing compliance, registered address, has_charges summary |
company_officers |
Directors/secretaries; each carries an officer_id |
company_psc |
Beneficial owners, PSC chain, overseas-corporate-PSC flag |
officer_appointments |
Full appointment history for a person by officer_id — including dissolved or insolvent companies not named anywhere else |
company_charges |
Complete secured-charge history: status, dates, secured parties, what each charge covers |
disqualified_search |
Search disqualified directors by name |
disqualified_profile |
Full disqualification record: period, Act, associated companies |
Charity Commission
| Tool | Description |
|---|---|
charity_search |
Search by name, filter by registration status |
charity_profile |
Full record: trustees, income/expenditure, governing document |
HMLR Land Registry
| Tool | Description |
|---|---|
land_title_search |
Price Paid Index sale transactions by postcode — not title ownership (see Limitations) |
The Gazette
| Tool | Description |
|---|---|
gazette_insolvency |
Corporate insolvency notices across the Gazette's notice-code taxonomy (codes 2401-2465) |
gazette_notice |
Full legal wording of a specific notice |
Sanctions
| Tool | Description |
|---|---|
sanctions_screen |
Screen a name against the OFSI/OFAC/EU/UN consolidated lists |
Cross-register
| Tool | Description |
|---|---|
search |
Fan-out search across all registers — returns IDs (for ChatGPT deep research) |
fetch |
Fetch a structured record by ID returned from search |
Examples
Resolve "TAS Engineering" to a company number and check whether it has any outstanding charges.
→ company_search to find the company number, then company_charges for the full secured-debt picture (not just the has_charges summary).
Has Gareth Davies (director of company 06333469) been connected to any other companies, including ones that no longer exist?
→ company_officers to get his officer_id, then officer_appointments to surface every company he's held an appointment at, current or historic.
Is "MEL Precision Limited" in the middle of insolvency proceedings, and what does that actually mean legally?
→ gazette_insolvency to find the notices, then gazette_notice to read the full legal wording before drawing conclusions from the notice label alone.
Screen "Acme Trading Ltd" and its officers against sanctions lists.
→ company_officers for the officer names, then sanctions_screen against the company name and each officer.
Limitations
Things worth knowing before trusting output:
land_title_searchreturns Price Paid transactions, not ownership. It does not return current proprietor/title data — HMLR's Price Paid Index only records historic sale transactions.- Sanctions screening is exact/alias matching, not compliance clearance. A company/entity legal name matches reliably; person names with transliteration variants may not. An empty result is not a guarantee of clearance, and a hit on a common name may need disambiguation.
has_charges: nullmeans the check could not be confidently completed — a charges-endpoint outage, or a charge with an unrecognized status. Treat it as unresolved, not as "no charges."officer_appointmentsreturns historical relationships. Companies House doesn't auto-resign a director when a company enters insolvency — checkcompany_statuson each appointment, not justresigned_on.- Official-source data can be incomplete or delayed. These are the same registers a human would check, with the same latency and gaps.
Configuration
| Variable | Required for | Where to get it |
|---|---|---|
CH_API_KEY |
All Companies House tools | developer.company-information.service.gov.uk — free |
CHARITY_API_KEY |
Charity Commission tools | api-portal.charitycommission.gov.uk — free |
HMLR, The Gazette, and the sanctions lists require no credentials.
Project structure
uk-due-diligence-mcp/
├── server.py # FastMCP init, tool/resource registration, transport config
├── companies_house.py # company_search/profile/officers/psc, officer_appointments, company_charges
├── disqualified.py # disqualified_search, disqualified_profile
├── charity.py # charity_search, charity_profile
├── land_registry.py # land_title_search (SPARQL Price Paid Index)
├── gazette.py # gazette_insolvency, gazette_notice
├── sanctions.py # sanctions_screen (OFSI/OFAC/EU/UN consolidated lists)
├── search_fetch.py # search, fetch (cross-register fan-out)
├── models.py # Pydantic v2 output models
├── http_client.py # Shared httpx clients, retry backoff, error formatting
├── fly.toml
├── Dockerfile
├── pyproject.toml
└── .env.example
Licence
MIT
Metadata
Release files for uk-due-diligence-mcp 1.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| uk_due_diligence_mcp-1.4.0.tar.gz | 763.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| uk_due_diligence_mcp-1.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 822.3 kB
Release files / uk_due_diligence_mcp-1.4.0.tar.gz
| Download URL | uk_due_diligence_mcp-1.4.0.tar.gz |
|---|---|
| Size | 763.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7c58d74ea98d9f45198c26c37331444b93726fbb256444d58d36cf4304fef82d
|
|
BLAKE2b-256 checksum How to use checksums |
92665d837ea709010142ea0235f94d46f48b4419f6fcaa24bda1050584fb3d56
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / uk_due_diligence_mcp-1.4.0-py3-none-any.whl
| Download URL | uk_due_diligence_mcp-1.4.0-py3-none-any.whl |
|---|---|
| Size | 58.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4c040c4c304e52700c047683bb7cafe6ecb796587ea203968860d6e3c950b1ba
|
|
BLAKE2b-256 checksum How to use checksums |
607d5745f0167b3a91e6e417c02003e4ae2daf462436d8b5c80fe650c356316d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency log