检查 MCP 服务器声明的内容
工具描述并非文档。客户端在 tools/list 收到工具名称和描述,是在任何工具被调用之前,它们会进入模型的上下文——因此描述在唯一有意义的层面上是可执行的:它可以携带指令。
何时应用
- 向代理添加 MCP 服务器并希望了解它将暴露的内容
- 安全审查询问代理可以调用哪些第三方工具
- 代理行为异常,而工具描述是可疑原因
运行方式
pip install "git+https://github.com/sushant-me/mcpaudit"
mcpaudit audit tools.json # 存在发现时退出码为 1,干净时为 0
请从仓库安装,不要从 PyPI 安装——PyPI 上的 mcpaudit 是另一个不相关的项目,其 CLI 不接受文件参数。
获取客户端收到的 tools.json:mcp-client --list > tools.json,或使用供应商发布的声明文件(最佳方式,因为不会执行任何代码)。管道方式也有效:mcp-client --list | mcpaudit audit -
11 项检查
critical — reserved-name-collision:工具名称使用了框架在工具表外部安装的名称(set_model_response、google_search、finish),从而静默替换了基本操作。
high — instruction-in-declaration、invisible-characters、look-alike-tool-names、destructive-declared-read-only、duplicate-tool-name。
medium / low — confusable-tool-name、missing-annotations、unconstrained-sink-parameter、url-in-description、undocumented-tool。
其中两项无法通过阅读声明看到。Unicode 标签块将可打印 ASCII 编码为零可见宽度的文本,mcpaudit 会报告它解码后的内容。两个标准化为相同 ASCII 的名称(search / ѕearch)可以绕过基于记忆的允许列表。
分诊
按严重性从上到下处理。critical 发现是阻止项:解决它,或在连接前获得书面风险接受。干净的结果就是一个结果——行为良好的服务器不会产生任何发现,这能让审查者快速批准。
限制
此工具仅读取声明,而非行为。它无法判断服务器的实现是否正确,只能判断它所宣传的内容对模型来说是否安全。
想要执行部分
将批准的工具集固定为策略文件,从而使静默修改描述后通过审查的服务器在 CI 中失败而非静默更改——这是付费版本:MCP Server Security Review,列在 Agensi 上。在该列表上线前,带有工作示例的规则参考位于 https://github.com/sushant-me/mcpaudit-mcp-security
限制
此工具仅读取声明,而非行为。它无法判断服务器的实现是否正确,只能判断它所宣传的内容对模型来说是否安全。