mcpField
K
klaws — Korean compliance risk scanner

klaws — Korean compliance risk scanner

ローカル
github.com法務・行政116 週間前に更新

klaws — Korean compliance risk scanner について

klawsは、韓国法のコンプライアンスリスクをコードベースから検出するツールで、CLIまたはMCP経由で開発者やコーディングエージェントが利用できます。ローカルで正規表現による検査を行い、検出結果を法令条文に関連付けますが、法的助言ではありません。

主な機能

  1. 01ディレクトリや単一ソースファイルのスキャン
  2. 02韓国の4法に関するリスク検出
  3. 03検出結果を具体的な法令条文に関連付け
  4. 04同梱法令の参照や最新条文の取得
  5. 05CLIとMCP サーバーモードでの実行

活用シーン

  1. 01コードレビュー前に個人情報ログのリスクを検出
  2. 02個人情報処理エンドポイントの同意確認を点検
  3. 03信用情報の暗号化やマスキングの問題を検査
  4. 04MCP経由で法令条文や検出器を参照

MCP 対応

MCP サーバーとして、AIコーディングエージェントにディレクトリやファイルのスキャン、検出器一覧、法令参照のツールを提供します。スキャン対象はサーバー側のローカルファイルシステムで、対象ルートを制限できます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"rostradamus-klaws": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/rostradamus/klaws:0.1.6"
]
}
}
}
起動コマンドdocker run -i --rm ghcr.io/rostradamus/klaws:0.1.6

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

パッケージ
ocighcr.io/rostradamus/klaws:0.1.6

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

klaws

CI Release Container Glama License: MIT

한국어

コードベースを対象とした韓国法のコンプライアンスリスクスキャナーです。ソースコードをスキャンし、韓国法のコンプライアンスリスクを示す可能性のあるパターンを検出して、具体的な法令条項に関連付けます。MCP サーバーとして(AI コーディングアシスタントからリクエストに応じてスキャンできます)、またスタンドアロンの CLI として動作します。

現在、PIPA(個人情報保護法)、ネットワーク法(情報通信網法)、信用情報法(信用情報法)、電子商取引法(電子商取引法)に対応しています。

免責事項: klaws は、レビューが必要なコンプライアンスリスクの可能性を特定します。法的助言を提供するものではありません。確定的な指針については、資格を有する法律専門家にご相談ください。

プライバシー: klaws はコードをローカルで分析し、データを送信しません。外部へのネットワーク接続は、law.go.kr へのオプションの法令検索 --live のみです。このフラグを指定しなければ、完全にオフラインで動作します。プライバシーとセキュリティをご覧ください。

クイックスタート

# Scan the current directory with Docker — no install needed
docker run --rm -v "$PWD":/src:ro ghcr.io/rostradamus/klaws scan /src

# ...or, if you installed the binary:
klaws scan ./my-project        # scan a directory
klaws scan ./MyService.java    # scan a single file

インストール

Docker(推奨)

ツールチェーンは不要です。イメージは GitHub Container Registry で公開されており、macOS、Linux、Windows で同じように動作します。

# Scan the current directory (mount it read-only at /src)
docker run --rm -v "$PWD":/src:ro ghcr.io/rostradamus/klaws scan /src

# Pin a version instead of the floating latest tag
docker run --rm -v "$PWD":/src:ro ghcr.io/rostradamus/klaws:0.1.6 scan /src
ビルド済みバイナリ

最新リリースからお使いのプラットフォーム用のアーカイブをダウンロードして展開し、klaws を PATH に配置します。

go install
go install github.com/rostradamus/klaws/cmd/klaws@latest
ソースからインストール

要件: Go 1.23+

git clone https://github.com/rostradamus/klaws.git
cd klaws
go build -o klaws ./cmd/klaws/

インストールを確認します。

klaws --version

使い方

スキャン
# Scan a directory (default: *.java files)
klaws scan ./src

# Scan specific file types
klaws scan ./src --pattern "*.kt"

# Text output (default is JSON)
klaws scan ./src --format text

# SARIF output (for GitHub code scanning / other tools)
klaws scan ./src --format sarif > klaws.sarif

# Fail the command (exit 1) if any finding is at or above a severity
klaws scan ./src --fail-on HIGH

# Use a custom laws file
klaws scan ./src --laws ./my-laws.yaml
出力例
klaws scan report
Target:  ./testdata
Files:   4
Findings: 7

--- Finding 1 ---
  Detector:  PIPA-CST-001
  Risk:      HIGH
  Location:  testdata/MemberController.java:10
  Snippet:   @PostMapping("/register")
  Message:   Endpoint accepts possible personal data without apparent consent
             mechanism — may require review under PIPA Article 15
  Laws:      PIPA-15

--- Finding 2 ---
  Detector:  PIPA-ENC-001
  Risk:      HIGH
  Location:  testdata/MemberEntity.java:11
  Snippet:   private String residentNumber;
  Message:   Possible unencrypted personal identifier (residentNumber) — may
             require review under PIPA Article 24-2
  Laws:      PIPA-24-2, PIPA-29

--- Finding 3 ---
  Detector:  PIPA-LOG-001
  Risk:      MEDIUM
  Location:  testdata/UserService.java:11
  Snippet:   log.info("User registered: " + email);
  Message:   Possible personal data (email) in log output — may require review
             under PIPA Article 29
  Laws:      PIPA-29
法令条項を検索
# Look up from bundled database
klaws law PIPA-15

# Fetch live text from law.go.kr
klaws law PIPA-15 --live
検出器を一覧表示
klaws detectors
[
  {
    "id": "PIPA-LOG-001",
    "name": "Personal Data Logging Risk",
    "description": "Detects log statements that may contain personal data fields",
    "related_laws": ["PIPA-29"]
  },
  {
    "id": "PIPA-ENC-001",
    "name": "Unencrypted Personal Data Risk",
    "description": "Detects personal identifier fields stored without apparent encryption",
    "related_laws": ["PIPA-24-2", "PIPA-29"]
  },
  {
    "id": "PIPA-CST-001",
    "name": "Missing Consent Check Risk",
    "description": "Detects endpoints accepting personal data without apparent consent verification",
    "related_laws": ["PIPA-15"]
  }
]

検出器

ID名前検出対象リスク関連法
PIPA-LOG-001個人データのログ記録個人データのフィールド名(メールアドレス、電話番号、SSN、パスワード)を含む log.*() 呼び出しMEDIUMPIPA 第29条
PIPA-ENC-001暗号化されていない個人データ暗号化アノテーションまたは呼び出しのない機微な識別子フィールド(住民登録番号、SSN)HIGHPIPA 第24条の2、第29条
PIPA-CST-001同意確認の欠如同意確認なしで個人データを受け付ける @PostMapping/@PutMapping エンドポイントHIGHPIPA 第15条
NIA-MKT-001マーケティングメッセージの同意オプトイン同意の確認が見当たらない広告/マーケティングメッセージの送信(send/push)MEDIUM情報通信網法 第50条
CIA-ENC-001保護されていない信用情報暗号化またはマスキングされていない信用/金融識別子フィールド(カード番号、口座番号、信用スコア)HIGH信用情報法 第19条
ECA-RET-001取引記録の保存保存または保全の処理が見当たらない状態で保存されている取引記録フィールド(注文/決済 ID)MEDIUM電子商取引法 第6条
PIPA-RET-001個人データの保存消去または保存期間制限の処理が見当たらない状態で保存されている個人データフィールド(メールアドレス、電話番号、住民登録番号)MEDIUMPIPA 第21条
PIPA-XBR-001第三者へのデータ転送同意確認が見当たらない状態で第三者または外部エンドポイントに送信される個人データ(外部 URL/パートナーへの送信呼び出し)HIGHPIPA 第17条

検出器は正規表現ベースのパターンマッチングを使用します。英語と韓国語の両方のフィールド名に対応しています(例:email/이메일、residentNumber/주민번호、consent/동의)。

MCP サーバー

klaws は MCP サーバーとして実行でき、スキャン機能を AI コーディングアシスタントから利用できるようにします。

klaws serve
利用可能なツール
ツール説明
scan_directoryディレクトリをスキャンしてコンプライアンス上のリスクを検出します
scan_file単一のファイルをスキャンします
list_detectors利用可能なすべての検出器を一覧表示します
get_law_referenceID を指定して韓国の法律の条項を検索します
設定

すべてのクライアントで、stdio 経由の共通起動コマンド klaws serve を使用します。バイナリへの絶対パスを指定するか(which klaws を実行してください。Windows では where klaws を実行すると確認できます)、PATH に含まれている場合は klaws を指定してください。何もインストールしたくない場合は、以下の Docker で MCP サーバーを実行する方法を使ってください。stdio MCP サーバーに対応するすべてのクライアントで動作します。

Claude Code — ~/.claude/settings.json:

{
  "mcpServers": {
    "klaws": {
      "command": "klaws",
      "args": ["serve"]
    }
  }
}

または、次のコマンドを 1 つ実行して追加します:

claude mcp add klaws -- klaws serve

Claude Desktop — claude_desktop_config.json(設定 → Developer → Edit Config):

{
  "mcpServers": {
    "klaws": {
      "command": "klaws",
      "args": ["serve"]
    }
  }
}

Cursor — ~/.cursor/mcp.json(またはプロジェクト内の .cursor/mcp.json):

{
  "mcpServers": {
    "klaws": {
      "command": "klaws",
      "args": ["serve"]
    }
  }
}

VS Code — .vscode/mcp.json:

{
  "servers": {
    "klaws": {
      "command": "klaws",
      "args": ["serve"]
    }
  }
}

接続したら、アシスタントに 「klaws でこのディレクトリをスキャンして、韓国のコンプライアンス上のリスクを確認してください。」 のように依頼します。

Docker で MCP サーバーを実行する

バイナリのインストールは不要です。command/args を、スキャン対象のコードをマウントする docker run に置き換えてください。-i フラグは stdio トランスポート用に stdin を開いたままにします。--scan-root /src を指定すると、スキャン対象をマウントされたディレクトリに限定できます。

{
  "mcpServers": {
    "klaws": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "/absolute/path/to/your/project:/src:ro",
        "ghcr.io/rostradamus/klaws:latest",
        "serve", "--scan-root", "/src"
      ]
    }
  }
}

アシスタントには /src(コンテナー側のマウント先)以下のパスを指定してください。例:「/src をスキャンして、韓国のコンプライアンス上のリスクを確認してください。」

リモート(Streamable HTTP)

デフォルトでは klaws serve は stdio(ローカル)を使用します。HTTP 経由でリモート MCP サーバーとして実行するには、--http を渡します。

klaws serve --http :8080
# or via the published container image:
docker run --rm -p 8080:8080 ghcr.io/rostradamus/klaws serve --http :8080

MCP エンドポイントは http://<host>:8080/mcp(Streamable HTTP トランスポート)で利用できるようになります。HTTP 対応の MCP クライアントにこの URL を指定してください。

リモートサーバーの保護
klaws serve --http :8080 \
  --auth-token "$(openssl rand -hex 32)" \
  --scan-root /workspace
  • --auth-token <token> — すべての HTTP リクエストで Authorization: Bearer <token> を要求します。認証されていないリクエストには 401 を返します。KLAWS_AUTH_TOKEN 環境変数でも指定できます。--http にのみ適用されます。
  • --scan-root <dir> — scan_directory / scan_file の対象を <dir> 内のパスに制限します。範囲外のパスへのリクエストは拒否されます。(stdio モードでも有効です。)

注:

  • --auth-token はベアラー認証を提供しますが、TLS は提供しません。信頼できないネットワークでは、引き続き klaws の前段にあるリバースプロキシ/ゲートウェイで TLS を終端してください。
  • scan_directory と scan_file のツールは、サーバー側のファイルシステムを読み取ります(指定したパスは klaws が実行されているホスト上のパスとして解決されます)。リモートスキャンでは、コードがある場所(例:リポジトリをチェックアウトした CI ランナー)で klaws を実行し、--scan-root にそのチェックアウト先を設定してください。get_law_reference と list_detectors のツールはファイルシステムに依存しません。

同梱されている法律の条文

klaws には、韓国の 4 つの法律にわたる 40 条がバイナリに組み込まれています(外部ファイルは不要です)。

PIPA(개인정보 보호법)— 10 条
ID条文トピック
PIPA-15第15条個人情報の収集および利用
PIPA-17第17条第三者への提供
PIPA-18第18条目的外利用の制限
PIPA-21第21条個人情報の破棄
PIPA-23第23条センシティブ情報の制限
PIPA-24第24条固有識別情報の制限
PIPA-24-2第24-2条住民登録番号の制限
PIPA-29第29条安全管理措置の義務
PIPA-30第30条プライバシーポリシー
PIPA-34第34条データ漏えいの通知
Network Act(정보통신망법)— 11 条
ID条文トピック
NIA-22第22条個人情報の収集・利用に関する同意
NIA-23第23条収集の制限
NIA-23-2第23-2条住民登録番号の制限
NIA-24第24条利用の制限
NIA-24-2第24-2条第三者への提供
NIA-27第27条安全管理措置
NIA-28第28条個人情報の委託
NIA-28-2第28-2条データ漏えいの通知
NIA-44第44条ユーザーの保護
NIA-44-7第44-7条違法情報の禁止
NIA-50第50条広告情報の送信制限
Credit Information Act(신용정보법)— 10 条
ID条文トピック
CIA-15第15条収集の原則
CIA-17第17条目的外開示の禁止
CIA-19第19条信用情報システムの安全性
CIA-20第20条信用情報の正確性と最新性
CIA-32第32条提供・利用に関する同意
CIA-33第33条個人信用情報の利用
CIA-34第34条個人信用情報の提供・利用
CIA-38第38条信用情報の保護
CIA-39第39条データ漏えいの通知
CIA-40第40条信用情報主体の権利
E-Commerce Act(전자상거래법)— 9 条
ID条文トピック
ECA-6第6条取引記録の保存
ECA-7第7条操作ミスの防止
ECA-11第11条電子決済の信頼性
ECA-13第13条身元情報および取引情報の提供
ECA-14第14条注文の確認
ECA-17第17条撤回権
ECA-21第21条消費者情報の利用
ECA-24第24条サイバーモールのセキュリティ
ECA-26第26条消費者情報の保護

韓国語の条文全文が含まれています。--live を使用すると、law.go.kr から最新バージョンを取得できます。

プライバシーとセキュリティ

klaws は、プライベートなコードを対象にしても安全に使えるよう設計されています。

  • ローカルのみで解析。 スキャンでは、指定したファイルに対して静的なパターンマッチングのみを行います。ソースコードがマシンの外に出ることはありません。アップロードされたり、リモートに記録されたり、サービスに送信されたりすることはありません。
  • 任意の外部通信は1回のみ。 klaws が行う唯一のネットワークリクエストは、--live による法令の検索(CLI)/ライブ取得を伴う get_law_reference(MCP)です。law.go.kr から公開されている法令の条文を取得します。検索クエリとして送信するのは法令名(例:개인정보보호법。検索した条項から特定されます)のみで、コードが送信されることはありません。完全にオフラインで使用するには、--live を省略してください。
  • 設計上、読み取り専用。 klaws はスキャン対象のファイルを読み取るだけで、コードを変更することはありません。MCP ツールには読み取り専用の注釈が付いています。
  • アクセス可能なファイルシステムを制限。 MCP サーバーを公開する際は、--scan-root <dir> を指定して scan_directory/scan_file を単一のツリーに制限し、--http で提供する場合は --auth-token も指定してください。リモートサーバーのセキュリティ保護を参照してください。

脆弱性の報告については、SECURITY.md を参照してください。

アーキテクチャ

klaws scan ./src
       │
       ▼
   FileWalker ──► walks directory, matches glob pattern
       │
       ▼
  ScannerService ──► reads each file
       │
       ▼
  DetectorRegistry ──► runs all detectors on source code
       │
       ▼
    Findings ──► mapped to law provisions
       │
       ▼
   Report ──► JSON or text output

ロードマップ

  • 検出機能の追加: マーケティングメッセージの同意(NIA-MKT-001) (完了)、保護されていない信用情報(CIA-ENC-001) (完了)、取引記録の保存期間(ECA-RET-001) (完了)、個人データの保存期間(PIPA-RET-001) (完了)、第三者への移転/国外移転(PIPA-XBR-001) (完了)
  • 多言語対応: Python、JavaScript/TypeScript の検出パターン
  • 韓国の法律の追加: 電子商取引法(전자상거래법)の消費者保護規則 (完了)、ネットワーク法(정보통신망법) (完了)、信用情報法(신용정보법) (完了)
  • CI/CD: GitHub Action、SARIF 出力、重大度のしきい値 (完了)
  • 設定: 設定ファイルによるカスタムパターンルール

GitHub Action(CI)

klaws には、コードをスキャンして SARIF レポートを生成する複合アクションが含まれています。これを GitHub のコードスキャンにアップロードすると、プルリクエスト上や Security タブに検出結果がインラインで表示されます。

# .github/workflows/klaws.yml
name: klaws compliance scan
on: [pull_request]

permissions:
  contents: read
  security-events: write   # required to upload SARIF

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - id: klaws
        uses: rostradamus/klaws@v0   # moving major tag; add `version: vX.Y.Z` below to pin the klaws binary
        with:
          path: ./src
          pattern: "*.java"
          fail-on: none      # or MEDIUM / HIGH to gate the PR

      - name: Upload SARIF
        if: always()          # upload even if fail-on tripped the step
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: ${{ steps.klaws.outputs.sarif }}

fail-on: HIGH(または MEDIUM)を設定すると、その重大度以上の検出結果がある場合にチェックが失敗し、プルリクエストが失敗します。アップロードステップの if: always() により、ゲートが失敗した場合も SARIF が公開されます。

リリース

メンテナーの方は、リリースの作成と MCP レジストリへの公開方法について RELEASE.md を参照してください。

ライセンス

MIT

コメント

MCP は初めてですか?

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

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