mcpField
O
OWASP ZAP MCP Server

OWASP ZAP MCP Server

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

OWASP ZAP MCP Server について

OWASP ZAP MCP Serverは、AIエージェントやMCPクライアントからOWASP ZAPを操作し、クロール、認証設定、検出結果やレポートの取得を行えます。ZAPのDockerコンテナ管理にも対応します。

主な機能

  1. 01OWASP ZAP用の45ツール
  2. 02スパイダーとアクティブスキャン
  3. 03アラート確認とスキャンレポート
  4. 04コンテキストと認証の設定
  5. 05Dockerコンテナのライフサイクル管理

活用シーン

  1. 01スキャン前のWebアプリのクロール
  2. 02ログインが必要な領域のスキャン
  3. 03リスクレベル別の検出結果確認
  4. 04HTML、JSON、XMLレポートの生成

MCP 対応

OWASP ZAPのスキャン、設定、レポート、Docker管理機能をMCPクライアント向けのツールとして公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
nugetdotnet-zap-mcp1.1.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

dotnet-zap-mcp

NuGet NuGet Downloads Release

OWASP ZAP 用の MCP(Model Context Protocol)サーバーです。AI エージェント(Claude、GitHub Copilot など)が MCP 経由で ZAP の脆弱性スキャンを実行できるようにします。

特長

  • OWASP ZAP を操作する 45 個の MCP ツール(スキャン、アラート、スパイダー、Ajax スパイダー、コンテキスト、認証、レポートなど)
  • Docker Compose の管理機能を内蔵(ツールを 1 回呼び出すだけで ZAP を起動/停止)
  • 設定不要ですぐに利用可能:API キーを自動生成し、Docker アセットを展開
  • MCP 対応のあらゆるクライアントで動作(Claude Desktop、VS Code など)

インストール

dotnet tool install -g dotnet-zap-mcp
前提条件
  • .NET 10 SDK
  • docker compose に対応した Docker(Docker Engine または Docker Desktop)(内蔵の ZAP コンテナー管理を使用する場合)

設定

設定不要(推奨)

設定は不要です。エージェントが DockerComposeUp を呼び出すと、次の処理が自動的に実行されます。

  1. Docker アセットを ~/.zap-mcp/docker/ に展開します
  2. ランダムな API キーを生成します
  3. ZAP コンテナーを localhost:8090 で起動します
  4. ZAP が正常な状態になるまで待機します
データの永続化

ZAP コンテナーでは、2 つの Docker 名前付きボリュームを使用します。

ボリュームコンテナーパス用途
zap-home/home/zap/.ZAPZAP の設定、コンテキスト、セッション、スキャンポリシー(再起動後も保持)
zap-data/zap/wrk/dataレポート、セッションファイル、コンテキストのインポート/エクスポート用の共有ディレクトリ

初回起動時には、テンプレートの config.xml が zap-home にコピーされます。2 回目以降の起動では API キーのみが更新され、ZAP を通じて行った変更(コンテキスト、認証設定、スキャンポリシーなど)は保持されます。

zap-data ボリュームには、次のものが含まれます。

  • reports/ — 生成されたスキャンレポート
  • sessions/ — 保存された ZAP セッション
  • contexts/ — エクスポートされたコンテキストファイル
Claude Desktop / Claude Code

MCP の設定に追加します。

{
  "mcpServers": {
    "zap": {
      "command": "zap-mcp"
    }
  }
}
VS Code(Copilot)

.vscode/mcp.json に追加します。

{
  "servers": {
    "zap": {
      "command": "zap-mcp"
    }
  }
}
既存の ZAP インスタンスを使用する場合

すでに ZAP インスタンスを実行している場合は、環境変数で接続情報を渡します。

{
  "mcpServers": {
    "zap": {
      "command": "zap-mcp",
      "env": {
        "ZAP_BASE_URL": "http://localhost:8090",
        "ZAP_API_KEY": "your-api-key"
      }
    }
  }
}

利用可能なツール

Docker 管理
ツールパラメーター説明
DockerComposeUp—ZAP コンテナーを起動し、正常な状態になるまで待機します
DockerComposeDown—ZAP コンテナーを停止して削除します
DockerComposeStatus—コンテナーの状態を確認します
DockerComposeLogstailコンテナーの最近のログを取得します
ZAP コア
ツールパラメーター説明
GetVersion—ZAP への接続を確認します
GetHosts—記録されたホストを一覧表示します
GetSites—記録されたサイトを一覧表示します
GetUrlsbaseUrlベース URL の記録済み URL を一覧表示します
スパイダー
ツールパラメーター説明
StartSpiderurl, maxChildren, recurse, subtreeOnly, contextNameページをクロールして検出するスパイダースキャンを開始します
GetSpiderStatusscanIdスパイダーの進行状況を確認します(0~100%)
GetSpiderResultsscanIdスパイダーが検出した URL を取得します
StopSpiderscanId実行中のスパイダースキャンを停止します
アクティブスキャン
ツールパラメーター説明
StartActiveScanurl, recurse, inScopeOnly, scanPolicyName, contextId脆弱性のアクティブスキャンを開始します
GetActiveScanStatusscanIdアクティブスキャンの進行状況を確認します(0~100%)
StopActiveScanscanId実行中のアクティブスキャンを停止します
パッシブスキャン
ツールパラメーター説明
GetPassiveScanStatus—パッシブスキャンの進捗を確認します(残りレコード数)
アラート
ツールパラメーター説明
GetAlertsSummarybaseUrlリスクレベル別のアラート件数
GetAlertsbaseUrl, start, count, riskIdページネーションとリスクフィルターに対応した詳細なアラート一覧
レポート
ツールパラメーター説明
GetHtmlReport—HTML スキャンレポートを生成します
GetJsonReport—JSON スキャンレポートを生成します
GetXmlReport—XML スキャンレポートを生成します
コンテキスト管理
ツールパラメーター説明
GetContextList—ZAP で定義されているすべてのコンテキストを一覧表示します
GetContextcontextNameコンテキストの詳細(スコープパターンなど)を取得します
CreateContextcontextName新しいコンテキストを作成します
RemoveContextcontextNameコンテキストを削除します
IncludeInContextcontextName, regexコンテキストのスコープに URL の包含パターンを追加します
ExcludeFromContextcontextName, regexコンテキストのスコープに URL の除外パターンを追加します
ImportContextcontextFilePathコンテキストファイルを ZAP にインポートします
ExportContextcontextName, contextFilePathコンテキストをファイルにエクスポートします
認証
ツールパラメーター説明
GetAuthenticationMethodcontextIdコンテキストに設定されている認証方式を取得します
SetAuthenticationMethodcontextId, authMethodName, authMethodConfigParams認証方式を設定します(フォームベース、JSON ベース、スクリプトベース、HTTP)
SetLoggedInIndicatorcontextId, loggedInIndicatorRegexログイン状態を示す正規表現パターンを設定します
SetLoggedOutIndicatorcontextId, loggedOutIndicatorRegexログアウト状態を示す正規表現パターンを設定します
ユーザー
ツールパラメーター説明
GetUsersListcontextIdコンテキストのすべてのユーザーを一覧表示します
CreateUsercontextId, name新しいユーザーを作成します
RemoveUsercontextId, userIdユーザーを削除します
SetAuthenticationCredentialscontextId, userId, authCredentialsConfigParamsユーザーの認証情報(ユーザー名/パスワード)を設定します
SetUserEnabledcontextId, userId, enabledユーザーを有効または無効にします
強制ユーザー
ツールパラメーター説明
SetForcedUsercontextId, userIdコンテキストの強制ユーザーを設定します
SetForcedUserModeEnabledenabled強制ユーザーモードを全体的に有効または無効にします
GetForcedUserStatuscontextId強制ユーザーモードの状態と現在の強制ユーザーを取得します
Ajax スパイダー
ツールパラメーター説明
StartAjaxSpiderurl, inScope, contextName, subtreeOnlyJavaScript を多用するアプリ向けに Ajax スパイダーを開始します
StartAjaxSpiderAsUsercontextName, userId, url, subtreeOnly特定のユーザーとして Ajax スパイダーを開始します
GetAjaxSpiderStatus—Ajax スパイダーの状態(実行中/停止)を取得します
GetAjaxSpiderResults—Ajax スパイダーの結果の概要を取得します
StopAjaxSpider—Ajax スパイダーを停止します

一般的なワークフロー

  1. エージェントが DockerComposeUp を呼び出して ZAP を起動します
  2. ブラウザー/Playwright が ZAP をプロキシ(http://127.0.0.1:8090)として使用するよう設定します
  3. プロキシ経由で対象アプリケーションを閲覧します
  4. エージェントが StartSpider を呼び出してアプリケーションをクロールし、その後 GetSpiderStatus を呼び出して進行状況を監視します
  5. エージェントが GetPassiveScanStatus を呼び出し、パッシブスキャンの完了を待ちます
  6. エージェントが主要なページで StartActiveScan を呼び出し、その後 GetActiveScanStatus を呼び出して進行状況を監視します
  7. エージェントが GetAlertsSummary と GetAlerts を呼び出して、脆弱性の検出結果を取得します
  8. エージェントが GetHtmlReport または GetJsonReport を呼び出して、スキャンレポートを生成します
  9. 完了したら、エージェントが DockerComposeDown を呼び出します

注: ZAP の設定(コンテキスト、認証、スキャンポリシー)は zap-home Docker ボリュームに保持されます。設定を失うことなく、コンテナーを停止して再起動できます。

試してみる(付属の脆弱性を含むアプリを使用)

このリポジトリには、ZAP のスキャンを試すための、意図的に脆弱性を含めた Web アプリケーションが含まれています。このアプリには一般的な脆弱性(XSS、SQL インジェクション、CSRF、オープンリダイレクト)が含まれているため、ZAP で実際の検出結果を確認できます。

セットアップ
# Start ZAP and the vulnerable target app
docker compose -f tests/docker/docker-compose.test.yml up -d --build

# Wait until both containers are healthy
docker compose -f tests/docker/docker-compose.test.yml ps

次に、この ZAP インスタンスに接続するよう MCP クライアントを設定します。

{
  "mcpServers": {
    "zap": {
      "command": "zap-mcp",
      "env": {
        "ZAP_BASE_URL": "http://localhost:8090",
        "ZAP_API_KEY": "test-api-key-for-ci"
      }
    }
  }
}

脆弱性を含むアプリには、Docker ネットワーク内(ZAP が使用)からは http://target で、ホストマシンからは http://localhost:8080 でアクセスできます。

例 1:クイックスキャン

エージェントへのプロンプト:

http://target をスキャンして脆弱性を調べてください。スパイダークロールを実行し、パッシブスキャンが完了するまで待ってから、アラートの概要を表示し、HTML レポートを生成してください。

想定されるツールの流れ:

GetVersion          → Verify ZAP connectivity
StartSpider         → url: "http://target"
GetSpiderStatus     → Poll until 100%
GetPassiveScanStatus → Poll until 0 records remaining
GetAlertsSummary    → baseUrl: "http://target"
GetAlerts           → baseUrl: "http://target"
GetHtmlReport       → Generate report

ZAP は /search、/login、/users、/about、/contact などのページを検出し、パッシブスキャンではセキュリティヘッダーの欠如や CSRF 脆弱性などが報告されます。

例 2:認証付きスキャン

/admin ページへのアクセスにはログインが必要です(ユーザー名:admin、パスワード:password)。認証付きスキャンを行うと、ZAP から保護されたページにアクセスできるようになります。

エージェントへのプロンプト:

http://target の認証付きスキャンを設定してください。ログインフォームは /login にあり、フィールドは "username" と "password" です(認証情報:admin / password)。ログイン済みを示す表示は "Welcome, admin" です。認証を設定した後、認証済みユーザーとしてサイトをスパイダーでクロールし、アクティブスキャンを実行してください。

想定されるツールの流れ:

CreateContext                   → contextName: "target-auth"
IncludeInContext                → regex: "http://target.*"
SetAuthenticationMethod         → contextId, authMethodName: "formBasedAuthentication",
                                  authMethodConfigParams: "loginUrl=http://target/login&loginRequestData=username%3D%7B%25username%25%7D%26password%3D%7B%25password%25%7D"
SetLoggedInIndicator            → loggedInIndicatorRegex: "Welcome, admin"
CreateUser                      → contextId, name: "admin"
SetAuthenticationCredentials    → contextId, userId, authCredentialsConfigParams: "username=admin&password=password"
SetUserEnabled                  → contextId, userId, enabled: true
SetForcedUser                   → contextId, userId
SetForcedUserModeEnabled        → enabled: true
StartSpider                     → url: "http://target", contextName: "target-auth"
GetSpiderStatus                 → Poll until 100%
GetPassiveScanStatus            → Poll until 0 records remaining
StartActiveScan                 → url: "http://target"
GetActiveScanStatus             → Poll until 100%
GetAlertsSummary                → baseUrl: "http://target"
GetAlerts                       → baseUrl: "http://target"
SetForcedUserModeEnabled        → enabled: false

認証を設定すると、ZAP は /admin にアクセスし、ログイン後に表示されるページの脆弱性をテストできます。

例 3:包括的な脆弱性評価

エージェントへのプロンプト:

http://target の包括的な脆弱性評価を実施してください。サイトをクロールし、アクティブスキャンを実行してから、検出されたすべての脆弱性をリスクレベル別に分類し、詳しく説明してください。

想定されるツールの流れ:

StartSpider          → url: "http://target", recurse: true
GetSpiderStatus      → Poll until 100%
GetSpiderResults     → Review discovered URLs
GetPassiveScanStatus → Poll until 0 records remaining
StartActiveScan      → url: "http://target", recurse: true
GetActiveScanStatus  → Poll until 100%
GetAlertsSummary     → baseUrl: "http://target"
GetAlerts            → baseUrl: "http://target", riskId: "3" (High)
GetAlerts            → baseUrl: "http://target", riskId: "2" (Medium)
GetAlerts            → baseUrl: "http://target", riskId: "1" (Low)
GetHtmlReport        → Generate final report

アクティブスキャンでは、次のような脆弱性が検出されます。

  • 高:SQL インジェクション(/users?id=)、クロスサイトスクリプティング(/search?q=)
  • 中:CSRF(/login にトークンがない)、オープンリダイレクト(/redirect?url=)
  • 低/情報:セキュリティヘッダーの欠如、Cookie の問題など
クリーンアップ
docker compose -f tests/docker/docker-compose.test.yml down -v

ライセンス

MIT

コメント

MCP は初めてですか?

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

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