mcpField
Z
Zscaler Zero Trust Exchange

Zscaler Zero Trust Exchange

本地服务
github.com安全5310 周前更新

关于 Zscaler Zero Trust Exchange

Zscaler Zero Trust Exchange MCP 服务让 AI Agent 通过 400 多个工具访问 Zscaler 的 ZPA、ZIA、ZDX、ZCC 等服务。默认以只读模式运行,写操作需显式开启并配置允许列表,目前处于公开预览阶段。

主要功能

  1. 01覆盖 ZPA、ZIA、ZDX、ZCC 等多个服务
  2. 02默认只读模式
  3. 03写操作需显式开启并配置允许列表
  4. 04支持 JMESPath 查询过滤返回结果
  5. 05可按服务选择工具集

适用场景

  1. 01让 AI Agent 查询 ZPA 应用分段或分段组
  2. 02在变更前以只读方式核查 ZIA 防火墙规则
  3. 03通过 Agent 按条件筛选 ZCC 设备列表

MCP 相关

该项目是一个 MCP 服务,向 MCP 客户端暴露 Zscaler 各服务的工具,并按照权限设置控制可用工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"zscaler-zscaler": {
"command": "uvx",
"args": [
"zscaler-mcp"
],
"env": {
"ZSCALER_CLIENT_ID": "<ZSCALER_CLIENT_ID>",
"ZSCALER_CLIENT_SECRET": "<ZSCALER_CLIENT_SECRET>",
"ZSCALER_CUSTOMER_ID": "<ZSCALER_CUSTOMER_ID>",
"ZSCALER_VANITY_DOMAIN": "<ZSCALER_VANITY_DOMAIN>"
}
}
}
}
启动命令uvx zscaler-mcp
需要配置的环境变量
ZSCALER_CLIENT_ID密钥Zscaler OneAPI Client ID from ZIdentity console.
ZSCALER_CLIENT_SECRET密钥Zscaler OneAPI Client Secret from ZIdentity console.
ZSCALER_CUSTOMER_IDZscaler Customer ID from ZIdentity console.
ZSCALER_VANITY_DOMAINZscaler vanity domain (e.g. mycompany.zscloud.net).

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypizscaler-mcp0.15.4
ocidocker.io/zscaler/zscaler-mcp-server:latest

工具

254

收录的工具列表 · 更新于 2 周前

参数类型必填说明
queryany否可选的 JMESPath 表达式,在 API 调用后应用于结果,以便在客户端进行筛选和投影。示例:"[?enabled==`true`]"、"[*].{name: name, id: id}"、"length(@)"。省略则返回完整记录。重要:字段名称是返回记录中的键,通常为 snake_case(`custom_category`),即使 Zscaler API 文档中使用 camelCase(`customCategory`)也是如此——猜错拼写会得到一个看似真实的空列表。如果尚未查看过此工具返回的记录,请先不带 `query` 调用一次,并从响应中读取键名。
org_idstring是

详细介绍

Zscaler MCP

PyPI 版本 PyPI - Python 版本 文档 codecov GitHub 提交活动 许可证 Automation Hub Zscaler 社区

zscaler-mcp-server 是一个模型上下文协议(MCP)服务,可将 AI Agent 连接到 Zscaler Zero Trust Exchange 平台。出于安全考虑,服务默认以只读模式运行;如需启用写入操作,必须明确选择加入。

支持免责声明

-> 免责声明: 使用此提供方之前,请参阅我们的一般支持声明。有关常见问题的指引,也可参阅我们的故障排除指南。

重要

🚧 公开预览版:此项目目前处于公开预览阶段,仍在积极开发中。稳定版 1.0 发布之前,功能可能会发生变化。我们鼓励大家探索和测试,但请避免将其部署到生产环境。欢迎通过 GitHub Issues 提供反馈,帮助完善最终版本。

📄 目录

📺 概览

Zscaler Integrations MCP Server 为你的 Agent 提供上下文。可以尝试以下提示词:

  • “列出我的 ZPA 应用程序分段”
  • “列出我的 ZPA 分段组”
  • “列出我的 ZIA 规则标签”

警告

🔒 默认只读:出于安全考虑,此 MCP 服务默认以只读模式运行。仅提供 list_* 和 get_* 操作。若要启用可创建、更新或删除 Zscaler 资源的工具,必须使用 --enable-write-tools 标志或设置 ZSCALER_MCP_WRITE_ENABLED=true,明确启用写入模式。详情请参阅安全与权限部分。

提示

编写有效的提示词:此服务在多个 Zscaler 服务中提供 402 个工具。大多数 MCP 客户端(Claude Desktop、Cursor 等)会使用延迟加载工具的方式,并根据你的提示词搜索相关工具。为获得最佳效果,请在提示词中明确指定服务和操作:

  • 效果好:“列出我的 ZPA 应用程序分段”——直接定位正确的服务和工具
  • 效果好:“显示 ZIA 防火墙规则”——明确指定服务(zia)和操作(list)
  • 效果较差:“给我看看我的设备”——含义模糊;多个服务都提供与设备相关的工具

当某项服务被禁用时,其工具会从服务中完全移除。不过,AI Agent 仍可能尝试在其他服务中查找相关工具。如果结果不符合预期,请在提示词中补充具体的服务名称(例如 zpa、zia、zdx、zcc、zcell、zms)。

🔒 安全与权限

Zscaler MCP Server 采用安全优先的设计,提供精细的权限控制和安全的默认设置:

只读模式(默认 — 始终可用)

默认情况下,服务以只读模式运行,仅公开用于列出或检索信息的工具:

  • ✅ 始终可用 — 只读工具由服务注册
  • ✅ 可供 AI Agent 自主安全使用
  • ✅ 不存在意外修改或删除资源的风险
  • ✅ 所有 list_* 和 get_* 操作均可用(110 多个只读工具)
  • ❌ 默认禁用所有 create_*、update_* 和 delete_* 操作
  • 💡 注意:你可能需要在 AI Agent 的 UI 设置中启用只读工具
# Read-only mode (default - safe)
zscaler-mcp

服务以只读模式启动时,你会看到:

🔒 Server running in READ-ONLY mode (safe default)
   Only list and get operations are available
   To enable write operations, use --enable-write-tools AND --write-tools flags

💡 服务始终会注册只读工具,不受任何标志影响。你无需在服务端启用它们。注意:你的 AI Agent UI(例如 Claude Desktop)可能要求你在使用前启用各个工具。

写入模式(明确选择启用 — 必须提供允许列表)

若要启用可创建、修改或删除 Zscaler 资源的工具,必须同时提供两个标志:

  1. ✅ --enable-write-tools — 全局解锁写入操作
  2. ✅ --write-tools "pattern" — 必须明确指定允许列表

🔐 安全性:必须提供允许列表 — 如果设置了 --enable-write-tools,却未设置 --write-tools,则不会注册任何写入工具。这可确保你明确选择要启用的写入操作。

# ❌ WRONG: This will NOT enable any write tools (allowlist missing)
zscaler-mcp --enable-write-tools

# ✅ CORRECT: Explicit allowlist required
zscaler-mcp --enable-write-tools --write-tools "zpa_create_*,zpa_delete_*"

尝试在未提供允许列表的情况下启用写入模式时:

⚠️  WRITE TOOLS MODE ENABLED
⚠️  NO allowlist provided - 0 write tools will be registered
⚠️  Read-only tools will still be available
⚠️  To enable write operations, add: --write-tools 'pattern'
写入工具允许列表(必须)

允许列表提供两层安全保护:

  1. ✅ 第一道关卡:必须设置 --enable-write-tools(全局解锁)
  2. ✅ 第二道关卡:由明确指定的允许列表决定要注册哪些写入工具(必须)

允许列表示例:

# Enable ONLY specific write tools with wildcards
zscaler-mcp --enable-write-tools --write-tools "zpa_create_*,zpa_delete_*"

# Enable specific tools without wildcards
zscaler-mcp --enable-write-tools --write-tools "zpa_create_application_segment,zia_create_rule_label"

# Enable all ZPA write operations (but no ZIA/ZDX/ZTW)
zscaler-mcp --enable-write-tools --write-tools "zpa_*"

或者通过环境变量设置:

export ZSCALER_MCP_WRITE_ENABLED=true
export ZSCALER_MCP_WRITE_TOOLS="zpa_create_*,zpa_delete_*"
zscaler-mcp

支持通配符模式:

  • zpa_create_* — 允许所有 ZPA 创建工具
  • zpa_delete_* — 允许所有 ZPA 删除工具
  • zpa_* — 允许所有 ZPA 写入工具
  • *_application_segment — 允许对所有应用程序段执行操作
  • zpa_create_application_segment — 精确匹配(不使用通配符)

使用有效的允许列表时,你会看到:

⚠️  WRITE TOOLS MODE ENABLED
⚠️  Explicit allowlist provided - only listed write tools will be registered
⚠️  Allowed patterns: zpa_create_*, zpa_delete_*
⚠️  Server can CREATE, MODIFY, and DELETE Zscaler resources
🔒 Security: 85 write tools blocked by allowlist, 8 allowed
工具设计理念

每项操作都是一个独立、用途单一的工具,名称清晰明确,能体现其用途:

✅ 良好示例(基于动词 — 当前设计)
zpa_list_application_segments    ← Read-only, safe to allow-list
zpa_get_application_segment      ← Read-only, safe to allow-list
zpa_create_application_segment   ← Write operation, requires --enable-write-tools
zpa_update_application_segment   ← Write operation, requires --enable-write-tools
zpa_delete_application_segment   ← Destructive, requires --enable-write-tools

这种设计可让 AI 助手(Claude、Cursor、GitHub Copilot):

  • 将只读工具加入允许列表,以便自主探索
  • 要求用户明确确认写入操作
  • 通过工具名称清楚了解每个工具的用途
响应:原样返回的 API 记录

只读工具会原样返回 Zscaler API 记录。服务不会删减、重命名或重新声明资源属性 — 属性集合由 API 决定,因此 Zscaler 日后新增的字段无需升级服务即可传给你。

为缩小响应内容,你可以控制返回内容,而非由服务猜测。可通过以下两种方式控制:

  • --toolsets — 仅加载所需的工具子集,以缩小工具目录(参见 工具集)。

  • query — 每个列表工具都接受可选的 JMESPath 表达式,用于筛选结果,让 Agent 仅提取所需内容:

    zcc_list_devices(query="[*].{user: user, policy: policyName}")   # just those two fields
    zcc_list_devices(query="[?registrationState=='Quarantined']")    # just quarantined devices
    zcc_list_devices(query="length(@)")                              # just the count
    

字段名称与 Zscaler API 返回的完全一致。不指定 query 即可获取完整记录。

安全层

服务采用多层安全防护(纵深防御)。前九层适用于所有传输方式,包括 stdio——它们决定开放哪些工具,以及如何确认高风险调用。其余仅适用于 HTTP 的安全层(TLS、主机标头验证、源 IP 访问控制列表、MCP 客户端身份验证)将在下文的网络级控制(仅限 HTTP)部分介绍。

  1. 始终启用只读工具:始终提供安全的 list_* 和 get_* 操作(254 个工具)。
  2. 默认禁用写入模式:除非通过 --enable-write-tools 明确启用,否则写入工具处于禁用状态。
  3. 强制允许列表:写入操作需要通过 --write-tools 明确指定允许列表(支持通配符)。
  4. OneAPI 权限过滤器:启动时,会静默移除 OneAPI 凭据无法调用的产品对应的工具集(请参阅下文的 OneAPI 权限过滤器)。
  5. 工具集选择:可选地将已注册的工具范围缩小到特定子集(例如 --toolsets zia_url_filtering,zpa_app_segments)。请参阅下文的工具集部分。
  6. 基于动词的工具命名:每个工具都清楚标明其用途(list、get、create、update、delete)。
  7. 工具元数据注解:所有工具都标注了 readOnlyHint 或 destructiveHint,供 AI Agent 框架使用。
  8. AI Agent 确认:所有标记为 destructiveHint=True 的写入工具都会在 AI 助手中触发权限对话框。
  9. DELETE 操作需人工确认:删除操作必须通过由服务发起的确认流程。在支持 MCP elicitation 的客户端(Claude Desktop、Cursor)上,服务会请求客户端提示人工确认,答案会作为协议字段返回——因此,被劫持的 Agent 无法伪造批准;若往返流程失败,则默认拒绝。对于不具备此能力的客户端,则回退到加密确认令牌(HMAC-SHA256、单次使用、5 分钟 TTL,并绑定具体工具和参数),可防止批准被用于其他资源、重放或重复使用——但它本身并不能防御提示词注入,因为被劫持的 Agent 会收到并能够兑换该令牌。此回退方案也仅限单进程使用;支持 elicitation 的客户端不受影响。完整分析请参阅MCP 协议安全态势——确认威胁模型。
  10. 环境变量控制:可以集中管理 ZSCALER_MCP_WRITE_ENABLED、ZSCALER_MCP_WRITE_TOOLS、ZSCALER_MCP_TOOLSETS、ZSCALER_MCP_DISABLE_ENTITLEMENT_FILTER 和各禁用列表,无需更改代码。
  11. 输出净化:每个工具结果中的所有字符串在传递给 Agent 前都会经过三阶段净化——剥离不可见字符和控制字符(双向覆盖字符、零宽字符、BOM、软连字符),移除原始 HTML 和 HTML 注释(通过 bleach),对 Markdown 链接/图片语法进行中和处理,防止嵌入的 URL 被偷偷传递给 Agent,并将包含角色冒充令牌(system、assistant、tool、ignore 等)的 Markdown 代码围栏信息字符串折叠为中性的 text 标签。这可以防御攻击者或疏忽的管理员嵌入到可编辑 Zscaler 资源(规则说明、位置名称、标签说明等)中的提示词注入载荷。默认启用。可通过 ZSCALER_MCP_DISABLE_OUTPUT_SANITIZATION=true 选择退出(仅用于诊断)。
  12. 审计日志记录:设置 --log-tool-calls / ZSCALER_MCP_LOG_TOOL_CALLS=true 后,每次工具调用都会记录其参数(敏感值会被隐去)、耗时和结果摘要。

这种多层防护方法可确保即使某一项安全控制被绕过,其他措施仍能防止未授权操作。上述第 1–12 层同样适用于 stdio、sse 和 streamable-http。

工具集

工具分为 63 个命名的工具集,因此你可以只加载 Agent 实际需要的部分(例如,加载 zia_url_filtering(5 个工具),而不是加载所有服务的所有工具(402 个))。工具集可降低 Agent 的上下文成本,并提高工具选择的准确性。

# Load just two slices
zscaler-mcp --toolsets zia_url_filtering,zpa_app_segments

# Or use the curated default-on subset
zscaler-mcp --toolsets default

# Or load every registered toolset explicitly
zscaler-mcp --toolsets all

# Equivalent via environment variable
export ZSCALER_MCP_TOOLSETS="zia_url_filtering,zpa_app_segments"

未指定 --toolsets 时,将加载所有已启用服务对应的工具集(保留历史默认行为)。

Agent 还可以在运行时通过始终可用的 zscaler_list_toolsets、zscaler_get_toolset_tools 和 zscaler_enable_toolset 工具启用其他工具集。

如需查看完整目录(涵盖所有服务中的 29 个工具集)、筛选优先级规则、各工具集的 Agent 指南和完整参考,请参阅 docs/guides/toolsets.md。

OneAPI 权限筛选器

工具集选择确定后,服务会从为你的 ZSCALER_CLIENT_ID 签发的 OneAPI bearer token 中读取产品权限,并静默移除凭据无权调用的产品对应的工具集。如果你的 OneAPI 客户端仅拥有 ZIA 和 ZPA 权限,那么在启动时,所有 zdx_* / zcc_* / ztw_* / zid_* / zeasm_* / zins_* / zms_* 工具集都会被筛除——即使指定了 --toolsets all 也是如此。

这样可避免 Agent 发现那些首次调用只会返回 401 Unauthorized 的工具。此筛选器适用于所有传输方式,包括 stdio。

筛选器运行时,启动时会显示一条日志,例如:

entitlement filter applied: entitled services=['zia', 'zpa'], kept 12 toolset(s), removed 17 toolset(s)

此筛选器不会导致启动失败。如果缺少凭据、无法访问 token 端点、无法解码 token,或者 token 中没有可识别的产品权限,服务会记录一条 WARN 日志,并按用户选择的工具集正常启动,不做更改。

如需绕过此筛选器(例如,在诊断特殊 token 格式时):

zscaler-mcp --no-entitlement-filter
# or
export ZSCALER_MCP_DISABLE_ENTITLEMENT_FILTER=true

只会考虑产品权限,不考虑角色名称。服务会将各项操作的权限检查交由实时 API 执行;权限筛选器只确保我们不会为客户端完全无权访问的产品展示工具。

危险操作的加密确认

删除操作不会在首次调用时执行。具体处理方式取决于客户端:

  • 支持 MCP elicitation 的客户端会显示一个交互式提示词,列出资源名称,并由人工作答。AI Agent 不会处理此批准。
  • 其他所有客户端都会收到一个加密确认令牌(HMAC-SHA256),必须将其传回才能继续操作。该令牌绑定到特定操作及其参数,只能使用一次,并会在 5 分钟后过期,因此无法伪造、重放,也不能用于其他资源。

无法关闭此机制。 删除操作对正在使用的租户不可逆,因此服务没有提供可跳过此门槛的标志或环境变量。如果你不希望 Agent 删除任何内容,请勿将删除工具加入允许列表:写入工具默认关闭,且 --write-tools 需要明确指定模式(请参阅写入模式)。

网络级控制(仅 HTTP)

接下来的四个小节——TLS、源 IP 允许列表、主机标头验证和 .env 明文密钥扫描器——仅适用于 HTTP 传输方式(sse、streamable-http)。它们用于控制谁能通过网络访问服务。这些控制与上文安全层中列出的工具级控制相互独立(只读模式、写入允许列表、工具集、权限筛选器、HMAC 确认);后者适用于所有传输方式,包括 stdio。

相应的 MCP 客户端身份验证(Bearer / Basic / OAuth 2.1)是第五个网络级安全层,详见下文的 MCP 客户端身份验证一节。

HTTPS/TLS 支持

默认情况下,非 localhost 部署必须使用 HTTPS。如果未配置 TLS 证书,服务器将拒绝在非 localhost 接口上启动,除非你显式设置 ZSCALER_MCP_ALLOW_HTTP=true。

使用 HTTP 传输方式(sse 或 streamable-http)运行时,请提供 TLS 证书:

ZSCALER_MCP_TLS_CERTFILE=/path/to/cert.pem
ZSCALER_MCP_TLS_KEYFILE=/path/to/key.pem

# Optional: private key password and CA bundle
ZSCALER_MCP_TLS_KEYFILE_PASSWORD=your-key-password
ZSCALER_MCP_TLS_CA_CERTS=/path/to/ca-bundle.pem

配置 TLS 后,服务器会自动以 HTTPS 启动。这适用于公有(由 CA 签名)和私有(自签名)证书。可生成自签名证书用于测试:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes \
  -subj "/CN=localhost"
源 IP 访问控制

你可以使用 ZSCALER_MCP_ALLOWED_SOURCE_IPS 限制允许连接的客户端 IP。未设置时(默认情况),源 IP 过滤处于禁用状态,并交由上游控制措施(防火墙规则、AWS Security Groups 等)处理。

# Allow only specific IPs/subnets
ZSCALER_MCP_ALLOWED_SOURCE_IPS=10.0.0.0/8,172.16.0.5

# Allow all (effectively disable — same as not setting the variable)
ZSCALER_MCP_ALLOWED_SOURCE_IPS=0.0.0.0/0

支持单个 IPv4/IPv6 地址、CIDR 表示法和通配符 0.0.0.0/0。健康检查端点(/health、/healthz、/ready)不受限制,以确保负载均衡器探测正常运行。不允许的 IP 发出的请求将收到 403 Forbidden。

.env 文件安全警告

使用 HTTP 传输方式启动时,服务器会自动扫描工作目录中的任何 .env 文件,查找明文机密信息(值中包含 SECRET、PASSWORD、KEY 或 TOKEN)。如果检测到此类信息,服务器会记录安全警告,建议改用机密管理器或环境变量。

安全态势横幅

启动时,服务器会记录一个汇总的安全态势横幅,概述当前启用的安全配置,包括传输模式、主机验证状态、身份验证模式、TLS 状态以及任何活动警告。这样可以轻松快速地核查安全状态。

关键安全原则:

  • 不存在“启用所有写入工具”的后门——允许列表是强制要求
  • AI Agent 必须在执行任何写入操作(destructiveHint)前请求许可
  • 每项破坏性操作都必须通过 AI Agent 的权限框架获得用户明确批准
  • 破坏性操作的确认信息会以加密方式绑定,防止通过提示词注入绕过
最佳实践
  • 默认只读:安全操作无需配置,始终可使用只读工具
  • 强制允许列表:启用写入模式时,始终提供明确的 --write-tools 允许列表
  • 开发/测试:使用范围较窄的允许列表(例如,--write-tools "zpa_create_application_segment")
  • 生产环境/Agent:对于执行自主操作的 AI Agent,保持服务器处于只读模式(默认设置)
  • CI/CD:除非同时设置 ZSCALER_MCP_WRITE_TOOLS 允许列表,否则绝不设置 ZSCALER_MCP_WRITE_ENABLED=true
  • 最小权限:针对你的使用场景,使用范围尽可能窄的允许列表模式
  • 通配符用法:使用通配符进行服务级控制(例如,zpa_create_*)或操作级控制(例如,*_create_*)
  • 审计审查:定期审查允许列表中的写入工具,并移除不必要的工具
  • 明确的提示词:借助 402 个工具和延迟加载机制,AI Agent 会根据相关性将提示词与工具匹配。使用特定服务的提示词(例如,“列出 ZPA 网段”,而不是*“显示我的网段”*),以便准确选择工具

🔐 MCP 客户端身份验证

📖 完整文档:身份验证与部署指南

通过 HTTP(sse 或 streamable-http 传输方式)运行 MCP 服务时,你可以启用身份验证,以控制谁可以连接到服务器。这与 Zscaler API 凭据身份验证相互独立;后者控制服务器如何向 Zscaler API 进行身份验证。

对于 HTTP 传输方式,当存在与身份验证相关的环境变量时,服务器会自动检测并启用身份验证。对于 stdio 传输方式,身份验证不适用(操作系统的进程隔离可提供安全保障)。

认证模式

服务器支持四种认证模式,通过环境变量进行配置:

模式描述适用场景
api-key简单的共享密钥——客户端发送 Authorization: Bearer <key>快速设置、内部环境、开发
jwt通过 JWKS 使用外部身份提供商——使用公钥在本地验证令牌企业 SSO、多租户部署(Auth0、Okta、Azure AD、Keycloak、AWS Cognito、PingOne、Google)
zscalerZscaler OneAPI 凭据验证——客户端通过 Basic Auth 发送 client_id:client_secret已在使用 Zscaler API 凭据的环境
oidc基于自有 IdP 的 OAuth 2.1——服务器是 OAuth 2.0 受保护资源(RFC 9728),客户端直接向 IdP 进行认证面向人工操作员的浏览器登录、任何 OIDC 提供商
快速开始

在 .env 文件中设置以下环境变量以启用认证:

# Enable authentication
ZSCALER_MCP_AUTH_ENABLED=true
ZSCALER_MCP_AUTH_MODE=api-key

# For api-key mode: set a shared secret
ZSCALER_MCP_AUTH_API_KEY=sk-your-secret-key-here

然后使用 HTTP 传输启动服务器:

zscaler-mcp --transport streamable-http

客户端必须在 Authorization 标头中包含密钥:

Authorization: Bearer sk-your-secret-key-here
工作原理

认证通过 ASGI 中间件实现,该中间件包装 HTTP 传输层:

MCP Client Request
      │
      ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  Auth         │────▶│  MCP          │────▶│  Zscaler     │
│  Middleware   │     │  Server       │     │  APIs        │
└──────────────┘     └──────────────┘     └──────────────┘
 Layer 1: WHO          MCP Protocol        Layer 2: HOW
 can connect?          Processing          server talks
                                           to Zscaler
  • 第 1 层(MCP 客户端认证):由 ZSCALER_MCP_AUTH_* 变量控制——验证传入请求
  • 第 2 层(Zscaler API 认证):由 ZSCALER_CLIENT_ID、ZSCALER_CLIENT_SECRET 等控制——向 Zscaler API 验证服务器身份

这两层完全独立。你可以启用其中一层、两层,或者都不启用。

按模式配置
API 密钥
ZSCALER_MCP_AUTH_ENABLED=true
ZSCALER_MCP_AUTH_MODE=api-key
ZSCALER_MCP_AUTH_API_KEY=sk-your-secret-key-here
JWT(通过 JWKS 使用外部 IdP)
ZSCALER_MCP_AUTH_ENABLED=true
ZSCALER_MCP_AUTH_MODE=jwt
ZSCALER_MCP_AUTH_JWKS_URI=https://your-idp.com/.well-known/jwks.json
ZSCALER_MCP_AUTH_ISSUER=https://your-idp.com
ZSCALER_MCP_AUTH_AUDIENCE=zscaler-mcp-server
ZSCALER_MCP_AUTH_ALGORITHMS=RS256,ES256   # Optional (default: RS256,ES256)
Zscaler OneAPI 凭据
ZSCALER_MCP_AUTH_ENABLED=true
ZSCALER_MCP_AUTH_MODE=zscaler
# Uses ZSCALER_VANITY_DOMAIN and ZSCALER_CLOUD from your existing config

客户端使用 Basic Auth(client_id:client_secret)或自定义标头(X-Zscaler-Client-ID / X-Zscaler-Client-Secret)进行认证。

认证默认行为

对于 HTTP 传输(sse、streamable-http),如果存在与认证相关的环境变量(例如 ZSCALER_MCP_AUTH_JWKS_URI、ZSCALER_MCP_AUTH_API_KEY 或 ZSCALER_VANITY_DOMAIN),服务器会自动检测并启用认证。如果未检测到认证配置,且未显式设置 ZSCALER_MCP_AUTH_ENABLED,服务器会记录安全警告,但仍会在不启用认证的情况下继续运行。

要显式禁用认证,请设置:

ZSCALER_MCP_AUTH_ENABLED=false

认证不适用于 stdio 传输(进程隔离可提供安全保障)。

OAuth 2.1(oidc mode)

oidc mode 会将服务设为 OAuth 2.0 受保护资源(RFC 9728)。服务会发布 /.well-known/oauth-protected-resource,其中注明你的身份提供方;客户端读取该信息后,直接向身份提供方发起 OAuth 流程,并提交获取的令牌。服务唯一要做的就是根据身份提供方发布的公钥验证令牌签名。

整个配置只需通过环境变量完成,无需修改代码或安装额外软件包:

ZSCALER_MCP_AUTH_ENABLED=true
ZSCALER_MCP_AUTH_MODE=oidc

OIDCPROXY_CONFIG_URL=https://your-tenant.auth0.com/.well-known/openid-configuration
OIDCPROXY_CLIENT_ID=<your app registration's client id>
OIDCPROXY_BASE_URL=http://localhost:8000
OIDCPROXY_AUDIENCE=zscaler-mcp-server
# Optional: scopes a token must carry, comma-separated
# OIDCPROXY_REQUIRED_SCOPES=zscaler.read

说明:

  • 无需客户端密钥。 验证签名需要的是身份提供方的公钥,而不是我们的凭据。即使设置了 OIDCPROXY_CLIENT_SECRET,也会被忽略。
  • OIDCPROXY_BASE_URL 是此服务的公开 URL,客户端会将其用作资源标识符;它不是身份提供方的 URL。
  • OIDCPROXY_AUDIENCE 默认值为 OIDCPROXY_CLIENT_ID。Entra ID 会将客户端 ID 放入 aud;Auth0 使用 API 标识符。
  • 服务启动时会从身份提供方的发现文档读取 issuer 和 JWKS URI,因此它们始终与身份提供方实际用于签名的值一致。
  • 服务不提供 /authorize、/token 或 /register;客户端需要使用身份提供方颁发的客户端 ID,且无法自行注册。
  • 适用于所有符合 OIDC 标准的提供方(Auth0、Okta、Microsoft Entra ID、Keycloak、Google、AWS Cognito、PingOne)。
  • 其他所有安全层(TLS、源 IP ACL、主机验证)仍保持启用状态。

身份提供方要求: 注册一个应用,并配置客户端所用的回调 URL(mcp-remote 使用 http://localhost:3334/oauth/callback,且端口固定);还需配置与 OIDCPROXY_AUDIENCE 匹配的 API/资源标识符。

📖 详细设置说明——包括 Microsoft Entra ID 分步指南、特定身份提供方的 JWKS 配置、Docker 部署示例、Claude/Cursor/VS Code 的客户端配置以及故障排除——请参阅身份验证与部署指南。

支持的工具

Zscaler Integrations MCP Server 为所有主要 Zscaler 服务提供 402 个工具:

服务描述工具
ZIAZscaler Internet Access — 安全策略166 个读写工具
ZPAZscaler Private Access — 应用访问109 个读写工具
ZDXZscaler Digital Experience — 监控与分析31 个读写工具
ZCellZscaler Cellular — SIM 清单、使用情况分析与异常策略20 个只读工具
ZMSZscaler Microsegmentation — Agent、资源、策略20 个只读工具
ZTWZscaler Workload Segmentation19 个读写工具
Z-InsightsZ-Insights 分析 — Web 流量、网络安全事件、影子 IT16 个只读工具
ZIdentityZIdentity — 身份与访问管理10 个只读工具
EASM外部攻击面管理7 个只读工具
ZCCZscaler Client Connector — 设备管理4 个只读工具

📖 查看完整工具参考 →

注意: 所有写入操作都需要 --enable-write-tools 标志和明确指定的 --write-tools 允许列表。详情请参阅安全与权限部分。

安装与设置

先决条件
  • Python 3.11 或更高版本
  • uv 或 pip
  • Zscaler API 凭据(见下文)
环境配置

复制示例环境文件并配置凭据:

cp .env.example .env

然后编辑 .env,填入 Zscaler API 凭据:

必需配置(OneAPI):

  • ZSCALER_CLIENT_ID:Zscaler OAuth 客户端 ID
  • ZSCALER_CLIENT_SECRET:Zscaler OAuth 客户端密钥
  • ZSCALER_CUSTOMER_ID:Zscaler 客户 ID
  • ZSCALER_VANITY_DOMAIN:Zscaler 专属域名

可选配置:

  • ZSCALER_CLOUD:(可选)Zscaler 云环境(例如,beta)——仅与 Beta 租户交互时必需。
  • ZSCALER_PRIVATE_KEY:(可选)采用 PEM 编码的私钥,用于基于 JWT 的 OneAPI 身份验证,可替代 ZSCALER_CLIENT_SECRET。
  • ZSCALER_MCP_SERVICES:要启用的服务列表,以逗号分隔(默认:所有服务)
  • ZSCALER_MCP_TRANSPORT:传输方式——stdio、sse 或 streamable-http(默认:stdio)
  • ZSCALER_MCP_DEBUG:启用调试日志——true 或 false(默认:false)
  • ZSCALER_MCP_HOST:HTTP 传输使用的主机(默认:127.0.0.1)
  • ZSCALER_MCP_PORT:HTTP 传输使用的端口(默认:8000)

也可以将这些配置设为环境变量,而不是使用 .env 文件。

重要提示:请确保 API 客户端拥有使用所需服务的必要权限。之后也可以随时在 Zscaler 控制台中更新权限。

安装
使用 VS Code 安装(快速设置)

VS Code 安装

注意:这会打开 VS Code,并提示你配置 MCP 服务。你需要将占位值(<YOUR_CLIENT_ID> 等)替换为实际的 Zscaler 凭据。

使用 uv 安装(推荐)
uv tool install zscaler-mcp
使用 uv 从源代码安装(开发)
uv pip install -e .

**远程部署:**在 EC2/VM 上运行时,请先激活项目虚拟环境:source .venv/bin/activate。请参阅远程 MCP 部署。

使用 pip 从源代码安装
pip install -e .
使用 make 安装(便捷方式)
make install-dev

提示

如果找不到 zscaler-mcp-server,请更新 shell PATH。

有关通过代码编辑器/助手安装的信息,请参阅下文的将 MCP 服务与 Agent 配合使用部分。

使用方法

说明

默认安全模式:以下所有示例默认以只读模式运行(仅执行 list_* 和 get_* 操作)。要启用写入操作(create_*、update_*、delete_*),请在任一命令中添加 --enable-write-tools 标志,或在环境中设置 ZSCALER_MCP_WRITE_ENABLED=true。

命令行

使用默认设置运行服务(stdio 传输、只读模式):

zscaler-mcp

启用写入操作运行服务:

zscaler-mcp --enable-write-tools

使用 SSE 传输运行:

zscaler-mcp --transport sse

使用 streamable-http 传输运行:

zscaler-mcp --transport streamable-http

使用 streamable-http 传输并指定自定义端口运行:

zscaler-mcp --transport streamable-http --host 0.0.0.0 --port 8080
服务配置

Zscaler Integrations MCP Server 支持多种方式指定要启用的服务:

1. 命令行参数(优先级最高)

使用逗号分隔的列表指定服务:

# Enable specific services
zscaler-mcp --services zia,zpa,zdx

# Enable only one service
zscaler-mcp --services zia
2. 环境变量(回退方式)

设置 ZSCALER_MCP_SERVICES 环境变量:

# Export environment variable
export ZSCALER_MCP_SERVICES=zia,zpa,zdx
zscaler-mcp

# Or set inline
ZSCALER_MCP_SERVICES=zia,zpa,zdx zscaler-mcp
3. 默认行为(所有服务)

如果未通过命令行或环境变量指定服务,则默认启用所有可用服务。

服务优先级顺序:

  1. 命令行 --services 参数(优先级最高)
  2. ZSCALER_MCP_SERVICES 环境变量(备用)
  3. 所有服务(未指定时的默认值)
排除服务和工具

如果希望保留大部分工具,同时排除少数工具,请使用 --disabled-tools 或 --disabled-services,而不是逐一列出要包含的工具。

这两个标志都支持通过 fnmatch 模式使用通配符。

# Exclude a single tool
zscaler-mcp --disabled-tools zia_list_devices

# Exclude all tools from a service prefix
zscaler-mcp --disabled-tools "zcc_*"

# Exclude multiple patterns
zscaler-mcp --disabled-tools "zcc_*,zdx_list_devices"

# Exclude entire services
zscaler-mcp --disabled-services zcc,zdx

# Combine: keep all services but exclude specific tools
zscaler-mcp --disabled-tools "zia_list_devices,zdx_*_analysis"

环境变量:

export ZSCALER_MCP_DISABLED_TOOLS="zia_list_devices,zdx_*"
export ZSCALER_MCP_DISABLED_SERVICES="zcc"

优先级: --disabled-tools 的优先级高于 --tools(包含列表)。同时匹配包含列表和排除列表的工具将被排除。

其他命令行选项
# Enable write operations (create, update, delete)
zscaler-mcp --enable-write-tools

# Enable debug logging
zscaler-mcp --debug

# Combine multiple options
zscaler-mcp --services zia,zpa --enable-write-tools --debug

查看所有可用选项:

zscaler-mcp --help

可用的命令行标志:

  • --transport:传输协议(stdio、sse、streamable-http)
  • --services:要启用的服务,以逗号分隔
  • --disabled-services:要排除的服务,以逗号分隔(例如:zcc,zdx)
  • --tools:要启用的特定工具,以逗号分隔
  • --disabled-tools:要排除的工具,以逗号分隔,支持通配符(例如:zcc_*,zdx_list_devices)
  • --toolsets:要启用的工具集 ID,以逗号分隔(例如:zia_url_filtering,zpa_app_segments)。特殊值:default(精心挑选的默认启用子集)、all(所有工具集)。未指定时,将加载所有已启用服务对应的工具集。参见 docs/guides/toolsets.md。
  • --no-entitlement-filter:跳过 OneAPI 权限过滤器,该过滤器会将工具集限制为已配置的 ZSCALER_CLIENT_ID 有权使用的产品。仅用于紧急情况的覆盖选项——默认情况下,此过滤器不会导致致命错误。
  • --enable-write-tools:启用写入操作(出于安全考虑,默认禁用)
  • --write-tools:写入工具模式的强制允许列表(例如:"zpa_create_*,zpa_delete_*")
  • --log-tool-calls:启用逐工具调用的审计日志记录(工具名称、已脱敏参数、耗时、结果摘要)
  • --debug:启用调试日志
  • --host:HTTP 传输的主机(默认:127.0.0.1)
  • --port:HTTP 传输的端口(默认:8000)
  • --user-agent-comment:追加到 User-Agent 标头的文本
  • --generate-auth-token:生成客户端身份验证令牌代码片段并退出
  • --list-tools:列出所有可用工具并退出
  • --version:显示服务版本并退出
支持的 Agent

Zscaler API 凭据与身份验证

Zscaler Integrations MCP Server 仅使用 OneAPI 身份验证。一组凭据即可让服务通过身份验证,访问所有 Zscaler 产品(ZIA、ZPA、ZCC、ZDX、Zscaler Cellular、ZTW、ZIdentity、ZMS、Z-Insights、EASM)。

Zscaler Cellular(ZCell) 需要一个额外的凭据——通过 ZCELL_CUSTOMER_ID 提供 Zscaler Cellular 客户 ID。该 ID 与 ZSCALER_CUSTOMER_ID(用于 ZPA)不同。请参阅下方的环境变量表。

OneAPI 身份验证
前提条件
  1. 在 ZIdentity platform 中创建 API 客户端。
  2. 获取 clientId、clientSecret(或用于 JWT 的 privateKey)、customerId 和 vanityDomain。
  3. 了解更多:了解 OneAPI。
快速设置

在项目根目录(或启动 MCP 服务的位置)创建 .env 文件:

# OneAPI credentials (required)
ZSCALER_CLIENT_ID=your_client_id
ZSCALER_CLIENT_SECRET=your_client_secret
ZSCALER_CUSTOMER_ID=your_customer_id
ZSCALER_VANITY_DOMAIN=your_vanity_domain

# Required only for Zscaler Cellular (ZCell) tools
ZCELL_CUSTOMER_ID=your_zscaler_cellular_customer_id

# Optional: only required when targeting the Beta tenant
ZSCALER_CLOUD=beta

⚠️ 安全提示:不要将 .env 提交到源代码管理中。请将其添加到 .gitignore。

OneAPI 环境变量
环境变量必填描述
ZSCALER_CLIENT_ID是ZIdentity 控制台中的 OneAPI 客户端 ID
ZSCALER_CLIENT_SECRET是(或 ZSCALER_PRIVATE_KEY)OneAPI 客户端密钥
ZSCALER_CUSTOMER_ID是(用于 ZPA 工具)Zscaler 客户/租户 ID
ZCELL_CUSTOMER_ID是(用于 Zscaler Cellular 工具)Zscaler Cellular 客户 ID(不同于 ZSCALER_CUSTOMER_ID;也可作为 zcellCustomerId 配置键使用)
ZSCALER_VANITY_DOMAIN是组织的自定义域名(例如 acme)
ZSCALER_CLOUD否云环境覆盖值(例如 beta、zscalertwo);生产环境请省略
ZSCALER_PRIVATE_KEY否PEM 编码的私钥,用于 JWT 身份验证(替代 ZSCALER_CLIENT_SECRET)
验证

在填好 .env 后,启动服务:

zscaler-mcp

如果凭据有效,服务会正常启动。Zscaler SDK 客户端会在首次调用工具时延迟创建,因此缺失或轮换中的凭据会在调用时显示清晰的错误消息,而不会阻止服务启动。


身份验证故障排查
症状可能原因解决方法
Zscaler SDK failed to initialize due to missing OneAPI credentials: [...]ZSCALER_CLIENT_ID、ZSCALER_VANITY_DOMAIN 中有一项或多项未设置或为空;用于 ZPA 时,ZSCALER_CUSTOMER_ID 也可能未设置或为空。在 .env 或 shell 中设置列出的环境变量。
You must provide either ZSCALER_CLIENT_SECRET or ZSCALER_PRIVATE_KEY for the OneAPI client.两种身份验证凭据都未提供。设置 ZSCALER_CLIENT_SECRET 或 ZSCALER_PRIVATE_KEY。
调用工具时,Zscaler API 返回 401/403API 客户端缺少该产品所需的范围,或凭据已被撤销。在 ZIdentity 控制台中检查 OneAPI 客户端的权限;必要时轮换凭据。
MCP 服务配置

以下环境变量用于控制 MCP 服务行为(而非身份验证):

环境变量默认值说明
ZSCALER_MCP_TRANSPORTstdio使用的传输协议(stdio、sse 或 streamable-http)
ZSCALER_MCP_SERVICES""要启用的服务列表,以逗号分隔(空值 = 所有服务)。支持的值:zcc、zdx、zia、zid、zpa、ztw
ZSCALER_MCP_TOOLS""要启用的特定工具列表,以逗号分隔(空值 = 所有工具)
ZSCALER_MCP_DISABLED_SERVICES""要排除的服务列表,以逗号分隔(例如,zcc,zdx)。优先级高于 ZSCALER_MCP_SERVICES。
ZSCALER_MCP_DISABLED_TOOLS""要排除的工具列表,以逗号分隔。支持通配符(例如,zcc_*,zia_list_devices)。优先级高于 ZSCALER_MCP_TOOLS。
ZSCALER_MCP_WRITE_ENABLEDfalse启用写入操作(true/false)。设为 false 时,仅提供只读工具。设为 true 或使用 --enable-write-tools 标志可解锁写入模式。
ZSCALER_MCP_WRITE_TOOLS""必需的可用写入工具允许列表(支持 zpa_* 等通配符)。需要设置 ZSCALER_MCP_WRITE_ENABLED=true。启用写入模式时若此项为空,则不会注册任何写入工具。
ZSCALER_MCP_DEBUGfalse启用调试日志(true/false)
ZSCALER_MCP_HOST127.0.0.1HTTP 传输要绑定的主机
ZSCALER_MCP_PORT8000HTTP 传输要监听的端口
ZSCALER_MCP_DISABLE_HOST_VALIDATIONfalse在 EC2/公网 IP 上公开服务时禁用 Host 标头验证(true/false)。也可使用 --host 0.0.0.0,该选项会自动禁用验证。
ZSCALER_MCP_ALLOWED_HOSTS""远程部署允许的 Host 值列表,以逗号分隔(例如,34.201.19.115:*,localhost:*)。生产环境中建议使用此选项,而非禁用验证。
ZSCALER_MCP_TLS_CERTFILE""HTTPS 使用的 TLS 证书文件路径(PEM 格式)。
ZSCALER_MCP_TLS_KEYFILE""HTTPS 使用的 TLS 私钥文件路径(PEM 格式)。
ZSCALER_MCP_TLS_KEYFILE_PASSWORD""加密 TLS 私钥的密码(如适用)。
ZSCALER_MCP_TLS_CA_CERTS""双向 TLS 或自定义 CA 链使用的 CA 证书包路径。
ZSCALER_MCP_ALLOW_HTTPfalse允许在非 localhost 接口上使用明文 HTTP。默认情况下,远程部署必须使用 HTTPS。仅当 TLS 在上游终止时(反向代理、ZPA、VPN)才设为 true。
ZSCALER_MCP_ALLOWED_SOURCE_IPS""允许的客户端 IP/CIDR 列表,以逗号分隔(例如,10.0.0.0/8,172.16.0.5)。未设置时禁用源 IP 过滤(交由防火墙/安全组处理)。设为 0.0.0.0/0 可允许所有来源。
ZSCALER_MCP_CONFIRMATION_TTL300HMAC 回退令牌的有效期,单位为秒。不适用于具有 elicitation 能力的客户端使用的密封 requestState(SDK 信封 TTL,默认 600s)。没有任何变量可以跳过确认本身。
ZSCALER_MCP_REQUEST_STATE_KEYS(未设置)SEP-2322 requestState 的共享密钥环。格式为 JSON 数组或逗号分隔列表;每个密钥长度须 ≥32 字节(python -c "import secrets; print(secrets.token_hex(32))")。启用写入工具的多副本 HTTP 部署必需——未设置时使用进程级密钥,因此某个副本签发的确认无法由另一个副本验证。第一个密钥用于密封,所有密钥均可用于解封(按 [old,new] → [new,old] → [new] 的顺序轮换)。
ZSCALER_MCP_DISABLE_OUTPUT_SANITIZATIONfalse禁用纵深防御输出清理(剥除 BiDi / 零宽字符 / HTML / Markdown / 代码围栏)。默认启用清理;仅在诊断时设置此项——禁用后会移除一层提示词注入防御。
ZSCALER_MCP_USER_AGENT_COMMENT""要包含在 User-Agent 注释部分的附加信息
User-Agent 标头

MCP 服务会在所有发往 Zscaler 服务的 API 请求中自动添加自定义 User-Agent 标头。格式如下:

User-Agent: zscaler-mcp-server/<version> python/<python_version> <os>/<architecture>

示例:

User-Agent: zscaler-mcp-server/0.3.1 python/3.11.8 darwin/arm64

添加自定义注释:

你可以使用 ZSCALER_MCP_USER_AGENT_COMMENT 环境变量或 --user-agent-comment CLI 标志,附加其他信息(例如 AI Agent 详细信息):

# Via environment variable
export ZSCALER_MCP_USER_AGENT_COMMENT="Claude Desktop 1.2024.10.23"

# Via CLI flag
zscaler-mcp --user-agent-comment "Claude Desktop 1.2024.10.23"

生成的内容如下:

User-Agent: zscaler-mcp-server/0.3.1 python/3.11.8 darwin/arm64 Claude Desktop 1.2024.10.23

User-Agent 可帮助 Zscaler 识别来自 MCP 服务的 API 流量,并可用于支持、分析和调试。

作为库使用

你可以在自己的应用程序中将 Zscaler Integrations MCP Server 用作 Python 库:

from zscaler_mcp.server import ZscalerMCPServer

# Create server with read-only mode (default - safe)
server = ZscalerMCPServer(
    debug=True,  # Optional, enable debug logging
    enabled_services={"zia", "zpa", "zdx"},  # Optional, defaults to all services
    enabled_tools={"zia_list_rule_labels", "zpa_list_application_segments"},  # Optional, defaults to all tools
    disabled_services={"zcc"},  # Optional, exclude entire services
    disabled_tools={"zcc_*", "zdx_list_devices"},  # Optional, exclude tools by name or wildcard
    user_agent_comment="My Custom App",  # Optional, additional User-Agent info
    enable_write_tools=False  # Optional, defaults to False (read-only mode)
)

# Run with stdio transport (default)
server.run()

# Or run with SSE transport
server.run("sse")

# Or run with streamable-http transport
server.run("streamable-http")

# Or run with streamable-http transport on custom host/port
server.run("streamable-http", host="0.0.0.0", port=8080)

启用写入操作的示例:

from zscaler_mcp.server import ZscalerMCPServer

# Create server with write operations enabled
server = ZscalerMCPServer(
    debug=True,
    enabled_services={"zia", "zpa"},
    enable_write_tools=True  # Enable create/update/delete operations
)

# Run the server
server.run("stdio")

可用服务:zcc、zdx、zcell、zia、zid、zeasm、zins、zms、zpa、ztw

使用环境变量的示例:

from zscaler_mcp.server import ZscalerMCPServer
import os

# Load from environment variables
server = ZscalerMCPServer(
    debug=True,
    enabled_services={"zia", "zpa"}
)

# Run the server
server.run("stdio")
运行示例
# Run with stdio transport
python examples/basic_usage.py

# Run with SSE transport
python examples/sse_usage.py

# Run with streamable-http transport
python examples/streamable_http_usage.py

容器用法

Zscaler Integrations MCP Server 提供预构建的容器镜像,便于部署:

使用预构建镜像(推荐)
# Pull the latest pre-built image
docker pull zscaler/zscaler-mcp-server:latest

# Run with .env file (recommended)
docker run --rm --env-file /path/to/.env zscaler/zscaler-mcp-server:latest

# Run with .env file and SSE transport
docker run --rm -p 8000:8000 --env-file /path/to/.env \
  zscaler/zscaler-mcp-server:latest --transport sse --host 0.0.0.0

# Run with .env file and streamable-http transport
docker run --rm -p 8000:8000 --env-file /path/to/.env \
  zscaler/zscaler-mcp-server:latest --transport streamable-http --host 0.0.0.0

# Run with .env file and custom port
docker run --rm -p 8080:8080 --env-file /path/to/.env \
  zscaler/zscaler-mcp-server:latest --transport streamable-http --host 0.0.0.0 --port 8080

# Run with .env file and specific services
docker run --rm --env-file /path/to/.env \
  zscaler/zscaler-mcp-server:latest --services zia,zpa,zdx

# Use a specific version instead of latest
docker run --rm --env-file /path/to/.env \
  zscaler/zscaler-mcp-server:1.2.3

# Alternative: Individual environment variables
docker run --rm -e ZSCALER_CLIENT_ID=your_client_id -e ZSCALER_CLIENT_SECRET=your_secret \
  -e ZSCALER_CUSTOMER_ID=your_customer_id -e ZSCALER_VANITY_DOMAIN=your_vanity_domain \
  zscaler/zscaler-mcp-server:latest
本地构建(开发)

出于开发或自定义目的,你可以在本地构建镜像:

# Build the Docker image
docker build -t zscaler-mcp-server .

# Run the locally built image
docker run --rm -e ZSCALER_CLIENT_ID=your_client_id -e ZSCALER_CLIENT_SECRET=your_secret \
  -e ZSCALER_CUSTOMER_ID=your_customer_id -e ZSCALER_VANITY_DOMAIN=your_vanity_domain zscaler-mcp-server

注意:在 Docker 中使用 HTTP 传输时,务必设置 --host 0.0.0.0,以允许外部连接到容器。

编辑器/助手集成

你可以将 Zscaler Integrations MCP server 与编辑器或 AI 助手集成。以下是热门 MCP 客户端的配置示例:

使用 uvx(推荐)
{
  "mcpServers": {
    "zscaler-mcp-server": {
      "command": "uvx",
      "args": ["--env-file", "/absolute/path/to/.env", "zscaler-mcp"]
    }
  }
}

**注意:**已发布的 PyPI 包名为 zscaler-mcp(而非 zscaler-mcp-server)。作为 Claude Code 插件集成时,请使用 ${CLAUDE_PLUGIN_ROOT}/.env,而不是绝对路径;对于 Gemini 扩展,请使用 ${extensionPath}${pathSeparator}.env。

其他部署选项

远程 MCP 部署(EC2、VM 等)

在远程主机(EC2、VM、内部服务器)上部署 MCP 服务,让客户端从另一台计算机通过 HTTP 连接时:

服务端设置:

  1. 安装并配置凭据(请参阅安装和环境配置)。

  2. 如果使用可编辑安装(uv pip install -e .),运行前必须激活项目虚拟环境,否则可能会运行较旧或不同的安装版本:

    cd /path/to/zscaler-mcp-server
    source .venv/bin/activate
    zscaler-mcp --transport streamable-http --host 0.0.0.0 --port 8000
    
  3. 使用 --host 0.0.0.0 绑定所有网络接口。这会自动禁用 Host 标头验证(当客户端在 Host 标头中发送服务器的公网 IP 时,这是必需的)。在生产环境中,可考虑在 .env 中使用 ZSCALER_MCP_ALLOWED_HOSTS 限制为已知主机名。

  4. 确保防火墙允许所选端口(例如 8000)的入站流量。

客户端配置(Claude Desktop):

Claude Desktop 需要通过 command 启动进程。对于远程 HTTP,请使用支持自定义身份验证标头的 mcp-remote。

macOS / Linux:

{
  "mcpServers": {
    "zscaler-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "http://YOUR_SERVER_IP:8000/mcp",
        "--allow-http",
        "--header",
        "Authorization: Bearer sk-your-api-key"
      ]
    }
  }
}

Windows:

在 Windows 上,路径中包含空格(例如 C:\Program Files\...)时,直接调用 npx 会失败。请通过 cmd /c 包装调用:

{
  "mcpServers": {
    "zscaler-mcp-server": {
      "command": "cmd",
      "args": [
        "/c",
        "npx",
        "-y",
        "mcp-remote",
        "http://YOUR_SERVER_IP:8000/mcp",
        "--allow-http",
        "--header",
        "Authorization: Bearer sk-your-api-key"
      ]
    }
  }
}

--allow-http:连接到非 localhost 的 HTTP 端点时必须使用。对于非 localhost URL,mcp-remote 默认强制使用 HTTPS。通过 HTTPS 或连接到 localhost 时,请省略此标志。

使用 Zscaler 身份验证模式(基本身份验证):

将 Authorization 标头替换为基本身份验证凭据。其值为 client_id:client_secret 的 Base64 编码:

# Generate the Base64 value
echo -n "your-client-id:your-client-secret" | base64

然后使用 "Authorization: Basic <base64_value>" 替代上面的 Bearer 标头。

**客户端前提条件:**必须安装 Node.js(用于运行 npx)。

📖 远程部署完整详情(虚拟环境用法、421 故障排除、安全性、TLS):远程部署 · 421 错误请求目标 · 故障排除

Azure Container Apps / Virtual Machine / AKS(预览版)

将 Zscaler MCP Server 部署到 Azure,并选择所需的部署目标:

目标描述运行时状态
Container Apps托管式无服务器Docker Hub 镜像GA
Virtual MachineUbuntu 22.04,自行管理Python 库(PyPI)GA
Azure Kubernetes Service (AKS)Kubernetes Deployment + LoadBalancerDocker Hub 镜像预览版
# Interactive guided deployment — no .env file required
cd integrations/azure
python azure_mcp_operations.py deploy

# MCP Server management
python azure_mcp_operations.py status     # check health
python azure_mcp_operations.py logs       # stream logs
python azure_mcp_operations.py ssh        # SSH into VM (VM only)
python azure_mcp_operations.py destroy    # tear down all resources

# Azure AI Foundry Agent (optional — wraps MCP server as an AI agent)
pip install azure-ai-projects azure-identity
python azure_mcp_operations.py agent_create    # create Foundry agent
python azure_mcp_operations.py agent_chat      # interactive CLI chat
python azure_mcp_operations.py agent_status    # show agent info
python azure_mcp_operations.py agent_destroy   # delete agent

脚本会提示你输入:

  • 部署目标:Container Apps、Virtual Machine 或 Azure Kubernetes Service(预览版)
  • 凭据来源:.env 文件路径或手动输入
  • 身份验证模式:OIDC(OAuth 2.1)、JWT、API Key、Zscaler 或 None(AKS 尚不支持 OIDC)
  • Azure 选项:资源组、区域、Key Vault(新建或现有);对于 AKS:集群生命周期(新建或使用现有集群)、节点数量/规格、命名空间

Container Apps 和 VM 会将所有机密存储在 Azure Key Vault 中(强制要求),并自动配置 Claude Desktop / Cursor。AKS 预览版会将凭据作为 Kubernetes 环境变量注入 Deployment;计划集成 Workload Identity Federation 和 Key Vault CSI driver。

Foundry Agent:可选创建一个由 Azure 托管、封装 MCP 服务的 AI Agent。可通过 CLI 聊天(带有加载动画、令牌跟踪和计时)、Azure AI Foundry 门户游乐场、REST API 或 Microsoft 365 Copilot 集成访问该 Agent。

📖 Azure 部署完整指南:integrations/azure/README.md

Google Cloud(Cloud Run / GKE / VM / ADK Agent)

Google Cloud 部署涵盖独立 MCP 服务和由 Gemini 驱动的 ADK Agent。完整的视频演示请见:

Zscaler Integration MCP Server in GCP — 视频演示

两个交互式 Python 脚本可管理所有五种 Google Cloud 部署目标:

脚本部署目标
integrations/google/gcp/gcp_mcp_operations.pyCloud Run、GKE、Compute Engine VM(独立 MCP 服务)
integrations/google/adk/adk_agent_operations.py本地、Cloud Run、Vertex AI Agent Engine、Agentspace(ADK Agent)

独立 MCP 服务 — 自动化部署:

cd integrations/google/gcp
python gcp_mcp_operations.py deploy      # guided deployment (prompts for target)
python gcp_mcp_operations.py status      # check health
python gcp_mcp_operations.py logs        # stream logs
python gcp_mcp_operations.py ssh         # SSH into VM (VM target only)
python gcp_mcp_operations.py destroy     # tear down

脚本会提示选择部署目标、凭据和身份验证模式。它会:

  • 提示输入 GCP 项目/区域(或从 .env 读取)
  • 可选择将凭据存储在 GCP Secret Manager 中
  • 使用 zscaler 身份验证模式将容器部署到 Cloud Run
  • 根据你的 Zscaler OneAPI 凭据生成 Authorization: Basic 标头
  • 自动配置 Claude Desktop(claude_desktop_config.json)和 Cursor(~/.cursor/mcp.json)
  • 写入部署状态文件(.gcp-deploy-state.json),供后续 status / logs / destroy 操作使用

ADK Agent — 交互式部署:

cd integrations/google/adk
python adk_agent_operations.py deploy      # guided deployment (local, Cloud Run, Agent Engine, Agentspace)
python adk_agent_operations.py status
python adk_agent_operations.py logs
python adk_agent_operations.py destroy

手动部署:

# Deploy with credentials as env vars
gcloud run deploy zscaler-mcp-server \
  --image=zscaler/zscaler-mcp-server:latest \
  --set-env-vars="ZSCALER_CLIENT_ID=...,ZSCALER_CLIENT_SECRET=...,ZSCALER_VANITY_DOMAIN=...,ZSCALER_CUSTOMER_ID=...,ZSCALER_CLOUD=production,ZSCALER_MCP_ALLOW_HTTP=true,ZSCALER_MCP_DISABLE_HOST_VALIDATION=true,ZSCALER_MCP_AUTH_ENABLED=true,ZSCALER_MCP_AUTH_MODE=zscaler" \
  --args="--transport,streamable-http,--host,0.0.0.0,--port,8000" \
  --port=8000 --region=us-central1 --allow-unauthenticated

使用 GCP Secret Manager(生产环境推荐):

Docker 镜像内置了 GCP Secret Manager 加载器。将凭据分别存储为独立的密钥(例如 zscaler-client-id、zscaler-client-secret),然后设置一个环境变量即可启用:

gcloud run deploy zscaler-mcp-server \
  --image=zscaler/zscaler-mcp-server:latest \
  --set-env-vars="ZSCALER_MCP_GCP_SECRET_MANAGER=true,GCP_PROJECT_ID=your-project,ZSCALER_MCP_ALLOW_HTTP=true,ZSCALER_MCP_DISABLE_HOST_VALIDATION=true,ZSCALER_MCP_AUTH_ENABLED=true,ZSCALER_MCP_AUTH_MODE=zscaler" \
  --args="--transport,streamable-http,--host,0.0.0.0,--port,8000" \
  --port=8000 --region=us-central1 --allow-unauthenticated

该加载器也适用于 GKE 和 Compute Engine 等可使用 GCP Application Default Credentials 的环境。

📖 完整的 Google Cloud 部署指南(所有五种部署目标、IAM 角色、身份验证模式、企业模式):integrations/google/README.md

📖 Secret Manager 深入指南(GKE 清单、凭据轮换、加载器内部机制):GCP Secret Manager Integration

Kubernetes(Helm Chart)

通过 Helm 将 Zscaler MCP 服务部署到任何 Kubernetes 集群,包括 EKS、GKE、AKS、OpenShift、Rancher、k3s、Talos,或用于本地开发的 kind / minikube。该 chart 与集群供应商无关,且不会调用 aws、az 或 gcloud。如果集群已就绪,且你的运维模式将每个工作负载都视为 Helm 发布版本,请使用此方案;如果你需要从头搭建云基础设施,请使用上文的 Azure / GCP / AWS 部署章节。

# Interactive guided install — same pattern as the Azure / GCP scripts
python integrations/helm-chart/helm_mcp_operations.py deploy

# Lifecycle subcommands
python integrations/helm-chart/helm_mcp_operations.py status      # release + pods + Service + port-forward
python integrations/helm-chart/helm_mcp_operations.py logs        # tail Deployment logs
python integrations/helm-chart/helm_mcp_operations.py configure   # re-write Cursor / Claude configs
python integrations/helm-chart/helm_mcp_operations.py test        # run `helm test` smoke probe
python integrations/helm-chart/helm_mcp_operations.py destroy     # uninstall + optional ns deletion

部署脚本会根据现有的 .env 创建 Kubernetes Secret(无需转换为 values.yaml),运行 helm upgrade --install,并等待部署完成,同时实时显示各 Pod 的状态(检测 ImagePullBackOff / CreateContainerConfigError / CrashLoopBackOff,并提供针对性的恢复建议后退出);如果未配置 Ingress,则会在后台启动 kubectl port-forward,并使用正确的 Authorization: Basic 标头自动配置 Claude Desktop 和 Cursor。

支持五种凭据配置方式(交互式脚本、kubectl create secret --from-env-file、内联 --set、供 GitOps 使用的现有 Secret,以及 External Secrets Operator)。这五种方式最终都遵循相同的 chart 约定——Deployment 使用 envFrom: secretRef:,因此密钥中的所有 ZSCALER_MCP_* / ZSCALER_* 键都会原样传入容器。

完整的 chart 参考(values.yaml 键、Ingress / HTTPRoute / cert-manager / HPA / PDB 开关、ExternalSecret 示例)请参阅 integrations/helm-chart/README.md。

Amazon Bedrock AgentCore

重要

同一个镜像,无需 AWS 分支。 Bedrock AgentCore 过去使用单独构建的镜像。现在不再如此——标准镜像可直接在 AgentCore 上运行,完全通过环境变量进行配置。AgentCore 的 containerConfiguration 仅接受 ECR URI(Docker Hub 不是有效值),且要求 linux/arm64,因此仍需将已发布的多架构镜像复制到 ECR——或者从 AWS Marketplace 商品页面拉取;该页面提供的就是已为你存入 ECR 的同一个镜像。

🚀 通过 AWS Marketplace 快速开始:

通过 AWS Marketplace 商品页面部署 Zscaler Integrations MCP Server 到 Amazon Bedrock AgentCore,是最简单的方式。通过此方式可获得:

  • ✅ 托管在 ECR 中的 linux/arm64 镜像——AgentCore 会验证的两项内容
  • ✅ 内置 AWS Secrets Manager 加载器:设置 ZSCALER_SECRET_NAME,凭证就不会以环境变量的形式出现
  • ✅ 通过 ZSCALER_MCP_TRANSPORT / _HOST / _PORT 控制传输方式,因为 ContainerConfiguration 不支持命令覆盖
  • ✅ 默认只读;只有在允许列表中添加写入工具后,这些工具才会启用
  • ✅ 与其他所有部署方式具有相同的工具清单、工具集和身份验证模式

📚 完整部署指南:

有关详细的部署说明、IAM 配置和故障排除,请参阅完整的 Amazon Bedrock AgentCore 部署指南。

部署指南涵盖:

  • 先决条件和 AWS VPC 要求
  • IAM 角色和信任策略配置
  • 逐步部署说明
  • 环境变量配置
  • 写入模式配置(用于 CREATE/UPDATE/DELETE 操作)
  • 故障排除和验证步骤

🔐 AWS Secrets Manager(内置):

该镜像包含 AWS Secrets Manager 加载器,因此无需在运行时将凭证作为环境变量。将凭证存储为一个 JSON 密钥,并让部署指向该密钥:

aws secretsmanager create-secret \
  --name zscaler/mcp/credentials \
  --secret-string '{"ZSCALER_CLIENT_ID":"...","ZSCALER_CLIENT_SECRET":"...","ZSCALER_VANITY_DOMAIN":"acme","ZSCALER_CUSTOMER_ID":"123456"}'

然后在运行时设置 ZSCALER_SECRET_NAME=zscaler/mcp/credentials——设置该变量本身就是完整的启用操作,无需第二个标志。为执行角色授予 secretsmanager:GetSecretValue 权限(如果密钥使用客户自主管理的密钥,还需授予 kms:Decrypt)。密钥中的值会覆盖容器环境变量,因此轮换密钥优先于任务定义中的过期值;如果读取密钥失败,服务器会在启动时停止,而不会等到之后才显示不透明的 Zscaler API 错误。ECS Fargate、EKS 和 EC2 均可采用相同方式运行。对于 PyPI(非容器)安装,boto3 包含在可选扩展中:pip install 'zscaler-mcp[aws]'。

ZSCALER_MCP_TRUST_PLATFORM_AUTH=true 是 AgentCore 专用的应急选项:它允许 api-key / zscaler 身份验证模式接受未携带凭证的请求,并回退使用容器自身的凭证。只有在经过身份验证的入口之后使用时才安全(AgentCore 的 customJwtAuthorizer 会使用 Authorization 标头传递自身的令牌,因此不会为我们的令牌留下传递空间)。容器可被直接访问时,绝不要设置此选项。

说明

早期版本曾提供单独的 Bedrock 镜像,其中带有 FastAPI 封装层(web_server.py),会绕过 MCP 会话初始化。该封装层现已移除:服务器使用原生的 streamable-http 协议,而使用 2026-07-28 修订版的客户端会发送独立的 POST 请求,无需会话握手。推荐使用 Marketplace 镜像,纯粹是因为它开箱即满足 AgentCore 对 ECR 和 arm64 的要求——而不是因为它运行了不同的代码。

将 MCP 服务与 Agent 配合使用

本节介绍如何将 Zscaler Integrations MCP 服务配置为与常用 AI Agent 配合使用。开始前,请确保已完成以下事项:

  1. ✅ 完成安装与设置
  2. ✅ 配置身份验证
  3. ✅ 创建包含凭据的 .env 文件
Claude Desktop

你可以通过以下任一方式在 Claude Desktop 中安装 Zscaler MCP 服务:

Windows 用户:一键扩展包含 macOS/Linux 二进制文件,无法在 Windows 上运行。请改用选项 2:手动配置——该方式使用 uvx 在运行时安装适用于相应平台的软件包。详情请参阅故障排查:Windows。

选项 1:安装为扩展(macOS / Linux)

最简单的入门方式——只需一键安装,即可在 Claude Desktop 中使用友好的用户界面,且门槛低。

**先决条件:**必须安装 uv(提供 uvx)。该扩展使用 uvx 在运行时从 PyPI 运行服务——无需手动执行 pip install zscaler-mcp。安装 uv:curl -LsSf https://astral.sh/uv/install.sh | sh

  1. 打开 Claude Desktop
  2. 前往设置 → 扩展 → 浏览扩展
  3. 在搜索框中输入 zscaler
  4. 在搜索结果中选择 Zscaler MCP Server
  5. 点击安装或添加
  6. 按提示配置 .env 文件路径(或在安装后编辑配置)
  7. 完全重启 Claude Desktop(退出后重新打开)
  8. 向 Claude 询问“有哪些 Zscaler 工具可用?”,以验证是否配置成功
选项 2:手动配置(所有平台,Windows 上推荐)
  1. 打开 Claude Desktop
  2. 前往设置 → 开发者 → 编辑配置
  3. 添加以下配置:
{
  "mcpServers": {
    "zscaler-mcp-server": {
      "command": "uvx",
      "args": ["--env-file", "/absolute/path/to/your/.env", "zscaler-mcp"]
    }
  }
}

重要:将 /absolute/path/to/your/.env 替换为 .env 文件的绝对路径。在 Windows 上,使用类似 C:\Users\You\.env 的路径。相对路径不可用。

  1. 保存配置文件
  2. 完全重启 Claude Desktop(退出后重新打开)
  3. 向 Claude 询问“有哪些 Zscaler 工具可用?”,以验证是否配置成功

故障排查:

  • “未找到 MCP 服务”:确认 .env 文件路径是正确的绝对路径
  • “身份验证失败”:检查 .env 文件是否包含有效凭据
  • 未显示工具:检查 Claude Desktop 日志(帮助 > 查看日志)中是否有错误
  • 未找到扩展:确保在“桌面扩展”选项卡中搜索,而不是在“Web”选项卡中搜索
  • Windows:ModuleNotFoundError(rpds、pydantic_core 等):该扩展包含 macOS/Linux 二进制文件。请改用选项 2(手动配置)。请参阅故障排查指南。
Cursor
  1. 打开 Cursor
  2. 前往设置 → Cursor 设置 → 工具与 MCP → 新建 MCP 服务
  3. 配置将保存到 ~/.cursor/mcp.json。添加以下配置:
{
  "mcpServers": {
    "zscaler-mcp-server": {
      "command": "uvx",
      "args": ["--env-file", "/absolute/path/to/your/.env", "zscaler-mcp"]
    }
  }
}

替代方案:也可以使用 Docker 代替 uvx:

{
  "mcpServers": {
    "zscaler-mcp-server": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--env-file",
        "/absolute/path/to/your/.env",
        "zscaler/zscaler-mcp-server:latest"
      ]
    }
  }
}
  1. 保存配置文件
  2. 完全重启 Cursor(退出后重新打开)
  3. 询问“列出我的 ZIA 规则标签”,以验证是否配置成功

故障排查:

  • 检查 Cursor 的 MCP 日志(查看 > 输出 > MCP)中是否有连接错误
  • 确认 .env 文件路径是绝对路径,且凭据正确
  • 配置文件位于 ~/.cursor/mcp.json(Windows 上为 %USERPROFILE%\.cursor\mcp.json)

平台集成

Zscaler MCP Server 内置了与多个 AI 开发平台的集成。每项集成都包含特定于平台的配置文件、19 个引导式技能和设置说明。

平台类型快速入门详情
Claude Code插件claude plugin install zscalerintegrations/claude-code-plugin/
Cursor插件设置 → 工具与 MCP → 新建 MCP 服务integrations/cursor-plugin/
Gemini CLI扩展注册 gemini-extension.jsonintegrations/gemini-extension/
Kiro IDEPowerPowers 面板 → 添加自定义 Powerintegrations/kiro/
Azure(Container Apps / VM)部署 + Agentpython azure_mcp_operations.py deployintegrations/azure/
Google Cloud(Cloud Run / GKE / VM)部署python gcp_mcp_operations.py deployintegrations/google/
Google ADK AgentAgentpython adk_agent_operations.py deployintegrations/google/adk/
Kubernetes(Helm Chart)部署python helm_mcp_operations.py deployintegrations/helm-chart/
GitHub MCP Registry注册表mcp-publisher publishintegrations/github/

如需所有集成的完整文档,请参阅平台集成指南。

所有 Agent 的常见故障排查

常见问题:

  1. “找不到命令:uvx”

    • 安装 uv:curl -LsSf https://astral.sh/uv/install.sh | sh
    • 或使用 Docker:将 uvx 替换为 docker run --rm --env-file /path/to/.env zscaler/zscaler-mcp-server:latest
  2. “找不到 .env 文件”

    • 使用绝对路径,而不是相对路径
    • 确认指定路径下存在该文件
    • 检查文件权限(应可读取)
  3. “身份验证失败”

    • 确认 .env 中包含所有必需的 OneAPI 环境变量
    • 检查凭据是否正确且未过期
  4. “未显示工具”

    • 某些 Agent 要求你在其界面中启用工具
    • 检查 Agent 日志中是否有连接错误
    • 确认 MCP 服务正在运行(检查 Agent 的 MCP 状态)
  5. “服务连接超时”

    • 确保 MCP 服务能够成功启动
    • 手动测试:uvx --env-file /absolute/path/to/.env zscaler-mcp
    • 如果使用 HTTP 传输方式,请检查端口冲突
  6. Windows:ModuleNotFoundError: No module named 'rpds.rpds'(Claude Desktop 扩展)

    • 该扩展捆绑了 macOS/Linux 二进制文件。请改用 uvx zscaler-mcp 进行手动配置。
    • 请参阅故障排查:Windows。
  7. Windows:'C:\Program' is not recognized(使用 npx 的远程 MCP)

  8. Non-HTTPS URLs are only allowed for localhost(mcp-remote)

  9. self-signed certificate / DEPTH_ZERO_SELF_SIGNED_CERT(使用 TLS 的 mcp-remote)

    • 使用自签名证书时,请在客户端配置中的 MCP 服务条目添加 "env": { "NODE_TLS_REJECT_UNAUTHORIZED": "0" }。
    • 请参阅故障排查:自签名证书。

获取帮助:

  • 查看 Agent 专属日志(通常位于 Help/View 菜单中)
  • 手动测试服务,以区分 Agent 与服务的问题
  • 查看故障排查部分,了解更多详情

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。