mcpField
B
bouncer

bouncer

ローカル
github.com法務・行政13 日前に更新

bouncer について

bouncerは、英国とナイジェリアの規制ルールパックが求める対策をアプリケーションのソースコードから静的に確認します。エンジニアリングやコンプライアンスのチーム向けで、LLMを使わず、可能な場合はファイルと行番号の証拠とともにpass、fail、unknownを報告します。

主な機能

  1. 01英国とナイジェリアの組み込みルールパック
  2. 02言語に依存しないソーススキャン
  3. 03pass、fail、unknownの判定
  4. 04対策を示すファイルと行番号
  5. 05不合格時に非ゼロ終了するCIチェック
  6. 06HTML監査レポートとルール説明

活用シーン

  1. 01リリース前に必須の対策を確認
  2. 02対策の欠落時にCIを不合格にする
  3. 03コンプライアンス評価の証拠を確認
  4. 04検証できないコード上の領域を特定

MCP 対応

stdioのMCPサーバーは、コンプライアンス検査、ルールとルールパックの一覧、ルール説明のツールを公開し、チェッカーと同じ決定的な結果を返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"nugehs-bouncer": {
"command": "npx",
"args": [
"-y",
"@nugehs/bouncer"
]
}
}
}
起動コマンドnpx -y @nugehs/bouncer

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@nugehs/bouncer0.3.0

ツール

4

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
packsarrayいいえこれらの pack ids に限定します(例:uk-osa、uk-aadc)。
configstringいいえbouncer.config.json のパスです。デフォルトでは cwd から上位ディレクトリを検索します。
statusstringいいえ検出結果を fail、unknown、all(デフォルト)のいずれかで絞り込みます。

詳細

bouncer

静的コンプライアンス管理策チェッカー — 規制で求められる管理策が、コード内に実装されているかを確認します。

npm CI license: MIT node dependencies

nugehs.github.io/bouncer-web(サイト)

bouncer のデモ

bouncer は、規制で 求められる 管理策が実際にコード内に存在するかを確認します。対象は英国の Online Safety Act、ICO Children's Code(AADC)、ナイジェリア(NDPC、FCCPC、FIRS)で、決定論的な ルールパック として表現されています。CI で実行でき、必須の管理策が欠けている場合はゼロ以外の終了コードを返します。LLM は不要です。

入り口で ID をチェックし、コンプライアンスに準拠していないコードが通らないようにします。

bouncer はエンジニアリングを支援するツールであり、法的助言ではありません。緑色のレポートは、ルールが検出対象とする管理策がコード内に見つかったことを意味します。コンプライアンス審査や DPO によるレビューの代わりにはなりません。


概要

規制当局は現在、年齢確認、子ども向けの高プライバシー設定、ユーザー生成コンテンツの通報・ブロック機能、DPIA、リスク評価など、実証可能な 管理策を求めています。これらはコードベースに存在するかどうかを確認できる、具体的なものです。bouncer は、規制をリポジトリに対する一連の静的チェックに変換します。tieline が API コントラクトをドリフトチェックに変換するのと同じです。エンジンは法律について何も知りません。知っているのは ルールパック です。

bouncer と semgrep/ポリシー・アズ・コードの比較

semgrep、CodeQL、Snyk などのスキャナーが答えるのは、「ここに問題のあるコードはあるか?」 です。脆弱性や危険なパターンなど、存在すべきでないもの を探します。bouncer が答えるのはその逆で、「規制で求められるコードが実際に存在するか?」 です。たとえば、登録時の年齢確認、UGC を扱う画面での通報・ブロック機能、子ども向けの高プライバシー設定などです。脆弱性がないリポジトリでも、こうした義務のすべてに違反している可能性があります。ポリシー・アズ・コードのツール(OPA/Rego、Conftest)は、設定やインフラストラクチャ をポリシーに照らしてチェックします。一方、bouncer は アプリケーションのソースコード を規制のルールパックに照らしてチェックし、各管理策について file:line の証拠を示します。また、対象箇所を特定できない場合は、正直に unknown を返します。つまり、semgrep は脆弱性を検出し、bouncer は必須の管理策が存在することを証明します。 両者は相互に補完するので、併用してください。

インストール

npx @nugehs/bouncer init
npx @nugehs/bouncer check

または、クローンして通常の Node で実行できます(実行時依存関係ゼロ、Node ≥ 18)。

使い方

bouncer init [path]                 # write a starter bouncer.config.json
bouncer check                       # run packs, print report, exit 1 on a missing control
bouncer check --pack uk-aadc        # restrict to one pack
bouncer check --status fail         # show only the failures
bouncer report --out report.html    # self-contained HTML audit report
bouncer list                        # every rule the configured packs apply
bouncer explain <ruleId>            # what a rule requires + how it is checked
bouncer packs                       # rule packs shipped with bouncer
bouncer doctor                      # sanity-check config, adapter, packs
bouncer mcp                         # start the MCP server (stdio)
判定結果
判定結果意味
pass必須の管理策が見つかりました(証拠:file:line)
fail対象箇所は存在しますが、管理策の証拠が見つかりませんでした
unknownこのリポジトリ内で対象箇所を特定できませんでした — 判定不能であり、合格ではありません

unknown は意図的な判定です。bouncer は見つけられなかった対象箇所について、緑色の合格を報告することはありません。対象箇所が見つからない場合は、正直に「判定不能」とします。

設定

bouncer.config.json:

{
  "target": {
    "adapter": "auto",
    "repo": "./my-app",
    "roots": ["."]
  },
  "packs": ["uk-osa", "uk-aadc"],
  "packDirs": [],
  "ignore": [],
  "exclude": [],
  "failOn": ["fail"]
}
  • adapter — 規制対象のサーフェス(登録、プロフィール、チャット、ライブ配信など)を、スタック内のファイルにどのように対応付けるかを指定します。

bouncer は言語に依存しません。 デフォルトの auto アダプターは、TS/JS、Go、 Java、Kotlin、Scala、C#、C/C++、Rust、Swift、Dart、PHP、Python、Ruby、Elixir、 SQL、および HTML テンプレートをスキャンします。サーフェスは、命名規則 (signup/、sign_up.py、SignUpController.java)を問わず、ディレクトリ名/ファイル名で検出されます。 コメントおよびテスト/フィクスチャファイルは、証拠としてカウントされません。next と react-native は、引き続き TS/JS 専用のエイリアスです。target.languages で対象を絞り込めます。

  • exclude — スキップする追加の glob(組み込みのテスト/フィクスチャ/モックの除外対象に追加されます。これらを無効にするには "defaultExcludes": false を設定します)。
  • packs — 実行するルールパックを指定します。組み込みパック:uk-osa、uk-aadc、ng-ndpc、ng-fccpc、ng-firs。
  • packDirs — 独自の *.json パックを格納する追加ディレクトリ。
  • ignore — スキップするルール ID。
  • failOn — check がゼロ以外で終了する対象の分類(デフォルトは ["fail"])。 failOn の設定にかかわらず、すべてのルールが unknown の場合も check は 1 で終了します: サーフェスが見つからず、何も検証されていないためです。
  • _ で始まるキー(例:"_note")はコメントとして扱われ、何も通知せず無視されます。

ルールパック

パックは JSON です。各ルールは、法的基準をサーフェスに対する静的アサーションに対応付けます:

{
  "id": "aadc.geolocation-default-off",
  "standard": "Standard 10 — Geolocation",
  "severity": "high",
  "surface": "profile",
  "intent": "Geolocation must default to off for children.",
  "fix": "Default any location-sharing setting to off.",
  "assert": {
    "find": "(share[_-]?location|location[_-]?sharing)[\"']?\\s*[:=]\\s*(false|off)\\b",
    "in": ["profile", "privacy", "location"],
    "expect": "present"
  }
}

アサーションノード:

  • { "find": "<regex>", "in": "<surface|glob>", "expect": "present|absent" }
  • { "allOf": [ … ] } · { "anyOf": [ … ] } · { "not": … }

in は、サーフェスのエイリアス(アダプターで解決)、エイリアス/glob の配列、または生の glob を受け付けます。expect: "absent" は意味を反転させます。一致が違反となります(促しのパターン、自己申告式の年齢確認チェックボックスなどで使用します)。

サーフェス

any、signup、auth、profile、privacy、location、chat、livestream、ugc、moderation、consent、legal、dsr、security、retention、breach、processors、payments、invoice、governance。不明なサーフェス名は、パックの検証エラーになります。

ナイジェリア向けパック

ナイジェリアで運営するプラットフォーム向けに、3 つのパックが組み込まれています:

  • ng-ndpc — ナイジェリアデータ保護法 2023(NDPC):プライバシー通知、オプトインと詳細な同意、データ主体の権利、暗号化、データ保持/消去、NDPA のローカライズ、DPO の指定、72 時間以内のデータ侵害対応計画、越境移転の保護措置。
  • ng-fccpc — 消費者保護(FCCPC):一律の「返金不可/すべての販売は最終」条項を無効として検出します。検出精度は高く、段階的または条件付きの返金ポリシーは誤検出されません。また、返金ポリシーの掲載、追加料金の後出し表示がないこと、明示的な規約への同意、利用規約の掲載も確認します。
  • ng-firs — 税務(FIRS):7.5% の VAT 税率、手数料への VAT、支払額に対する WHT、VAT の税務請求書。

一部の義務はコードではなくプロセスに関するものです。NDPC への登録、署名済みの越境 DPA、WHT の納付などが該当します。これらのルールは、静的スキャンで立証できる項目ではなく、追跡すべきギャップとして表示されます(メモを添えて ignore に追加してください)。

MCP

bouncer は MCP サーバー(stdio)でもあるため、エージェントは同じ決定論的な結果を取得できます:

ツール目的
compliance_checkパックを実行し、管理項目ごとの判定と証拠を返す
list_rules設定済みパックで適用されるルールを一覧表示
explain_ruleルールの基準、目的、修正方法、および検査方法を説明する
list_packs利用可能なルールパックを一覧表示
// .mcp.json
{ "mcpServers": { "bouncer": { "command": "npx", "args": ["-y", "@nugehs/bouncer", "mcp"] } } }

CI

- run: npx @nugehs/bouncer check

必須の管理項目が失われるとビルドが失敗します。たとえば、誰かが UGC サーフェスから年齢確認ゲートや報告ボタンを削除した場合です。

テスト

npm test    # node --test — zero dependencies, nothing to install

このテストスイートは、使い捨てのフィクスチャリポジトリを対象に、Node 組み込みのテストランナーで実行されます。 glob/brace 展開、すべてのアサーションプローブ(find、allOf/anyOf/not、 allInFile と within ウィンドウ、expect: "absent")、pass/fail/unknown の判定セマンティクス、パックの読み込みをテストします。CI では Node 18、20、22、24 で実行されます。

ライセンス

MIT


ツールチェーンの一部

bouncer は、AI 支援開発のための決定論的な信頼レイヤーを構成する 4 つのツールの 1 つです。それぞれが、静的解析によって、LLM に繰り返し委ねられている問いに答えます。

  • repoctx — コンテキスト:この変更は実際に何に影響しますか?
  • tieline — 契約:フロントエンドとバックエンドの整合性がいつの間にか崩れていませんか?
  • bouncer(このツール)— コンプライアンス:これを Ofcom に説明できますか?
  • aiglare — ガバナンス:モデルが、元に戻せない操作を実行できる場所はどこですか?

詳しくは segunolumbe.com をご覧ください。静的解析であり、モデルではありません。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。