ukvet: UK Companies House

Official registry Other

Read-only UK Companies House tools for due diligence: profile, officers, PSC, charges, insolvency.

What can you do with ukvet: UK Companies House?

  • Is it active, dissolved or insolvent?
  • How old is it?
  • Who are the directors?
  • Are its accounts or confirmation statement overdue?
  • Who controls it?
  • Does it have secured debts (charges)?
  • Any insolvency history?
  • Have its directors run companies that failed?

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

PYPI package ukvet-mcp
Claude Code
claude mcp add ukvet-uk-companies-house -e 'CH_API_KEY=<your ch_api_key>' -- uvx ukvet-mcp==0.1.0
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "ukvet-uk-companies-house": {
            "command": "uvx",
            "args": [
                "ukvet-mcp==0.1.0"
            ],
            "env": {
                "CH_API_KEY": "<your ch_api_key>"
            }
        }
    }
}

Environment variables

  • CH_API_KEY required secret Your free Companies House REST API key (live environment)

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. ukvet — AI Due-Diligence Agent for UK Companies
  2. What it does
  3. How it's built
  4. Development
  5. Project documents
  6. Disclaimer
  7. Attribution
  8. Licence

ukvet — AI Due-Diligence Agent for UK Companies

Vet any UK company in 30 seconds — cited, evaluated, open source.

Status: Phase 5 (model comparison) complete. ukvet-mcp (8 tools) and ukvet-agent (LangGraph agent, FastAPI, Streamlit UI, Docker) are built and tested. A versioned evaluation set (48 companies, 432 items) is replayed through the real stack and gated in CI (docs/eval-report.md). Phase 4 added optional Langfuse tracing, per-report cost and tool-call counts, output guardrails, and a prompt-injection evaluation (M6) (threat model). Phase 5 compared Claude Haiku 5.5 with the open-weight Qwen3.6-27B on the same test set: equal measured accuracy, but Claude was about 3.7 times faster at the p95 and about 13 times cheaper per report (docs/results.md). Next: Phase 6 (launch).

What it does

Enter a UK company name or number. ukvet checks official Companies House records and returns a risk report answering:

  1. Is it active, dissolved or insolvent?
  2. How old is it?
  3. Who are the directors?
  4. Are its accounts or confirmation statement overdue?
  5. Who controls it?
  6. Does it have secured debts (charges)?
  7. Any insolvency history?
  8. Have its directors run companies that failed?
  9. Any recent changes of directors or address?
  10. What are the red flags?

Every fact is cited to the official record. When data is missing, ukvet says so instead of guessing.

How it's built

PartWhat
ukvet-mcpOpen-source MCP server exposing Companies House data to any MCP client
ukvet-agentLangGraph agent: Planner → Researcher → Verifier → Reporter
Evals432-item benchmark on 48 frozen, anonymised companies; gated in CI (evals/)
ObservabilityOptional Langfuse tracing (off by default, content redacted); per-report latency, tokens, cost and tool calls
GuardrailsCitation checker plus output checks on every finished report; injection eval (M6)
Model choiceClaude Haiku 5.5 vs open-weight Qwen3.6-27B on one test set, published as a table (results)

Architecture: docs/08-architecture.md

Development

Requires Python 3.12+ and uv. Commands below are shown for PowerShell; on Linux or macOS the same uv run ... commands work (a Makefile is provided as a shortcut where make is available).

git clone https://github.com/fraidoonomarzai/ukvet.git
cd ukvet
copy .env.example .env                 # add your Companies House API key
uv sync --all-groups --all-packages    # install dependencies
uv run ruff check .                    # lint
uv run ruff format --check .           # formatting
uv run mypy                            # type check
uv run pytest                          # tests
Run it
# .env: CH_API_KEY=...   (optional: LLM_PROVIDER / LLM_MODEL / LLM_API_KEY, see .env.example)
uv run ukvet-check --full 00445790     # terminal, no UI
docker compose up --build              # API (http://localhost:8000/docs) + UI (http://localhost:8501)

With no LLM_PROVIDER set, reports use a template narrative and cost nothing. With one set, the LLM writes the wording and every sentence must pass the citation check, or the template is used instead.

Run the evaluation
uv run ukvet-evals demo-build                      # synthetic demo set, proves the harness works
uv run ukvet-evals run --dataset demo
uv run ukvet-evals run --dataset v0.1 --split dev  # real set, dev split, free (template mode)
uv run ukvet-evals gate --dataset v0.1             # compare with the baseline; fails if worse
Observability and safety (Phase 4)
# .env (all optional): LANGFUSE_PUBLIC_KEY, LANGFUSE_SECRET_KEY, LANGFUSE_HOST
#   UKVET_TRACE_CONTENT=redacted (default, names are masked) or full (synthetic data only)
#   UKVET_PRICE_IN_GBP_PER_MTOK / UKVET_PRICE_OUT_GBP_PER_MTOK  (cost is shown only when set)
uv sync --all-groups --all-packages --extra observability

# live latency (M7), cost (M8) and tool calls (M9); needs CH_API_KEY and an LLM key
uv run python scripts/phase4_metrics.py --file numbers.txt --out evals/results/phase4

# prompt-injection resistance (M6): record once, then replay for free
uv run ukvet-evals extend-injection --dataset v0.1
uv run ukvet-evals injection --dataset v0.1 --llm record --model <model>
uv run ukvet-evals injection --dataset v0.1 --llm replay --model <model>

Tracing is off unless both Langfuse keys are set, and it can never break a report. Targets: M6 injection resistance 95% or more, M7 p95 latency under 30 s, M8 cost under £0.05 per report, M9 tool calls per report tracked as a baseline. M6 measures resistance to the listed payloads only; it is not proof of safety. Measured results are in evals/results/.

Model comparison (Phase 5)
# one env file per model; copy the one you want over .env
uv run python scripts/phase5_check_endpoint.py        # smoke-test an OpenAI-compatible endpoint (vLLM)
uv run ukvet-evals run --dataset v0.1 --split test --llm record --model <model-id> --confirm-test-split "reason" --out evals/results/v0.1-test-<name>
uv run python scripts/phase4_metrics.py --file numbers.txt --label <name> --out evals/results/phase5-live-<name>
uv run ukvet-evals compare --init                     # create evals/comparison.json, fill it in
uv run ukvet-evals compare                            # writes docs/results.md; refuses unfair comparisons

Both models must run on the same dataset version, split, prompts and git commit; compare refuses different datasets or splits and warns about the rest. How the open-weight model was served: ADR-008 and docs/PHASE-5-GPU-SETUP.md.

Project documents

DocContents
01 Problem statementWhy ukvet exists
02 Users and questionsPersonas and Q1–Q10
03 ScopeIn, out, later
04 Success metricsTargets fixed before building
05 Data notesAPI findings
06 Legal and ethicsLicensing, UK GDPR, misuse
07 RisksRisk register
08 ArchitectureDesign + ADRs
09 PlanMilestones, backlog, workflow

...

Disclaimer

ukvet is informational only. It is not legal, financial or credit advice. Reports are based on public records at the time of retrieval, which may be incomplete or out of date. Always verify before making decisions. ukvet is not affiliated with Companies House.

Attribution

Contains public sector information licensed under the Open Government Licence v3.0 (Companies House).

Licence

Code: MIT © 2026 Fraidoon Omarzai

Frequently asked questions

What is ukvet: UK Companies House?

Read-only UK Companies House tools for due diligence: profile, officers, PSC, charges, insolvency.

How do I install ukvet: UK Companies House?

It runs on your machine. In Claude Code: claude mcp add ukvet-uk-companies-house -e 'CH_API_KEY=<your ch_api_key>' -- uvx ukvet-mcp==0.1.0. For other clients, paste the JSON configuration from this page into their MCP settings.

Does ukvet: UK Companies House need an API key?

Yes. It expects CH_API_KEY, which you set in its configuration.

Is ukvet: UK Companies House open source?

Yes. Its code is on GitHub under the MIT license.

Who maintains ukvet: UK Companies House?

It is published by fraidoonomarzai. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.