mcpField
K
Keel

Keel

本地服务
github.com安全29 周前更新

关于 Keel

Keel 是面向授权安全测试的 MCP 控制层,帮助安全测试人员和 Agent 汇总扫描结果,并以受限流量验证发现。它使用语义去重、主机速率限制和只读证明流程。

主要功能

  1. 01语义合并重复扫描结果
  2. 02按主机限制请求速率
  3. 03分波次调度扫描任务
  4. 04评估可利用性与缺失证据
  5. 05通过 GET 流程执行安全验证

适用场景

  1. 01整理多个扫描器产生的重复发现
  2. 02在设定范围和流量上限内扫描主机
  3. 03用测试账号和 canary 验证疑似问题

MCP 相关

Keel 提供 13 个 MCP 工具,用于登记测试范围、调度扫描、查询发现和执行只读验证流程。它将扫描输出整理为语义卡片,并提供可复现的 curl 命令。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"lutfizp-keel": {
"command": "uvx",
"args": [
"keel-pentest"
]
}
}
}
启动命令uvx keel-pentest

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypikeel-pentest0.3.0

工具

13

收录的工具列表 · 更新于 2 周前

参数类型必填说明
scope_hostsarray是
engagement_idstring是
exclude_hostsany否
allow_safe_proofboolean否
max_wave_secondsinteger否
tester_account_astring否
tester_account_bstring否
max_wave_attemptsinteger否
max_wave_requestsinteger否
max_parallel_hostsinteger否
max_proof_requestsinteger否
max_response_bytesinteger否
operator_confirmedboolean否
nuclei_template_idsany否
requests_per_secondnumber否
max_engagement_requestsinteger否

详细介绍

Keel

Keel

将扫描器噪声转化为猎手级非破坏性证明的 MCP 控制平面

Python License MCP PyPI Registry Version

13 个 MCP 工具。语义去重。按主机设置速率限制。安全证明,展示猎手能做到什么——同时不损害目标。

为何选择 Keel · 安装 · 客户端 · 证明 · 工具


向 Agent 倾倒 150 个工具很容易。真正棘手的问题是:跨工具去重、区分可利用的问题与噪声,以及避免对目标狂轰滥炸。Keel 是处理这三个问题的控制平面。

AI 客户端与 Keel 通信,而不是与 httpx、nuclei 或 shell 通信。Keel 一次只起草一个波次,强制执行范围和速率限制,将扫描器发现合并为语义卡片,并在测试人员自有数据上运行仅使用 GET 的操作手册。当操作手册返回 proven 时,你会得到一段猎手可按步骤重放的 curl 命令——仍然不会执行写入、shell 命令或大量发送载荷。

仅在你获准测试的项目上使用。

为何选择 Keel

难题扫描器输出的做法Keel 的做法
跨工具去重每行对应一个 Nuclei 模板 ID;同一个 IDOR 会出现五次根据漏洞类别、规范化路由、方法和参数生成语义键。UUID/id/十六进制令牌会合并。兼容的观察结果会合并。
区分可利用的问题与噪声严重性高 =“直接上线”卡片依次经过 observed → hypothesis → corroborated → proven / refuted。信息性问题和安全加固问题会隐藏。类型化的可利用性评估会指出缺少的证据和负向对照。
避免对目标狂轰滥炸一次发起所有模板,遇到 429 就重试每台主机同时只运行一个活动波次,使用令牌桶,Nuclei 并发数为 1,不使用 OAST、不跟随重定向、不运行未签名模板,也不运行带有 dos/fuzz/bruteforce/intrusive 标签的模板。HTTP 429 会触发冷却。

仅仅通过 shell 调用一大堆工具的包装器并不具备这一层能力。Keel 做到了——在调度器、适配器和证明代理中都实现了这一点。

架构

flowchart TD
    A[AI coding client] -->|stdio MCP| B[Keel]
    B --> C[Scope and rate gate]
    C --> W[Background job and wave scheduler]
    W --> H[httpx: one target]
    W --> N[nuclei: HTTP templates, bounded]
    C --> P[Proof broker: GET only]
    P --> T[Tester-owned resource]
    H --> S[Semantic card store]
    N --> S
    P --> S
    S --> Q[Triage and evidence states]
  1. 使用获准测试的主机名调用 begin_engagement。
  2. draft_waves 会提出可达性检查和模板微波次,但不会产生任何流量。
  3. execute_wave 会立即返回一个作业。轮询 wave_status。cancel_wave 会终止扫描器。
  4. query_cards 会返回与猎手相关的卡片。assess_exploitability 会说明需要什么证据才能证明问题。
  5. draft_proof 随后由 execute_proof 在测试人员的数据上运行仅使用 GET 的操作手册。proven 表示不变量成立。protected 表示控制措施有效。

安装

macOS(Homebrew)。pipx 是独立工具——请先安装。Apple 的 /usr/bin/python3 通常是 3.9,无法安装 Keel。

brew install pipx [email protected]
pipx ensurepath
# open a new terminal, then:
pipx install keel-pentest
keel-pentest setup
keel-pentest doctor

如果机器上已有 python3.12,且不想使用 Homebrew pipx:

python3.12 -m pip install --user pipx
python3.12 -m pipx ensurepath
python3.12 -m pipx install keel-pentest

setup 会将 ProjectDiscovery 的 httpx 和 nuclei 下载到 ~/.keel/bin。即使 GUI 客户端的 PATH 配置不完整,Keel 也能在该目录找到它们。首次扫描无需额外设置 KEEL_HTTPX_BIN。

然后将 MCP 客户端指向 keel-pentest 可执行文件:

claude mcp add --scope user --transport stdio keel -- keel-pentest
codex mcp add keel -- keel-pentest
hermes mcp add keel --command keel-pentest

OpenCode:"command": ["keel-pentest"]。

Python 3.10+。不要执行 pip install keel——那是另一个项目。操作系统说明以及 pip/venv 说明:INSTALL.md。客户端配置形式:clients/README.md。

之后可选:使用 KEEL_APPROVAL_FILE 指定团队清单,以固定范围、模板 ID 和证明目标。默认模式为自我声明——begin_engagement 即为授权。速率限制、每个主机每波次一次、签名模板和已清理的证据仍然适用。

安全地证明影响

扫描器输出只是一个假设。Keel 使用一次性测试账号和唯一金丝雀来证明(或证伪)该假设。每个操作手册都只执行 GET 请求、设有预算限制,并会返回 curl 重放命令。重放命令就是报告产物:如果不修复,有普通账号的漏洞猎手就能做到这一点。

操作手册证明内容如何在不造成损害的情况下证明
cross_account_readIDOR / BOLA测试账号 A 读取其金丝雀;测试账号 B 对同一个归 A 所有的 URL 发起 GET 请求。金丝雀相同且状态码为 2xx = proven。401/403/404,或状态码为 2xx 但不含金丝雀 = protected(已证伪)。
reflected_marker反射型 XSS / HTML 注入注入唯一标记和无害的 <keel> 探针。反射内容未转义 = proven。反射内容经过 HTML 编码 = protected。控制 GET 请求中不得已包含该探针。
open_redirect_canary开放重定向将重定向参数指向 https://keel-proof.invalid/<marker>。若状态码为 3xx,且 Location 主机是该金丝雀,则为 proven。
unauth_access_probe缺少授权校验测试账号 A 的基线结果必须显示金丝雀;同一 URL 在不带凭据的情况下不得显示。未认证时状态码为 2xx 且包含金丝雀 = proven。
own_session_marker仅证明可访问性A 读取自己的金丝雀。这属于 corroborated,绝不能作为漏洞证明。

execute_proof 会保存状态码、金丝雀布尔值、截断标志、哈希、漏洞猎手影响说明和复现脚本。它不会持久化响应正文或机密信息。

在执行 cross_account_read / unauth_access_probe 前,请在测试账号拥有的对象中植入非机密金丝雀。反射型 XSS 和开放重定向会自行注入标记。

MCP 工具

工具作用
begin_engagement注册范围和流量上限
draft_waves提出可达性 + 模板微波次;不产生流量
execute_wave将一个后台任务加入队列
wave_status查看阶段、进度和结果;省略 job_id 可列出任务
cancel_wave停止已排队或正在运行的扫描器
query_cards查看按优先级排序的语义卡片
second_look仅重新运行最初使用的 Nuclei 模板
assess_exploitability评估候选影响、缺失证据、负向控制和操作手册
state_impact记录漏洞猎手的假设
draft_proof创建允许列表中的证明计划;不产生流量
execute_proof运行仅执行 GET 请求的操作手册
engagement_health查看冷却时间、预算和待处理波次
engagement_audit仅追加应用事件

begin_engagement 需要 engagement_id 和 scope_hosts(纯主机名,例如 target.example)。默认值:3 req/s、一次一个主机、每个波次 120 秒 / 120 个请求。allow_safe_proof=true 可启用证明。仅传入测试账号凭据的名称;请将机密信息放入 KEEL_CREDENTIALS_FILE。

示例提示词

Use only Keel MCP tools. Do not shell out to httpx, nuclei, curl, or exploit tools.

1. begin_engagement for bb-2026-01 with scope_hosts ["target.example"], 3 req/s.
   Set allow_safe_proof true if I will run proofs.
2. draft_waves for https://target.example.
3. execute_wave for each wave. Poll wave_status until completed, retryable_failed,
   terminal_failed, or cancelled.
4. query_cards (include_noise false), then assess_exploitability on candidates.
5. For a card with a safe playbook, draft_proof then execute_proof using tester
   credential names and the canary I planted. Treat protected as refuted.
6. Summarize duplicates, evidence state, hunter_impact, and the repro_script.
   Claim exploitable only when Keel reports proven.

流量控制

  • 精确限定 draft、admit、ingest 和 proof 的范围及排除项
  • 每台主机同时只运行一个 wave;同一主机上的任务需等待
  • 共享全局和按主机划分的令牌桶
  • 持久化请求预留;重试会消耗新的预留
  • Nuclei:使用签名的 HTTP 模板,不使用 OAST,不跟随重定向,不重试,排除 dos/fuzz/bruteforce/intrusive
  • 使用隔离的空扫描器配置;清除代理和 ProjectDiscovery-cloud 环境变量
  • HTTP 429 会停止 wave 并遵从 Retry-After
  • 限制响应读取量;保留证据但不保留原始正文

故障排除

keel-pentest doctor
keel-pentest setup    # if doctor reports missing httpx/nuclei

客户端重启后,begin_engagement 会恢复 SQLite engagement。如果更改了范围,请使用新的 engagement_id。

Proof 需要设置 allow_safe_proof=true;对于会话 playbook,还需要在 KEEL_CREDENTIALS_FILE 中将 tester-a 之类的名称映射到 Authorization 或 Cookie。

keel MCP server

许可证

MIT。版权所有 (c) 2026 Lutfi Z.P.

PyPI:keel-pentest。MCP Registry:io.github.lutfizp/keel。源代码:github.com/lutfizp/keel。

keel MCP server

评论

支持 Markdown

第一次接触 MCP?

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

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