安装前扫描MCP服务器的硬编码密钥、注入风险、缺失认证等漏洞,输出A-F评级和SARIF报告,直接集成GitHub安全标签。
根据你读到的审计报告,38% 到 46% 的公共 MCP 服务器根本没有身份验证。Kai Security AI 对 518 个注册服务器的扫描是最常被引用的数据,后续一些跟进研究也对此进行了细化。无论确切数字是多少,结论都是一样的:注册表对列表没有任何安全要求,而且大多数扫描工具都要等你已经把代码拉下来并运行之后才能帮到你。
这正是我构建 trustmcp 来填补的空白。
trustmcp 是一个开源 CLI,用于扫描 MCP 服务器的安全问题:硬编码的密钥、不安全的 eval/exec/subprocess 模式、工具描述中隐藏的 prompt 注入文本、缺失的认证、未固定的依赖。它输出 A-F 等级评分,外加一份可以直接在 GitHub Security 选项卡中显示的 SARIF 报告。
pip install trustmcp
trustmcp scan --path . --mode static
我见过的其他所有 MCP 扫描器都假设你已经有了源代码或正在运行的服务。trustmcp check 可以在你安装之前就对服务器进行检查:
trustmcp check npm:@modelcontextprotocol/server-everything
trustmcp check pypi:some-mcp-server
trustmcp check github:owner/repo
它解析包、下载到隔离的临时目录、进行静态分析。包里的任何内容都不会被执行。
静态分析目前仅支持 Python(JS/TS 是下一步)。早先我用 check 扫描了 Anthropic 自己的官方参考服务器 @modelcontextprotocol/server-everything,这是一个 TypeScript 包,结果返回 Grade F,33/100。
这对于一个安全工具来说很不好看:参考实现反而通不过扫描,而且实际上根本没扫描到它的一行代码。
深入排查后发现,这不是单独一个 bug,而是同一个根因影响到了两个模块:
静态分析器只读取 .py 文件,所以对于 TS 包它根本没有任何东西可扫描(这是合理的),但没有任何提示告诉用户:这个看起来很自信的评分其实是从零行源代码审查中计算出来的。
auth-posture 检查存在同样的 Python-only 盲点,而且由于 check 从不运行 live probe(那会意味着执行不受信任的代码),它直接 fallthrough 到"未检测到身份验证机制",严重级别 HIGH,断言了一个它根本没有能力实际观察到的缺失。
此外,package.json 里十几个普通的 ^/~ semver 范围(完全正常的 npm 做法)每个都单独扣分且没有上限,所以分数几乎必然下降,不管其他情况如何。
三个问题全部修复:当零文件被分析时输出诚实说明、新增一个"undetermined"认证状态(区别于"未检测到"),不再携带误报的 HIGH 惩罚,以及对任何单一重复发现能拉低分数的程度设置上限。同一服务器现在得分 76,Grade C,这是一个实际上站得住脚的数字:真实发现(无 lockfile、semver 范围、认证方面一个诚实的"无法检查此项"标注),权重正确,没有任何凭空捏造。
以上内容均未触及该工具经过验证的检测基准——那是用 Damn Vulnerable MCP Server 跑的。全部是 Python,所以从未受影响。目前 10 个规范挑战中:3 个完全检测到,1 个部分检测,6 个漏检。完整按挑战分项的细节(包括每个漏检的具体原因)在 README 中。我宁可发布真实数字也不向上取整。

GitHub: https://github.com/v0idw4lker/trustmcp
PyPI: https://pypi.org/project/trustmcp/
免费、开源、MIT 许可。静态分析 + 动态分析、认证态势、SARIF/JSON 报告、以及预安装检查命令全部在免费层。语义分析(基于 LLM)和跨服务器 toxic-flow 检测计划后续作为付费层,但以上所有内容均可独立完整使用。
非常欢迎反馈和 bug 报告,特别是如果你能在某个我没测试过的服务器上把它搞坏的话。