- 選擇符合您需要的控制程度的模式
- 使用
managed-mcp.json部署固定伺服器集合,包括如何完全停用 MCP - 透過受管設定提供伺服器,同時使用者保留自己的伺服器
- 使用允許清單和拒絕清單控制伺服器
- 告知使用者限制阻止伺服器時的預期情況
- 監控組織實際使用的伺服器
安全性頁面涵蓋 MCP 威脅模型以及如何在核准伺服器前進行評估。決定要強制執行的項目涵蓋 MCP 限制以及其他管理控制項。
選擇一個模式
Claude Code 支援一系列限制級別。每個模式使用以下一個或多個機制:managed-mcp.json 用於部署固定集合、managedMcpServers 受管設定用於提供伺服器以及使用者新增的伺服器,以及 allowedMcpServers/deniedMcpServers 用於篩選使用者設定的內容。
Claude Code 沒有內建的 MCP 伺服器登錄,使用者可以從中瀏覽和安裝。對於已核准的目錄模式,請在使用者會找到的地方(例如內部 wiki)分享已核准的清單及其
claude mcp add 命令,或透過 受管外掛程式市集 將伺服器分發為外掛程式,以便使用者可以從 /plugin 瀏覽和安裝它們。使用 managed-mcp.json 進行獨佔控制
當您部署managed-mcp.json 檔案時,Claude Code 只會載入以下伺服器:
- 該檔案定義的伺服器
- 您透過
managedMcpServers提供的伺服器 - 啟動工作階段的應用程式註冊的同處理程序伺服器,例如 VS Code 擴充功能自己的伺服器或桌面應用程式提供的連接器
- 內建的Chrome 中的 Claude 伺服器,如果您允許它與受管集合並存
--mcp-config CLI 旗標傳遞的伺服器。該檔案也會抑制 Claude Code 自行擷取的 claude.ai 連接器,除非您允許它們與受管集合並存。
部署 managed-mcp.json
managed-mcp.json 是一個獨立檔案,因此無法透過伺服器管理的設定傳遞。若要透過受管設定傳遞伺服器而不進行獨佔控制,請改用 managedMcpServers。
任何可以寫入具有管理員權限的系統路徑的程序都可以部署該檔案。在整個機隊中,這通常是透過裝置管理工具進行,例如 macOS 上的 Jamf 或設定檔、Windows 上的群組原則或 Intune,或您在 Linux 上選擇的機隊管理工具。Claude Code 會在以下其中一個路徑中尋找該檔案:
該檔案使用與專案
.mcp.json 檔案相同的格式:
使用個別使用者認證進行驗證
機器上的任何使用者都可以讀取此檔案,因此請勿在env 區塊中儲存 API 金鑰或其他認證。改用以下其中一種方式傳遞個別使用者認證:
- 從每個使用者的環境讀取機密的
${VAR}擴展。 - OAuth 或個別使用者標頭,以便每個使用者以自己的身份進行驗證。
headersHelper在連線時產生認證。
透過 --mcp-config 或 --strict-mcp-config 傳遞的伺服器
當工作階段在部署 managed-mcp.json 時透過 --mcp-config 接收伺服器時,使用者看到的內容在工作站和雲端工作階段之間有所不同:
- 在工作站上,Claude Code 在啟動時以
You cannot dynamically configure MCP servers when an enterprise MCP config is present結束。 - 在部署該檔案的主機上的雲端工作階段中,例如自託管執行器,Claude Code 僅使用受管伺服器啟動,並跳過 claude.ai 連接器和雲端主機透過
--mcp-config傳遞的其他伺服器。工作階段中沒有任何內容告訴使用者哪些伺服器被遺漏。Claude Code 在其 stderr 上的警告中命名它們,自託管執行器會在debug日誌級別記錄。
--strict-mcp-config 旗標要求取代受管集合。如果使用者在部署此類檔案時傳遞它,Claude Code 在工作站和雲端工作階段上都會在啟動時結束。
允許清單和拒絕清單如何應用於受管集合
拒絕清單可以進一步篩選managed-mcp.json 中的伺服器:
deniedMcpServers也適用於受管伺服器,因此與項目相符的受管伺服器將不會載入。- 使用者自己的
deniedMcpServers會從其設定中合併,因此使用者可以為自己封鎖受管伺服器。
allowedMcpServers 不適用於 managed-mcp.json 中的伺服器,但有一個例外:Claude Code 仍會檢查其定義使用 ${VAR} 擴展的伺服器是否符合允許清單,因為該伺服器的有效設定來自每個使用者的環境,而不是僅來自檔案。在 v2.1.259 之前,每當設定允許清單時,每個受管伺服器都必須通過允許清單。請參閱伺服器如何被評估以了解哪些欄位觸發 ${VAR} 檢查和完整的檢查順序。
如果您使用 allowedMcpServers 防止您自己的某些 managed-mcp.json 伺服器載入,除非它們使用 ${VAR} 擴展,否則這些伺服器將在每個使用者首次啟動 v2.1.259 或更新版本時開始載入,沒有提示或通知:只有 deniedMcpServers 仍會從這些伺服器中減去。在使用者升級之前,為它們新增拒絕清單項目,或為每個群組部署單獨的 managed-mcp.json。
驗證設定
若要確認檔案生效,請在受管機器上執行兩項檢查:claude mcp list只顯示managed-mcp.json中的伺服器,加上您透過managedMcpServers提供的任何伺服器。兩個其他結果表示出現問題:- 如果使用者自己的伺服器仍然出現,Claude Code 未讀取該檔案,因此請檢查其路徑和其父目錄的權限。
- 如果檔案的伺服器未出現,且
MCP config diagnostics部分將企業設定標記為無法解析失敗,Claude Code 無法讀取或解析該檔案。修正該部分命名的錯誤,然後讓使用者重新啟動 Claude Code。
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 伺服器:
claude mcp add 失敗,並顯示上述企業原則錯誤。使用者之前設定的伺服器在下次啟動工作階段時停止載入,沒有警告說明原則是原因。您透過 managedMcpServers 提供的伺服器和您允許與受管集合並存的任何其他內容仍在空對應下載入,因此請保持那些金鑰未設定以完全停用 MCP。
允許 claude.ai 連接器與受管集合並存
根據預設,部署managed-mcp.json 會抑制 Claude Code 自行擷取的 claude.ai 連接器,包括管理員在 claude.ai 管理主控台中為組織設定的連接器。若要將這些連接器與 managed-mcp.json 中的伺服器一起載入,請在受管設定來源中設定 "allowAllClaudeAiMcps": true。
啟用該設定後,Claude Code 會載入如果未部署 managed-mcp.json 時會載入的相同 claude.ai 連接器。允許清單和拒絕清單仍適用於這些連接器,因此您可以使用 deniedMcpServers 封鎖特定連接器。該設定僅影響 Claude Code 自行擷取的 claude.ai 連接器;外掛程式提供的伺服器保持被抑制。
雲端工作階段和桌面應用程式的本機和 SSH 工作階段以另一種方式接收連接器,如連接器如何到達 Claude Code 中所述。執行雲端工作階段的主機上的 managed-mcp.json(例如自託管執行器主機)會抑制該工作階段的連接器,無論您是否設定 allowAllClaudeAiMcps。沒有 managed-mcp.json 到達桌面應用程式傳遞給其本機和 SSH 工作階段的連接器。
Claude Code 只從管理員控制的原則層級讀取 allowAllClaudeAiMcps:伺服器管理的設定、MDM 部署的 plist 或 HKLM 登錄機碼,或系統 managed-settings.json 檔案。將其放在使用者或專案設定中無效,因此使用者無法重新啟用獨佔控制抑制的連接器。
允許 Claude in Chrome 與受管集合並存
根據預設,當您部署managed-mcp.json 時,Claude Code 會在終端機工作階段中封鎖內建的 Claude in Chrome 伺服器。使用者不會收到擴充功能安裝提示,且預設啟用 Chrome 的使用者啟動的工作階段會在沒有 Chrome 的情況下啟動,並且不會列印任何警告。當可以執行 Claude in Chrome 的使用者使用 claude --chrome 或 CLAUDE_CODE_ENABLE_CFC=1 啟動它時,Claude Code 在啟動時會以命名 allowClaudeInChromeWithManagedMcp 設定的錯誤結束。
若要讓使用者在 managed-mcp.json 中的伺服器旁邊執行 Claude in Chrome,請在裝置自己的受管設定中設定 "allowClaudeInChromeWithManagedMcp": true。將其放在 MDM 部署的 plist 或 HKLM 登錄機碼中,或系統 managed-settings.json 檔案中,無論 Claude Code 選擇該裝置上的哪一個。需要 Claude Code v2.1.282 或更新版本。在 v2.1.282 之前,Claude Code 會忽略該設定,啟動錯誤會改為讀取 You cannot dynamically configure MCP servers when an enterprise MCP config is present。
Claude Code 從這些裝置來源讀取該設定,即使伺服器管理的設定傳遞您的其餘原則。它會忽略伺服器管理的設定本身、使用者可寫入的 HKCU 登錄和使用者或專案設定中的該設定。deniedMcpServers 項目 claude-in-chrome 仍會使用該設定封鎖伺服器。
透過受管設定提供伺服器
若要在不獨佔控制 MCP 的情況下為每位使用者提供一組遠端 MCP 伺服器,請在受管設定來源中的managedMcpServers 下列出它們:伺服器受管設定、Claude 應用程式閘道原則、MDM 設定檔或登錄原則,或 managed-settings.json。使用者保留他們自己新增的伺服器,並額外接收您的伺服器。需要 Claude Code v2.1.259 或更新版本。較早的用戶端會忽略此金鑰。
該值是一個以伺服器名稱為鍵的物件。每個項目的形狀與專案 .mcp.json 檔案中的 HTTP 或 SSE 伺服器相同,包括使用遠端 MCP 伺服器進行驗證中描述的選用 headers 和 oauth 成員。此範例提供一個搜尋伺服器,每位使用者可使用 OAuth 登入,以及一個記錄伺服器,會傳送您的組織簽發的標頭:
headers 並讓每位使用者使用 OAuth 登入。
項目可以包含的內容
Claude Code 只在通過以下每項檢查時才會載入項目。它會捨棄未通過檢查的項目,記錄您可以使用/status 讀取的通知,並仍然載入其他項目:
type是http或sse。如同在.mcp.json中,streamable-http被接受為http的別名。url是https://URL。Claude Code 拒絕純http://URL,包括指向localhost的 URL。- 該項目沒有
command、args、env或headersHelper成員,因此受管設定文件永遠不會命名要在使用者機器上執行的程式。 - 沒有值包含
${VAR}參考。Claude Code 不會在這些項目中展開環境變數,因此請寫入字面值。 - 伺服器名稱只包含字母、數字、連字號和底線,且沒有金鑰或值包含控制或隱形格式字元。
提供的伺服器如何載入
這些規則決定當提供的伺服器與另一個伺服器定義或此頁面上的另一個設定重疊時會載入什麼:- 提供的伺服器優先於本機、專案或使用者範圍中同名的伺服器,以及優先於指向相同 URL 的外掛程式伺服器或 claude.ai 連接器。
- 如果您也部署
managed-mcp.json,Claude Code 會一起載入其伺服器和提供的伺服器,當兩者都定義名稱時,檔案的項目優先。 - 當
strictPluginOnlyCustomization鎖定mcp表面時,提供的伺服器會繼續載入。 deniedMcpServers適用於提供的伺服器,包括來自使用者自己設定的項目,因此使用者可以為自己封鎖一個。提供的伺服器不需要allowedMcpServers項目。
managed-mcp.json 時,每次執行的旗標保留其含義:
- 使用者使用
--mcp-config以相同名稱傳遞的伺服器會取代該次執行的提供伺服器,並根據allowedMcpServers進行檢查。 --strict-mcp-config將提供的伺服器與所有其他已設定的伺服器一起排除。
managed-mcp.json 後,兩個旗標的行為如使用 managed-mcp.json 的獨佔控制所述。
使用者可以看到和更改的內容
使用者無法編輯或移除提供的伺服器:claude mcp remove報告伺服器由組織提供。- 當您也沒有部署
managed-mcp.json時,使用者在相同名稱下新增的項目會被儲存但在您的項目存在時不會被使用。 - 使用者仍然可以在
/mcp中為自己關閉提供的伺服器,該頁面在受管 MCPs 下列出提供的伺服器。
claude mcp get 和 /mcp 將提供的伺服器的 URL 顯示為其主機名稱,例如 https://mcp.example.com/…,而 claude mcp get 顯示其標頭名稱而不顯示其值。
managedMcpServers 適用的位置
Claude Code 從它在Claude Code 如何組合受管來源下選擇的受管來源讀取 managedMcpServers。當該來源將 managedSourcesBehavior 設定為 "merge" 時,Claude Code 改為提供來自每個管理員來源的伺服器,當兩個來源定義相同名稱時,較高排名來源的項目整體適用。它永遠不會從使用者可寫的 HKCU 登錄、從嵌入主機供應的父設定或從使用者、專案或本機設定檔案讀取金鑰,它會在那裡以警告方式捨棄金鑰。
Claude Code 不會在第三方部署中的 Claude Desktop 應用程式的 Code 標籤中或在應用程式的 Cowork 工作階段中讀取金鑰,因為 Claude Desktop 自己供應並鎖定這些工作階段的 MCP 伺服器。當您的受管設定在那裡帶有金鑰時,/status 和 claude doctor 會說明這一點。
提供的伺服器何時連接
當managedMcpServers 透過伺服器受管設定到達時,其時序遵循擷取和快取行為:
- 在具有快取設定的機器上,Claude Code 會保留此金鑰的快取副本,直到伺服器確認工作階段的設定,並在確認前等待該確認才載入 MCP 伺服器。如果確認失敗,工作階段會在沒有提供的伺服器的情況下繼續,
/status會說它們被保留。 - 在機器的首次啟動時,還沒有快取任何內容,在設定到達前啟動的互動式工作階段會在設定到達時立即連接提供的伺服器,而已經啟動的
claude -p執行可以在沒有它們的情況下完成。
- 新增伺服器:Claude Code 在更新的設定到達時連接它,無需重新啟動。
- 變更伺服器的項目:這些工作階段使用新定義重新連接到它。
- 移除伺服器:執行中的互動式工作階段在讀取變更的設定後會將其中斷連接。非互動式 (
-p) 執行會保留它直到結束。
使用允許清單和拒絕清單進行基於政策的控制
允許清單和拒絕清單會篩選允許載入哪些已設定的伺服器。它們不是登錄表:伺服器仍然必須由使用者、外掛程式或您的組織新增,才能讓任一清單對其適用。 您的組織透過managedMcpServers 提供的伺服器會在沒有允許清單項目的情況下載入,而跳過允許清單檢查的伺服器涵蓋 managed-mcp.json 伺服器。拒絕清單適用於每個伺服器,無論其來自何處,除了程序內 type: "sdk" 項目外。
若要將伺服器部署給使用者,請使用 managed-mcp.json 或 managedMcpServers。兩個清單也會篩選使用 --mcp-config CLI 旗標傳遞的伺服器,除了進程內 type: "sdk" 項目外;--strict-mcp-config 限制哪些設定檔會載入,不會繞過任一清單。
若要使允許清單具有權威性,請在受管設定來源(例如伺服器受管設定或已部署的 managed-settings.json 檔案)中同時設定 allowedMcpServers 和 allowManagedMcpServersOnly: true。
鎖定適用於每個由管理員控制的受管來源,因此已部署檔案中的鎖定仍然適用於同時使用不提及 MCP 的伺服器受管設定時。當鎖定開啟時,受管允許清單來自設定允許清單的最高排名管理員來源。跨來源讀取鎖定和允許清單需要 Claude Code v2.1.273 或更新版本。
將允許清單限制為僅受管設定顯示設定。
沒有 allowManagedMcpServersOnly,來自每個設定範圍的允許清單會合併,包括使用者自己的 ~/.claude/settings.json,因此使用者可以擴大您的允許清單允許的內容。拒絕清單無論如何都會從每個範圍合併。
allowManagedMcpServersOnly 與 allowManagedPermissionRulesOnly 分開,後者鎖定權限規則。設定該旗標不會強制執行 MCP 允許清單。按 URL、命令或名稱比對伺服器
allowedMcpServers 和 deniedMcpServers 是項目清單。每個項目是一個物件,具有單一鍵,可按其 URL、命令或名稱識別伺服器:
將
allowedMcpServers 保留未設定與將其設定為空陣列不同:
請參閱受管設定中的無效項目,了解項目未通過結構描述驗證時會發生什麼。
serverName 項目如何比對
serverName 項目會精確比對使用者指派的標籤,不支援萬用字元。
serverName 驗證在兩個清單之間有所不同:
- 在
deniedMcpServers中,serverName接受任何非空字串,不含前導或尾隨空白,因此您可以按其顯示名稱阻止 claude.ai 連接器。例如,{ "serverName": "claude.ai Slack" }會阻止 Slack 連接器。當您需要拒絕對重新命名具有魯棒性時,或當連接器名稱衝突並獲得(N)尾碼時,偏好使用serverUrl項目。 - 在
allowedMcpServers中,serverName限制為字母、數字、連字號和底線。使用serverUrl來允許列出 Claude Code 自行擷取的 claude.ai 連接器;對於雲端主機提供給自託管工作階段的連接器,請改用連接器流量離開您的網路下列出的項目。
disableClaudeAiConnectors。
serverCommand 項目如何比對
serverCommand 項目將命令及其引數保存為一個陣列,例如 { "serverCommand": ["npx", "-y", "server"] }。Claude Code 會將該陣列與伺服器設定中的命令和引數進行比較:
- 命令精確比對。 每個引數,按順序。
["npx", "-y", "server"]不比對["npx", "server"]或["npx", "-y", "server", "--flag"]。 - 不比較
env區塊。["node", "server.js"]會比對以任何env值執行該命令的伺服器。某些環境變數會變更node在啟動時載入的內容。若要自行設定env值,請在managed-mcp.json中定義伺服器。
serverUrl 項目如何比對
URL 支援在模式中的任何地方使用 * 萬用字元,包括 scheme。主機名稱比對不區分大小寫,並忽略尾隨 FQDN 點,因此 https://Mcp.Example.com/* 比對 https://mcp.example.com/api。路徑保持區分大小寫。
下表顯示常見模式允許的內容:
serverCommand 和 serverUrl 項目中的環境變數
serverCommand 和 serverUrl 值在比對前展開。政策項目和伺服器的已設定值都會經過 ${VAR} 和 ${VAR:-default} 展開,因此寫成 ["${HOME}/bin/server"] 的項目會比對使用相同參考或展開路徑的伺服器設定。serverName 值按字面比對,永遠不會展開。
兩側讀取不同的環境:
- 伺服器的已設定值:從即時程序環境展開,就像
.mcp.json的其餘部分一樣 - 政策項目:從固定環境展開,因此由專案或使用者設定檔設定的變數無法變更允許清單項目的含義
${USERPROFILE} 而不是 ${HOME}。
兩個清單的展開方式不同:
固定環境和此表中的規則需要 Claude Code v2.1.219 或更新版本。
伺服器如何被評估
在載入伺服器之前(包括來自managed-mcp.json 的伺服器),Claude Code 會按順序執行以下三項檢查。當使用者重新連接伺服器或在 /mcp 中開啟已停用的伺服器時,它會再次執行它們。程序內 type: "sdk" 伺服器(由啟動工作階段的應用程式註冊)會跳過全部三項。
- 合併清單。 來自每個設定範圍的允許清單和拒絕清單項目合併為一個允許清單和一個拒絕清單。當
allowManagedMcpServersOnly為true時,僅保留受管允許清單;拒絕清單始終從每個範圍合併。當存在多個受管來源時,從每個管理員來源讀取的鍵說明其中哪些提供受管範圍的清單。 - 檢查拒絕清單。 與任何拒絕清單項目比對的伺服器(按 URL、命令或名稱)會被阻止。沒有任何東西會覆寫拒絕清單比對。
- 檢查允許清單。 某些伺服器會跳過此檢查。如果
allowedMcpServers未在任何地方設定,每個通過拒絕清單的伺服器都會載入。如果已設定,伺服器必須比對的內容取決於其類型,如下表所示。
跳過允許清單檢查的伺服器
除了跳過全部三項檢查的程序內type: "sdk" 伺服器之外,還有三組伺服器會跳過允許清單檢查:
- 組織自己的伺服器:每個
managedMcpServers項目,以及任何managed-mcp.json項目,其值不使用${VAR}展開。 - 內建伺服器,例如 Chrome 中的 Claude、Claude Code 在執行中的 VS Code 或 JetBrains IDE 中連接的
ide伺服器,以及 CLI 本身設定的伺服器。 - Claude Tag 工作階段的 Slack 工具:它用來讀取執行緒和發佈回覆的伺服器會在沒有允許清單項目的情況下載入。
env、URL 或標頭中使用 ${VAR} 展開的 managed-mcp.json 伺服器仍會被檢查。Claude Code 也會檢查使用者、外掛程式或 claude.ai 新增的每個伺服器,以及使用者使用 --mcp-config 傳遞的每個伺服器。
範例設定
以下設定設定了具有拒絕清單的硬允許清單。反白顯示的行會變更如何評估清單的其餘部分,區塊後的標註說明每一行:- 第 3 行:第一個
serverUrl項目。一旦存在,每個遠端伺服器都必須比對 URL 模式,因此使用者無法透過給予它允許的名稱來取得未列出的遠端伺服器。 - 第 5 行:第一個
serverCommand項目。對 stdio 伺服器的效果相同,因此每個本機伺服器都必須精確比對列出的命令。 - 第 11 行:拒絕清單中的
serverName項目。拒絕清單項目始終適用,因此任何名為dangerous-server的伺服器都會被阻止,無論其 URL 或命令如何。
serverName 項目永遠不會比對任何內容,因為兩種傳輸類型都已有更嚴格的項目。
下面的摺疊式選單會逐步說明如何針對其他允許清單和拒絕清單組合評估伺服器。
僅限 URL 的允許清單
僅限 URL 的允許清單
僅限命令的允許清單
僅限命令的允許清單
混合名稱和命令允許清單
混合名稱和命令允許清單
僅限名稱的允許清單
僅限名稱的允許清單
具有拒絕清單覆蓋的允許清單
具有拒絕清單覆蓋的允許清單
將允許清單限制為僅受管設定
若要使受管允許清單成為唯一適用的清單,請在受管設定檔中設定allowManagedMcpServersOnly:
allowManagedMcpServersOnly 為 true 時,來自使用者、專案和本機設定的允許清單會被忽略。拒絕清單仍然從每個設定範圍合併,因此使用者可以始終為自己阻止伺服器。
限制如何呈現給使用者
如需了解當部署managed-mcp.json 且工作階段也具有 --mcp-config 伺服器時,使用者在啟動時看到的內容,請參閱 使用 managed-mcp.json 的獨佔控制。使用此表格來識別其他報告,並在推出變更前告知使用者預期情況:
當伺服器無聲地消失時,使用者無法收到原則是原因的訊號,因此在推出新限制時,請告知受影響的使用者哪些伺服器被封鎖。
監控 MCP 使用
當您配置 OpenTelemetry 匯出 時,Claude Code 可以記錄使用者呼叫的 MCP 伺服器和工具。設定OTEL_LOG_TOOL_DETAILS=1 以在工具事件和 成本和權杖計數器 中包含 MCP 伺服器和工具名稱,然後在您的收集器中聚合它們以查看您的使用者實際連接到的伺服器。請參閱 監控 以設定匯出器和完整事件架構。
配置摘要
本頁涵蓋的每個檔案和設定、它控制的內容以及如何傳遞它:相關資源
- 決定要強制執行的內容:MCP 限制以及權限規則、沙箱和其他管理控制
- 通過 MCP 將 Claude Code 連接到工具:完整的 MCP 參考,包括傳輸、範圍和身份驗證
- 設定:設定層次結構以及受管設定如何優先
- 伺服器受管設定:從 claude.ai 管理控制台傳遞
allowedMcpServers和deniedMcpServers - 安全:這些控制防禦的威脅模型
- Claude Enterprise Administrator Guide:SSO、SCIM、座位管理和推出劇本