keel
승인된 펜테스트 및 버그 바운티를 위한 MCP 컨트롤 플레인
아홉 개의 MCP 도구. 한 번에 하나의 웨이브. 호스트별 속도 제한. 스캐너 덤프가 아닌 헌터급 카드.
아키텍처 · 설치 · MCP 클라이언트 · 기능 · 도구 · 프롬프트 예시 · 보안 · 라이선스
Keel은 Claude Code, Codex, Cursor, OpenCode, Hermes, Copilot 및 기타 모든 MCP 클라이언트에 연결하는 MCP 서버입니다. **범위가 제한된 정찰(recon)**을 실행하고, 대상이 과부하되지 않도록 보호하며, 스캐너 출력을 중복 제거된 카드로 변환합니다. 정보성(informational) 및 누락 헤더 관련 노이즈는 요청하지 않는 한 숨겨집니다. 제한된 증명(proof)은 테스터 계정과 고유 마커를 사용합니다 — 자유 형식 익스플로잇 생성기가 아닙니다.
다음 용도로 사용하세요:
외부 및 웹 펜테스트 정찰
버그 바운티 (범위 안으로, 노이즈 밖으로)
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은 하지 마세요. 전체 OS별 메모: 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에 있어야 합니다. 휠에는 해당 바이너리가 포함되지 않습니다. Python 라이브러리 httpx는 CLI가 아닙니다.
macOS 프로브: brew install nuclei httpx 후 nuclei -update-templates. 클론: sh scripts/bootstrap.sh tools. 다른 OS: 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를 생성하고, 이 프로젝트(keel-pentest를 pip install -e ".[dev]"로)를 설치한 다음, 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 예시를 사용하세요.
OS별 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 맵 대신 mcp.servers를 사용합니다. 동일한 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 카드 저장소로 변환합니다. 핑거프린트가 중복을 병합합니다. 정보성 및 하드닝 파인딩은 기본적으로 숨겨집니다 (include_noise가 false인 query_cards).
헌터 트리아지
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로 시작하세요. 클라이언트는 nuclei / httpx를 셸로 실행하지 말고 Keel MCP를 호출해야 합니다.
권한이 있음을 명시하세요 (소유자, 고용주, 또는 범위 내 바운티). 모호한 "이 사이트 해킹해줘" 프롬프트는 대부분의 모델에서 거부됩니다.
엔드투엔드 버그 바운티
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 서버 실패 / 임포트 오류
Apple 3.9가 아닌 Python 3.10+ (실제로 keel-pentest 또는 클론 설치가 있는 venv)를 사용하세요:
python3 --version
python3 -m keel # PyPI / venv
python3 scripts/keel_mcp.py # local clonemcp>=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웨이브 후 카드가 비어 있음
일시 중지된 호스트(속도 제한 / 429)가 있는지 engagement_health를 확인하세요. 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유용한 영역: 파서, 트리아지, 추가 허용 목록 증명 플레이북, 클라이언트 스니펫. 무제한 익스플로잇 생성기나 무관한 스캐너 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