前言¶
在 DSH 生态中,MCP server 通常在运行时声明其能力,而不是通过 manifest、package.json 字段或 schema 文件预先定义。因此,了解一个 server 能做什么的唯一方法就是启动它——而启动这一行为本身就是信任决策。大多数客户端在安装时进行一次信任,此后便不再回顾。
这带来了三个具体问题:每次运行 npx -y 都会拉取最新版本,工具的真实能力在描述中不可见,且服务器默认会获得整个环境(包括所有环境变量、token 和会话)。mcp-cap 是一个 DSH 插件,它用于检查 MCP server 声明的能力面,将其密封成可 review 的 lock 文件,并在版本变化时通知新增的能力。
插件简介¶
mcp-cap 是一个专注于管理员安全和供应链安全的 DSH 插件。
- 定位:用于审计和锁定 MCP server 的能力面,防止未授权的权限提升。
- 维护者:liyixuan201211。
- 类别:admin-security。
- 许可:MIT。
- 核心价值:不调用任何 tool(拒绝
tools/call,resources/read,prompts/get),默认只给 server 一个最小环境,且任何环境变量的值都不会被打印或写进 lock 文件。
核心功能¶
该插件通过以下方式实现安全隔离与审计:
- 拒绝执行工具:通过 allowlist 拒绝
tools/call、resources/read和prompts/get等方法,确保不会真正执行 tool。 - 最小环境原则:默认不传递完整的
PATH、HOME、临时目录等,除非通过--inherit-env显式开启。这防止了 server 访问用户的敏感凭证。 - 能力密封:将 server 声明的能力面写入 lock 文件,形成可入库的审计记录。
- 变化检测:通过
verify功能检测能力面变化,并根据严重程度返回不同的退出代码。
安装与启用¶
在 DSH 环境中安装该插件:
dsh plugin --profile web add github:liyixuan201211/mcp-cap
安装后,即可使用 mcp-cap 命令行工具。
典型用法¶
安装完成后,可以使用以下命令操作 MCP server。
检查 server 的声明能力:
mcp-cap inspect -- npx -y @modelcontextprotocol/server-filesystem /srv
密封当前能力面:
mcp-cap seal --out .mcp-cap/fs.lock.json -- npx -y @modelcontextprotocol/server-filesystem /srv
验证能力面是否发生变化:
mcp-cap verify --lock .mcp-cap/fs.lock.json -- npx -y @modelcontextprotocol/server-filesystem /srv
查看 server 将获得的环境变量:
mcp-cap env -- npx -y @modelcontextprotocol/server-filesystem /srv
退出代码与行为约定¶
verify 命令通过退出代码传达审计结果。以下是核心的退出码定义:
| 退出码 | 含义 |
|---|---|
| 0 | 操作成功,或 verify 时能力面未变化 |
| 1 | 意外错误 |
| 2 | 用法错误 |
| 3 | verify 时检测到能力面变化(但未升级) |
| 4 | verify 时检测到危险能力的升级 |
| 5 | 无法确定:server 未启动、未响应 MCP 或协议异常 |
| 6 | 拒绝操作:没有可对比的 lock 文件,或没有值得密封的内容 |
其中,退出码 5 表示无法确定 server 的状态(例如 server 未启动或未响应 MCP 协议),这绝不等于“未发现任何能力”。此外,插件仅根据声明推断能力,不会真正执行 tool;这意味着服务器可能存在通过 schema 未提及的方式执行恶意操作的风险,无法完全通过静态分析发现。
适用场景与注意事项¶
- 适用场景:需要为 MCP server 进行供应链安全审计、需要强制执行最小权限原则、需要追踪 server 版本变更带来的能力变化。
- 环境要求:兼容 DSH 版本
>=0.1.5-rc.1 <0.2.0。 - 权限说明:插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。
经过上述步骤,你可以将 MCP server 的能力面锁定,并在后续运行中通过 verify 时刻保持对权限变更的警觉。