Mcpwner について
MCPwner は、セキュリティテストツールを LLM 主導のワークフローに統合し、自律的なセキュリティ調査を行う MCP サーバーです。偵察、コード監査、PoC 検証をエージェントに任せたいセキュリティ研究者向けで、すべての発見は共有の台帳に記録されます。
主な機能
- 01SAST、SCA、シークレットスキャン、IaC スキャナーの統合
- 02偵察、DAST、カバレッジ誘導型ファジング
- 03CodeQL の組み込みクエリとカスタムクエリ
- 04決定的判定を行う PoC スクリプトサンドボックス
- 05ディープマージによる永続的な発見台帳
活用シーン
- 01コードベースに対する SAST・SCA スキャンと結果の集約
- 02疑わしい脆弱性が悪用可能かどうかの検証
- 03許可されたテストにおけるWebアプリケーションの動的テスト
MCP 対応
本プロジェクトは MCP サーバーであり、55 を超えるコンテナ化されたセキュリティツールを MCP クライアントに提供します。発見の管理には upsert_finding や generate_report などのツールを使用します。
詳細
目次
概要
MCPwnerは、LLMエージェントに包括的なオフェンシブセキュリティツールキットを提供するMCPサーバーです。単一のMCPインターフェースを通じて、コンテナ化された55種類以上のツールを利用できます。SAST、SCA、シークレット検出、IaC、偵察、DAST、カバレッジガイド付きファジング、CodeQL(組み込みクエリとカスタムクエリ)、ヘッドレスブラウザー、OOBコールバックサーバー、決定論的オラクルまたはカスタムオラクルを備えたPoCスクリプトのサンドボックス、そして永続的な検出事項台帳が含まれます。
このアーキテクチャは、エージェント主導の脆弱性調査を目的に設計されています。モデルに依存しない単一のエージェントセッション(Claude、Cursor、Kiro、Gemini、またはMCP対応のコーディングエージェント)が調査フェーズ(偵察、コード監査、PoC検証、敵対的レビュー)を進め、すべての手順を共有の検出事項台帳に記録します。各検出事項は、仮説から実証、検証済みレポートへと進みます。「エクスプロイトがなければ、レポートもありません」。
注:このプロジェクトは現在も開発中です。MCPについて詳しくはこちらをご覧ください。
ワークフロー
MCPwner はツールサーバーであり、LLM エージェントが頭脳となります。一般的な詳細調査の流れは次のとおりです。
| フェーズ | 内容 | 使用する MCPwner ツール |
|---|---|---|
| ワークスペース | 対象をクローンし、スタックを検出します | create_workspace、detect_languages |
| 検出 | 既知のパターンを広範囲にスキャンします | run_sast_scan、run_sca_scan、run_secrets_scan、run_reconnaissance_chain、execute_query |
| トリアージ | 誤検知を排除し、到達可能性を証明します | index_code_facts、query_code_facts、execute_query(カスタム CodeQL) |
| 調査 | 差分とバリアント分析で新たなバグを探します | diff_discovery、run_fuzzing_scan、カスタム CodeQL |
| 実証 | 決定論的オラクルによる実証検証を行います | run_poc_scan(サンドボックス)、run_dast_scan、run_utilities_scan(chromium) |
| レポート | オラクルで検証された検出結果のみを公開します | upsert_finding、generate_report |
台帳ではディープマージによるアップサートを使用するため、後続フェーズの review 判定が先行フェーズの poc データを上書きすることはなく(その逆も同様です)、調査の途中でエージェントのコンテキストがリセットされた場合も整合性が保たれます。
統合ツール
偵察
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| Subfinder | Amass | Nmap | Masscan | ffuf |
![]() | ![]() | ![]() | ![]() | |
|---|---|---|---|---|
| bbot | httpx | Katana | gau | Arjun |
![]() | ![]() |
|---|---|
| wafw00f | Kiterunner |
静的アプリケーションセキュリティテスト(SAST)
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| CodeQL | Psalm | Gosec | Bandit | Semgrep |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|---|
| Brakeman | PMD | NodeJsScan | Joern | YASA | OpenGrep |
ソースコードファジング
![]() | ![]() | ![]() | ![]() |
|---|---|---|---|
| Atheris | Jazzer | Jazzer.js | PHP-Fuzzer |
シークレットスキャン
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| Gitleaks | TruffleHog | detect-secrets | Whispers | Hawk-Eye |
ソフトウェア構成分析(SCA)
![]() | ![]() | ![]() | ![]() |
|---|---|---|---|
| Grype | Syft | OSV-Scanner | Retire.js |
インフラストラクチャと IaC のセキュリティ
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| Checkov | KICS | Terrascan | TFSec | Hadolint |
動的アプリケーションセキュリティテスト(DAST)
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| sqlmap | NoSQLMap | Commix | Dalfox | SSTImap |
![]() | ![]() | ![]() |
|---|---|---|
| SSRFmap | jwt_tool | interactsh |
ユーティリティ
![]() | ![]() | ![]() | ![]() | ![]() |
|---|---|---|---|---|
| Linguist | WireMock | Mitmproxy | aiohttp | Playwright を使用した Chromium |
PoC の検証
| PoC スクリプトのサンドボックス |
|---|
| 決定論的なオラクル実行環境 |
PoC サンドボックスは、エージェントが作成した Python/bash のエクスプロイトスクリプトを対象ネットワーク内で実行し、決定論的なオラクル判定を返します(終了コードまたは明示的なマーカーに基づく合格/不合格)。これにより MCPwner は、市販の DAST では表現できないロジックバグ、IDOR/BOLA、競合状態、アクセス制御の回避を実証できます。
プラグイン
MCPwner は、ドメイン固有のツールを利用できるオプションのプラグインシステムをサポートしています。プラグインはコアを変更することなく、Docker サービス、カスタムスキャンルール、レポートテンプレートを追加します。MCPwner は、プラグインがインストールされているかどうかにかかわらず動作します。
利用可能なプラグイン
| プラグイン | 説明 | 追加されるサービス |
|---|---|---|
| wp-scan | WordPress のセキュリティスキャン — Xdebug、WPScan による列挙、PHPGGC のデシリアライズチェーン、CMSeeK CMS 検出、WP 対応の semgrep/joern ルールを備えた WP テスト環境 | wp-range、wp-db、wpscan-scanner、phpggc-service、cmseek-service |
プラグインを有効にする
-
.envにプラグイン名を追加します:PLUGINS=wp-scan COMPOSE_PROFILES=sast,dast,...,wp-scan -
compose ラッパーを使用してサービスを起動します(プラグインの compose ファイルが自動的に含まれます):
./scripts/compose.sh up -d --buildまたは、
-fを手動で重ねて指定します:docker compose -f docker-compose.yaml -f plugins/wp-scan/docker-compose.yaml --profile wp-scan up -d
プラグインのツール(例:wpscan、phpggc)は manifest.yaml を介して自動的に登録され、コンテナが正常な状態になると MCP ツールとして利用できます。
プラグインの作成
プラグインは plugins/ 配下のディレクトリで、以下を含みます:
docker-compose.yaml— サービス(-fによる重ね合わせに使用するビルドコンテキストはプロジェクトルートからの相対パス)manifest.yaml— ツールの登録(名前、カテゴリ、設定パス、デフォルト URL)docker/— Dockerfile とサービスコードrules/— カスタム SAST ルール(任意)templates/— レポートテンプレート(任意)install.sh/uninstall.sh— 外部インストール用のセットアップスクリプト
プラグインは別のリポジトリに置き、シンボリックリンクまたは install.sh を介して plugins/ にリンクすることもできます。
インストール
前提条件
システム要件:
- Docker Engine 20.10+ および Docker Compose 2.0+
- 最低 8GB の RAM(複数のツールを実行する場合は 16GB を推奨)
- 空きディスク容量 20GB(セキュリティツールのイメージはサイズが大きいため)
- 対応プラットフォーム:Linux、macOS、Windows(WSL2 を使用)
MCP クライアント:
- Claude Desktop、Cursor、Kiro、または MCP 互換クライアント
セットアップ
-
リポジトリをクローンします:
git clone https://github.com/nedlir/mcpwner.git cd mcpwner -
サーバーを設定します:
cp .env.example .env cp config/config.yaml.example config/config.yaml -
サービスを起動します:
docker compose up -d --build -
サービスが実行中であることを確認します:
docker compose ps
IDE を接続する
Docker コンテナが起動したら、MCP クライアントに MCPwner を追加します。
動的なツール登録: MCPwner は、オプトイン方式のツールカテゴリに Docker Compose の profiles を使用します。.env ファイルの COMPOSE_PROFILES 変数で、起動するコンテナを制御します。MCP サーバーは起動時に実行中のコンテナを調査し、正常なツールのみを登録します。コンテナが停止している場合、そのツールは表示されません。Linguist(言語検出/コードファクトのインデックス)は常に実行されます。動的テスト用ユーティリティ(Chromium、WireMock、mitmproxy、fuzzer)はオプトイン方式で、dast と poc プロファイルを使って起動します。
ワンクリックインストール(Docker の起動が必要):
手動での設定:
MCP 設定ファイル(claude_desktop_config.json、mcp.json など)に追加します。
{
"mcpServers": {
"mcpwner": {
"command": "docker",
"args": ["exec", "-i", "mcpwner-server", "python", "src/server.py"],
"env": {}
}
}
}
新しいサーバー設定を読み込むため、MCP クライアントを再起動します。
ローカルプロジェクトをスキャンする
docker-compose.yaml にボリュームを追加して、プロジェクトをコンテナにマウントします。
services:
mcpwner:
volumes:
- /path/to/your/projects:/mnt/projects:ro
次に、source_type="local" と source="/mnt/projects/my-project" を指定して create_workspace を使用します。
ドキュメント
追加のガイドはプロジェクトの Wikiにあります。
- クイックスタート -
COMPOSE_PROFILESを使ってツール群を起動し、MCP サーバーをクライアントに接続します。 - 設定 -
.env/COMPOSE_PROFILES、config.yaml、ツールのポート一覧について説明します。 - トラブルシューティング - ツールが見つからない場合、コンテナが正常でない場合、イメージのビルドに失敗する場合について説明します。
- ツールの追加 - 新しいスキャナーコンテナをツール群とツールレジストリに接続します。
貢献する場合は、コードスタイル、pre-commit フック、テストについて CONTRIBUTING.md を参照してください。
アーキテクチャ
graph LR
subgraph IDE[" "]
LLM[🤖<br/>LLM]
Client[MCP Client]
LLM -.-> Client
end
Server[MCPwner Server]
SAST[SAST Tools]
Secrets[Secrets Scanning]
SCA[SCA Tools]
Recon[Reconnaissance]
CodeQL[CodeQL Service]
Linguist[Language Detection]
Utilities[Utilities]
IaC[IaC Security]
Fuzzing[Source Fuzzing]
DAST[DAST Tools]
PoC[PoC Sandbox]
Client -->|JSON-RPC 2.0| Server
Server -->|HTTP| SAST
Server -->|HTTP| Secrets
Server -->|HTTP| SCA
Server -->|HTTP| Recon
Server -->|HTTP| CodeQL
Server -->|HTTP| Linguist
Server -->|HTTP| Utilities
Server -->|HTTP| IaC
Server -->|HTTP| Fuzzing
Server -->|HTTP| DAST
Server -->|HTTP| PoC
style LLM fill:#7C3AED,stroke:#5B21B6,stroke-width:3px,color:#fff
style Client fill:#4A90E2,stroke:#2E5C8A,stroke-width:3px,color:#fff
style Server fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#fff
style SAST fill:#E74C3C,stroke:#C0392B,stroke-width:2px,color:#fff
style Secrets fill:#9B59B6,stroke:#7D3C98,stroke-width:2px,color:#fff
style SCA fill:#1ABC9C,stroke:#16A085,stroke-width:2px,color:#fff
style Recon fill:#00BCD4,stroke:#0097A7,stroke-width:2px,color:#fff
style CodeQL fill:#E67E22,stroke:#CA6F1E,stroke-width:2px,color:#fff
style Linguist fill:#3498DB,stroke:#2874A6,stroke-width:2px,color:#fff
style Utilities fill:#6D28D9,stroke:#4C1D95,stroke-width:2px,color:#fff
style IaC fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
style Fuzzing fill:#B91C1C,stroke:#7F1D1D,stroke-width:2px,color:#fff
style DAST fill:#D35400,stroke:#A04000,stroke-width:2px,color:#fff
style PoC fill:#DC2626,stroke:#991B1B,stroke-width:2px,color:#fff
style IDE fill:none,stroke:#ddd,stroke-width:2px,stroke-dasharray: 5 5
設計原則:
- セキュリティツールの実行をコンテナ内に隔離
- LLM が利用できる標準化された出力(SARIF/JSON)
- 動的なツール登録:正常なコンテナのみがツールとして表示される
- 調査フェーズをまたぐディープマージ方式の永続的な検出結果台帳
- PoC 検証のための決定論的オラクル(終了コード、マーカー、OOB コールバック、XSS の実行)
エージェントのワークフロー
MCPwner はツールのインフラストラクチャです。モデルを問わない単一のエージェントセッション(Claude、Cursor、Kiro、Gemini、または MCP に対応する任意のコーディングエージェント)がエンゲージメント全体を主導し、各フェーズ(偵察 → API マッピング → 環境構築 → コード監査 → 脆弱性調査 → PoC → レビュー)を自ら実行して、調査結果台帳に進捗を記録します。別個のオーケストレーションサービスや設定ファイルはありません。MCPwner はツールを公開し、エージェントがワークフローを担います。
長時間かつ分離されたサブタスク(典型的な例は、コンテナー内で稼働中のターゲット環境を立ち上げて操作すること)については、ホストが対応していれば、エージェントは任意でヘルパーセッションに委任できます。ただし、ワークフローがそれに依存することはありません。
データの永続化
MCPwner は、共有 Docker ボリューム(/workspaces/.metadata/)内のファイルベースストレージを使用して、コンテナーの再起動後もワークスペースのメタデータ、CodeQL データベース、調査結果を保持します。調査結果台帳は常に利用可能です(コンテナーのヘルスチェックによる制限はありません)。これは、エージェントが各フェーズで調査結果を追跡し、コンテキストがリセットされた後に状態を復元するためのものです。
ワークスペースのクリーンアップ:
delete_files=True, delete_metadata=False- ディスク容量を解放し、履歴を保持しますdelete_files=True, delete_metadata=True- 完全に削除しますdelete_files=False, delete_metadata=True- リストから削除し、ファイルは保持します
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。




















































