mcpField
K
Keel

Keel

ローカル
github.comセキュリティ29 週間前に更新

Keel について

Keelは、許可を得たセキュリティテスト向けのMCP制御レイヤーです。スキャナーの検出結果を統合し、通信量を制限して検証できます。セマンティック重複排除、ホスト単位のレート制限、読み取り専用の検証フローを備えます。

主な機能

  1. 01重複する検出結果のセマンティック統合
  2. 02ホスト単位のリクエストレート制限
  3. 03スキャンの段階的なスケジュール
  4. 04悪用可能性と不足証拠の評価
  5. 05GET専用フローによる安全な検証

活用シーン

  1. 01複数スキャナーの重複検出結果の整理
  2. 02範囲と通信量を制限したホストスキャン
  3. 03テスト用アカウントとカナリアによる問題の検証

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 を選ぶ理由 · インストール · クライアント · 証明 · ツール


エージェントに 150 個のツールを渡すのは簡単です。難しいのは、ツール間の重複排除、悪用可能な問題とノイズの見分け、そして対象に過剰な負荷をかけないことです。Keel は、この 3 つを担うコントロールプレーンです。

AI クライアントは httpx、nuclei、シェルではなく、Keel と通信します。Keel は一度に 1 つのウェーブを作成し、スコープとレート制限を適用し、スキャナーの検出結果をセマンティックカードに統合して、テスター所有のデータに対して GET のみのプレイブックを実行します。プレイブックが proven を返すと、ハンターがたどれる curl リプレイを取得できます。それでも、書き込み、シェル、ペイロードの大量送信は行いません。

テストを許可されたプログラムで使用してください。

Keel を選ぶ理由

難しい問題スキャナーの出力で起きることKeel の動作
ツール間の重複排除1 行につき Nuclei テンプレート ID が 1 つ。同じ IDOR が 5 回表示される脆弱性クラス、正規化されたルート、メソッド、パラメーターからセマンティックキーを作成します。UUID/id/16 進数のトークンをまとめます。互換性のある観測結果を統合します。
悪用可能な問題とノイズの見分け深刻度が高い =「すぐに出荷」カードは observed → hypothesis → corroborated → proven/refuted の順に進みます。情報提供やハードニングに関する結果は非表示になります。型付きの悪用可能性評価で、不足している証拠とネガティブコントロールを明示します。
対象に過剰な負荷をかけないことすべてのテンプレートを一度に実行し、429 で再試行するホストごとにアクティブなウェーブは 1 つだけです。トークンバケット、Nuclei の並列実行数 1、OAST なし、リダイレクトなし、署名なしのテンプレートなし、dos/fuzz/bruteforce/intrusive タグなし。HTTP 429 が発生するとクールダウンに入ります。

巨大なツールボックスをシェル経由で実行するラッパーには、このレイヤーがありません。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 にダウンロードします。Keel は、GUI クライアントの PATH が最小限でも、そこにあるツールを見つけます。最初のスキャンに追加の 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 は実行しないでください。別のプロジェクトです。OS に関する注意事項と pip/venv については、INSTALL.md をご覧ください。クライアントの形式については、clients/README.md をご覧ください。

必要に応じて後から、スコープ、テンプレート ID、証明対象を固定するチーム用マニフェストに KEEL_APPROVAL_FILE を設定できます。デフォルトモードでは自己申告で承認します。begin_engagement が承認にあたります。レート制限、ホストごとに1ウェーブ、署名済みテンプレート、サニタイズ済み証拠は引き続き適用されます。

影響を証明できる、安全な検証

スキャナーの出力は仮説です。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> に設定します。Location のホストがそのカナリアになっている 3xx は proven です。
unauth_access_probeauthZ の欠如テスター 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バックグラウンドジョブを1つキューに追加します
wave_status段階、進捗、結果を表示します。job_id を省略すると一覧表示します
cancel_waveキューに追加済み、または実行中のスキャナーを停止します
query_cards優先度付けされた意味的なカードを返します
second_look起点となった Nuclei テンプレートのみを再実行します
assess_exploitability影響候補、不足している証拠、ネガティブコントロール、プレイブックを評価します
state_impactハンターの仮説を記録します
draft_proof許可リストに基づく証明プランを作成します。トラフィックは発生しません
execute_proofGET のみを使用するプレイブックを実行します
engagement_healthクールダウン、予算、保留中のウェーブを確認します
engagement_auditアプリケーションイベントを追記のみで記録します

begin_engagement には、engagement_id と scope_hosts(target.example などのホスト名のみ)が必要です。デフォルトは、3 req/s、同時に1ホスト、1ウェーブあたり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 における正確なスコープと除外項目
  • ホストごとに一度に1つのウェーブを実行し、同一ホストのジョブは待機します
  • グローバルおよびホストごとのトークンバケットを共有します
  • リクエスト予約を永続化します。リトライでは新たな予約を消費します
  • Nuclei:署名済みHTTPテンプレートを使用し、OAST、リダイレクト、リトライを無効にして、dos/fuzz/bruteforce/intrusive を除外します
  • 空のスキャナー設定を分離し、プロキシとProjectDiscovery-cloudの環境変数を削除します
  • HTTP 429が発生するとウェーブを停止し、Retry-Afterに従います
  • レスポンスの読み取りを制限し、生のボディを含めずに証拠を保存します

トラブルシューティング

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

クライアントの再起動後にbegin_engagementを実行すると、SQLiteのエンゲージメントが復元されます。スコープを変更した場合は、新しいengagement_idを使用してください。

proof にはallow_safe_proof=trueが必要です。また、セッションプレイブックでは、tester-aなどの名前をAuthorizationまたはCookieに対応付けるKEEL_CREDENTIALS_FILEが必要です。

keel MCP server

ライセンス

MIT。Copyright (c) 2026 Lutfi Z.P.

PyPI:keel-pentest。MCP Registry:io.github.lutfizp/keel。ソース:github.com/lutfizp/keel。

keel MCP server

コメント

MCP は初めてですか?

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

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