跳轉到主要內容
根據預設,任何執行 Claude Code 的人都可以連接他們選擇的任何 MCP 伺服器。Anthropic 在將連接器新增到 Anthropic Directory 之前會根據其 列表標準 審查連接器,但不會對任何 MCP 伺服器進行安全審計或管理。作為管理員,您可以限制在組織中執行的伺服器,從部署固定的已批准集合到完全停用 MCP。 本頁涵蓋如何:
安全 頁面涵蓋 MCP 威脅模型以及如何在批准伺服器之前評估它。決定要強制執行的內容 涵蓋 MCP 限制以及其他管理控制。

選擇模式

Claude Code 支援一系列限制級別。每個模式使用以下機制中的一個或兩個:managed-mcp.json 用於部署固定集合,allowedMcpServers/deniedMcpServers 用於篩選使用者配置的內容。
Claude Code 沒有內建的 MCP 伺服器登錄表,使用者可以從中瀏覽和安裝。對於已批准目錄模式,在使用者會找到的地方(例如內部 wiki)共享已批准清單及其 claude mcp add 命令,或通過 受管外掛程式市場 將伺服器作為外掛程式分發,以便使用者可以從 /plugin 瀏覽和安裝它們。

使用 managed-mcp.json 進行獨佔控制

如果您部署 managed-mcp.json 檔案,Claude Code 只會載入該檔案定義的伺服器。使用者無法新增、修改或使用任何其他 MCP 伺服器,包括外掛程式提供的伺服器。該檔案也會抑制 claude.ai 連接器,除非您 允許它們與受管集合並存 另外兩個設定可以進一步篩選受管集合:
  • allowedMcpServersdeniedMcpServers 也適用於受管伺服器,因此不符合它們的受管伺服器將不會載入。
  • 使用者自己的 deniedMcpServers 從他們的設定中合併,因此使用者可以為自己阻止受管伺服器。
有關檢查的完整順序,請參閱 伺服器如何被評估 managed-mcp.json 是一個獨立檔案,因此無法通過 伺服器受管設定 傳遞。任何可以寫入具有管理員權限的系統路徑的程序都可以部署它。在大規模部署中,通常通過裝置管理工具進行,例如 macOS 上的 Jamf 或配置檔案、Windows 上的群組原則或 Intune,或 Linux 上您選擇的艦隊管理。Claude Code 在以下路徑之一查找該檔案: 該檔案使用與專案 .mcp.json 檔案相同的格式:

使用每個使用者的認證進行身份驗證

機器上的任何使用者都可以讀取此檔案,因此不要在 env 區塊中儲存 API 金鑰或其他認證。改用以下其中一種方式傳遞每個使用者的認證:

驗證配置

要確認檔案有效,請在受管機器上執行兩項檢查:
  1. claude mcp list 只顯示 managed-mcp.json 中的伺服器。如果使用者自己的伺服器仍然出現,則檔案未被讀取;檢查路徑和權限。
  2. claude mcp add --transport http test https://example.com/mcp 失敗,並顯示 Cannot add MCP server: enterprise MCP configuration is active and has exclusive control over MCP servers。URL 不需要是真實伺服器,因為原則檢查在聯繫任何內容之前拒絕該命令。

完全停用 MCP

部署包含空伺服器對應的 managed-mcp.json 以阻止每個 MCP 伺服器:
使用者在 /mcp 中看不到任何 MCP 伺服器,claude mcp add 失敗,並顯示上述企業原則錯誤。使用者之前配置的伺服器在下次啟動會話時停止載入,沒有警告說明原則是原因。

允許 claude.ai 連接器與受管集合並存

部署 managed-mcp.json 預設會抑制 claude.ai 連接器,包括管理員在 claude.ai 管理控制台中為組織配置的連接器。要將這些連接器與 managed-mcp.json 中的伺服器一起載入,請在 受管設定來源 中設定 "allowAllClaudeAiMcps": true。需要 Claude Code v2.1.149 或更新版本。 啟用此設定後,Claude Code 會載入與未部署 managed-mcp.json 時相同的 claude.ai 連接器。允許清單和拒絕清單 仍然適用於這些連接器,因此您可以使用 deniedMcpServers 阻止特定連接器。此設定僅影響 claude.ai 連接器;外掛程式提供的伺服器保持被抑制。 Claude Code 只從管理員控制的原則層級讀取此設定:伺服器受管設定、MDM 部署的 plist 或 HKLM 登錄機碼,或系統 managed-settings.json 檔案。將其放在使用者或專案設定中無效,因此使用者無法重新啟用獨佔控制所抑制的連接器。

使用允許清單和拒絕清單進行基於原則的控制

允許清單和拒絕清單篩選允許載入的已配置伺服器。它們不是登錄表:伺服器仍然必須由使用者、外掛程式或 managed-mcp.json 新增,然後允許清單或拒絕清單才會應用於它。要將伺服器部署給使用者,請使用 managed-mcp.json。兩個清單也會篩選使用 --mcp-config CLI 旗標 傳遞的伺服器;--strict-mcp-config 限制載入的配置檔案,不會繞過任一清單。 要使允許清單具有權威性,請在 受管設定來源(例如伺服器受管設定或已部署的 managed-settings.json 檔案)中一起設定 allowedMcpServersallowManagedMcpServersOnly: true將允許清單限制為僅受管設定 顯示配置。沒有 allowManagedMcpServersOnly,來自每個設定來源的允許清單會合併,包括使用者自己的 ~/.claude/settings.json,因此使用者可以擴展您的允許清單允許的內容。拒絕清單無論如何都會從每個來源合併。
allowManagedMcpServersOnlyallowManagedPermissionRulesOnly 分開,後者鎖定 權限規則 只。設定該標誌不會強制執行 MCP 允許清單。

按 URL、命令或名稱匹配伺服器

allowedMcpServersdeniedMcpServers 是條目清單。每個條目是一個物件,具有單一鍵,用於按 URL、命令或名稱識別伺服器: 不設定 allowedMcpServers 與將其設定為空陣列不同: 請參閱 受管設定中的無效條目 以了解當條目無法通過結構描述驗證時會發生什麼。
serverName 條目(在任一清單中)不是安全控制。名稱是使用者在執行 claude mcp add 或編輯配置檔案時指派的標籤,而不是基礎伺服器,因此使用者可以呼叫任何伺服器 github。對於 claude.ai 連接器,名稱是 claude.ai 傳回的顯示名稱,可能會變更。要強制執行實際執行的伺服器,請新增 serverCommandserverUrl 條目。
serverName 驗證在兩個清單之間有所不同:
  • deniedMcpServers 中,serverName 接受任何非空字串,因此您可以按顯示名稱阻止 claude.ai 連接器。例如,{ "serverName": "claude.ai Slack" } 阻止 Slack 連接器。當您需要拒絕對重新命名具有魯棒性時,或當連接器名稱衝突並獲得 (N) 尾碼時,優先使用 serverUrl 條目。
  • allowedMcpServers 中,serverName 限制為字母、數字、連字號和底線。使用 serverUrl 來允許列出 claude.ai 連接器。
要關閉所有 claude.ai 連接器,請參閱 disableClaudeAiConnectors

伺服器如何被評估

在載入伺服器之前,包括來自 managed-mcp.json 的伺服器,Claude Code 按順序執行三項檢查:
  1. 合併清單。 來自每個設定來源的允許清單和拒絕清單條目合併為一個允許清單和一個拒絕清單。當 allowManagedMcpServersOnlytrue 時,僅保留受管允許清單;拒絕清單始終從每個來源合併。
  2. 檢查拒絕清單。 與任何拒絕清單條目匹配的伺服器(按 URL、命令或名稱)被阻止。沒有任何內容會覆蓋拒絕清單匹配。
  3. 檢查允許清單。 如果 allowedMcpServers 未在任何地方設定,通過拒絕清單的每個伺服器都會載入。如果已設定,伺服器必須匹配的內容取決於其類型,如下表所示。
這些檢查中適用三個匹配規則:
  • 命令精確匹配。 每個引數,按順序。["npx", "-y", "server"] 不匹配 ["npx", "server"]["npx", "-y", "server", "--flag"]
  • serverCommandserverUrl 值在匹配前展開。 原則條目和伺服器的配置值都會經過與 .mcp.json 相同的 ${VAR}${VAR:-default} 展開,因此寫成 ["${HOME}/bin/server"] 的條目會匹配使用相同參考或展開路徑的伺服器配置。在 Windows 上,參考在那裡設定的環境變數,例如 ${USERPROFILE} 而不是 ${HOME}serverName 值按字面匹配,永遠不展開。
  • URL 支援 * 萬用字元 在模式中的任何地方,包括方案。主機名匹配不區分大小寫,忽略尾部 FQDN 點,因此 https://Mcp.Example.com/* 匹配 https://mcp.example.com/api。路徑保持區分大小寫。
因為 ${VAR} 展開讀取 Claude Code 自己的程序環境,參考變數的 serverCommandserverUrl 原則條目會展開為使用者設定的任何值。對於您依賴強制執行的條目,使用字面 URL 和命令。

範例配置

以下配置設定了硬允許清單和拒絕清單。突出顯示的行改變了清單其餘部分的評估方式,區塊後的標註解釋了每一行:
  • 第 3 行:第一個 serverUrl 條目。一旦存在,每個遠端伺服器必須匹配 URL 模式,因此使用者無法通過給它一個允許的名稱來獲得未列出的遠端伺服器。
  • 第 5 行:第一個 serverCommand 條目。對 stdio 伺服器有相同的效果,因此每個本地伺服器必須精確匹配列出的命令。
  • 第 11 行:拒絕清單中的 serverName 條目。拒絕清單條目始終適用,因此任何名為 dangerous-server 的伺服器都被阻止,無論其 URL 或命令如何。
此允許清單中的 serverName 條目永遠不會匹配任何內容,因為兩種傳輸類型都已有更嚴格的條目。 下面的手風琴演示了伺服器如何針對其他允許清單和拒絕清單組合進行評估。

將允許清單限制為僅受管設定

要使受管允許清單成為唯一適用的清單,請在受管設定檔案中設定 allowManagedMcpServersOnly
allowManagedMcpServersOnlytrue 時,來自使用者、專案和本地設定的允許清單被忽略。拒絕清單仍然從所有來源合併,因此使用者始終可以為自己阻止伺服器。

限制如何向使用者顯示

當限制阻止伺服器時,使用者要麼看到來自 claude mcp add 的錯誤,要麼伺服器無聲地停止載入。使用此表格識別這些報告,並在推出變更之前告訴使用者會發生什麼: 在最後一種情況下,使用者沒有收到原則是其伺服器消失原因的信號,因此在推出新限制時告訴受影響的使用者哪些伺服器被阻止。

監控 MCP 使用

OpenTelemetry 匯出 配置時,Claude Code 可以記錄使用者呼叫的 MCP 伺服器和工具。設定 OTEL_LOG_TOOL_DETAILS=1 以在工具事件中包含 MCP 伺服器和工具名稱,然後在您的收集器中聚合它們以查看您的使用者實際連接到的伺服器。請參閱 監控 以設定匯出器和完整事件架構。

配置摘要

本頁涵蓋的每個檔案和設定、它控制的內容以及如何傳遞它: