kbipul/mcp-auditor
GitHub: kbipul/mcp-auditor
MCP Auditor 是一款纯浏览器端的 MCP 服务器配置安全审计工具,通过启发式规则检测 AI Agent 配置中的密钥泄露、远程执行、危险能力组合等风险并给出评分和修复建议。
Stars: 0 | Forks: 0
# MCP Auditor — 在你的 Agent 行动之前,先审计你的 MCP Server 配置
**粘贴你的 Claude Desktop / Cursor / VS Code mcpServers 配置,即可获取即时的安全报告:包括硬编码的密钥、未固定版本的远程执行、根文件系统访问权限,以及像文件系统+网络数据外泄路径这样的危险能力组合 —— 100% 在你的浏览器中完成。**
[](https://github.com/kbipul/mcp-auditor/actions/workflows/ci.yml)
[](https://kbipul.github.io/mcp-auditor/)
`Day 007` 的 **[kb-daily-builds](https://github.com/kbipul/kb-daily-builds)** — 每天一个 AI 项目。
## 功能介绍
MCP 客户端配置(即 Claude Desktop、Cursor、Windsurf 或 VS Code 中的 `mcpServers` 块)是你的 Agent 在每次会话中使用你的权限自动启动的一系列程序。本周 GitHub 的趋势页面依然堆满了 MCP 工具 —— 仅仅是 `ChromeDevTools/chrome-devtools-mcp` 今天一天就增加了 404 个 star —— 而且这个生态系统的增长速度远远超过了任何人审查这些配置实际授予了什么权限的速度。`curl | bash` 安装脚本、未固定版本的 `npx` 包,以及作用域涵盖整个主目录的文件系统服务器,全都伪装成正常的、没人会看第二眼的 JSON 配置。
MCP Auditor 就是这十秒钟的初审。粘贴你的配置,它会标记出 **硬编码的密钥和私钥**、**远程代码执行模式**(`curl | bash`、编码的 PowerShell、通过 URL 获取的脚本)、**未限制范围的根文件系统访问权限**、**未固定版本的包执行**,以及 —— 这是逐行阅读时最容易忽略的部分 —— **危险的能力组合**:如果配置同时启用了文件系统服务器和网络/浏览器服务器,这种配对本身就是一条内置的数据外泄路径,即使这两个服务器单独来看都没有恶意。它会给配置打分(A–F 等级),显示每个服务器的能力矩阵,并提供具体的修复方案来解释每一项发现。
所有操作均在客户端运行。你粘贴的配置 —— 包括其中的任何 token —— 永远不会离开当前标签页。

截图由 GitHub 的 runner 上的 CI 自动捕获(构建沙箱无法运行浏览器)—— 会在发布后几分钟内显示。
## 试用
**[实时演示 →](https://kbipul.github.io/mcp-auditor/)** — 完全在你的浏览器中运行,无需安装任何内容。
```
git clone https://github.com/kbipul/mcp-auditor.git
cd mcp-auditor
npm install
npm run dev # local dev server
npm test # 34 unit tests, vitest
npm run build # production build to dist/
```
## 工作原理
- **双层规则引擎。** 基于行的正则表达式规则会扫描格式化输出(每行一个 token)的配置渲染结果,以检测单个服务器的危险信号 —— 硬编码的密钥、`curl|bash`、根路径、`sudo`、`@latest`。文档级别的规则则在*解析后*的服务器列表上运行,因为组合风险(文件系统 + 网络、一个原始的 shell 解释器与其他任何东西同时存在、多个各自持有凭证的服务器)跨越了多个条目,无法通过逐行扫描来捕获。
- **能力推断,而非正式清单。** MCP 服务器不像操作系统级别的沙箱那样声明权限作用域 —— 你只能获得一个 `command` 和 `args`。因此,能力标签(文件系统、网络、浏览器、shell、数据库、凭证)是通过包名/命令名和参数推断出来的。这是一种启发式方法,在 UI 中已明确声明:这是一次快速的初审,并非正式的审计。
- **与 [SkillScan](https://github.com/kbipul/skill-scan) 使用相同的评分模型**,它是 Day 006 的兄弟项目 —— 根据严重程度进行加权扣分,每条规则设有扣分上限,这样单个频繁触发的发现就不会单独把分数扣光。如果存在严重问题,即使数值分数很高,字母等级也会被限制在 D。这两款工具在语气上保持一致是有意为之的:这是一个小型“AI Agent 供应链安全”系列项目的第二天 —— Day 006 审计了 Agent 加载的技能,而 Day 007 审计了它与哪些服务器进行通信。
## 构建笔记 — 我的收获
这次构建中真正有趣的部分是意识到 MCP 配置并没有一个可供审计的正式权限模型 —— 不像技能文件那样有一个 `allowed-tools` 字段。因此,这里的“审计”意味着仅仅从服务器的启动命令中推断它*能触及*什么,这本质上比 SkillScan 基于 frontmatter 的检查要模糊得多。我在 UI 文案中坦诚地接受了这一点,而不是过度吹捧该工具并不具备的精确度。
组合检测逻辑(文件系统 + 网络 = 数据外泄路径)是我最满意的功能 —— 这是人类在逐个服务器浏览配置时最有可能忽略的一件事,因为孤立地看任何一个条目似乎都没问题。为了让能力启发式规则足够准确,从而避免在普通的 `npx @modelcontextprotocol/server-*` 包上产生大量误报,在编写代码之前,我经历了编写测试用例的几次迭代 —— 我先编写了“不应标记干净配置”的测试,这帮我捉住了早期版本中未固定包规则的一个漏洞,当时该规则会标记每一次 `npx` 调用,无论该包是否已固定版本。
如果时间充裕,我会做出一点改变:能力启发式分类是通过名称匹配进行的,因此,如果一个知名的服务器使用了非官方 `@modelcontextprotocol/server-*` 命名格式的异常内部名称,它可能会被分类不足。未来的 v2 版本可以提供一个包含已知且安全的官方服务器包的小型白名单,以减少误报和漏报。
## 技术栈
| | |
|---|---|
| UI | React 18, TypeScript 5 |
| 构建 | Vite 6 |
| 测试 | Vitest 2(涵盖解析器、能力分类器、规则引擎和端到端示例评分的 34 个单元测试) |
| 部署 | 通过 Actions 部署到 GitHub Pages |
由 Kumar Bipul 构建 ·
IT 总监 → AI/ML · github.com/kbipul
标签:DLL 劫持, MCP协议, StruQ, 云安全监控, 前端工具, 大语言模型, 安全合规, 网络代理, 自动化攻击, 静态分析