pypi uk-due-diligence-mcpstreamable-httpupdated 4mo ago
Official-source UK due-diligence data for AI agents.
What can you do with UK Due Diligence?
uk-due-diligence-mcp
Official-source UK due-diligence data for AI agents.
Search Companies House, Charity Commission, The Gazette, HMLR price-paid data and HMRC VAT records, 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 |
| HMRC VAT | api.service.hmrc.gov.uk |
OAuth2 client credentials | 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 |
HMRC / Sanctions
| Tool | Description |
|---|---|
vat_validate |
Trading name + address as registered for VAT |
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 |
HMRC_CLIENT_ID / HMRC_CLIENT_SECRET |
vat_validate |
HMRC Developer Hub (developer.service.hmrc.gov.uk) — free, OAuth2 client-credentials app |
HMRC_ENV |
vat_validate (optional) |
sandbox or production — defaults to production |
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
├── hmrc_vat.py # vat_validate (OAuth2 client-credentials)
├── 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
Install
Add UK Due Diligence to your client. Pick the one you use.
{
"servers": {
"uk-due-diligence-mcp": {
"type": "http",
"url": "https://uk-due-diligence-mcp.fly.dev/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
claude mcp add uk-due-diligence-mcp -- uvx uk-due-diligence-mcpcodex mcp add uk-due-diligence-mcp -- uvx uk-due-diligence-mcpamp mcp add uk-due-diligence-mcp -- uvx uk-due-diligence-mcp{
"mcpServers": {
"uk-due-diligence-mcp": {
"command": "uvx",
"args": [
"uk-due-diligence-mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"uk-due-diligence-mcp": {
"command": "uvx",
"args": [
"uk-due-diligence-mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"mcpServers": {
"uk-due-diligence-mcp": {
"command": "uvx",
"args": [
"uk-due-diligence-mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"uk-due-diligence-mcp": {
"command": "uvx",
"args": [
"uk-due-diligence-mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"uk-due-diligence-mcp": {
"command": "uvx",
"args": [
"uk-due-diligence-mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"uk-due-diligence-mcp": {
"type": "local",
"command": "uvx",
"args": [
"uk-due-diligence-mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"uk-due-diligence-mcp": {
"command": {
"path": "uvx",
"args": [
"uk-due-diligence-mcp"
]
}
}
}
}Add to your Zed `settings.json`.
uvx uk-due-diligence-mcpRun `goose configure`, choose **Add Extension → Command-line Extension**, and paste this command.
15 tools
UK Due Diligence exposes 15 tools to a connected agent.
- 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_search
- Search by name, filter by registration status
- charity_profile
- Full record: trustees, income/expenditure, governing document
- land_title_search
- Price Paid Index sale transactions by postcode — not title ownership (see [Limitations](#limitations))
- gazette_insolvency
- Corporate insolvency notices across the Gazette's notice-code taxonomy (codes 2401-2465)
- gazette_notice
- Full legal wording of a specific notice
- vat_validate
- Trading name + address as registered for VAT
- sanctions_screen
- Screen a name against the OFSI/OFAC/EU/UN consolidated lists
Score
67 / 100
Good
- Documentation25/25
- Maintenance13/25
- Trust6/20
- Capability8/15
- Install experience15/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 134 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 15 tool(s) documented
- Provides prompt templates
- Provides resources
- 18 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint — no local install
Version history
| Versions | Published |
|---|---|
| 1.0.3Latest | Apr 20, 2026 |
| 1.0.2 | Apr 1, 2026 |