Pentest MCP: Professional Penetration Testing Toolkit について
Pentest MCPは、人間の研究者やツールを使うエージェント向けの、認可済みセキュリティ評価用TypeScriptサーバーです。対象範囲と時間に基づいて操作を制限し、証拠を永続記録して、根拠に基づくレポート作成を支援します。
主な機能
- 01評価案件と計画の登録
- 02対象、時間、ツールの制限
- 03セキュリティ評価ツールの実行
- 04証拠記録の保存と取得
- 05選択した証拠からレポートを準備
活用シーン
- 01認可された範囲内でのセキュリティ評価
- 02スキャン結果の確認と調査
- 03エージェントによる計画済み評価の実行
- 04分析者が検証した所見に基づくレポート作成
MCP 対応
MCPクライアントに、範囲を限定した評価、証拠、案件管理、レポート作成のツールを提供します。実行時には案件の対象、時間枠、適用されるツール許可リストを検査します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
Pentest MCP
最新のトランスポート/認証機能と拡張された偵察ツールを備えた、プロフェッショナル向けのペネトレーションテスト MCP サーバーです。
0.9.0 での変更点
- MCP SDK を
@modelcontextprotocol/sdk@^1.26.0にアップグレード - バンドルされたランチャーとともに、MCP Inspector を最新リリース(
@modelcontextprotocol/inspector@^0.20.0)に維持 - Streamable HTTP が主要なネットワークトランスポートになりました(
MCP_TRANSPORT=http) - SSE は非推奨の互換モードとしてのみ引き続き利用できます
- OIDC JWKS およびイントロスペクションに対応したベアラートークン認証を追加
- 専用ツールを追加:
subfinderEnum、httpxProbe、ffufScan、nucleiScan、trafficCapture、hydraBruteforce、privEscAudit、extractionSweep - レポート管理ツールを追加:
listEngagementRecords、getEngagementRecord - MCP エリシテーション(
scopeMode=ask)を使用したレポート向け SoW 取得フローを追加し、安全なテンプレートへのフォールバックに対応 - コマンド解決を強化し、Web プロービングでは Python の
httpxCLI との衝突を避けるため、httpx-toolkit(優先)または検証済みの ProjectDiscoveryhttpxを使用 - バンドルされた MCP Inspector ランチャー(
pentest-mcp inspector)を統合 - ランタイムの基準を Node.js 22.7.5 以降に変更
- 認証/セッションのコンテキストが利用可能な場合、新しいツール出力に呼び出しメタデータを追加
含まれるツール
nmapScanrunJohnTheRipperrunHashcatgobusterniktosubfinderEnumhttpxProbeffufScannucleiScantrafficCapturehydraBruteforceprivEscAuditextractionSweepgenerateWordlistlistEngagementRecordsgetEngagementRecordcreateClientReportcancelScan
クイックスタート
インストール
npm install -g pentest-mcp
ローカルで実行(stdio)
pentest-mcp
バンドルされた MCP Inspector を起動(別途インストール不要)
pentest-mcp inspector
Inspector のフラグを直接渡すことができます:
pentest-mcp inspector --help
ネットワーク経由で実行(Streamable HTTP)
MCP_TRANSPORT=http MCP_SERVER_HOST=0.0.0.0 MCP_SERVER_PORT=8000 pentest-mcp
レガシー SSE モードで実行(非推奨)
MCP_TRANSPORT=sse MCP_SERVER_PORT=8001 pentest-mcp
トランスポートに関する注意事項
stdio:ローカル MCP クライアント向けのデフォルトです。http:最新のネットワークトランスポートです。推奨します。sse:互換性のためのモードです。非推奨であり、今後のメジャーリリースで削除される予定です。
Inspector との統合
pentest-mcp inspectorは、バンドルされた@modelcontextprotocol/inspectorCLI を起動します。- 次のコマンドを実行して、この MCP サーバーを stdio 経由で自動的に対象にします:
node <this-package-entrypoint> stdio
- Inspector を別途インストールする必要はありません。
認証設定(Bearer + OIDC)
MCP_TRANSPORT=http(必要に応じて sse)を使用する場合は、次の環境変数を設定してください:
MCP_AUTH_ENABLED=true
MCP_AUTH_MODE=bearer
MCP_AUTH_SCOPES=read,write
MCP_AUTH_AUDIENCE=
MCP_OIDC_ISSUER=https://issuer.example.com
MCP_OIDC_JWKS_URL=https://issuer.example.com/.well-known/jwks.json
# optional alternative/backup validation mode:
MCP_OIDC_INTROSPECTION_URL=https://issuer.example.com/oauth/introspect
MCP_OAUTH_CLIENT_ID=...
MCP_OAUTH_CLIENT_SECRET=...
レガシーエイリアスも一時的に引き続き使用できます:
MCP_OAUTH_ENABLEDMCP_OAUTH_PROVIDER_URLMCP_OAUTH_SCOPES
ワークフローとレポート
createClientReport は、SoW の処理モードに対応しました:
scopeMode=ask:MCP エリシテーションを通じてユーザーにプロンプトを表示します(推奨)scopeMode=provided:scopeOfWorkの値をそのまま使用しますscopeMode=template:組み込みの汎用的な許可済みテスト用テンプレートを使用します
エリシテーションが拒否された場合、または利用できない場合、レポートは自動的にテンプレートへフォールバックします。
ユーザーが SoW を提供する方法(現時点)
ファイルアップロード用の API はまだありません。現在の方法は次のとおりです。
- MCP のユーザー呼び出しを介して対話形式で尋ねます(エリシテーション)
{
"tool": "createClientReport",
"arguments": {
"title": "Q1 External Pentest",
"assessmentType": "external-network",
"scopeMode": "ask"
}
}
- SoW のテキストを
scopeOfWorkに直接貼り付けます
{
"tool": "createClientReport",
"arguments": {
"title": "Q1 External Pentest",
"assessmentType": "external-network",
"scopeMode": "provided",
"scopeOfWork": "Authorized targets: ...\nOut-of-scope: ...\nTesting window: ...\nRules of engagement: ..."
}
}
- クライアントの詳細を共有すべきでない場合は、テンプレートモードを使用します
{
"tool": "createClientReport",
"arguments": {
"title": "Q1 External Pentest",
"assessmentType": "external-network",
"scopeMode": "template"
}
}
管理作業を削減する方法
- 各ツールの実行時に、呼び出しコンテキストを含む構造化されたエンゲージメント記録(
recordId=...)が保存されます。 listEngagementRecordsを使用して、すべての作業成果物をすばやく取得できます。- 手動でコピー&ペーストする代わりに、選択した
recordIds(またはデフォルトで最新の記録)からレポートを生成できます。 - スコープに関するメモは、次のいずれかから自動的に添付されます:
- ユーザー向けエリシテーションフォーム(
ask) - 貼り付けられた SoW テキスト(
provided) - 安全なデフォルトテンプレート(
template)
- ユーザー向けエリシテーションフォーム(
ロードマップ
これらは、ペンテストに伴う管理作業の負担を軽減することを特に目的とした計画です。
scopeFilePathの取り込み(MCP ホスト上のローカルファイルパスから SoW を読み込みます)scopeDocumentの分割アップロードフロー(リモートクライアント向けに、SoW の内容を MCP 経由で直接送信します)- ターゲット、除外事項、テスト期間、エンゲージメントルールを自動抽出する SoW パーサー
- ツールの出力(
recordId)から、検出事項やレポートの各セクションへの証拠の自動リンク - 重複するツール(
nuclei、niktoなど)による検出事項の重複排除と統合 - 報告書の作成を効率化する、重大度と影響の説明文の自動下書き
- ワンクリックでのレポート一式の生成(エグゼクティブサマリー+技術付録+修正テーブル)
- 再テスト差分モード(エンゲージメント間の修正済み/再オープン/新規の検出事項)
- チケットのエクスポート同期(Jira/Linear/GitHub)とステータスの反映
- 成果物の QA チェック(証拠の不足、スコープ項目の不足、不十分な修正メモ)
導入に関する注記:
- 多くのチームはすでにドキュメントや PDF で SoW を管理しており、繰り返し貼り付けて書式を整える作業を避けたいため、
scopeFilePathとscopeDocumentは特に広く利用されると見込まれます。
偵察とエクスプロイトの例
サブドメイン列挙
{
"tool": "subfinderEnum",
"arguments": {
"domain": "example.com",
"recursive": true,
"allSources": true
}
}
稼働中のホストをプローブする
{
"tool": "httpxProbe",
"arguments": {
"targets": ["example.com", "api.example.com"],
"includeTitle": true,
"includeStatusCode": true
}
}
コンテンツパスのファジング
{
"tool": "ffufScan",
"arguments": {
"targetUrl": "https://example.com/FUZZ",
"wordlist": "/usr/share/seclists/Discovery/Web-Content/common.txt",
"threads": 40
}
}
テンプレートスキャン
{
"tool": "nucleiScan",
"arguments": {
"targets": ["https://example.com"],
"severities": ["medium", "high", "critical"]
}
}
トラフィックのキャプチャ(スニッフィング)
{
"tool": "trafficCapture",
"arguments": {
"networkInterface": "eth0",
"packetCount": 200,
"bpfFilter": "tcp port 80"
}
}
ブルートフォースチェック
{
"tool": "hydraBruteforce",
"arguments": {
"target": "10.10.10.20",
"service": "ssh",
"usernameList": "/usr/share/seclists/Usernames/top-usernames-shortlist.txt",
"passwordList": "/usr/share/seclists/Passwords/Common-Credentials/10k-most-common.txt"
}
}
SQLi 抽出の一括スキャン
{
"tool": "extractionSweep",
"arguments": {
"targetUrl": "https://target.local/item.php?id=1",
"risk": 2,
"level": 3
}
}
Docker
docker-compose --profile http up
docker-compose --profile stdio up
docker-compose --profile sse up
Docker イメージには以下がインストールされます。
nmap、john、hashcat、gobuster、nikto、ffuf、hydra、sqlmap、tcpdumpsubfinder、httpx+httpx-toolkitエイリアス、nuclei
必須のホストツール(Docker を使わない場合)
バイナリが PATH に含まれていることを確認してください。
which nmap john hashcat gobuster nikto subfinder httpx-toolkit ffuf nuclei hydra sqlmap tcpdump
httpx-toolkit がインストールされていない場合は、検証済みの ProjectDiscovery httpx バイナリを代替として使用できます。
セキュリティに関する注意
許可された用途に限ります。明示的な書面による許可を得ているシステム/ネットワークに対してのみ実行してください。
付録:実践における MCP(コード実行、ツール規模、安全性)
最終更新日:2026-03-23
この付録の目的
Model Context Protocol(MCP)は、ツールやエージェントの相互運用性を実現する、今なお非常に有用なレイヤーのひとつです。一方で、大規模な MCP サーバーは多数のツールを公開することがあり、単純なツール呼び出しでは、スキーマやツールのやり取り、関連性のない呼び出し履歴でコンテキストウィンドウが埋め尽くされる可能性があります。
実際には、「ツールが多い」ことが必ずしも「より良い成果」につながるとは限りません。ツールの範囲を広げる場合は、トークンの使用量を抑え、動作を予測しやすくする実行パターンと組み合わせる必要があります。
コード実行/コードモードへの移行
近年のワークフローでは、複雑なオーケストレーションをチャットのコンテキストからコード実行ループへ移す動きが進んでいます。これにより、繰り返し使われるスキーマのトークンを減らし、ツールの使用状況を監査・テストしやすくなります。
参考資料:
パワーユーザー向けの推奨セットアップ
再現性が高く、ノイズの少ない MCP の利用を望む場合は、まずコードモードを中心としたセットアップから始めてください。
実用上の注意点:セットアップが優れていても、モデルの動作はプロバイダーやバージョンによって一貫しない場合があります。リトライ、ガードレール、決定論的なフォールバックを用意してください。
Peter Steinberger 流のラッパーワークフロー
効果の高いパターンのひとつは、すべての生のツールを常にモデルに公開するのではなく、MCP サーバーを呼び出し可能なコードインターフェースや、タスクに特化した CLI でラップすることです。
参考ツール:
クライアント適合ガイド(簡易版)
- Claude Code / Codex / Cursor:直接的な MCP ワークフローに適していますが、ツールの範囲を絞るとさらに効果的です。
- コード実行ラッパー(TypeScript/Python CLI):ツール数が多い場合や、タスクの連鎖が複数のステップにわたる場合に適しています。
- MCP の制御機能が弱いホステッドチャットクライアント:事前にラップされた CLI やゲートウェイツールを介するほうが安全な場合が多いです。
この分野は急速に変化しています。今これを読んでいる場合、このガイダンスの一部はすでに古くなっている可能性があります。
プロンプトインジェクション:リスク、影響、緩和策
プロンプトインジェクションは、ツールを使用するエージェントにとって、依然として未解決のセキュリティ問題です。対処は可能ですが、「解決済み」ではありません。
主なリスク:
- ツールの出力やリモートコンテンツに隠された悪意のある指示。
- 秘密情報の流出や、許可されていない外部呼び出し。
- 安全でない状態変更(破壊的なファイル/システム/API 操作)。
影響:
- データ漏えい、アカウントの侵害、金銭的損失、完全性の毀損。
基本的な緩和策:
- 認証情報とツールの権限範囲を最小限にする。
- 接続先を許可リストで管理し、送信トラフィックを制御する。
- 厳格な入力検証とスキーマの適用。
- 破壊的またはリスクの高い操作には人間による確認を求める。
- リソースと時間に制限を設けたサンドボックス実行。
- 構造化ログ、監査証跡、再実行可能な実行記録。
- モデルに再入力する前に、出力をフィルタリング/編集する。
明示的に検証されていない限り、すべてのツール出力を信頼できない入力として扱ってください。
MCP 準拠状況
このサーバーは、MCP プロトコルバージョン 2025-11-25 と SDK @modelcontextprotocol/sdk@^1.27.1 を対象としています。
| 機能 | 状況 |
|---|---|
| stdio トランスポート | 対応(デフォルト) |
| Streamable HTTP トランスポート | 対応(MCP_TRANSPORT=http) |
| SSE トランスポート(レガシー) | 互換モードとして非推奨 |
| ツールのアノテーション | すべてのツールに title、readOnlyHint、destructiveHint、idempotentHint、openWorldHint を設定 |
| Bearer 認証(OIDC/JWKS) | 対応 |
| Origin 検証(HTTP) | MCP_ALLOWED_ORIGINS が設定されている場合、無効な Origin に対して 403 を返します |
| JSON Schema 2020-12 | Zod によって生成されたスキーマ |
| 構造化ツールエラー | モデルによる自己修正のため、isError フラグと説明的なメッセージを使用 |
| Elicitation | レポート生成における SoW の取得に使用 |
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。