mcpField
M
MCP-Scan: An MCP Security Scanner

MCP-Scan: An MCP Security Scanner

本地服务
github.com/invariantlabs-ai开发工具3.2k今天更新

关于 MCP-Scan: An MCP Security Scanner

Snyk Agent Scan 是用于发现并扫描本机 Agent 组件的安全扫描器,面向检查 MCP 配置、Agent 与技能风险的开发者。它会检测提示词注入、恶意内容及敏感数据处理等风险,并自动发现受支持的组件配置。

主要功能

  1. 01自动发现 Agent、MCP 配置和技能
  2. 02扫描 MCP 服务、工具、提示词与资源
  3. 03检测提示词注入及其他安全风险
  4. 04支持按路径扫描配置或技能
  5. 05可通过 uvx 或独立二进制运行

适用场景

  1. 01检查机器上已安装的 Agent 组件
  2. 02审查特定 MCP 配置的安全风险
  3. 03扫描单个 Agent 技能文件
  4. 04评估第三方 MCP 配置前进行检查

MCP 相关

它扫描 MCP 服务及配置,并分析其工具、提示词和资源描述。扫描时可能执行配置中的 stdio 命令或连接远程服务,因此默认交互扫描会征求许可。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"scan": {
"command": "uvx",
"args": [
"snyk-agent-scan@latest"
]
}
}
}
启动命令uvx snyk-agent-scan@latest

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

安装包
pypisnyk-agent-scan@latest

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Snyk Agent Scan

发现并扫描计算机上的 Agent 组件,检测提示词注入
和漏洞(包括 Agent、MCP 服务、技能)。

**注意:**我们不发布 Agent Scan 的 npm 包。请通过 uvx 或独立二进制文件安装。

注意:CLI 输出尚处于实验阶段,可能会发生变化

Agent Scan v0.5.x(计划弃用)

此 CLI 的原始输出(包括问题代码、字段名称、严重性标签和响应结构)尚处于实验阶段,不同版本之间可能会在未通知的情况下发生变化。我们不建议构建依赖特定 CLI 输出字段或问题代码的生产工作流。

Agent Scan v0.6 及更高版本

此 CLI 的原始输出(包括风险指标名称、评分、字段名称和响应结构)尚处于实验阶段,不同版本之间可能会在未通知的情况下发生变化。我们不建议构建依赖特定 CLI 输出字段或风险名称的生产工作流。

如果你是使用 Snyk 大规模管理 Agent 安全风险的企业客户,CLI 输出可能无法反映发送到 Evo 平台并在其中显示的内容。为企业部署提供支持的底层集成、发现和风险评估功能稳定且受支持;任何变更都将按照 Snyk 标准产品惯例通知用户。请联系你的客户团队,获取部署指导。

全新内容 阅读我们与 Agent Scan 0.4 一同发布的关于 Agent 技能生态系统新兴威胁的技术报告。Agent Scan 0.4 新增了对扫描 Agent 技能的支持。

snyk-agent-scan snyk-agent-scan license snyk-agent-scan python version requirements

Agent Scan v0.5.x 输出

警告

Agent Scan v0.5.x 使用问题代码输出。此 CLI 版本计划弃用。

agent-scan-pretty
Agent Scan v0.6 及更高版本输出
Agent Scan v0.6 及更高版本报告,显示已评分的 MCP 服务和技能风险

Agent Scan 可帮助你发现所有已安装的 Agent 组件(运行框架、MCP 服务和技能),并扫描常见威胁,例如提示词注入、敏感数据处理问题,或隐藏在自然语言中的恶意软件载荷。使用 --no-skills 可跳过对技能的分析。

安全警告

⚠️ 重要:扫描 MCP 配置可能会执行命令或发起出站网络请求。

为了获取工具描述,Agent Scan 会执行配置中的命令来启动 stdio MCP 服务,并使用配置的请求头连接已配置的远程 MCP 服务 URL。

建议:

  • 在沙箱中运行扫描(Docker 容器、虚拟机或一次性环境),以评估不可信或第三方 MCP 配置
  • 在交互式扫描期间仔细查看同意提示;其中会显示每个服务的命令或远程 URL
  • 仅在可信环境中使用 --dangerously-run-mcp-servers,并确保已验证所有 MCP 服务命令和远程 URL

远程 MCP 请求会拒绝解析到链路本地地址或已知云元数据端点的目标(169.254.0.0/16、fe80::/10、fd00:ec2::254 和 100.100.100.200)。本地环回地址和私有地址仍可用于本地及内部 MCP 服务。不会跟随 HTTP 重定向。每次请求前都会验证 DNS,但在连接时再次解析仍会留下 DNS 重绑定窗口。

默认情况下,在前台交互式运行期间,Agent Scan 会要求用户明确同意(y/n)后,才联系发现的每个 MCP 服务。后台扫描和推送密钥扫描会继续自动检查远程服务,以覆盖整个服务群,但除非设置了 --dangerously-run-mcp-servers,否则不会启动 stdio 服务。

快速开始

选择以下两种方式之一来运行 Agent Scan:

  1. 使用 uvx 运行 Python 包,请按照下方说明操作。
  2. 下载适用于你平台的独立二进制文件,请前往 GitHub Releases。发布内容还包括 SBOM、校验和、已签名的校验和以及源代码归档。

使用任一选项之前:

  1. 在 Snyk 注册,并从 https://app.snyk.io/account 获取 API 令牌(API Token → KEY → 点击显示)。
  2. 将令牌设为环境变量,然后再运行任何扫描:
    export SNYK_TOKEN=your-api-token-here
    
使用 uvx 运行

请确保系统已安装 uv。根据你的 CLI 版本选择相应说明。

Agent Scan v0.5.x

以下示例将版本固定为一个具体的 v0.5.x 版本:v0.5.17。

# Scan the whole machine
uvx [email protected]

# 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

警告

v0.5.x 使用问题代码输出和 2025-09-02 分析 API。计划弃用这一 CLI 系列。

Agent Scan v0.6 及更高版本
# 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 服务、工具、提示词、资源和技能,并自动发现受支持的 Agent 配置,例如 Claude Code/Desktop、Cursor、Gemini CLI 和 Windsurf。

使用独立二进制文件运行

从最新的 GitHub Release下载适用于你的操作系统和架构的二进制文件。发布页面还提供 SBOM(sbom-<version>.json)、校验和文件以及由 GitHub 生成的源代码归档。请参阅验证独立二进制文件来验证下载内容。

亮点

  • 自动发现 MCP 配置、Agent 工具和技能
  • 扫描 Claude、Cursor、GitHub Copilot、Windsurf、Gemini CLI、Amp、Amazon Q 和其他 Agent。
Agent Scan v0.5.x
Agent Scan v0.6 及更高版本

支持的 Agent 和能力

只要 Agent 的安装路径存在,Agent Scan 就会自动发现 Agent 及其能力(MCP 服务或技能)。下表显示了在哪些操作系统上会扫描各 Agent。

  • ✓:该能力至少定义了一个路径。
  • ✗:该 Agent 列在此操作系统下,但该能力没有路径。
  • —:此操作系统不包含该 Agent。
  • 技能:可使用 --no-skills 忽略技能
AgentmacOS MCPmacOS 技能Linux MCPLinux 技能Windows MCPWindows 技能
Windsurf✓✓✓✓✓✓
Cursor✓✓✓✓✓✓
VS Code✓✓✓✓✓✓
GitHub Copilot✓✓✓✓✓✓
Claude Desktop✓✓✓✓✓✗
Claude Code✓✓✓✓✓✓
Gemini CLI✓✓✓✓✓✓
OpenClaw✗✓✗✓✗✓
Amp✗✓✗✓✗✓
Kiro✓✓✓✓✓✓
OpenCode✓✓✓✓✓✓
Antigravity✓✓✓✓✓✓
Codex✓✓✓✓——
Amazon Q✓✗✓✗✓ (WSL)✗
按范围划分的检测覆盖情况

上方矩阵显示了各 Agent 会在哪些操作系统上接受扫描。此矩阵则按配置范围和组件类型(技能与 MCP 服务)细分检测情况,并汇总了所有操作系统的数据。“服务”指 MCP 服务。

四种范围:

  • 系统 — 适用于所有用户的整台机器级别/由管理员管理/企业配置(例如 managed-mcp.json、/etc、/Library/Application Support 或 ProgramData 下的文件)。
  • 用户 — 用户主目录配置(适用于其所有项目)。
  • 项目/工作区 — 适用于已打开项目或工作区的配置。
  • 扩展/插件 — 捆绑在已安装扩展或插件中的组件。

图例:✓ 已检测 · ✗ Agent 支持此项,但 Agent Scan 尚未扫描 · N/A Agent 在此范围内没有此类组件。

Agent系统
技能
系统
服务
用户
技能
用户
服务
项目/WS
技能
项目/WS
服务
扩展/插件
技能
扩展/插件
服务
Windsurf✓N/A✓✓✓✓✓✓
CursorN/AN/A✓✓✓✓✓✓
VS CodeN/AN/A✓✓✓✓✓✓
GitHub Copilot §N/AN/A✓✓✓✓✓✓
Claude DesktopN/AN/A✗✓N/AN/A✓✓
Claude Code✗✓✓✓✓✓✓✓
Gemini CLIN/A✗✓✓✗✗✗✗
OpenClawN/AN/A✓✗✓ †N/A✗✗
AmpN/A✗✓✗✗ ‡✗✗✗
KiroN/AN/A✓✓✓✓✓✓
OpenCode✓✓✓✓✓✓N/AN/A
AntigravityN/AN/A✓✓✓✓✓✓
Codex✓✓✓✓✓✓✓✓
Amazon QN/AN/AN/A✓N/A✗N/AN/A

† OpenClaw 不会枚举已打开的项目:其项目/工作区技能仅会在固定路径 ~/.openclaw/workspace/skills 中查找。

‡ Amp 将项目/工作区技能存放在 .agents/skills(以及 .claude/skills 兼容路径);目前仅检测用户范围 ~/.config/agents/skills,因此支持项目范围技能,但尚未扫描。

§ GitHub Copilot 涵盖 CLI 和桌面应用;它们与 VS Code 中的 Copilot 共用 ~/.copilot 主目录,因此是从该主目录而非 VS Code 安装中检测的。扫描你自己的主目录时,会遵循 COPILOT_HOME 重定位设置。项目范围涵盖相对于仓库的 .mcp.json/.github/mcp.json 文件,以及 .github/skills、.claude/skills 和 .agents/skills 目录。这些目录包括传递给扫描的文件夹,以及 Copilot 在 permissions-config.json(locations)、config.json(trusted_folders/trustedFolders 路径列表)或 session-state/*/workspace.yaml(cwd 和上级 git_root)中记录的现有本地目录及其上级目录。支持 JSONC 配置文件;会话发现仅读取大小受限的工作区元数据,并跳过格式错误或无法读取的文件。插件范围涵盖 ~/.copilot/installed-plugins,包括可重定位其 MCP 配置或声明其他技能根目录的 plugin.json 清单。VS Code 下也列出了 Copilot 的用户级路径,因为 VS Code 会读取相同的文件。

Claude Desktop 插件发现功能在 macOS 和 Linux 上受支持。对于 Claude Code,Guard 的安装和会话启动发现事件还会报告来自 claude-code-sessions/*/*/local_*.json 和 local-agent-mode-sessions/*/*/local_*.json 的已记录连接器,按组织分组,并根据连接器 UUID 使用最新会话元数据去重。仅会发送每个连接器的 UUID、名称、URL、工具定义和指令;其他字段(例如标头)会被丢弃,并会对 URL 查询参数值进行脱敏。在 Windows 上,连接器发现使用 ~/AppData/Roaming/Claude 和同样假设的会话布局;此布局尚未在 Windows 计算机上验证。Windows 插件发现仍不受支持。

验证独立二进制文件

我们使用 GPG 对发布校验和文件进行签名,以确保分发的完整性和真实性。

分步验证指南
  1. 下载发布资源: 从 GitHub Releases 页面下载适用于你平台的二进制文件(例如,agent-scan-<version>-<os>-<arch>)和已签名的校验和文件(sha256sums.txt.asc),并将它们放在同一目录中。

  2. 验证校验和文件的 GPG 签名: 将 GPG 公钥下载到同一目录,然后运行:

    gpg --import snyk-code-signing-public.pgp
    gpg --verify sha256sums.txt.asc
    

    查看输出中是否有一行显示 gpg: Good signature from "Snyk Limited <[email protected]>"。

  3. 验证二进制文件的完整性: 确认签名有效后,检查下载的二进制文件是否与校验和匹配:

    • 在 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。

扫描器功能

Agent Scan v0.5.x

Agent Scan 是一款安全扫描工具,可扫描和检查你机器上 Agent 组件的供应链。它会扫描常见的安全漏洞,例如提示词注入、工具投毒、有害流,以及 Agent 技能中的漏洞。

Agent Scan v0.6 及更高版本

Agent Scan 会报告带有评分的风险指标,涵盖提示词注入、暴露于不可信或私有数据、破坏性能力以及恶意 Agent 技能等威胁。

Agent Scan 以两种主要模式运行,可同时或分别使用:

  1. 扫描模式:CLI 命令 snyk-agent-scan 会扫描当前机器上的 Agent 及其组件,例如技能和 MCP 服务。扫描完成后,会输出一份全面报告供用户查看。

  2. 后台模式(MDM)。Agent Scan 会定期在后台扫描机器,并将结果报告给 Snyk Evo 实例。安全团队可通过此模式在集中位置监控全公司的 Agent 供应链。要进行设置,请联系我们。

工作原理

扫描

Agent Scan 会搜索本地 Agent 的配置文件,以查找 Agent、技能和 MCP 服务。对于 MCP,它会连接到服务并获取工具描述。

MCP 服务的交互式授权

⚠️ 安全提示:扫描 MCP 配置可能会执行其中的 stdio 命令,或向其中的远程 URL 发出请求。批准前,请务必查看将要联系的对象。

默认情况下,在交互式运行期间,Agent Scan 会在联系每个发现的 MCP 服务前征求用户同意。此授权流程会:

  • 显示服务名称及其命令或远程 URL;环境变量和标头会被隐藏
  • 允许你逐一批准或拒绝各个服务
  • 阻止在未经你明确许可的情况下联系可能不可信的服务
  • 以 user_declined 错误记录被拒绝的服务(绝不会联系这些服务)

最佳实践:

  • 批准前,仔细检查命令、参数和远程 URL
  • 扫描不可信或第三方 MCP 配置时,请在沙盒(Docker、VM 或一次性环境)中运行 Agent Scan
  • 拒绝任何包含陌生或可疑命令的服务

非交互式环境(例如后台扫描和 push-key 扫描)会自动检查远程 MCP 服务。除非设置了 --dangerously-run-mcp-servers,否则不会启动 stdio 服务。仅在可信环境中使用此标志,并确保所有 MCP 服务命令和远程 URL 均已验证。

分析与验证

Agent Scan 使用本地检查和 Agent Scan API 验证发现的组件。它会发送分析所需的组件信息,包括 Agent 应用详情、MCP 服务配置和签名、工具名称和描述,以及技能内容。传输前会对配置值和文本中的机密信息进行脱敏。

使用 Agent Scan 即表示你同意 Snyk 的 Agent Scan 使用条款。

Agent Scan 不会存储或记录任何使用数据,即 MCP 工具调用的内容和结果。

CLI 参数

完整的标志参考请见 docs/cli-reference.md。大多数命令和标志在 v0.5.x 与 v0.6 及更高版本中通用。

通用命令
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 参考。

--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
--show-analysis-results           Force synchronous analysis so results display for push-key scans
--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 contact all configured 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

警告

计划弃用 v0.5.x。示例固定使用 v0.5.17,作为一个具体的 v0.5.x 版本。

--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 会输出问题代码发现项和以路径为键的 ScanPathResult JSON。请参阅 v0.5.x CLI 参考 和 问题代码参考。

Agent Scan v0.6 及更高版本
--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 参考、风险参考 和 失败代码参考。

示例
# 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 报告的模型上下文协议安全问题。

如何演示 MCP 安全问题?

  1. 克隆此仓库
  2. 在克隆后的 git 仓库根目录中创建一个 mcp.json 配置文件,内容如下:
{
  "mcpServers": {
    "Demo MCP Server": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "mcp", "run", "demoserver/server.py"],
    },
  },
}
  1. 运行相应版本:

    • Agent Scan v0.5.x(问题代码输出):uvx --python 3.13 [email protected] scan mcp.json
    • Agent Scan v0.6 及更高版本(基于风险的输出):uvx --python 3.13 snyk-agent-scan@latest scan mcp.json

注意:如果你将 mcp.json 配置文件放在其他位置,请调整 MCP 服务配置中的 args 路径,使其指向 MCP 服务(demoserver/server.py),并调整运行 Agent Scan 的 uvx 命令,使其使用正确的 mcp.json 文件路径。

Agent Scan 暂不接受贡献

Agent Scan 目前不接受外部贡献。

欢迎通过 GitHub issue 提交建议、错误报告或功能请求。

开发环境设置

要从源代码运行 Agent Scan,请按以下步骤操作:

uv run pip install -e .
uv run -m src.agent_scan.cli

在自己的项目/注册表中包含 Agent Scan 结果

如果你想在自己的项目或注册表中包含 Agent Scan 结果,请联系我们。我们为此提供了专用 API。使用标准 Agent Scan API 进行大规模扫描将被视为滥用,并导致你的账户被封禁。

文档

  • 文档索引 — 两个 CLI 版本系列的版本化文档。
  • CLI 参考 — v0.5.x 和 v0.6 及更高版本的命令、标志、选项和环境变量。
  • 扫描 — v0.5.x 和 v0.6 及更高版本的扫描行为和示例。
  • JSON 输出 — v0.5.x 按路径作为键的输出和 v0.6 响应架构。
  • 问题代码 — v0.5.x E* 和 W* 安全发现参考。
  • 风险参考 — v0.6 安全风险指标、评分和证据字段。
  • 失败代码 — v0.6 操作层面的发现、检查和分析失败。

延伸阅读

更新日志

请参阅 CHANGELOG.md。

评论

支持 Markdown

第一次接触 MCP?

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

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