- 选择与您需要的控制级别相匹配的模式
- 使用
managed-mcp.json部署固定服务器集,包括如何完全禁用 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 连接器,除非您允许它们与托管集一起使用。
两个其他设置可以进一步过滤托管集:
allowedMcpServers和deniedMcpServers也适用于托管服务器,因此不通过它们的托管服务器将不会加载。- 用户自己的
deniedMcpServers从他们的设置中合并,因此用户可以为自己阻止托管服务器。
managed-mcp.json 是一个独立文件,因此无法通过服务器管理的设置交付。任何可以写入具有管理员权限的系统路径的进程都可以部署它。大规模情况下,通常通过设备管理工具进行,例如 macOS 上的 Jamf 或配置文件、Windows 上的组策略或 Intune,或 Linux 上您选择的舰队管理。Claude Code 在以下路径之一查找该文件:
该文件使用与项目
.mcp.json 文件相同的格式:
使用按用户凭证进行身份验证
机器上的任何用户都可以读取此文件,因此不要在env 块中存储 API 密钥或其他凭证。改用以下其中一种方式传递按用户凭证:
${VAR}扩展从每个用户的环境中读取机密。- OAuth 或按用户标头以便每个用户以自己的身份进行身份验证。
headersHelper在连接时生成凭证。
验证配置
要确认文件生效,请在托管机器上运行两个检查:claude mcp list仅显示managed-mcp.json中的服务器。如果用户自己的服务器仍然出现,则文件未被读取;检查路径和权限。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 加载的 claude.ai 连接器与未部署 managed-mcp.json 时加载的连接器相同。允许列表和拒绝列表仍然适用于这些连接器,因此您可以使用 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 文件)中一起设置 allowedMcpServers 和 allowManagedMcpServersOnly: true。将允许列表限制为仅托管设置显示配置。没有 allowManagedMcpServersOnly,来自每个设置源的允许列表会合并,包括用户自己的 ~/.claude/settings.json,因此用户可以扩展您的允许列表允许的内容。拒绝列表无论如何都会从每个源合并。
allowManagedMcpServersOnly 与 allowManagedPermissionRulesOnly 分开,后者锁定权限规则。设置该标志不会强制执行 MCP 允许列表。按 URL、命令或名称匹配服务器
allowedMcpServers 和 deniedMcpServers 是条目列表。每个条目是一个对象,具有单个键,用于按 URL、命令或名称标识服务器:
不设置
allowedMcpServers 与将其设置为空数组不同:
请参阅托管设置中的无效条目了解条目未通过架构验证时会发生什么。
serverName 验证在两个列表之间有所不同:
- 在
deniedMcpServers中,serverName接受任何非空字符串,因此您可以按显示名称阻止 claude.ai 连接器。例如,{ "serverName": "claude.ai Slack" }阻止 Slack 连接器。当您需要拒绝对重命名具有鲁棒性时,或当连接器名称冲突并获得(N)后缀时,更倾向于使用serverUrl条目。 - 在
allowedMcpServers中,serverName仅限于字母、数字、连字符和下划线。使用serverUrl来允许列表 claude.ai 连接器。
disableClaudeAiConnectors。
如何评估服务器
在加载服务器之前,包括来自managed-mcp.json 的服务器,Claude Code 按顺序运行三个检查:
- 合并列表。 来自每个设置源的允许列表和拒绝列表条目合并为一个允许列表和一个拒绝列表。当
allowManagedMcpServersOnly为true时,仅保留托管允许列表;拒绝列表始终从每个源合并。 - 检查拒绝列表。 与任何拒绝列表条目匹配的服务器(按 URL、命令或名称)被阻止。没有任何内容可以覆盖拒绝列表匹配。
- 检查允许列表。 如果
allowedMcpServers未在任何地方设置,通过拒绝列表的每个服务器都会加载。如果已设置,服务器必须匹配的内容取决于其类型,如下表所示。
这些检查中适用三个匹配规则:
- 命令精确匹配。 每个参数,按顺序。
["npx", "-y", "server"]不匹配["npx", "server"]或["npx", "-y", "server", "--flag"]。 serverCommand和serverUrl值在匹配前展开。 策略条目和服务器的配置值都经过与.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 自己的进程环境,引用变量的 serverCommand 或 serverUrl 策略条目展开为用户设置的任何值。对于您依赖的强制执行条目,使用字面 URL 和命令。
示例配置
下面的配置设置了一个硬允许列表和一个拒绝列表。突出显示的行改变了列表其余部分的评估方式,块后的标注解释了每一行:- 第 3 行:第一个
serverUrl条目。一旦存在,每个远程服务器必须匹配 URL 模式,因此用户无法通过给它一个允许的名称来获得未列出的远程服务器。 - 第 5 行:第一个
serverCommand条目。对 stdio 服务器的效果相同,因此每个本地服务器必须精确匹配列出的命令。 - 第 11 行:拒绝列表中的
serverName条目。拒绝列表条目始终适用,因此任何名为dangerous-server的服务器都被阻止,无论其 URL 或命令如何。
serverName 条目永远不会匹配任何内容,因为两种传输类型都已有更严格的条目。
下面的手风琴演示了如何针对其他允许列表和拒绝列表组合评估服务器。
仅 URL 允许列表
仅 URL 允许列表
仅命令允许列表
仅命令允许列表
混合名称和命令允许列表
混合名称和命令允许列表
仅名称允许列表
仅名称允许列表
带拒绝列表覆盖的允许列表
带拒绝列表覆盖的允许列表
将允许列表限制为仅托管设置
要使托管允许列表成为唯一适用的列表,请在托管设置文件中设置allowManagedMcpServersOnly:
allowManagedMcpServersOnly 为 true 时,来自用户、项目和本地设置的允许列表被忽略。拒绝列表仍然从所有源合并,因此用户总是可以为自己阻止服务器。
限制如何显示给用户
当限制阻止服务器时,用户要么看到来自claude mcp add 的错误,要么服务器无声地停止加载。使用此表识别这些报告,并在推出更改之前告知用户会发生什么:
在最后一种情况下,用户没有收到策略是其服务器消失原因的信号,因此在推出新限制时告知受影响的用户哪些服务器被阻止。
监控 MCP 使用情况
当配置 OpenTelemetry 导出时,Claude Code 可以记录用户调用的 MCP 服务器和工具。设置OTEL_LOG_TOOL_DETAILS=1 以在工具事件中包含 MCP 服务器和工具名称,然后在您的收集器中聚合它们以查看用户实际连接的服务器。请参阅监控以设置导出器和完整的事件架构。
配置摘要
本页面涵盖的每个文件和设置、它控制的内容以及如何交付它:相关资源
- 决定要强制执行的内容:MCP 限制以及权限规则、沙箱和其他管理控制
- 通过 MCP 将 Claude Code 连接到工具:完整的 MCP 参考,包括传输、范围和身份验证
- 设置:设置层次结构以及托管设置如何优先
- 服务器管理的设置:从 Claude.ai 管理控制台交付
allowedMcpServers和deniedMcpServers - 安全:这些控制防御的威胁模型
- Claude 企业管理员指南:SSO、SCIM、座位管理和推出剧本