mcpField
K
klaws — Korean compliance risk scanner

klaws — Korean compliance risk scanner

本地服务
github.com法律与政务116 周前更新

关于 klaws — Korean compliance risk scanner

klaws 是面向代码库的韩国法律合规风险扫描器,可通过命令行或 MCP 供开发者和编码 Agent 使用。它以本地正则模式匹配发现风险,并将结果关联到 PIPA 等法律条文;扫描结果不构成法律意见。

主要功能

  1. 01扫描目录或单个源代码文件
  2. 02覆盖四项韩国法律的风险检测
  3. 03将发现映射到具体法律条文
  4. 04查询内置法规或在线获取最新文本
  5. 05支持命令行及 MCP 服务模式

适用场景

  1. 01在代码审查前查找个人信息日志风险
  2. 02检查个人信息处理端点的同意验证
  3. 03扫描信用信息的加密或遮蔽问题
  4. 04通过 MCP 查询法规条文及检测器

MCP 相关

作为 MCP 服务,向 AI 编码 Agent 提供目录和文件扫描、检测器列表及法规查询工具。扫描在运行服务的本地文件系统进行,支持设置扫描根目录限制路径范围。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 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 在本地分析代码,不会传输任何内容。唯一的出站网络请求是可选的 --live 法律查询,目标为 law.go.kr;不使用该标志时,工具完全离线运行。请参阅隐私与安全。

快速开始

# 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_reference根据 ID 查询韩国法律条款
配置

所有客户端都使用相同的启动命令:通过 stdio 运行 klaws serve。请使用二进制文件的绝对路径(运行 which klaws,或在 Windows 上运行 where klaws 查找),如果它位于 PATH 中,也可以直接使用 klaws。不想安装任何内容?请使用下方的 Docker 版本——它适用于任何支持 stdio MCP 服务的客户端。

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

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

或者通过一条命令添加:

claude mcp add klaws -- klaws serve

Claude Desktop — claude_desktop_config.json(Settings → 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 标志会保持 stdin 打开,以供 stdio 传输使用;--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 提供 Bearer 身份验证,但不提供 TLS。在不受信任的网络中,仍应在 klaws 前方通过反向代理 / 网关终止 TLS。
  • scan_directory 和 scan_file 工具读取的是服务端文件系统(你传入的路径会在运行 klaws 的主机上解析)。要进行远程扫描,请在代码所在的位置运行 klaws(例如,在已检出仓库的 CI 运行器上),并将 --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 条数据泄露通知
网络法(정보통신망법)— 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 条限制传送广告信息
信用信息法(신용정보법)— 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 条信用信息主体的权利
电子商务法(전자상거래법)— 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 的设计旨在安全地用于私有代码:

  • 仅在本地分析。 扫描仅对你提供的文件进行纯静态模式匹配。源代码绝不会离开你的设备——不会上传、远程记录,也不会发送到任何服务。
  • 只有一个可选的出站请求。 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 提供了一个复合 Action,可扫描代码并生成 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),即可在存在达到或超过该严重性级别的问题时,让检查导致 PR 失败。上传步骤中的 if: always() 可确保即使检查门禁失败,SARIF 仍会发布。

发布

维护者:有关如何创建版本并发布到 MCP 注册表,请参阅 RELEASE.md。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。