檢查 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 -
十一項檢查
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
限制
這僅讀取宣告內容,而非行為。它無法告訴您伺服器的實作是否正確,只能告訴您它宣傳的內容放在模型面前是否安全。