keel
面向授权渗透测试与漏洞赏金的 MCP 控制平面
九个 MCP 工具。一次只放行一个波次。按主机限速。猎人级卡片,而非扫描器倾倒。
架构 · 安装 · MCP 客户端 · 功能 · 工具 · 提示词示例 · 安全 · 许可证
Keel 是一个 MCP 服务器,可接入 Claude Code、Codex、Cursor、OpenCode、Hermes、Copilot 以及任何其他 MCP 客户端。它执行限定范围的侦察,防止目标被过度请求打爆,并将扫描器输出转化为去重后的卡片。信息类与缺失头部的噪音默认隐藏,除非你主动询问。有界验证使用你的测试账号和唯一标记——绝不是自由格式的漏洞利用生成器。
适用场景:
外部与 Web 渗透测试侦察
漏洞赏金(范围收窄,噪音滤除)
带 AI 副驾驶的红队风格评估
可暂停、可查询、可证明的重复性项目
架构概览
模型只与 Keel 对话。Keel 负责放行波次、按主机限速、将 httpx / nuclei 输出解析进卡片存储,并在操作者标志位之后才放行验证。
%%{init: {"themeVariables": {
"primaryColor": "#1a2744",
"secondaryColor": "#3d7ea6",
"tertiaryColor": "#6ec8e8",
"background": "#0a0a0a",
"edgeLabelBackground":"#1a2744",
"fontFamily": "monospace",
"fontSize": "15px",
"fontColor": "#e8f4fc",
"nodeTextColor": "#e8f4fc"
}}}%%
graph TD
A[MCP client - Claude / Codex / Cursor / OpenCode] -->|stdio MCP| B[Keel MCP server]
B --> C[Engagement policy]
B --> D[Wave scheduler]
B --> E[Card store]
C --> F[Scope hosts]
C --> G[Per-host RPS]
C --> H[Proof flags]
D --> I[probe_alive]
D --> J[template_scan]
D --> K[Token bucket]
I --> L[ProjectDiscovery httpx]
J --> M[ProjectDiscovery nuclei]
L --> E
M --> E
E --> N[query_cards]
E --> O[Triage / impact_class]
O --> P[draft_proof]
P --> Q[execute_proof - gated]
B --> R[engagement_health]
style A fill:#1a2744,stroke:#6ec8e8,stroke-width:2px,color:#e8f4fc
style B fill:#3d7ea6,stroke:#6ec8e8,stroke-width:3px,color:#e8f4fc
style E fill:#1a2744,stroke:#3d7ea6,stroke-width:2px,color:#e8f4fc
style Q fill:#0d3d4d,stroke:#6ec8e8,stroke-width:2px,color:#e8f4fc工作方式
连接 — 客户端启动 stdio 服务器:
keel-pentest(PyPI)或python3 scripts/keel_mcp.py(克隆仓库)。无 HTTP 旁路进程。开始 —
begin_engagement记录范围、RPS 以及是否允许验证。起草再执行 —
draft_waves先提议probe_alive再提议template_scan。execute_wave在每主机令牌桶后面运行一个已放行的波次。分诊 —
query_cards返回与猎人相关的卡片。state_impact记录impact_class。second_look重新扫描一个 URL。验证 —
draft_proof描述一个白名单剧本。execute_proof仅在设置了allow_safe_proof和operator_confirmed时运行。
Related MCP server: BountyProof MCP
安装
角色 | 名称 |
pip / PyPI |
|
MCP stdio 命令 |
|
|
|
客户端中的 MCP 服务器 ID |
|
注册表 |
|
不要 pip install keel。完整操作系统说明:INSTALL.md。客户端配置片段(PyPI 与克隆):clients/README.md。
需要 Python 3.10+。Apple 的 /usr/bin/python3 通常是 3.9(会报 No matching distribution found for mcp>=1.9)。
选择其中一条路径:
路径 | 适用场景 | MCP 命令 |
已发布包,无需克隆 |
| |
开发;仓库内 MCP 配置 |
| |
修改 | 启动器,或 | |
客户端安装 | 与 PyPI 相同(注册表包中的 |
每条路径仍然需要 ProjectDiscovery 的 httpx 和 nuclei 在 PATH 中。wheel 包不包含这些二进制文件。Python 库 httpx 不是那个 CLI。
macOS 探测工具:brew install nuclei httpx 然后 nuclei -update-templates。克隆仓库:sh scripts/bootstrap.sh tools。其他操作系统:INSTALL.md。
从 PyPI 安装
python3.12 -m venv .venv
source .venv/bin/activate # Windows: .\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install keel-pentestuv:uv pip install keel-pentest。pipx:pipx install keel-pentest(将 keel-pentest 放入 PATH)。
检查:
python -c "import keel; print('keel ok')"
which keel-pentest不要在终端里让 python -m keel 一直运行来“测试”它:该进程就是 MCP stdio 服务器,会等待 stdin。只能把它用作客户端的 command。
python -m keel 和控制台脚本 keel-pentest 都会启动 stdio MCP 服务器(它们驻留在 stdin/stdout 上;不是 HTTP 守护进程)。将 MCP 客户端指向装有该包的解析器:
{
"mcpServers": {
"keel": {
"command": "/ABS/path/to/.venv/bin/keel-pentest"
}
}
}或者:
{
"mcpServers": {
"keel": {
"command": "/ABS/path/to/.venv/bin/python",
"args": ["-m", "keel"]
}
}
}如果 JSON-RPC 看起来卡住了,在客户端环境中设置 PYTHONUNBUFFERED=1。单独安装 httpx 和 nuclei(见上文)。
PyPI 上的包名是 keel-pentest。导入名是 keel。
从本地克隆安装
git clone https://github.com/lutfizp/keel.git
cd keel
sh scripts/bootstrap.shWindows:
powershell -ExecutionPolicy Bypass -File scripts\bootstrap.ps1该脚本会创建 Python 3.10+ 的 .venv,安装本项目(通过 pip install -e ".[dev]" 安装 keel-pentest),然后安装 ProjectDiscovery 的 httpx 和 nuclei。
部分运行:
sh scripts/bootstrap.sh python # venv + Keel only
sh scripts/bootstrap.sh tools # nuclei + httpx only验证:
source .venv/bin/activate
python -c "import mcp, keel; print('keel ok')"
httpx -version
nuclei -version仓库内 MCP 配置使用启动器:
python3 scripts/keel_mcp.py该脚本会在仓库旁边找到 3.10+ 的 .venv 并运行 python -m keel(与 keel-pentest 相同)。可选环境变量:KEEL_PYTHON、KEEL_ROOT。
从源码可编辑安装
在克隆目录中(在 3.10+ venv 存在之后):
source .venv/bin/activate
python -m pip install -e ".[dev]"
pytest与本地相同:python3 scripts/keel_mcp.py,或 /path/to/keel/.venv/bin/keel-pentest。
从 MCP 注册表安装
注册表名称:io.github.lutfizp/keel。发布的 server.json 指向 PyPI 的 keel-pentest。支持注册表的客户端会安装该包;你仍然需要 Python 3.10+ 和探测 CLI。
如果客户端只写配置文件,请使用上面的 PyPI command 示例。
操作系统特定的 Python 和工具安装:INSTALL.md。
MCP 客户端配置
本地克隆(以本仓库为工作区)
仓库中已有的配置文件:
主机 | 文件 |
OpenCode |
|
Claude Code |
|
Cursor |
|
VS Code / Copilot |
|
Codex |
|
Claude Desktop、Hermes、Gemini CLI、Antigravity(agy)、Windsurf、Cline、Roo 的配置片段:clients/README.md。
OpenCode:
{
"mcp": {
"servers": {
"keel": {
"type": "local",
"command": ["python3", "scripts/keel_mcp.py"]
}
}
}
}OpenCode v2 使用 mcp.servers 而不是扁平的 mcp 映射。保持相同的 command 数组。
Claude Code(从克隆目录):
cd /path/to/keel
claude mcp add --scope project --transport stdio keel -- python3 scripts/keel_mcp.pyClaude Desktop / Cursor 风格的 mcpServers(本地启动器):
{
"mcpServers": {
"keel": {
"command": "python3",
"args": ["/ABS/path/to/keel/scripts/keel_mcp.py"]
}
}
}Codex(本地):
codex mcp add keel -- python3 /ABS/path/to/keel/scripts/keel_mcp.pyPyPI / 全局 venv
Claude Code:
claude mcp add --scope user --transport stdio keel -- /ABS/path/to/.venv/bin/keel-pentestCodex:
codex mcp add keel -- /ABS/path/to/.venv/bin/python -m keelOpenCode(PyPI):"command": ["/ABS/path/to/.venv/bin/keel-pentest"]。示例:opencode.pypi.json.example。
使用 绝对路径 指向 keel-pentest 或 venv 的 python。继承 Apple python3 3.9 的客户端将无法导入 mcp。
安装后重启客户端。
功能
控制平面(而非 150 个工具的倾倒)
模型永远不会自己执行 nuclei 或 httpx。它只调用 Keel 工具。波次一次只放行一个。每个主机都有一个来自 requests_per_second 的令牌桶。
发现卡片
解析器将 httpx JSON 和 nuclei JSONL 转换为 SQLite 卡片存储。指纹合并重复项。信息类和加固类发现默认隐藏(query_cards 的 include_noise 为 false)。
猎人分诊
impact_class 取值:none、hardening、sensitive_access、account_takeover、rce、data_other_users。CVSS 风格的扫描器评分不是猎人的门槛。
有界验证
仅限白名单剧本:
剧本 | 意图 |
| 证明另一个测试账号可以读取某个资源 |
| 证明操作者自己的会话可以植入/读取一个标记 |
execute_proof 要求 allow_safe_proof 和 operator_confirmed。仅限测试会话。无 DoS、无其他用户数据、无漏洞利用生成。
布局
策略、调度器、适配器、解析器、存储、分诊和验证分别位于 src/keel/ 下的独立包中。项目数据:仓库中的 .data/engagements(数据库不在 ~/.keel)。
MCP 工具
工具 | 角色 |
| 范围、RPS、验证标志、测试账号 ID |
| 提议 |
| 运行一个已放行的波次 |
| 默认排除信息类/加固类卡片 |
| 对一张卡片 URL 进行有界重扫 |
| 猎人 |
| 白名单验证计划(不产生流量) |
| 仅在标志位设置时执行验证 |
| 冷却、暂停主机、待处理波次 |
begin_engagement 参数
参数 | 说明 |
| 稳定 ID( |
| 范围内的主机名 |
| 可选 |
| 默认 |
| 默认 |
| 默认 |
| 可选标签 |
提示词示例
将 target.example 替换为范围内的主机。除非项目已存在,否则始终以 begin_engagement 开始。客户端必须调用 Keel MCP,而不是 shell 中的 nuclei / httpx。
声明你已获得授权(所有者、雇主或范围内的赏金)。模糊的“黑掉这个网站”提示会被大多数模型拒绝。
端到端漏洞赏金
You are a bug bounty hunter. Use only the Keel MCP tools. Do not run nmap, nuclei, or httpx yourself.
1. begin_engagement:
- engagement_id: bb-2026-01
- scope_hosts: ["target.example"]
- exclude_hosts: []
- requests_per_second: 3
- allow_safe_proof: false
- operator_confirmed: false
2. draft_waves with seed_url https://target.example
3. execute_wave once per wave_id, wait for each to finish
4. query_cards (include_noise false)
5. For each remaining card, state_impact with a hunter impact_class
(none / hardening / sensitive_access / account_takeover / rce / data_other_users)
and why a hunter would care. Drop informational and missing-header noise.
6. For cards that still look like real impact, draft_proof only
(playbook_id: cross_account_read or own_session_marker).
Do not call execute_proof until I say the word CONFIRM.
Stop after draft_proof. Summarize cards, impact, and the proof plan in English.当你准备好运行有界验证(仅限测试账号)时:
CONFIRM. Call begin_engagement again on bb-2026-01 with allow_safe_proof true
and operator_confirmed true, then execute_proof on card <card_id>
playbook_id cross_account_read. session_a and session_b are my tester
Authorization headers. One request pair. No DoS, no other users' data.仅侦察
Keel MCP only. begin_engagement id recon-1, scope_hosts ["target.example"],
RPS 2, allow_safe_proof false. draft_waves for https://target.example.
execute_wave only the probe_alive wave. Do not run template_scan.
Then engagement_health. Tell me which hosts answered. Stop.仅模板扫描(侦察之后)
Engagement recon-1 is already open. draft_waves is done. execute_wave only
the template_scan wave_id. Then query_cards. Do not draft_proof. Stop.仅卡片 / 分诊
query_cards for engagement_id bb-2026-01. If empty, query_cards with
include_noise true and list what you would drop as hardening. No new waves.仅影响评估
state_impact on card <card_id>, engagement bb-2026-01.
impact_class data_other_users if IDOR-like, else none.
preconditions: two tester accounts. hunter_why: one sentence.
Do not scan and do not prove.仅验证计划(不产生流量)
draft_proof engagement bb-2026-01 card <card_id> playbook_id own_session_marker.
Do not execute_proof.状态
engagement_health for bb-2026-01. If unknown, engagement_health with no id.故障排查
MCP 服务器失败 / 导入错误
使用 Python 3.10+(实际装有 keel-pentest 或克隆安装的 venv),而不是 Apple 3.9:
python3 --version
python3 -m keel # PyPI / venv
python3 scripts/keel_mcp.py # local clone如果 mcp>=1.9 无法安装,用 3.12/3.11/3.10 重新创建 .venv(sh scripts/bootstrap.sh python 或新建 venv 然后 pip install keel-pentest)。
找不到 httpx / nuclei
which httpx nuclei
sh scripts/bootstrap.sh tools
nuclei -update-templates波次后卡片为空
检查 engagement_health 中是否有暂停的主机(限速 / 429)。降低 RPS。确认主机在 scope_hosts 中且种子 URL 可访问。
execute_proof 被拒绝
用 allow_safe_proof 为 true 和 operator_confirmed 为 true 重新调用 begin_engagement。只使用白名单中的 playbook_id 值。
安全注意事项
Keel 让 AI 客户端能够通过 httpx 和 nuclei 探测范围内的主机,并运行两个窄范围的验证剧本。请只在你获准测试的系统上运行它。留意 engagement_health,并在赏金计划中保持 RPS 保守。
合法与道德使用
获得书面授权的渗透测试
在计划范围和规则之内进行的漏洞赏金项目
在你自己拥有或获准测试的系统上开展安全研究
经组织批准进行的红队演练
未经授权,绝不测试任何系统
不进行非法访问、数据窃取或破坏
验证:仅使用测试者账户;不涉及其他用户的数据
贡献
git clone https://github.com/lutfizp/keel.git
cd keel
sh scripts/bootstrap.sh python
source .venv/bin/activate
pytest有用的领域:解析器、分类(triage)、额外的白名单验证剧本、客户端代码片段。不要将无限制的漏洞生成器或一堆无关的扫描器 CLI 堆加到 MCP 表面上。
许可证
Keel 基于 MIT License 发布。参见 LICENSE。
Copyright (c) 2026 Lutfi Z.P.
PyPI:keel-pentest。MCP Registry:io.github.lutfizp/keel。源码:github.com/lutfizp/keel。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceAutonomous pentests from one command: real security tools, working PoCs, and audit-ready reports, all driven via MCP.1,614MIT
- AlicenseBqualityCmaintenanceAn MCP server for authorized bug bounty work that enforces an evidence-driven workflow with session management, preflight checks, surface discovery, and verified scanning.12MIT
- AlicenseNot gradedqualityCmaintenanceEnables automated bug bounty hunting and security research with tools for reconnaissance, web vulnerability scanning, API testing, binary analysis, and mobile app analysis through an MCP interface.MIT
- AlicenseNot gradedqualityCmaintenanceEnables authorized penetration testing through MCP, providing parallel reconnaissance, vulnerability scanning, attack path analysis, and self-contained HTML reporting with compliance tagging.MIT
Related MCP Connectors
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Offline methodology engine for authorized penetration testing, CTF, and security research.
A paid remote MCP for developer endpoint scanner MCP, built to return verdicts, receipts, usage logs
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/lutfizp/keel'
If you have feedback or need assistance with the MCP directory API, please join our Discord server