Zscaler MCPサーバーをClaudeで使う — ZIA・ZPA・ZDXの確認と書き込み制限
Zscaler MCPサーバーをClaudeにつなぐ4つの経路と、読み取り専用が既定の安全設計、書き込みを許可するallowlist、削除時の確認までを設定例つきでまとめます。
Zscaler MCPサーバーは、ZscalerのZero Trust ExchangeをMCP(Model Context Protocol)経由でClaudeから操作するためのサーバーです。ZIA(インターネット向けセキュリティ)、ZPA(プライベートアクセス)、ZDX(体験監視)など10のサービスにまたがる402個のツールを持ち、「ZPAのアプリケーションセグメントを一覧して」といった指示で設定を読めます。
要点は2つです。何もしなければ読み取り専用で動くこと。そして書き込みを許すには、フラグとallowlistの両方が要ることです。この記事では接続の経路、読み取りで見られる範囲、書き込みを許すときの絞り方を順に説明します。
接続経路は4つ — 使う面で選ぶ
ClaudeのコネクタページにはAnthropic verifiedの表示があり、追加時期は2026年8月とされています。ほかにも、Zscaler側のリポジトリが案内する経路が3つあります。
| 経路 | 向く面 | 設定のしかた |
|---|---|---|
| コネクタ(Claudeのマーケットプレイス) | 向く面Claude | 設定のしかた「Add to Claude」から追加し、設定項目で書き込みの可否を決める |
| Desktop拡張 | 向く面Claude Desktop(macOS・Linux) | 設定のしかたSettingsのExtensionsで zscaler を検索してInstall |
| 手動設定 | 向く面Claude Desktop(全OS) | 設定のしかたclaude_desktop_config.json に uvx の起動定義を書く |
| Claude Codeプラグイン | 向く面Claude Code | 設定のしかたclaude plugin install zscaler |
Windowsでは、Desktop拡張がmacOS・Linux向けのバイナリを同梱しているため動きません。手動設定を使います。手動設定は uvx が起動時にOSに合ったパッケージを取得する作りです。
コネクタページは、書き込み系ツールを「Enable Write Tools」と「Write Tools Allowlist」の2つの設定で制御すると説明しています。接続時の認証方式そのものはページに書かれていないので、実際の入力欄は追加画面で確かめてください。
先に用意するもの — OneAPIクライアント
どの経路でも、Zscalerの認証はOneAPIに一本化されています。ZIdentityの管理画面でAPIクライアントを作り、次の値を控えます。
| 環境変数 | 必須 | 内容 |
|---|---|---|
ZSCALER_CLIENT_ID | 必須必須 | 内容OneAPIのクライアントID |
ZSCALER_CLIENT_SECRET | 必須必須(ZSCALER_PRIVATE_KEY でも可) | 内容クライアントシークレット |
ZSCALER_CUSTOMER_ID | 必須ZPAのツールで必須 | 内容テナントの顧客ID |
ZSCALER_VANITY_DOMAIN | 必須必須 | 内容組織のバニティドメイン |
ZCELL_CUSTOMER_ID | 必須ZCellのツールで必須 | 内容ZSCALER_CUSTOMER_IDとは別の値 |
手動設定やプラグインでは、これらを .env に書いてパスを渡します。
cat > ~/zscaler.env <<'ENV'
ZSCALER_CLIENT_ID=your_client_id
ZSCALER_CLIENT_SECRET=your_client_secret
ZSCALER_CUSTOMER_ID=your_customer_id
ZSCALER_VANITY_DOMAIN=your_vanity_domain
ENV
chmod 600 ~/zscaler.env.env はリポジトリにコミットしません。Claude Desktopの claude_desktop_config.json には、この .env の絶対パスを渡します。相対パスは効きません。
{
"mcpServers": {
"zscaler-mcp-server": {
"command": "uvx",
"args": ["--env-file", "/absolute/path/to/zscaler.env", "zscaler-mcp"]
}
}
}PyPI上のパッケージ名は zscaler-mcp です。zscaler-mcp-server ではありません。
認証情報の検証は遅延されます。サーバーは起動時に資格情報を試さず、最初のツール呼び出しでZscaler SDKのクライアントを作ります。そのため起動が成功しても、鍵が間違っていれば最初の質問で初めてエラーになります。
権限のないサービスのツールは消える
サーバーは起動時に、OneAPIトークンの製品権限(entitlement)を読みます。ZIAとZPAだけを許可したクライアントなら、zdx_* や zcc_* などのツールは登録されません。--toolsets all を指定しても同じです。
呼べないツールをClaudeに見せないための仕組みで、最初の呼び出しが401で終わる事故を減らします。この絞り込みはトークンの取得に失敗しても止まらず、警告を1行出して選択済みのツールをそのまま使います。製品権限だけを見るので、操作ごとの権限はAPI側の判定に任されます。
読み取りで見られる範囲
読み取り専用の既定状態でも、list_* と get_* 系のツールが使えます。サービスごとの内訳は次のとおりです。
| サービス | 中身 | ツール数 |
|---|---|---|
| ZIA | 中身セキュリティポリシー | ツール数166 |
| ZPA | 中身アプリケーションアクセス | ツール数109 |
| ZDX | 中身体験の監視と分析 | ツール数31 |
| ZCell | 中身SIMの在庫・使用量・異常ポリシー | ツール数20(読み取りのみ) |
| ZMS | 中身マイクロセグメンテーション | ツール数20(読み取りのみ) |
| ZTW | 中身ワークロードのセグメンテーション | ツール数19 |
| Z-Insights | 中身Web通信・インシデント・シャドーITの分析 | ツール数16(読み取りのみ) |
| ZIdentity | 中身ID管理 | ツール数10(読み取りのみ) |
| EASM | 中身外部攻撃面の管理 | ツール数7(読み取りのみ) |
| ZCC | 中身Client Connectorの端末管理 | ツール数4(読み取りのみ) |
READMEの表を合計すると402になり、コネクタページの「Show all 402 tools」と一致します。READMEの本文には「読み取り系は110以上」と「254個」の2つの数字が出てきます。どちらの数字も表の内訳とは一致しないため、手元で有効なツール数は後述の --list-tools で数えるのが確実です。
READMEが例に挙げる指示は次の3つです。
- ZPAのアプリケーションセグメントを一覧して
- ZPAのセグメントグループを一覧して
- ZIAのルールラベルを一覧して
指示にはサービス名を入れる
ツールが402個あるため、MCPクライアントはツールを遅延ロードして、指示から候補を探します。READMEは、サービス名と操作の両方を書くよう勧めています。
指示の書き方でツール選びが変わる
絞れる指示
「ZIAのファイアウォールルールを表示して」のように、サービス(zia)と操作(list)が読み取れる。
曖昧な指示
「端末を見せて」のように、複数のサービスが端末のツールを持つ表現。READMEは効果が低いと説明している。
サービスを無効にしてもエージェントが別サービスの類似ツールを探すことがあります。想定外の結果が返ったときは、zpa や zdx といったサービス名を足して言い直します。
返ってくる量をJMESPathで絞る
読み取りツールはZscaler APIのレコードを加工せずに返します。項目を削ったり名前を変えたりしません。そのぶん長くなるので、一覧系のツールには query 引数があり、JMESPathの式で結果を絞れます。READMEの例は次の形です。
zcc_list_devices(query="[*].{user: user, policy: policyName}")
zcc_list_devices(query="[?registrationState=='Quarantined']")
zcc_list_devices(query="length(@)")1行目は2項目だけの射影、2行目は隔離状態の端末だけ、3行目は件数だけです。Claudeに「隔離中の端末の件数だけ知りたい」と頼むと、トークンを節約した呼び方を選びやすくなります。ただしClaudeがこの引数を使うかどうかは、指示の書き方次第です。
書き込みを許可するときの絞り方
書き込みの解禁には2つの条件が要ります。--enable-write-tools で全体の鍵を開け、さらに --write-tools で許可するツールの名前パターンを明示します。allowlistが空のまま鍵だけ開けても、登録される書き込みツールは0個です。
# 書き込みツールは0個のまま(allowlistがない)
zscaler-mcp --enable-write-tools
# ZPAの作成系と削除系だけを許可
zscaler-mcp --enable-write-tools --write-tools "zpa_create_*,zpa_delete_*"
# ツール名を指定して許可
zscaler-mcp --enable-write-tools \
--write-tools "zpa_create_application_segment,zia_create_rule_label"環境変数で渡すこともできます。ZSCALER_MCP_WRITE_ENABLED=true と ZSCALER_MCP_WRITE_TOOLS="zpa_create_*" の組み合わせです。パターンの * はZPAの zpa_* のような接頭辞にも、*_application_segment のような接尾辞にも使えます。
コネクタ経由ではコマンドラインを触らず、画面上の「Enable Write Tools」と「Write Tools Allowlist」に同じ内容を入れる形になります。
落とし穴
ZIAには設定の有効化ツールが別にある
ツール一覧には、ルールの作成系とは別に zia_activate_configuration があります。作成系だけをallowlistに入れ、有効化を外す構成なら、有効化の操作を人が握れます。有効化まで許可すると、Claudeが作った変更を自分で反映できる範囲が広がります。どちらを許すかは、変更のレビューを誰が担当するかで決めます。
最初のallowlistは狭く、1つのサービスから
許可を広げる順序は、作成だけ、更新、削除の順が無難です。まず zpa_create_* のように1サービス・1操作だけを許し、動作を見てから広げます。READMEの設計では、操作ごとに別ツールになっています。たとえば zpa_list_application_segments(読み取り)と zpa_delete_application_segment(削除)は別物です。名前から意図が読めるので、パターンも書きやすい作りです。
削除は人が答える確認を挟む
削除系のツールは、最初の呼び出しでは実行されません。確認の方式は、クライアントが何に対応しているかで分かれます。
- MCPのelicitationに対応するクライアント(READMEはClaude DesktopとCursorを例に挙げる)では、リソース名を示した確認が人に表示される。回答はプロトコルの項目として戻るので、乗っ取られたエージェントが承認を書き換えられない
- 対応しないクライアントでは、暗号化された確認トークン(HMAC-SHA256)が発行される。操作とパラメータに結び付き、使い切りで、5分で失効する
後者のトークンは、承認を別のリソースに流用されることや再利用を防ぎます。ただし、READMEも書いているとおり、プロンプトインジェクション対策としては十分ではありません。乗っ取られたエージェントも、トークンを受け取って使えてしまうためです。
READMEには、この確認を無効にする設定は載っていません。エージェントに削除させたくないなら、削除系ツールをallowlistに入れないのが確実です。コネクタページには「セッション内のHMAC確認トークンが必要」とだけ書かれており、elicitationの分岐には触れていません。READMEの記述と併せて読むと、Claude Desktopでは人への確認画面が出る構成と読めます。
ツールが多すぎるとき — サービスとtoolsetで絞る
402個すべてをClaudeに渡すと、コンテキストを圧迫し、ツール選びの精度も下がります。READMEは絞り込みの手段を3つ用意しています。
# 使うサービスだけを有効にする
zscaler-mcp --services zia,zpa,zdx
# 特定のツール群(toolset)だけを読み込む
zscaler-mcp --toolsets zia_url_filtering,zpa_app_segments
# 特定のサービスやツールを除外する
zscaler-mcp --disabled-services zcc,zdx
zscaler-mcp --disabled-tools "zcc_*,zdx_list_devices"toolsetは63個あり、たとえば zia_url_filtering は5ツールだけを含みます。エージェントは実行中に zscaler_list_toolsets・zscaler_get_toolset_tools・zscaler_enable_toolset の3ツールで、追加のtoolsetを有効にできます。手元に何個のツールが載っているかは zscaler-mcp --list-tools で数えられます。
運用前に押さえる注意点
- Public Preview: READMEは、プロジェクトが公開プレビューで、1.0より前に機能が変わりうること、本番での運用は避けるよう勧めています。コネクタ化されていても、書き込みを本番テナントに向けるかは別に判断します
- 出力の無害化: ツールの結果は、不可視文字の除去、HTMLの削除、Markdownリンクの無効化などを通ってからClaudeに渡ります。ルールの説明欄やロケーション名に埋め込まれた指示文を、Claudeが拾うのを防ぐためです。診断用の無効化設定もありますが、既定のままにしておきます
- 監査ログ:
--log-tool-callsを付けると、ツール名・伏せ字にした引数・所要時間・結果の要約が記録されます - リモート運用: HTTPで公開する場合は、TLS、許可する接続元IP、クライアント認証(APIキー・JWT・OIDC)の設定が別途要ります
似た記事との使い分け
Claudeの利用状況をZscalerなどのCASBから見る場合は、Compliance API経由の可視化が主題のClaudeをNetskopeとCloudflare CASBで可視化する手順が近い内容です。この記事は逆向きで、ClaudeがZscalerの設定そのものを読み書きします。権限の絞り方という観点では、MuleSoft Platform MCPサーバーの設定やRazorpay MCPサーバーの接続手順が、書き込み系ツールの扱いを比べる材料になります。データ系サーバーの読み取り専用設定はデータベースMCPサーバーを5製品で比較した記事にまとまっています。
まとめ
Zscaler MCPサーバーは、読み取りを広く、書き込みを狭くという設計がそのまま設定に出ています。最初は読み取り専用で、--services か --toolsets を絞って始めます。書き込みが必要になっても、作成系のパターンを1つ許すところまでに留めます。削除系は、許可しないことが最も確実な安全策です。