Skip to main content

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.

PyPI SafeSkill Glama smithery badge Install in VS Code Install in VS Code Insiders Install in Cursor


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_search returns 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: null means 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_appointments returns historical relationships. Companies House doesn't auto-resign a director when a company enters insolvency — check company_status on each appointment, not just resigned_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.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for uk-due-diligence-mcp 1.5.0
File Size Uploaded Provenance
uk_due_diligence_mcp-1.5.0.tar.gz 780.6 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for uk-due-diligence-mcp 1.5.0
File Interpreter ABI Platform
uk_due_diligence_mcp-1.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 845.5 kB

Release files / uk_due_diligence_mcp-1.5.0.tar.gz

Download URL uk_due_diligence_mcp-1.5.0.tar.gz
Size 780.6 kB
Tags Source
SHA-256 checksum
How to use checksums
d14482ab7c4836053bb1b719b7ea78f268b1bf2274b4ac557734c228d10ae9bd
BLAKE2b-256 checksum
How to use checksums
0a99a6757c74f7983bb0a6aaf658ff8cec7d3058d822a19e303493abf68145d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 25, 2026.

Transparency log

Release files / uk_due_diligence_mcp-1.5.0-py3-none-any.whl

Download URL uk_due_diligence_mcp-1.5.0-py3-none-any.whl
Size 64.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1c8114860e78a88572f95144fa5a59bf71db3732255f9fe651e9e692210b0479
BLAKE2b-256 checksum
How to use checksums
1caa83513930ade7ee2f55cf97cc7866797ddb8bb7740a1a19c20f9f1ba6b6fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 25, 2026.

Transparency log

Security for uk-due-diligence-mcp 1.5.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for uk_due_diligence_mcp-1.5.0.tar.gz

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 Oct 25, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page