Skip to content

UK Due Diligence

by paulieb89 · remote · local (pypi) · no sign-in to list tools · v1.0.3 · published by GitHub user paulieb89

UK due diligence — Companies House, Charity Commission, Land Registry, Gazette, HMRC VAT

Final · 1Changes · 1

18 tools: 1 do something that can't be undone, 1 change things and 16 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http uk-due-diligence https://uk-due-diligence-mcp.fly.dev/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "company_charges" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "company_charges" says "charge": a word that usually means money moves, which cannot be taken back.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

18 tools

Can't be undone 1Claude Code: ask
  • company_chargesFetch the complete Companies House charge history for a company.1 finding

    Why it is in this group

    • The name "company_charges" says "charge": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "company_charges" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "company_charges" says "charge": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Company Charges
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Changes things 1Claude Code: ask
  • sanctions_screenScreen a name against the UK (OFSI), US (OFAC), EU and UN consolidated sanctions lists.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Screen a Name Against Sanctions Lists
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
Only reads 16Claude Code: allow
  • charity_profileFetch the full Charity Commission profile for a charity number.No findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Charity Profile
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • company_filing_documentResolve a filing's document_metadata link to its authoritative source document.No findings

    Why it is in this group

    • The description's first verb is "resolve": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Companies House Filing Document
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • company_filing_historyFetch one page of a company's Companies House filing chronology.No findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Company Filing History
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • company_officersFetch officers for a Companies House company number.No findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Company Officers
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • company_profileFetch the full Companies House profile for a company number.No findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Company Profile
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • company_pscFetch Persons with Significant Control (beneficial ownership) for a company.No findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Persons with Significant Control
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • disqualified_profileFetch the full disqualification record for a director by officer ID.No findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Disqualified Director Profile
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • fetchFetch the full record for an ID returned by search.No findings

    Why it is in this group

    • The name "fetch" says "fetch": a word for reading.
    Description, as the server wrote it
    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

    Annotations the server declares

    • title: Fetch Full Record from UK Due Diligence Register
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • gazette_insolvencySearch The Gazette's insolvency notice index by entity name.No findings

    Why it is in this group

    • The description's first verb is "search": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Search Gazette Corporate Insolvency Notices
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • gazette_noticeFetch the full legal wording of a Gazette notice by numeric notice ID.No findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Gazette Notice Full Text
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
  • officer_appointmentsFetch a person's full company appointment history by officer ID.No findings

    Why it is in this group

    • The description's first verb is "fetch": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • title: Get Officer Appointment History
    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http uk-due-diligence https://uk-due-diligence-mcp.fly.dev/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__uk-due-diligence__company_search",
      "mcp__uk-due-diligence__company_profile",
      "mcp__uk-due-diligence__company_officers",
      "mcp__uk-due-diligence__company_psc",
      "mcp__uk-due-diligence__officer_appointments",
      "mcp__uk-due-diligence__company_filing_history",
      "mcp__uk-due-diligence__company_filing_document",
      "mcp__uk-due-diligence__charity_search",
      "mcp__uk-due-diligence__charity_profile",
      "mcp__uk-due-diligence__disqualified_search",
      "mcp__uk-due-diligence__disqualified_profile",
      "mcp__uk-due-diligence__land_title_search",
      "mcp__uk-due-diligence__gazette_notice",
      "mcp__uk-due-diligence__gazette_insolvency",
      "mcp__uk-due-diligence__search",
      "mcp__uk-due-diligence__fetch"
    ],
    "ask": [
      "mcp__uk-due-diligence__company_charges",
      "mcp__uk-due-diligence__sanctions_screen"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as uk-due-diligence. Review it before you use it.