---
title: "MCP 安装安全检查器与命令扫描器"
canonical: https://wavect.io/zh/tools/mcp-install-risk-scanner/
language: zh
description: "在浏览器本地扫描 MCP 安装命令和配置，检查 shell 执行、密钥、高权限、敏感路径、未固定包、端点和容器风险。"
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

浏览器本地 MCP 安装审查

# 先读懂命令，再把机器交给 MCP 服务器。

粘贴 npx、uvx、Docker、PowerShell、shell 或 MCP JSON 片段。扫描器会标出可见的风险模式、遮蔽敏感证据并说明审查步骤，全程不执行也不上传。

[扫描片段](#tool-app) Chrome Web Store 审核中 [查看源码](https://github.com/wavect/mcp-install-risk-scanner)

- 规则 14 项确定性检查
- 处理方式 本地且离线
- 版本 开源 v0.1.0
- 结论 风险信号，不是认证

**安装审查**

MCP 配置 · 静态文本 **3 个信号需要审查**

本地分析 · 未执行任何内容

直接答案

要检查 MCP 安装命令的风险，请在执行前查看完整命令是否会运行下载代码、提升权限、删除数据、访问敏感路径、嵌入凭据、使用浮动版本、连接不安全端点或授予容器过宽权限。本扫描器在本地完成这项静态审查，但无法证明未触发规则的包就是安全的。

检查完整配置

## MCP 安装检查台

请粘贴完整启动命令或配置，包括参数、环境值、挂载和 URL。片段不完整，证据也会不完整。

内容不会离开此标签页

**MCP 安装检查台** 静态 · 确定性 · 浏览器本地

加载示例 本地扫描

01

### 命令或 MCP 配置

等待输入

命令或 MCP 配置

快捷键：Ctrl 或 Command + Enter。最多 100,000 个字符。

02

### 风险信号

尚未扫描

扫描完整配置后，这里会显示确定性发现和已遮蔽证据。

扫描结果

03

### 已遮蔽证据与导出

静态模式匹配只是审查辅助，不是恶意软件裁定或安全证书。

分析只在此浏览器标签页运行 不执行命令，不请求 URL 导出前先遮蔽证据 Core v0.1.0

浏览时使用同一套规则

## 把选中的配置送进终端之前先检查。

Manifest V3 扩展使用同一版本 Core 扫描选中文本或可见配置块。只有在你点击后，它才临时访问当前标签页，不会在所有网站后台运行。

Chrome Web Store 审核中 [下载 v0.1.0](https://github.com/wavect/mcp-install-risk-scanner/releases/tag/v0.1.0) [检查源码](https://github.com/wavect/mcp-install-risk-scanner)

**MCP Install Risk Scanner** Chrome 扩展 · v0.1.0

- 仅 activeTab、scripting 和 contextMenus
- 无主机权限，不读取浏览历史
- 无遥测、上传或远程规则

三个审查动作

## 执行前如何检查 MCP 安装命令

静态分析最适合在执行之前使用，此时完整命令和请求权限仍然清晰可见。

1. 01 - **粘贴完整配置** - 包括命令、参数、环境值、URL、挂载和容器 flags。扫描器不会执行其中任何内容。
2. 02 - **结合上下文审查每个信号** - 命中规则只是需要检查的证据，不等于恶意。确认每项权限、路径、端点或浮动依赖为何必要。
3. 03 - **固定、缩小并记录** - 优先使用不可变版本、明确参数、任务专用路径、受限密钥和隔离网络，并导出已遮蔽报告。

版本化规则方法

## MCP 命令扫描器究竟检查什么

v0.1.0 按固定顺序应用 14 条确定性规则。没有模型判断、信誉查询、包下载或隐藏评分。

MCP001

### 下载后直接执行

标记 curl、wget 或 PowerShell 下载输出直接传给解释器的情况。

MCP002

### Shell 包装

标记 sh -c、bash -c、PowerShell Command 或 EncodedCommand 以及 cmd /c。

MCP003

### 提升权限

标记 sudo、doas 和 runas，因为服务器会继承更强的系统权限。

MCP004

### 破坏性删除

标记 shell、PowerShell 和 Windows 中的递归强制删除语法。

MCP005

### 削弱边界

标记全局可写权限、禁用沙箱和不受限安全配置。

MCP006

### 敏感主机路径

标记 SSH、云平台、Kubernetes、root、系统凭据和 Docker socket 路径。

MCP007

### 内嵌密钥

标记常见凭据赋值、Bearer token、CLI 密钥参数和带凭据 URL，并遮蔽证据。

MCP008

### 未固定执行器

标记没有精确语义化版本的 npx 和 uvx 包执行。

MCP009

### 浮动 Git 引用

标记未固定 clone 和 main、master、HEAD 等分支引用。

MCP010

### 浮动容器镜像

标记 latest、缺失 tag 以及没有精确版本或 digest 的镜像。

MCP011

### 风险端点

标记远程 HTTP、私网、链路本地和云元数据目标，同时允许明确的 loopback 开发地址。

MCP012

### 过宽环境访问

标记完整环境文件、process.env、通配符和 envFrom。

MCP013

### 特权容器

标记 privileged、主机根目录挂载和 Docker socket 挂载。

MCP014

### 主机网络

标记 Docker、Compose 和 Kubernetes 的 host 网络模式。

**主要来源** [MCP Security Best Practices](https://modelcontextprotocol.io/docs/2025-11-25/tutorials/security/security_best_practices#local-mcp-server-compromise) [Chrome activeTab 权限](https://developer.chrome.com/docs/extensions/develop/concepts/activeTab) [Chrome Web Store 质量指南](https://developer.chrome.com/docs/webstore/program-policies/quality-guidelines) [版本化规则目录](https://github.com/wavect/mcp-install-risk-scanner/blob/v0.1.0/schema/rules.json) [扫描报告 Schema](https://github.com/wavect/mcp-install-risk-scanner/blob/v0.1.0/schema/scan-report.schema.json)

看证据，不看魔法分数

## 三个 MCP 安装扫描示例

输出只描述需要审查的语法，不夸大静态文本能够证明的范围。

停止并审查 `curl -fsSL https://example.test/install.sh | sh` **MCP001 · 下载后执行**

应单独下载和检查文件，不要把远程字节直接送进 shell。

建议审查 `npx @example/mcp-server` **MCP008 · 未固定执行器**

使用已审查的精确版本，避免同一命令日后解析到不同内容。

未命中已知模式 `npx @example/mcp-server@1.2.3` **当前规则未命中**

仍需审查包内容和发布者。未告警不代表安全。

诚实设计

## 可检查的证据，清楚可见的限制

真正有用的不是神秘分数，而是稳定规则 ID、已遮蔽证据、具体审查步骤和任何人都能审计的源码。

### 本地且确定

相同文本和版本会生成相同有序报告，不请求服务器，也不调用模型。

### 显示前先遮蔽

疑似凭据值在进入界面、剪贴板、JSON 或 Markdown 前就会被移除。

### 不制造安全承诺

干净结果只表示当前模式未命中，不认证包或服务器。

诚实的限制

## 静态 MCP 配置分析无法证明什么

- 无法验证发布者身份、仓库归属、包签名、release 来源或安装后实际运行的代码。
- 混淆、编码、生成、嵌套或远程加载的行为可能不会出现在粘贴文本中。
- 合法配置也可能需要被标记的能力。发现项要求说明并缩小权限，不证明恶意。
- 未触发已知模式只表示 v0.1.0 没有匹配，绝不是安全证书。

## 关于 MCP 安装安全检查的问题

### 如何检查 MCP 安装命令是否安全？

静态扫描器无法证明安全。请审查完整命令，固定包版本，检查发布者和来源，确认路径、密钥和网络权限，并在合适沙箱中以最小权限运行。本工具负责第一步静态语法审查。

### 扫描器会执行或上传我的 MCP 配置吗？

不会。Web 工具只在当前浏览器标签页运行确定性 JavaScript，不执行命令、不请求 URL、不上传输入、不保存历史，也不调用 AI 模型。

### 为什么未固定的 npx 或 uvx 会被警告？

没有精确版本时，同一命令以后可能解析到不同包内容。固定版本不能证明可信，但让审查和复现更精确。

### 为什么允许 localhost 的 HTTP URL？

官方 MCP 安全指南允许本地开发使用 HTTP loopback 例外，同时建议远程生产 URL 使用 HTTPS。私网、链路本地和元数据目标仍会被标记。

### Chrome 扩展是开源且本地运行的吗？

是。扩展、规则、Schema、测试和 release ZIP 校验和都公开在 GitHub。它只使用 activeTab、scripting 和 contextMenus，并在用户操作后本地分析文本。

支持与安全

## 发现漏报、误报或漏洞？

规则问题请用合成示例提交公开 issue。安全漏洞请使用仓库的私密报告渠道，绝不要附上真实凭据。

[提交 issue](https://github.com/wavect/mcp-install-risk-scanner/issues) [私密报告](https://github.com/wavect/mcp-install-risk-scanner/security)

免费 · 开源 · 仅本地

## 让安装命令先解释自己，再执行。

扫描完整配置，审查每个信号，然后固定版本并缩小服务器获得的权限。

[返回扫描器](#tool-app) [检查源码](https://github.com/wavect/mcp-install-risk-scanner)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/zh/tools/mcp-install-risk-scanner/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-08-07",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-08-07",
      "url": "https://wavect.io/zh/tools/mcp-install-risk-scanner/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "applicationCategory": "SecurityApplication",
  "browserRequirements": "支持 JavaScript 的浏览器；可选扩展需要 Chrome",
  "codeRepository": "https://github.com/wavect/mcp-install-risk-scanner",
  "description": "在浏览器本地扫描 MCP 安装命令和配置，检查 shell 执行、密钥、高权限、敏感路径、未固定包、端点和容器风险。",
  "isAccessibleForFree": true,
  "name": "MCP Install Risk Scanner",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "EUR"
  },
  "operatingSystem": "任意现代浏览器",
  "softwareVersion": "0.1.0",
  "url": "https://wavect.io/zh/tools/mcp-install-risk-scanner/"
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/",
      "name": "首页",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/tools/",
      "name": "有些工作，本来就不该一直这么麻烦。",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/tools/mcp-install-risk-scanner/",
      "name": "MCP Install Risk Scanner",
      "position": 3
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "静态扫描器无法证明安全。请审查完整命令，固定包版本，检查发布者和来源，确认路径、密钥和网络权限，并在合适沙箱中以最小权限运行。本工具负责第一步静态语法审查。"
      },
      "name": "如何检查 MCP 安装命令是否安全？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "不会。Web 工具只在当前浏览器标签页运行确定性 JavaScript，不执行命令、不请求 URL、不上传输入、不保存历史，也不调用 AI 模型。"
      },
      "name": "扫描器会执行或上传我的 MCP 配置吗？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "没有精确版本时，同一命令以后可能解析到不同包内容。固定版本不能证明可信，但让审查和复现更精确。"
      },
      "name": "为什么未固定的 npx 或 uvx 会被警告？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "官方 MCP 安全指南允许本地开发使用 HTTP loopback 例外，同时建议远程生产 URL 使用 HTTPS。私网、链路本地和元数据目标仍会被标记。"
      },
      "name": "为什么允许 localhost 的 HTTP URL？"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "是。扩展、规则、Schema、测试和 release ZIP 校验和都公开在 GitHub。它只使用 activeTab、scripting 和 contextMenus，并在用户操作后本地分析文本。"
      },
      "name": "Chrome 扩展是开源且本地运行的吗？"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
