mcp-cap:锁定 MCP server 能力面变化

前言

在 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 文件。

核心功能

该插件通过以下方式实现安全隔离与审计:

  1. 拒绝执行工具:通过 allowlist 拒绝 tools/call、resources/read 和 prompts/get 等方法,确保不会真正执行 tool。
  2. 最小环境原则:默认不传递完整的 PATH、HOME、临时目录等,除非通过 --inherit-env 显式开启。这防止了 server 访问用户的敏感凭证。
  3. 能力密封:将 server 声明的能力面写入 lock 文件,形成可入库的审计记录。
  4. 变化检测:通过 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 时刻保持对权限变更的警觉。

更多细节可参考 GitHub 仓库 或 社区目录。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜