ukvet: UK Companies House について
ukvetは、Companies Houseの公開記録に基づき、出典付きのリスクレポートを作成する英国企業向けのオープンソース調査ツールです。事実とリスク判定はルールで導き、LLMが文章を作成する場合は引用を検証します。
主な機能
- 01会社、役員、支配者の記録を取得
- 02提出遅延、担保債務、倒産歴を確認
- 03役員に関連する破綻企業を特定
- 04出典引用付きのリスクレポートを作成
- 05不足データを推測せず明示
活用シーン
- 01英国企業の状態や提出記録を確認
- 02役員、支配者、担保債務を調査
- 03取引や提携の前に企業リスクを確認
MCP 対応
ukvet-mcpは、Companies Houseのデータを任意のMCPクライアントに公開するMCPサーバーです。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ukvet — 英国企業向けAIデューデリジェンスエージェント
英国企業を30秒で審査します。根拠を明記し、評価を行うオープンソースツールです。
ステータス:フェーズ6(ローンチ)完了。
ukvet-mcp0.1.0はPyPIおよび公式のMCP Registry(io.github.FraidoonOmarzai/ukvet-mcp)で公開されています。エージェント、UI、評価ハーネスは構築・テスト済みで、CIのゲートを通過しています。
クイックスタート
1. Claude Desktopでデータレイヤーを使う(2分)
uvと、無料のCompanies House REST APIキーが必要です (ライブ環境のこちらで作成してください)。
$env:CH_API_KEY="your-key"; uvx ukvet-mcp --check # prints OK if the key works
次に、これをclaude_desktop_config.jsonに追加して、Claude Desktopを再起動してください。
{
"mcpServers": {
"ukvet": {
"command": "uvx",
"args": ["ukvet-mcp"],
"env": { "CH_API_KEY": "your-key" }
}
}
}
詳しいガイドは、packages/ukvet-mcpとそのPyPIページをご覧ください。
2. エージェントとUI一式を実行する(Docker)
git clone https://github.com/fraidoonomarzai/ukvet.git
cd ukvet
copy .env.example .env # add CH_API_KEY (LLM settings are optional)
docker compose up --build # API http://localhost:8000/docs, UI http://localhost:8501
LLM_PROVIDERを設定しない場合、レポートにはテンプレートの文章が使われ、費用はかかりません。設定した場合は、LLMが文章を作成します。すべての文は引用チェックに合格する必要があり、合格しない場合はテンプレートが使われます。
できること
英国企業名または企業番号を入力します。ukvetはCompanies Houseの公式記録を確認し、以下の質問に答えるリスクレポートを返します。
- 事業は継続中ですか、解散済みですか、それとも支払不能ですか?
- 設立から何年経っていますか?
- 取締役は誰ですか?
- 決算書または確認書の提出期限を過ぎていますか?
- 誰が支配していますか?
- 担保付き債務(チャージ)はありますか?
- 過去に倒産・支払不能の履歴はありますか?
- 取締役が過去に経営した企業で、破綻した企業はありますか?
- 取締役または住所に最近変更はありましたか?
- 注意すべき危険信号はありますか?
すべての事実に公式記録への引用を付けます。データが欠けている場合は、推測せずその旨を伝えます。
構成
| 部分 | 内容 |
|---|---|
ukvet-mcp | Companies HouseのデータをあらゆるMCPクライアントに公開するオープンソースのMCPサーバー |
ukvet-agent | LangGraphエージェント:Planner → Researcher → Verifier → Reporter |
| Evals | 48社の匿名化された固定データを使った432項目のベンチマーク。CIでゲート管理(evals/) |
| Observability | オプションのLangfuseトレーシング(デフォルトでは無効、コンテンツは秘匿化)。レポートごとのレイテンシ、トークン、コスト、ツール呼び出し |
| Guardrails | 引用チェッカーと、完成した各レポートに対する出力チェック。インジェクション評価(M6) |
| Model choice | 1つのテストセットでClaude Haiku 5.5とオープンウェイトのQwen3.6-27Bを比較し、表として公開(結果) |
事実、危険信号、リスクレベルは、決定論的なコードとルールに基づいています。LLMは1つのノードです。検証済みの事実だけを参照し、ツールは持たず、生成する主張はすべてチェックされます。アーキテクチャ:docs/08-architecture.md
結果
バージョン管理された48社(開発用30社、テスト用18社)のセットで測定しました。完全な表、信頼区間、失敗分析については、docs/eval-report.md と docs/results.md をご覧ください。
ベースライン(Claude Haiku 5.5、全48社)
| 指標 | 目標 | 結果 |
|---|---|---|
| M1 検索精度 | ≥ 90% | 100%(1488/1488フィールド) |
| M2 未裏付けの主張 | < 2% | 0/421(95%上限0.9%) |
| M4 引用の有効性(機械的検証) | 100% | 100%(421/421) |
| M5 危険信号の再現率 | ≥ 85% | 100%(89/89) |
モデル比較(テスト分割:18件のレポート、各約155件の主張)
| Claude Haiku 5.5(API) | Qwen3.6-27B(セルフホスト、A100) | |
|---|---|---|
| M1 精度 | 100% | 100% |
| M2 未裏付けの主張 | 0/156 | 1/154 |
| M4 引用の有効性 | 156/156 | 153/154 |
| M6 インジェクション耐性 | 96.7%(87/90) | 100%(90/90) |
| M7 レイテンシ、p95 | 6.6秒 | 24.2秒 |
| M8 レポートあたりのコスト | £0.00058 | £0.0076(最良ケース、実行時のGPU時間のみ) |
推奨:Claude Haiku 5.5をデフォルトとして維持してください。オープンウェイトモデルを使う方法は、設定を変更することで利用できます。このテストセットでは、精度の差は誤差の範囲内です。
制限事項(必ずお読みください)
- M1は、私が作成し、10社について実際のウェブサイトと照合して手動で確認したオラクルとの一致度です。すべてのフィールドが正しいことを証明するものではなく、スコアが100%という結果は、新たな検索バグを見つけるにはセットの難易度がまだ不十分であることを意味します。
- M2とM4は機械的なチェックです(ID、日付、数値、名称、禁止表現)。引用された事実が文を十分に裏付けているか、表現が公平かどうかは測定していません。
- テスト分割は18件のレポートです。オープンウェイトモデルは1つで、各モデルの実行は1回ずつです。レイテンシとコストは、1つのネットワークと1つのGPUで測定したものです。
- プロンプトインジェクション:1つのペイロード(会社名)により、ホスト企業3社すべてのClaudeのレポートに、攻撃者が指定したテキストが入りました。リスクレベルと危険信号に変化はありませんでした。これは未解決の追跡課題であり、M6が測定するのは列挙されたペイロードに対する耐性のみです。
- ラベルとルールは1人が作成しました。
開発
Python 3.12+ と uv が必要です。以下のコマンドはPowerShell向けです。LinuxまたはmacOSでも同じ uv run ... コマンドが使えます(make が利用可能な環境では、ショートカットとして Makefile が用意されています)。
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
実行する
# .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)
LLM_PROVIDER が設定されていない場合、レポートではテンプレート形式の文章が使われ、費用はかかりません。設定されている場合、LLMが文章を作成し、各文が引用チェックに合格しなければ、代わりにテンプレートが使われます。
評価を実行する
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
可観測性と安全性(フェーズ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>
Langfuseのキーが両方設定されていない限り、トレースは無効です。また、トレースがレポートの生成を妨げることはありません。目標:M6のインジェクション耐性は95%以上、M7のp95レイテンシは30秒未満、M8のレポートあたりのコストは£0.05未満、M9はレポートあたりのツール呼び出し数をベースラインとして追跡します。M6が測定するのは列挙されたペイロードに対する耐性のみであり、安全性を証明するものではありません。測定結果は evals/results/ にあります。
モデル比較(フェーズ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
両方のモデルは、同じデータセットのバージョン、分割、プロンプト、Gitコミットで実行する必要があります。compare は異なるデータセットや分割を拒否し、それ以外の違いについては警告します。オープンウェイトモデルの提供方法については、ADR-008 と docs/PHASE-5-GPU-SETUP.md をご覧ください。
その他のドキュメント
アーキテクチャとADR · 評価レポート · モデルの比較 · 脅威モデル · 意思決定ログ · すべてのドキュメント
免責事項
ukvet は情報提供のみを目的としています。法律、金融、信用に関する助言ではありません。レポートは取得時点の公開記録に基づいており、不完全または古い情報が含まれる場合があります。意思決定を行う前に、必ず内容を確認してください。ukvet は Companies House とは関係ありません。
帰属表示
Open Government Licence v3.0(Companies House)の下でライセンスされた公共部門の情報を含みます。
ライセンス
コード:MIT © 2026 Fraidoon Omarzai
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。