
agent-scan v0.6.0
AI代理、MCP服务器和代理技能的安全扫描器。
Snyk Agent Scan
发现并扫描您机器上的代理组件,以查找提示注入
和漏洞(包括代理、MCP 服务器和技能)。
注意:CLI 输出为实验性内容,可能随时更改
Agent Scan v0.5.x(计划弃用)
此 CLI 的原始输出(包括问题代码、字段名称、严重性标签和响应结构)属于实验性内容,可能在不同版本之间随时更改,恕不另行通知。我们不建议构建依赖特定 CLI 输出字段或问题代码的生产工作流。
Agent Scan v0.6 及更高版本
此 CLI 的原始输出(包括风险指标名称、分数、字段名称和响应结构)属于实验性内容,可能在不同版本之间随时更改,恕不另行通知。我们不建议构建依赖特定 CLI 输出字段或风险名称的生产工作流。
如果您是使用 Snyk 大规模管理代理安全风险的企业客户,请注意 CLI 输出可能无法反映发送到 Evo 平台并在其中显示的内容。为企业部署提供支持的底层集成、发现和风险评估功能是稳定且受支持的——任何更改都将按照 Snyk 标准产品实践进行通知。请联系您的客户团队获取部署指导。
新 阅读我们与 Agent Scan 0.4 一起发布的关于代理技能生态系统新兴威胁的技术报告,该版本增加了对代理技能扫描的支持。
Agent Scan v0.5.x 输出
[!WARNING] Agent Scan v0.5.x 使用 issue-code 输出。此 CLI 产品线计划弃用。
Agent Scan v0.6 及更高版本输出
Agent Scan 帮助您发现所有已安装的代理组件(harnesses、MCP 服务器和技能),并扫描它们以识别常见威胁,如提示注入、敏感数据处理或隐藏在自然语言中的恶意软件载荷。使用 --no-skills 可忽略对技能的分析。
安全警告
⚠️ 重要提示:扫描 MCP 配置将执行其中定义的命令。
当 Agent Scan 扫描 MCP 配置文件时,它会通过执行配置中指定的命令和参数来启动 stdio MCP 服务器。这是检索工具描述并执行安全分析所必需的。
建议:
- 在沙箱中运行扫描(Docker 容器、虚拟机或一次性环境)以评估不受信任或第三方 MCP 配置时
- 仔细查看同意提示,在交互式扫描期间,它会显示将为每个服务器执行的确切命令和参数
- 仅在已验证所有 MCP 服务器命令的受信任环境中使用
--dangerously-run-mcp-servers默认情况下,Agent Scan 在交互式运行期间启动每个 stdio MCP 服务器之前,会要求用户明确同意(y/n)。这使您可以控制系统上执行的内容。
快速开始
选择以下两种方式之一来运行 Agent Scan:
- 使用
uvx运行 Python 包,请按照下面的说明操作。 - 从 GitHub Releases 下载适用于您平台的独立二进制文件。发布版还包含 SBOM、校验和、已签名校验和以及源代码存档。
在使用任一选项之前:
- 在 Snyk 注册,并从 https://app.snyk.io/account 获取 API 令牌(API Token → KEY → 点击显示)。
- 在运行任何扫描之前,将令牌设置为环境变量: ```bash
export SNYK_TOKEN=your-api-token-here
Run with uvx
Have uv installed on your system. Choose the instructions for your CLI version.
Agent Scan v0.5.x
The examples pin v0.5.17 as a concrete v0.5.x release:```bash
Scan the whole machine
Scan a specific MCP configuration
uvx [email protected] ~/.vscode/mcp.json
Scan a single agent skill
uvx [email protected] ~/path/to/my/SKILL.md
Scan all Claude skills
uvx [email protected] ~/.claude/skills
> [!WARNING]
> v0.5.x 使用 issue-code 输出和 `2025-09-02` 分析 API。此 CLI 系列计划弃用。
#### Agent Scan v0.6 及更高版本```bash
# Scan the whole machine
uvx snyk-agent-scan@latest
# Scan a specific MCP configuration
uvx snyk-agent-scan@latest ~/.vscode/mcp.json
# Scan a single agent skill
uvx snyk-agent-scan@latest ~/path/to/my/SKILL.md
# Scan all Claude skills
uvx snyk-agent-scan@latest ~/.claude/skills
v0.6 及更高版本使用基于风险的输出和 2026-07-10 分析 API。
两个版本都会扫描 MCP 服务器、工具、提示词、资源和技能,并自动发现受支持的智能体配置,例如 Claude Code/Desktop、Cursor、Gemini CLI 和 Windsurf。
使用独立二进制文件运行
从最新 GitHub Release下载适用于您的操作系统和架构的二进制文件。发布页面还提供 SBOM(sbom-<version>.json)、校验和文件以及 GitHub 生成的源代码归档。请参阅验证独立二进制文件以验证您的下载。
Agent Scan v0.5.x 运行示例
有关 v0.6 的基于风险的输出,请参阅本 README 顶部的 v0.6 图片。
亮点
- 自动发现 MCP 配置、智能体工具、技能
- 扫描 Claude、Cursor、Windsurf、Gemini CLI、Amp、Amazon Q 及其他智能体。
Agent Scan v0.5.x
Agent Scan v0.6 及更高版本
支持的智能体与能力
Agent Scan 会在智能体的安装路径存在时自动发现智能体及其能力(MCP 服务器或技能)。下表显示了每个智能体在哪些操作系统上会被扫描。
- ✓:该能力至少定义了一个路径。
- ✗:该智能体在该操作系统下列出,但没有该能力的路径。
- —:该智能体不包含在该操作系统中。
- 技能 可以使用
--no-skills忽略技能。
| 智能体 | macOS MCP | macOS 技能 | Linux MCP | Linux 技能 | Windows MCP | Windows 技能 |
|---|---|---|---|---|---|---|
| Windsurf | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Cursor | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| VS Code | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Claude Desktop | ✓ | ✗ | — | — | ✓ | ✗ |
| Claude Code | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gemini CLI | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| OpenClaw | ✗ | ✓ | ✗ | ✓ | ✗ | ✓ |
| Amp | ✗ | ✓ | ✗ | ✓ | ✗ | ✓ |
| Kiro | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| OpenCode | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Antigravity | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Codex | ✓ | ✓ | ✓ | ✓ | — | — |
| Amazon Q | ✓ | ✗ | ✓ | ✗ | ✓ (WSL) | ✗ |
按范围的检测覆盖
上面的矩阵显示了每个智能体在哪些操作系统上被扫描。本矩阵则按配置范围和组件类型(技能与 MCP 服务器)对检测进行细分,并跨操作系统合并显示。“服务器”指 MCP 服务器。
四种范围:
- 系统 — 适用于所有用户的机器级/管理员管理/企业配置(例如
managed-mcp.json、/etc、/Library/Application Support或ProgramData下的文件)。 - 用户 — 用户主目录中的配置(适用于其所有项目)。
- 项目/工作区 — 限定于已打开项目或工作区的配置。
- 扩展/插件 — 捆绑在已安装扩展或插件中的组件。
图例:✓ 已检测 · ✗ 智能体支持该功能,但 Agent Scan 尚不扫描 · N/A 智能体在此范围内没有此类组件。
| 智能体 | 系统 技能 | 系统 服务器 | 用户 技能 | 用户 服务器 | 项目/工作区 技能 | 项目/工作区 服务器 | 扩展/插件 技能 | 扩展/插件 服务器 |
|---|---|---|---|---|---|---|---|---|
| Windsurf | ✓ | N/A | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Cursor | N/A | N/A | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| VS Code | N/A | N/A | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Claude Desktop | N/A | N/A | ✗ | ✓ | N/A | N/A | N/A | ✗ |
| Claude Code | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Gemini CLI | N/A | ✗ | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ |
| OpenClaw | N/A | N/A | ✓ | ✗ | ✓ † | N/A | ✗ | ✗ |
| Amp | N/A | ✗ | ✓ | ✗ | ✗ ‡ | ✗ | ✗ | ✗ |
| Kiro | N/A | N/A | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| OpenCode | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | N/A | N/A |
| Antigravity | N/A | N/A | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Codex | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Amazon Q | N/A | N/A | N/A | ✓ | N/A | ✗ | N/A | N/A |
† OpenClaw 没有已打开项目的枚举:其项目/工作区技能只能在固定的 ~/.openclaw/workspace/skills 路径中找到
‡ Amp 将项目/工作区技能存储在 .agents/skills(以及 .claude/skills 兼容路径)中;目前仅检测用户范围的 ~/.config/agents/skills,因此项目范围的技能受支持但尚未被扫描。
验证独立二进制文件
我们对发布校验和文件使用 GPG 签名,以确保分发完整性和真实性。
分步验证指南
-
下载发布资产:
从 GitHub Releases 页面将适用于您平台的二进制文件(例如
agent-scan-<version>-<os>-<arch>)和已签名的校验和文件(sha256sums.txt.asc)下载到同一目录。 -
验证校验和文件的 GPG 签名:
将 GPG 公钥 下载到同一目录,然后运行: ```bash gpg --import snyk-code-signing-public.pgp gpg --verify sha256sums.txt.asc
在输出中查找一行,显示 gpg: Good signature from "Snyk Limited <[email protected]>"。
- 验证二进制的完整性:
确认签名有效后,检查你下载的二进制文件是否与校验和匹配:
- 在 Linux(或安装了
coreutils的 macOS)上:grep agent-scan-<version>-<os>-<arch> sha256sums.txt.asc | sha256sum -c - - 在 macOS 上(使用默认的
shasum):grep agent-scan-<version>-<os>-<arch> sha256sums.txt.asc | shasum -a 256 -c -
agent-scan-<version>-<os>-<arch>: OK。 - 在 Linux(或安装了
扫描器功能
Agent Scan v0.5.x
Agent Scan 是一款安全扫描工具,既可扫描也可检查你机器上代理组件的供应链。它可以扫描常见的安全漏洞,如提示注入、工具投毒、有害流程或代理技能中的漏洞。
Agent Scan v0.6 及更高版本
Agent Scan 会报告威胁的评分风险指标,例如提示注入、暴露于不受信任或私有数据、破坏性能力以及恶意代理技能。
Agent Scan 有两种主要运行模式,可以联合使用,也可以单独使用:
-
扫描模式:CLI 命令
snyk-agent-scan会扫描当前机器上的代理及代理组件,如技能和 MCP 服务器。扫描完成后,它将输出一份全面的报告供用户查看。 -
后台模式(MDM)。Agent Scan 会在后台按固定时间间隔扫描机器,并将结果报告给 Snyk Evo 实例。安全团队可以使用此模式在中心位置监控全公司的代理供应链。如需设置,请联系我们。
工作原理
扫描
Agent Scan 会搜索本地代理的配置文件,以查找代理、技能和 MCP 服务器。对于 MCP,它会连接到服务器并获取工具描述。
MCP 服务器的交互式同意
⚠️ 安全说明:扫描 MCP 配置会执行其中定义的命令。批准前请务必审查将要执行的内容。
默认情况下,在交互式运行期间,Agent Scan 会在启动每个 stdio MCP 服务器之前提示用户征求同意。该同意流程:
- 显示将要执行的服务器名称、命令和环境变量(已脱敏)
- 允许你逐个批准或拒绝每个服务器
- 防止可能不受信任的服务器在未经你明确许可的情况下运行
- 使用
user_declined错误记录被拒绝的服务器(这些服务器永远不会被启动)
最佳实践:
- 在批准之前仔细审查命令和参数
- 扫描不受信任或第三方 MCP 配置时,请在沙箱(Docker、虚拟机或一次性环境)中运行 Agent Scan
- 拒绝任何包含不熟悉或可疑命令的服务器
对于非交互式环境(例如 CI/CD 流水线),你必须使用 --dangerously-run-mcp-servers 标志来绕过同意提示并自动启动所有服务器。仅在已核实所有 MCP 服务器命令的可信环境中使用此标志。
分析与验证
Agent Scan 通过本地检查和 Agent Scan API 验证发现的组件。它会发送分析所需的组件信息,包括代理应用程序详细信息、MCP 服务器配置和签名、工具名称和描述以及技能内容。配置值和文本中的机密在传输前会被脱敏。
使用 Agent Scan 即表示你同意 Snyk 的 Agent Scan 使用条款。
Agent Scan 不会存储或记录任何使用数据,即你的 MCP 工具调用的内容和结果。
CLI 参数
完整的标志参考位于 docs/cli-reference.md。大多数命令和标志在 v0.5.x 与 v0.6 及更高版本之间共享。
共享命令```text
snyk-agent-scan scan [CONFIG_FILE...] Scan MCP servers and skills (default) snyk-agent-scan inspect [CONFIG_FILE...] Inspect components without analysis snyk-agent-scan help Display help
### 两个版本系列共用的选项
这些选项在 v0.5.x 以及 v0.6 及更高版本中均存在。它们适用于哪些命令,详见完整的 CLI 参考。```text
--storage-file FILE Path to store scan state (default: ~/.mcp-scan)
--analysis-url URL Analysis endpoint; the default API version depends on the CLI version
--verification-H HEADER Additional analysis request header (repeatable)
--mcp-oauth-tokens-path PATH OAuth tokens for protected remote MCP servers
--verbose Enable detailed logging
--print-errors Show error details and tracebacks
--print-full-descriptions Show full entity descriptions without truncation
--json Emit JSON; the response schema depends on the CLI version
--skip-ssl-verify Disable TLS certificate verification
--skills / --no-skills Include skills (default) or skip them
--scan-all-users Scan all readable user home directories
--ci Exit non-zero when findings or operational failures remain
--server-timeout SECONDS MCP connection timeout (default: 10)
--suppress-mcpserver-io BOOL Suppress stdio MCP server stderr
--dangerously-run-mcp-servers Skip consent and start configured stdio MCP servers
--control-server URL Upload destination (repeatable)
--control-server-H HEADER Header for the current control-server block
--control-identifier ID Identifier for the current control-server block
--no-bootstrap Accepted compatibility no-op; does not change behavior
--checks-per-server NUM Accepted compatibility no-op; does not change behavior
Agent Scan v0.5.x
[!WARNING] v0.5.x 已计划弃用。示例将 v0.5.17 固定为具体的 v0.5.x 版本。```text --analysis-url URL Defaults to the 2025-09-02 analysis API --ignore-issues-codes CODES Comma-separated E/W security finding codes and X failure codes to ignore in CI
v0.5.x 会输出 issue-code 发现结果以及以路径为键的 `ScanPathResult` JSON。请参阅 [v0.5.x CLI 参考](https://github.com/snyk/agent-scan/blob/HEAD/docs/cli-reference.md#agent-scan-v05x) 和 [issue-code 参考](https://github.com/snyk/agent-scan/blob/HEAD/docs/issue-codes.md)。
### Agent Scan v0.6 及更高版本```text
--analysis-url URL Defaults to the 2026-07-10 analysis API
--ignore-risks NAMES Comma-separated risk names to omit from output and CI evaluation
--ignore-failure-codes CODES Comma-separated X codes to omit from CI evaluation
--show-full-discovery List every MCP entity and skill file instead of compact scan summaries
v0.6 及更高版本会输出带评分的风险指标和 scan_path_responses JSON。人类可读的扫描输出默认采用紧凑格式;--show-full-discovery 可展开该输出,而不会改变 JSON 或 inspect 输出。参见 v0.6 及更高版本的 CLI 参考、风险参考 和 故障代码参考。
示例```bash
Scan all known MCP configs and agent skills
snyk-agent-scan
Scan a specific config file or skill
snyk-agent-scan ~/custom/config.json snyk-agent-scan ~/path/to/my/SKILL.md
Inspect without security analysis
snyk-agent-scan inspect
CI mode
snyk-agent-scan --ci --dangerously-run-mcp-servers
## 演示
此仓库包含一个存在漏洞的 MCP 服务器,用于演示 Agent Scan 报告的 Model Context Protocol 安全发现。
如何演示 MCP 安全发现?
1. 克隆此仓库
2. 在克隆的 git 仓库根目录中创建一个包含以下内容的 `mcp.json` 配置文件:```jsonc
{
"mcpServers": {
"Demo MCP Server": {
"type": "stdio",
"command": "uv",
"args": ["run", "mcp", "run", "demoserver/server.py"],
},
},
}
-
运行相应的版本:
- Agent Scan v0.5.x(issue-code 输出):
uvx --python 3.13 [email protected] scan mcp.json - Agent Scan v0.6 及更高版本(基于风险的输出):
uvx --python 3.13 snyk-agent-scan@latest scan mcp.json
- Agent Scan v0.5.x(issue-code 输出):
注意:如果你将 mcp.json 配置文件路径放在其他位置,则需要调整 MCP 服务器配置中的 args 路径,使其指向 MCP 服务器(demoserver/server.py),并调整运行 Agent Scan 的 uvx 命令,使其使用正确的 mcp.json 文件路径。
Agent Scan 已停止接受外部贡献
Agent Scan 目前不接受外部贡献。
我们欢迎通过 GitHub issue 提交建议、错误报告或功能请求。
开发环境设置
要从源码运行 Agent Scan,请执行以下步骤:```bash uv run pip install -e . uv run -m src.agent_scan.cli
## 在您自己的项目 / 注册表中包含 Agent Scan 结果
如果您想在您自己的项目或注册表中包含 Agent Scan 结果,请[联系我们](https://evo.ai.snyk.io/#contact-us)。为此目的有指定的 API。将标准 Agent Scan API 用于大规模扫描被视为滥用行为,将导致您的账户被封锁。
## 文档
- [文档索引](https://github.com/snyk/agent-scan/blob/HEAD/docs/README.md) — 两个 CLI 系列的有版本化文档。
- [CLI 参考](https://github.com/snyk/agent-scan/blob/HEAD/docs/cli-reference.md) — v0.5.x 及 v0.6 及更高版本的命令、标志、选项和环境变量。
- [扫描](https://github.com/snyk/agent-scan/blob/HEAD/docs/scanning.md) — v0.5.x 及 v0.6 及更高版本的扫描行为与示例。
- [JSON 输出](https://github.com/snyk/agent-scan/blob/HEAD/docs/json-output.md) — v0.5.x 的路径键控输出与 v0.6 的响应模式。
- [问题代码](https://github.com/snyk/agent-scan/blob/HEAD/docs/issue-codes.md) — v0.5.x `E*` 和 `W*` 安全发现参考。
- [风险参考](https://github.com/snyk/agent-scan/blob/HEAD/docs/risks.md) — v0.6 安全风险指标、评分和证据字段。
- [故障代码](https://github.com/snyk/agent-scan/blob/HEAD/docs/failure-codes.md) — v0.6 运营中的发现、检查和解析失败。
## 延伸阅读
- [MCP-Scan 介绍](https://invariantlabs.ai/blog/introducing-mcp-scan)
- [MCP 安全通知工具投毒攻击](https://invariantlabs.ai/blog/mcp-security-notification-tool-poisoning-attacks)
- [WhatsApp MCP 被利用](https://invariantlabs.ai/blog/whatsapp-mcp-exploited)
- [MCP 提示注入](https://simonwillison.net/2025/Apr/9/mcp-prompt-injection/)
- [毒性流分析](https://invariantlabs.ai/blog/toxic-flow-analysis)
- [技能报告](https://github.com/snyk/agent-scan/blob/HEAD/.github/reports/skills-report.pdf)
## 变更日志
参见 [CHANGELOG.md](https://github.com/snyk/agent-scan/blob/HEAD/CHANGELOG.md)。