前言¶
在 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 時刻保持對權限變更的警覺。