mcpField
M
mcp-server-auditor

mcp-server-auditor

本地服务
github.com/GuardBee安全11 天前更新

关于 mcp-server-auditor

mcp-server-auditor 是面向开发者的 MCP 服务,用于审计 MCP 服务源码。它检查工具定义和处理逻辑中的风险模式,并提供修复建议及 SARIF 输出。

主要功能

  1. 01扫描工具定义与处理逻辑
  2. 02检查五类安全风险
  3. 03追踪 Python 和 Go 输入流
  4. 04提供修复建议
  5. 05导出 SARIF 2.1.0 结果

适用场景

  1. 01发布前审查 MCP 服务
  2. 02将安全扫描加入 CI/CD
  3. 03审计 Python 或 Go 工具处理逻辑

MCP 相关

它向 MCP 客户端提供 scan_text、scan_file、scan_directory 和 list_patterns 工具,用于审计 MCP 服务代码。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"4hmetuyar-mcp-server-auditor": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-server-auditor"
]
}
}
}
启动命令npx -y @guardbee/mcp-server-auditor

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

安装包
npm@guardbee/mcp-server-auditor0.1.5

工具

4

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

参数类型必填说明
labelstring否在发现结果中显示的可选标签(例如文件名)
contentstring是要扫描的代码内容

详细介绍

@guardbee/mcp-server-auditor

🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch

npm version npm downloads License: MIT

一个 MCP(Model Context Protocol)服务,用于扫描其他 MCP 服务的工具定义,检查其中不安全的模式。

ai-code-scanner 会检查通用的大模型/AI 集成代码,而此软件包专门检查 MCP 服务本身:通过 server.tool(...) 定义的工具权限有多大、参数约束有多宽松,以及处理程序会将工具输入直接传递给哪些危险调用点(shell/文件系统/HTTP/SQL)。MCP 生态系统发展迅速,但目前还没有通用工具来审计这些服务的安全性。

默认情况下,遥测功能处于关闭状态。设置 GUARDBEE_TELEMETRY=1 后,它会发送服务、工具、成功状态、持续时间和简短的参数值(例如文件路径);较长的字符串以及 content、token 或 password 等字段会替换为占位符。请参阅 @guardbee/mcp-telemetry。

Claude ──► mcp-server-auditor ──► An MCP server's source code
              │
              ├─ Excessive agency    (execSync(input.command), a tool named "run_shell")
              ├─ Unsafe input        (fetch(input.url) → SSRF, SQL string interpolation)
              ├─ Loose schema        (a parameter typed z.any()/z.unknown())
              ├─ Secrets exposure    (a hardcoded API key in a schema default, the entire process.env)
              └─ Network exposure    (wildcard CORS)

功能

  • 10 种模式,5 个类别 — 权限过大、不安全输入、宽松的架构、机密信息泄露、网络暴露
  • Python 和 Go 服务:追踪工具输入从工具定义(FastMCP 参数、低级 arguments、go-sdk 类型化参数、mcp-go request.RequireString(...))经普通赋值,到 shell、文件写入/删除、HTTP 和 SQL 调用的传递过程
  • 每个发现项都包含风险原因和建议采取的措施(recommendation),而不只是“发现了问题”
  • SARIF 2.1.0 输出 — CI/CD 集成(GitHub Code Scanning 等)
  • 支持通过 guardbee.yml 配置文件进行配置
  • 每种模式都有一个正向测试和一个负向(误报)测试,并提供存在漏洞和安全的 Python 与 Go 测试样例

快速开始

Claude Desktop / MCP 客户端
{
  "mcpServers": {
    "guardbee-mcp-server-auditor": {
      "command": "npx",
      "args": ["-y", "@guardbee/mcp-server-auditor"]
    }
  }
}
CLI(CI/CD)
npx @guardbee/mcp-server-auditor scan ./src --fail-on=high --format=sarif > results.sarif

MCP 工具

工具描述
scan_text扫描给定的文本/代码片段
scan_file扫描单个文件
scan_directory递归扫描目录(自动跳过 node_modules、.git、dist)
list_patterns按类别列出所有支持的模式

检测到的模式

类别模式严重程度OWASP含义
excessive-agencyshell_exec_from_tool_input严重MCP05:2025工具处理程序将工具输入直接传入 shell 调用,例如 execSync/spawn
excessive-agencyeval_of_tool_input严重MCP05:2025工具输入通过 eval()/new Function() 作为代码执行
excessive-agencyunrestricted_shell_tool_name高MCP05:2025工具名称(run_shell、execute_sql 等)直接暗示执行 shell/SQL
unsafe-inputfs_write_from_raw_tool_input高工具输入中的路径未经验证便传入文件写入/删除调用(路径遍历)
unsafe-inputssrf_fetch_from_tool_input高工具输入中的 URL 未经允许列表检查便直接传入 fetch/axios(SSRF)
unsafe-inputsql_injection_via_tool_input严重MCP05:2025工具输入通过模板字面量插入 SQL 字符串
loose-schemaoverly_permissive_tool_schema中工具参数的类型为 z.any()/z.unknown()——接受任何内容
secrets-exposurehardcoded_secret_in_tool_schema严重凭据形式的架构字段默认值是硬编码字面量
secrets-exposurefull_env_exposed_to_tool_caller严重整个 process.env 被展开、字符串化或返回(而非单个具名变量)
network-exposurepermissive_cors_on_server中通配符 CORS(Access-Control-Allow-Origin: *)或不带选项的 cors()
Python 和 Go

Python(.py)和 Go(.go)文件也会进行工具输入流检查。检查会从工具定义中获取工具的输入名称,跟踪它们在处理程序中的普通赋值(command = f"du {directory}"),并在发现输入流到达以下接收调用时报告:

模式严重程度接收调用
python_shell_from_tool_input严重subprocess.*、os.system、os.popen、asyncio.create_subprocess_*
python_eval_of_tool_input严重eval、exec
python_fs_write_from_tool_input高open(..., "w"/"a"/"x")、os.remove/rename/…、shutil.rmtree/move、Path(...).write_text/unlink
python_ssrf_from_tool_input高requests.*、httpx.*、client.get(...)、urlopen(URL 参数)
python_sql_injection_via_tool_input严重cursor.execute(f"...{x}...")、% / .format / +
go_shell_from_tool_input严重(sh -c),高(参数列表)exec.Command、exec.CommandContext
go_fs_write_from_tool_input高os.WriteFile、os.Remove、os.RemoveAll、os.Rename、os.Create、用于写入的 os.OpenFile
go_ssrf_from_tool_input高http.Get/Post/NewRequest…、client.Get
go_sql_injection_via_tool_input严重使用 fmt.Sprintf 或 + 的 db.Query…/Exec…

当处理程序会将路径与基础目录进行检查(is_relative_to、commonpath、.parents、filepath.IsLocal、filepath.Rel、strings.HasPrefix)时,会跳过文件类发现;当处理程序会检查主机允许列表时,会跳过 HTTP 类发现。对于这两种语言,名为 run_shell、execute_sql 等的工具也会被报告。Rust、Java、Kotlin、C# 和其他语言仅使用语言无关模式。

这些发现均为启发式结果——基于静态文本模式的扫描,并非完整的 AST/类型分析。此设计旨在降低误报率,但仍应手动审查每项发现。


配置(guardbee.yml)

mcp-server-auditor:
  fail-on: high       # any | critical | high | medium | low | none
  max-files: 5000
  exclude:
    - ".test.ts"
    - "fixtures/"

开发

npm run build
npm test

许可证

MIT — GuardBee

反馈

有问题、想法或发现误报?请在 GitHub Discussions 中开启讨论,或提交问题。如果 GuardBee 对你有用,请在代码仓库点个 ⭐,帮助其他人找到它。

评论

支持 Markdown

第一次接触 MCP?

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

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