Контролируйте доступ к серверам MCP для вашей организации
Ограничьте, какие серверы MCP пользователи могут добавлять или подключать, или предоставьте серверы каждому пользователю с помощью управляемых файлов конфигурации, управляемых параметров, списков разрешений и списков запретов.
По умолчанию любой, кто запускает Claude Code, может подключить любой MCP сервер по своему выбору. Anthropic проверяет соединители в соответствии с его критериями листинга перед добавлением их в Anthropic Directory, но не проводит проверку безопасности и не управляет никакими MCP серверами. Как администратор, вы можете ограничить, какие серверы работают в вашей организации, от развертывания фиксированного одобренного набора до полного отключения MCP, и вы можете предоставить серверы каждому пользователю.
Эти ограничения охватывают серверы, которые Claude Code загружает сам, включая соединители, которые он получает из claude.ai. Соединители, которые настольное приложение доставляет в свои локальные и SSH сеансы, поступают внутри процесса и управляются из параметров вашей организации claude.ai вместо этого; Как соединители достигают Claude Code показывает, какие элементы управления применяются к соединителям в каждом типе сеанса, включая облачные сеансы.
На этой странице рассматривается, как:
- Выбрать шаблон, который соответствует необходимому вам уровню контроля
- Развернуть фиксированный набор серверов с помощью
managed-mcp.json, включая то, как полностью отключить MCP - Предоставить серверы через управляемые параметры, пока пользователи сохраняют свои собственные
- Контролировать серверы с помощью списков разрешений и списков запретов
- Сообщить пользователям, чего ожидать, когда ограничение блокирует сервер
- Отслеживать, какие серверы фактически использует ваша организация
На странице Security рассматривается модель угроз MCP и способы оценки сервера перед его одобрением. Решите, что применять охватывает ограничения MCP наряду с другими административными элементами управления.
Выберите шаблон
Claude Code поддерживает различные уровни ограничений. Каждый шаблон использует один или несколько из механизмов, описанных ниже: managed-mcp.json для развертывания фиксированного набора, управляемый параметр managedMcpServers для предоставления серверов наряду с теми, которые добавляют пользователи, и allowedMcpServers/deniedMcpServers для фильтрации того, что пользователи настраивают.
| Шаблон | Что он делает | Настройка |
|---|---|---|
| Отключить MCP | Серверы не загружаются, кроме встроенных серверов, которые регистрирует приложение, запустившее сеанс, и любых, которые вы предоставляете через managedMcpServers |
managed-mcp.json с пустой картой серверов |
| Фиксированное развертывание | Каждый пользователь получает одни и те же серверы и не может добавлять другие | managed-mcp.json с нужными вам серверами |
| Предоставленные серверы | Каждый пользователь получает удаленные серверы из вашего списка и сохраняет свои собственные | managedMcpServers в управляемых параметрах |
| Утвержденный каталог | Опубликуйте список утвержденных серверов; пользователи добавляют нужные им, все остальное блокируется | allowedMcpServers + allowManagedMcpServersOnly: true |
| Только серверы плагинов | Пользователи не могут добавлять серверы через ~/.claude.json или .mcp.json; серверы плагинов по-прежнему загружаются |
strictPluginOnlyCustomization со значением mcp в списке |
| Мягкий список разрешений | Применить список разрешений, который пользователи могут расширить в своих собственных параметрах | allowedMcpServers без allowManagedMcpServersOnly |
| Только список запретов | Заблокировать известные плохие серверы, разрешить все остальное | deniedMcpServers |
| Без ограничений | Пользователи добавляют что угодно | Не развертывайте никакую управляемую конфигурацию MCP |
Claude Code не имеет встроенного реестра MCP-серверов, который пользователи могут просматривать и устанавливать. Для шаблона утвержденного каталога поделитесь утвержденным списком и его командами claude mcp add в месте, где его найдут ваши пользователи, например во внутренней вики, или распространяйте серверы как плагины через управляемый рынок плагинов, чтобы пользователи могли просматривать и устанавливать их из /plugin.
Исключительный контроль с помощью managed-mcp.json
Если вы развернёте файл managed-mcp.json, Claude Code загружает только серверы, которые определены в этом файле, серверы, которые вы предоставляете через managedMcpServers, плюс любые встроенные серверы, которые регистрирует приложение, запустившее сеанс, такие как собственный сервер расширения VS Code или коннекторы, которые поставляет настольное приложение. Пользователи не могут добавлять, изменять или использовать какие-либо другие MCP серверы, включая серверы, предоставляемые плагинами, и серверы, переданные с помощью флага CLI --mcp-config. Файл также подавляет коннекторы claude.ai, которые Claude Code загружает сам по себе, если вы не разрешите их наряду с управляемым набором.
Развёртывание managed-mcp.json
managed-mcp.json — это отдельный файл, поэтому он не может быть доставлен через параметры, управляемые сервером. Чтобы доставлять серверы через управляемые параметры вместо этого, без исключительного контроля, используйте managedMcpServers.
Любой процесс, который может писать в системный путь с правами администратора, может развернуть файл. Во всём парке устройств это обычно происходит через инструменты управления устройствами, такие как Jamf или профиль конфигурации на macOS, Group Policy или Intune на Windows, или выбранное вами управление парком на Linux. Claude Code ищет файл по одному из этих путей:
| Платформа | Путь |
|---|---|
| macOS | /Library/Application Support/ClaudeCode/managed-mcp.json |
| Linux и WSL | /etc/claude-code/managed-mcp.json |
| Windows | C:\Program Files\ClaudeCode\managed-mcp.json |
Файл использует тот же формат, что и файл проекта .mcp.json:
{
"mcpServers": {
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/"
},
"sentry": {
"type": "http",
"url": "https://mcp.sentry.dev/mcp"
},
"company-internal": {
"type": "stdio",
"command": "/usr/local/bin/company-mcp-server",
"args": ["--config", "/etc/company/mcp-config.json"],
"env": {
"COMPANY_API_URL": "https://internal.example.com"
}
}
}
}
Аутентификация с помощью учётных данных для каждого пользователя
Любой пользователь на машине может прочитать этот файл, поэтому не сохраняйте ключи API или другие учётные данные в блоках env. Передавайте учётные данные для каждого пользователя одним из следующих способов:
- Расширение
${VAR}для чтения секретов из окружения каждого пользователя. - OAuth или заголовки для каждого пользователя, чтобы каждый пользователь аутентифицировался как сам себя.
headersHelperдля создания учётных данных во время подключения.
Серверы, переданные с помощью `--mcp-config` или `--strict-mcp-config`
Когда сеанс получает серверы через --mcp-config при развёрнутом managed-mcp.json, то, что видит пользователь, отличается между рабочей станцией и облачным сеансом:
- На рабочей станции Claude Code завершает работу при запуске с сообщением
You cannot dynamically configure MCP servers when an enterprise MCP config is present. - В облачных сеансах на хосте, где развёрнут файл, например на самостоятельно размещённом runner, Claude Code запускается только с управляемыми серверами и пропускает коннекторы claude.ai и другие серверы, которые облачный хост доставляет через
--mcp-config. Ничто в сеансе не сообщает пользователю, какие серверы были исключены. Claude Code называет их в предупреждении на своём stderr, которое самостоятельно размещённый runner записывает на уровне логированияdebug.
Если пользователь передаёт --strict-mcp-config, Claude Code завершает работу при запуске как на рабочей станции, так и в облачном сеансе, потому что этот флаг просит заменить управляемый набор.
Как списки разрешений и запретов применяются к управляемому набору
Список запретов может дополнительно фильтровать серверы в managed-mcp.json:
deniedMcpServersприменяется и к управляемым серверам, поэтому управляемый сервер, соответствующий записи, не будет загружен.- Собственный
deniedMcpServersпользователя объединяется из его параметров, поэтому пользователи могут заблокировать управляемый сервер для себя.
allowedMcpServers не применяется к серверам в managed-mcp.json, за одним исключением: Claude Code по-прежнему проверяет сервер, определение которого использует расширение ${VAR}, в соответствии со списком разрешений, потому что эффективная конфигурация этого сервера поступает из окружения каждого пользователя, а не только из файла. До версии 2.1.259 каждый управляемый сервер должен был пройти список разрешений всякий раз, когда он был установлен. Смотрите Как оценивается сервер для того, какие поля запускают проверку ${VAR} и полный порядок проверок.
Если вы использовали allowedMcpServers для предотвращения загрузки некоторых ваших собственных серверов managed-mcp.json, эти серверы начнут загружаться при первом запуске каждого пользователя версии 2.1.259 или позже, если они не используют расширение ${VAR}, без подсказки или уведомления: только deniedMcpServers по-прежнему вычитается из этих серверов. Добавьте записи в список запретов для них или разверните отдельный managed-mcp.json для каждой группы перед обновлением ваших пользователей.
Проверка конфигурации
Чтобы подтвердить, что файл действует, выполните две проверки на управляемой машине:
claude mcp listпоказывает только серверы вmanaged-mcp.json, плюс любые, которые вы предоставляете черезmanagedMcpServers. Если собственные серверы пользователя по-прежнему отображаются, файл не читается; проверьте путь и разрешения.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 сервер, кроме встроенных серверов, которые регистрирует приложение, запустившее сеанс:
{
"mcpServers": {}
}
claude mcp add завершается с ошибкой политики предприятия, указанной выше. Серверы, которые пользователи ранее настроили, перестают загружаться при следующем запуске сеанса, без предупреждения о том, что причина в политике. Серверы, которые вы предоставляете через managedMcpServers, по-прежнему загружаются при пустой карте, поэтому оставьте этот ключ также неустановленным, чтобы полностью отключить MCP.
Разрешение коннекторов claude.ai наряду с управляемым набором
По умолчанию развёртывание managed-mcp.json подавляет коннекторы claude.ai, которые Claude Code загружает сам по себе, включая коннекторы, которые администратор настроил для организации в консоли администратора claude.ai. Чтобы загружать эти коннекторы наряду с серверами в managed-mcp.json, установите "allowAllClaudeAiMcps": true в источнике управляемых параметров.
Когда параметр включен, Claude Code загружает те же коннекторы claude.ai, которые он загружал бы, если бы managed-mcp.json не был развёрнут. Списки разрешений и запретов по-прежнему применяются к этим коннекторам, поэтому вы можете заблокировать конкретные с помощью deniedMcpServers. Параметр влияет только на коннекторы claude.ai, которые Claude Code загружает сам по себе; серверы, предоставляемые плагинами, остаются подавленными.
Облачные сеансы и локальные и SSH сеансы настольного приложения получают коннекторы другим способом, описанным в Как коннекторы достигают Claude Code. managed-mcp.json на хосте, который запускает облачный сеанс, например на хосте самостоятельно размещённого runner, подавляет коннекторы этого сеанса независимо от того, установили ли вы allowAllClaudeAiMcps. Никакой managed-mcp.json не достигает коннекторов, которые настольное приложение доставляет своим локальным и SSH сеансам.
Claude Code читает allowAllClaudeAiMcps только из контролируемых администратором уровней политики: параметры, управляемые сервером, развёрнутый MDM plist или ключ реестра HKLM, или системный файл managed-settings.json. Размещение его в параметрах пользователя или проекта не имеет эффекта, поэтому пользователи не могут повторно включить коннекторы, которые исключительный контроль подавил.
Предоставление серверов через управляемые параметры
Чтобы предоставить каждому пользователю набор удалённых MCP серверов без исключительного контроля над MCP, перечислите их в разделе managedMcpServers в источнике управляемых параметров: параметры, управляемые сервером, политика Claude apps gateway, профиль MDM или политика реестра, либо managed-settings.json. Пользователи сохраняют серверы, которые они добавляют сами, и получают ваши в дополнение. Требуется Claude Code версии 2.1.259 или позже. Более ранние клиенты игнорируют этот ключ.
Значение представляет собой объект, ключами которого являются имена серверов. Каждая запись имеет ту же структуру, что и HTTP или SSE сервер в файле проекта .mcp.json, включая необязательные члены headers и oauth, описанные в разделе Аутентификация с удалёнными MCP серверами. Этот пример предоставляет сервер поиска, на который каждый пользователь входит с помощью OAuth, и сервер записей, который отправляет заголовок, выданный вашей организацией:
{
"managedMcpServers": {
"search": {
"type": "http",
"url": "https://search.example.com/mcp"
},
"records": {
"type": "http",
"url": "https://records.example.com/mcp",
"headers": {
"X-Records-Key": "key-issued-for-all-claude-code-users"
}
}
}
}
Любой, кто может читать управляемые параметры на машине, включая самого пользователя, может прочитать значение заголовка, которое вы здесь установили. Используйте учётные данные, выданные для этой целевой аудитории, или опустите headers и позвольте каждому пользователю войти с помощью OAuth.
Что может содержать запись
Claude Code загружает запись только если она проходит все проверки ниже. Он отбрасывает запись, которая не прошла одну из них, записывает уведомление, которое вы можете прочитать с помощью /status, и всё ещё загружает остальные записи:
type— этоhttpилиsse. Как в.mcp.json,streamable-httpпринимается как псевдоним дляhttp.url— это URLhttps://. Claude Code отказывает в обычном URLhttp://, включая тот, который указывает наlocalhost.- Запись не содержит членов
command,args,envилиheadersHelper, поэтому документ управляемых параметров никогда не называет программу для запуска на машине пользователя. - Ни одно значение не содержит ссылку
${VAR}. Claude Code не расширяет переменные окружения в этих записях, поэтому пишите буквальные значения. - Имя сервера содержит только буквы, цифры, дефисы и подчёркивания, и ни один ключ или значение не содержит управляющих или невидимых символов форматирования.
Claude Desktop имеет управляемый параметр с тем же именем, значение которого представляет собой массив записей другой формы, поэтому не копируйте один в другой. Claude Code не принимает форму массива и вместо этого записывает уведомление.
Claude apps gateway выполняет те же проверки при загрузке; см. MCP серверы в политике.
Как загружаются предоставленные серверы
Эти правила определяют, что загружается, когда предоставленный сервер перекрывается с другим определением сервера или с другим параметром на этой странице:
- Предоставленный сервер имеет приоритет над сервером с тем же именем в локальной, проектной или пользовательской области, а также над сервером плагина или коннектором claude.ai, который указывает на тот же URL.
- Если вы также развёртываете
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, который перечисляет предоставленные серверы в разделе Managed MCPs.
claude mcp get и /mcp показывают URL предоставленного сервера только как его хост, например https://mcp.example.com/…, и claude mcp get показывает имена его заголовков без их значений.
Где применяется `managedMcpServers`
Claude Code читает managedMcpServers из управляемого источника, который он выбирает в разделе Как Claude Code объединяет управляемые источники. Когда этот источник устанавливает managedSourcesBehavior на "merge", Claude Code вместо этого предоставляет серверы из каждого источника администратора, и когда два источника определяют одно и то же имя, запись источника с более высоким рейтингом применяется полностью. Он никогда не читает ключ из реестра HKCU, доступного для записи пользователем, из родительских параметров, которые предоставляет хост встраивания, или из файлов параметров пользователя, проекта или локальных параметров, где он отбрасывает ключ с предупреждением.
Claude Code не читает ключ в приложении Claude Desktop на вкладке Code при развёртывании третьей стороной или в сеансах Cowork приложения, потому что Claude Desktop сам предоставляет и блокирует MCP серверы этих сеансов. /status и claude doctor говорят об этом, когда ваши управляемые параметры содержат ключ там.
Когда подключаются предоставленные серверы
Когда managedMcpServers поступает через параметры, управляемые сервером, его время следует Поведение выборки и кэширования:
- На машине с кэшированными параметрами Claude Code удерживает кэшированную копию этого ключа до тех пор, пока сервер не подтвердит параметры для сеанса, и ждёт этого подтверждения перед загрузкой MCP серверов. Если подтверждение не удаётся, сеанс продолжается без предоставленных серверов и
/statusговорит, что они удерживаются. - При первом запуске машины, когда ещё ничего не кэшировано, интерактивный сеанс, который начинается до прибытия параметров, подключает предоставленные серверы, как только они прибывают, и запуск
claude -p, который уже начался, может завершиться без них.
С входом через gateway Claude Code загружает политику перед началом сеанса, поэтому ни один случай не задерживает и не пропускает предоставленные серверы.
Интерактивные сеансы, которые уже запущены, применяют ваши правки к ключу:
- Добавить сервер: Claude Code подключает его, когда прибывают обновлённые параметры, без перезагрузки.
- Изменить запись сервера: эти сеансы переподключаются к нему с новым определением.
- Удалить сервер: запущенный интерактивный сеанс отключает его, как только он прочитает изменённые параметры. Неинтерактивный запуск (
-p) сохраняет его до конца.
Контроль на основе политик с использованием списков разрешений и запретов
Списки разрешений и запретов фильтруют, какие настроенные серверы могут загружаться. Это не реестр: сервер все равно должен быть добавлен пользователем, плагином или вашей организацией, прежде чем любой из списков применится к нему.
Серверы, которые ваша организация доставляет через managedMcpServers, загружаются без записи в список разрешений, а раздел Как оценивается сервер охватывает серверы managed-mcp.json. Список запретов применяется к каждому серверу независимо от того, откуда он поступил, за исключением записей type: "sdk" в процессе.
Для развертывания серверов пользователям используйте managed-mcp.json или managedMcpServers. Оба списка также фильтруют серверы, переданные с флагом CLI --mcp-config, за исключением записей type: "sdk" в процессе; --strict-mcp-config ограничивает, какие файлы конфигурации загружаются, и не обходит ни один из списков.
Чтобы сделать список разрешений авторитетным, установите allowedMcpServers и allowManagedMcpServersOnly: true вместе в источнике управляемых параметров, таком как параметры, управляемые сервером, или развернутый файл managed-settings.json. В разделе Ограничить список разрешений только управляемыми параметрами показана конфигурация. Без allowManagedMcpServersOnly списки разрешений из каждой области параметров объединяются, включая собственный файл ~/.claude/settings.json пользователя, поэтому пользователь может расширить то, что разрешает ваш список разрешений. Списки запретов объединяются из каждой области независимо.
allowManagedMcpServersOnly отличается от allowManagedPermissionRulesOnly, который блокирует только правила разрешений. Установка этого флага не применяет список разрешений MCP.
Сопоставление серверов по URL, команде или имени
allowedMcpServers и deniedMcpServers — это списки записей. Каждая запись — это объект с одним ключом, который идентифицирует серверы по их URL, команде или имени:
| Ключ | Совпадает с | Используется для |
|---|---|---|
serverUrl |
URL удаленного сервера, точный или с подстановочными знаками * |
HTTP и SSE серверы |
serverCommand |
Точная команда и аргументы, которые запускают сервер stdio | Серверы stdio |
serverName |
Метка, назначенная пользователем. Только точное совпадение; подстановочные знаки не расширяются | Любой тип, но см. предупреждение ниже |
Оставление allowedMcpServers неустановленным отличается от установки его в пустой массив:
| Параметр | Не установлен (по умолчанию) | Пустой массив [] |
Заполненный |
|---|---|---|---|
allowedMcpServers |
Все серверы разрешены | Серверы не разрешены, кроме собственных серверов организации | Разрешены только совпадающие серверы, кроме собственных серверов организации |
deniedMcpServers |
Серверы не блокируются | Серверы не блокируются | Совпадающие серверы блокируются |
Информацию о том, что происходит, когда запись не проходит проверку схемы, см. в разделе Недействительные записи в управляемых параметрах.
Запись serverName в любом из списков не является средством контроля безопасности. Имя — это метка, которую пользователь назначает при запуске claude mcp add или редактировании файла конфигурации, а не базовый сервер, поэтому пользователь может назвать любой сервер github. Для соединителей claude.ai имя — это отображаемое имя, возвращаемое claude.ai, которое может измениться. Чтобы обеспечить выполнение определенных серверов, добавьте записи serverCommand или serverUrl.
Проверка serverName отличается между двумя списками:
- В
deniedMcpServersserverNameпринимает любую непустую строку, поэтому вы можете блокировать соединители claude.ai по их отображаемому имени. Например,{ "serverName": "claude.ai Slack" }блокирует соединитель Slack. Предпочитайте записьserverUrl, когда вам нужно, чтобы запрет был устойчив к переименованиям, или когда имя соединителя конфликтует и получает суффикс(N). - В
allowedMcpServersserverNameограничен буквами, цифрами, дефисами и подчеркиваниями. ИспользуйтеserverUrlдля добавления в список разрешений соединителя claude.ai, который Claude Code загружает сам; для соединителей, которые облачный хост доставляет в самостоятельно размещаемые сеансы, используйте вместо этого записи, указанные в разделе Трафик соединителя покидает вашу сеть.
Чтобы отключить все соединители claude.ai, которые Claude Code загружает сам, см. disableClaudeAiConnectors.
Как оценивается сервер
Перед загрузкой сервера, включая сервер из managed-mcp.json, Claude Code выполняет три проверки ниже по порядку. Он выполняет их снова, когда пользователь переподключает сервер или включает отключенный в /mcp. Серверы type: "sdk" в процессе, которые приложение, запустившее сеанс, регистрирует, пропускают все три.
-
Объедините списки. Записи списка разрешений и запретов из каждой области параметров объединяются в один список разрешений и один список запретов, при этом списки управляемой области поступают из управляемого источника или источников, которые применяет Claude Code. Когда
allowManagedMcpServersOnlyимеет значениеtrue, сохраняется только управляемый список разрешений; список запретов всегда объединяется из каждой области. -
Проверьте список запретов. Сервер, который совпадает с любой записью списка запретов по URL, команде или имени, блокируется. Ничто не переопределяет совпадение списка запретов.
-
Проверьте список разрешений. Если
allowedMcpServersне установлен нигде, каждый сервер, прошедший список запретов, загружается. Если он установлен, то, с чем должен совпадать сервер, зависит от его типа, показанного в таблице ниже.Собственные серверы организации пропускают эту проверку: каждая запись
managedMcpServersи любая записьmanaged-mcp.json, значения которой не используют расширение${VAR}. Встроенные серверы также пропускают ее, такие как Claude в Chrome, серверide, к которому Claude Code подключается в работающей IDE VS Code или JetBrains, и серверы, которые сам CLI настраивает.Сервер
managed-mcp.json, который использует расширение${VAR}в своей команде, аргументах,env, URL или заголовках, все еще проверяется, как и каждый сервер, добавленный пользователем, плагином,--mcp-configили claude.ai.
| Тип сервера | Разрешено, когда совпадает |
|---|---|
| Удаленный (HTTP или SSE) | Запись serverUrl. Совпадение serverName учитывается только, когда список разрешений не содержит записей serverUrl |
| Stdio | Запись serverCommand. Совпадение serverName учитывается только, когда список разрешений не содержит записей serverCommand |
Три правила сопоставления применяются в этих проверках:
- Команды совпадают точно. Каждый аргумент по порядку.
["npx", "-y", "server"]не совпадает с["npx", "server"]или["npx", "-y", "server", "--flag"]. - Значения
serverCommandиserverUrlрасширяются перед сопоставлением. Как запись политики, так и настроенное значение сервера проходят через расширение${VAR}и${VAR:-default}, поэтому запись, написанная как["${HOME}/bin/server"], совпадает с конфигурацией сервера, которая использует либо ту же ссылку, либо расширенный путь. В Windows ссылайтесь на переменную окружения, установленную там, такую как${USERPROFILE}вместо${HOME}. ЗначенияserverNameсовпадают буквально и никогда не расширяются. Две стороны читают разные окружения; раздел Как расширяются записи политики охватывает, какие и как записи списка разрешений и запретов отличаются. - URL поддерживают подстановочные знаки
*в любом месте шаблона, включая схему. Сопоставление имени хоста не учитывает регистр и игнорирует конечную точку FQDN, поэтомуhttps://Mcp.Example.com/*совпадает сhttps://mcp.example.com/api. Пути остаются чувствительными к регистру.
| Шаблон | Разрешает |
|---|---|
https://mcp.example.com/* |
Все пути на определенном домене |
https://mcp.example.com |
Также все пути на этом домене. Шаблон без пути совпадает с любым путем |
https://*.example.com/* |
Любой поддомен example.com |
http://localhost:*/* |
Любой порт на localhost |
*://mcp.example.com/* |
Любая схема к определенному домену |
Как расширяются записи политики
Настроенное значение сервера расширяется из живого окружения процесса, как и остальная часть .mcp.json. Запись политики расширяется из закрепленного окружения вместо этого, поэтому переменная, установленная файлом проекта или параметров пользователя, не может изменить значение записи списка разрешений. Поскольку запись политики все еще зависит от значения переменной запускающей оболочки для любой переменной, на которую она ссылается, используйте буквальные URL и команды для записей, на которые вы полагаетесь для применения.
| Список записей | Расширяется из | Расширение, которое изменило бы схему, хост или область пути записи URL |
|---|---|---|
allowedMcpServers |
Окружение, с которым Claude Code запустился, плюс значения env из управляемых параметров |
Claude Code игнорирует запись |
deniedMcpServers |
То же самое, и переменная без значения при запуске и без :-default заполняется из файлов параметров вне репозитория, таких как параметры пользователя или управляемые, которые только когда-либо расширяют то, с чем совпадает запись |
Запись все еще совпадает |
Требуется Claude Code v2.1.219 или позже.
Пример конфигурации
Конфигурация ниже устанавливает жесткий список разрешений со списком запретов. Выделенные строки изменяют способ оценки остальной части списка, и выноски после блока объясняют каждую:
{
"allowedMcpServers": [
{ "serverUrl": "https://api.githubcopilot.com/*" },
{ "serverUrl": "https://mcp.sentry.dev/*" },
{ "serverCommand": ["npx", "-y", "@modelcontextprotocol/server-filesystem", "."] },
{ "serverCommand": ["python", "/usr/local/bin/approved-server.py"] },
{ "serverUrl": "https://mcp.example.com/*" },
{ "serverUrl": "https://*.internal.example.com/*" }
],
"deniedMcpServers": [
{ "serverName": "dangerous-server" },
{ "serverCommand": ["npx", "-y", "unapproved-package"] },
{ "serverUrl": "https://*.untrusted.example.com/*" }
]
}
- Строка 3: первая запись
serverUrl. Как только она существует, каждый удаленный сервер должен совпадать с шаблоном URL, поэтому пользователь не может получить неуказанный удаленный сервер, дав ему разрешенное имя. - Строка 5: первая запись
serverCommand. Тот же эффект для серверов stdio, поэтому каждый локальный сервер должен совпадать с указанной командой точно. - Строка 11: запись
serverNameв списке запретов. Записи списка запретов всегда применяются, поэтому любой сервер с именемdangerous-serverблокируется независимо от его URL или команды.
Запись serverName в этом списке разрешений никогда не совпадет ни с чем, так как оба типа транспорта уже имеют более строгие записи.
Аккордеоны ниже проходят через то, как сервер оценивается в сравнении с другими комбинациями списков разрешений и запретов.
Список разрешений только по URL
{
"allowedMcpServers": [
{ "serverUrl": "https://mcp.example.com/*" },
{ "serverUrl": "https://*.internal.example.com/*" }
]
}
| Сервер | Результат |
|---|---|
HTTP сервер в https://mcp.example.com/api |
Разрешен: совпадает с шаблоном URL |
HTTP сервер в https://api.internal.example.com/mcp |
Разрешен: совпадает с подстановочным поддоменом |
HTTP сервер в https://external.example.com/mcp |
Заблокирован: не совпадает ни с одним шаблоном URL |
| Сервер stdio с любой командой | Заблокирован: нет записей имени или команды для совпадения |
Список разрешений только по команде
{
"allowedMcpServers": [
{ "serverCommand": ["npx", "-y", "approved-package"] }
]
}
| Сервер | Результат |
|---|---|
Сервер stdio с ["npx", "-y", "approved-package"] |
Разрешен: совпадает с командой |
Сервер stdio с ["node", "server.js"] |
Заблокирован: не совпадает с командой |
HTTP сервер с именем my-api |
Заблокирован: нет записей имени для совпадения |
Смешанный список разрешений имени и команды
{
"allowedMcpServers": [
{ "serverName": "github" },
{ "serverCommand": ["npx", "-y", "approved-package"] }
]
}
| Сервер | Результат |
|---|---|
Сервер stdio с именем local-tool и ["npx", "-y", "approved-package"] |
Разрешен: совпадает с командой |
Сервер stdio с именем local-tool и ["node", "server.js"] |
Заблокирован: записи команды существуют, но не совпадают |
Сервер stdio с именем github и ["node", "server.js"] |
Заблокирован: серверы stdio должны совпадать с командами, когда существуют записи команды |
HTTP сервер с именем github |
Разрешен: совпадает с именем |
HTTP сервер с именем other-api |
Заблокирован: имя не совпадает |
Список разрешений только по имени
{
"allowedMcpServers": [
{ "serverName": "github" },
{ "serverName": "internal-tool" }
]
}
| Сервер | Результат |
|---|---|
Сервер stdio с именем github с любой командой |
Разрешен: нет ограничений команды |
Сервер stdio с именем internal-tool с любой командой |
Разрешен: нет ограничений команды |
HTTP сервер с именем github |
Разрешен: совпадает с именем |
Любой сервер с именем other |
Заблокирован: имя не совпадает |
Список разрешений с переопределением списка запретов
{
"allowedMcpServers": [
{ "serverUrl": "https://*.example.com/*" }
],
"deniedMcpServers": [
{ "serverUrl": "https://staging.example.com/*" }
]
}
| Сервер | Результат |
|---|---|
HTTP сервер в https://mcp.example.com/api |
Разрешен: совпадает с шаблоном URL списка разрешений, нет совпадения списка запретов |
HTTP сервер в https://staging.example.com/api |
Заблокирован: совпадает с обоими, но список запретов имеет приоритет |
HTTP сервер в https://other.com/mcp |
Заблокирован: не совпадает со списком разрешений |
Ограничить список разрешений только управляемыми параметрами
Чтобы сделать управляемый список разрешений единственным применяемым, установите allowManagedMcpServersOnly в файле управляемых параметров:
{
"allowManagedMcpServersOnly": true,
"allowedMcpServers": [
{ "serverUrl": "https://api.githubcopilot.com/*" },
{ "serverUrl": "https://*.internal.example.com/*" }
]
}
Когда allowManagedMcpServersOnly имеет значение true, списки разрешений из параметров пользователя, проекта и локальных параметров игнорируются. Список запретов все еще объединяется из каждой области параметров, поэтому пользователи всегда могут блокировать серверы для себя.
Как ограничения отображаются пользователям
Чтобы узнать, что видят пользователи при запуске, когда развернут managed-mcp.json и сеанс также имеет серверы --mcp-config, см. Исключительный контроль с managed-mcp.json. Используйте эту таблицу, чтобы распознать другие отчеты и сообщить пользователям, чего ожидать перед развертыванием изменения:
| Ограничение | Что видит пользователь |
|---|---|
managed-mcp.json присутствует и пользователь запускает claude mcp add |
Cannot add MCP server: enterprise MCP configuration is active and has exclusive control over MCP servers |
Сервер находится в списке запретов и пользователь запускает claude mcp add |
Cannot add MCP server "<name>": server is explicitly blocked by enterprise policy |
Сервер не находится в списке разрешений и пользователь запускает claude mcp add |
Cannot add MCP server "<name>": not allowed by enterprise policy |
Пользователь запускает claude mcp remove на сервере из managedMcpServers |
MCP server "<name>" is provided by your organization (managed settings) and cannot be removed locally. |
| Ранее настроенный сервер теперь заблокирован политикой | Сервер молча исчезает из /mcp и claude mcp list без предупреждения |
Сервер блокируется во время выполнения сеанса, и пользователь выбирает Reconnect или включает его обратно в /mcp |
MCP server <name> is blocked by enterprise managed policy |
Когда сервер молча исчезает, пользователь не получает никакого сигнала о том, что причина в политике, поэтому сообщите затронутым пользователям, какие серверы заблокированы при развертывании нового ограничения.
Мониторинг использования MCP
Когда OpenTelemetry export настроен, Claude Code может записывать, какие MCP серверы и инструменты вызывают пользователи. Установите OTEL_LOG_TOOL_DETAILS=1, чтобы включить имена MCP серверов и инструментов в события инструментов, затем агрегируйте их в вашем сборщике, чтобы увидеть, какие серверы фактически подключают ваши пользователи. См. Monitoring для настройки экспортера и полной схемы событий.
Сводка конфигурации
Каждый файл и параметр, рассмотренные на этой странице, что они контролируют и как их доставить:
| Поверхность | Что она контролирует | Где она находится | Как доставить |
|---|---|---|---|
managed-mcp.json |
Фиксированный набор серверов, исключительный контроль | Системный путь: /Library/Application Support/ClaudeCode/, /etc/claude-code/ или C:\Program Files\ClaudeCode\ |
MDM, GPO, управление флотом или любой процесс с правами администратора. Не может быть установлен через server-managed settings |
managedMcpServers |
Удаленные серверы, предоставляемые каждому пользователю наряду с их собственными | Только источники управляемых настроек; параметр не имеет эффекта в других местах | Источник управляемых настроек: server-managed settings, шлюзовая политика, managed-settings.json, профиль MDM или реестр HKLM |
allowedMcpServers |
Список разрешений разрешенных серверов | Любой файл настроек; Claude Code объединяет списки из каждого файла, если не установлен allowManagedMcpServersOnly, и берет список управляемого файла из выбранного им управляемого источника или составляет |
Для применения, источник управляемых настроек: server-managed settings, managed-settings.json, профиль MDM или реестр |
deniedMcpServers |
Список запретов заблокированных серверов | Любой файл настроек; Claude Code объединяет списки из каждого файла и между управляемыми источниками, как описано в как Claude Code объединяет управляемые источники | То же, что allowedMcpServers |
allowManagedMcpServersOnly |
Блокирует список разрешений только управляемыми источниками | Только источники управляемых настроек; параметр не имеет эффекта в других местах | То же, что allowedMcpServers |
allowAllClaudeAiMcps |
Загружает соединители claude.ai, которые Claude Code получает сам, наряду с managed-mcp.json. Файл managed-mcp.json на хосте, на котором запущена облачная сессия, по-прежнему подавляет соединители этой сессии |
Только источники управляемых настроек; параметр не имеет эффекта в других местах | То же, что allowedMcpServers |
Связанные ресурсы
- Decide what to enforce: ограничения MCP наряду с правилами разрешений, песочницей и другими элементами управления администратора
- Connect Claude Code to tools via MCP: полная справка MCP, включая транспорты, области и аутентификацию
- Settings: иерархия настроек и способ приоритета управляемых настроек
- Server-managed settings: доставка
allowedMcpServersиdeniedMcpServersиз консоли администратора Claude.ai - Security: модель угроз, которую защищают эти элементы управления
- Claude Enterprise Administrator Guide: SSO, SCIM, управление местами и сценарий развертывания