SpyBara
Go Premium

managed-mcp.md 2026-09-27 23:59 UTC to 2026-09-28 22:01 UTC

This page contains 14 additions and 14 deletions.

2026
Thu 10 23:00 Fri 18 23:58 Fri 25 23:58 Mon 28 22:59

Контролируйте доступ к серверам MCP для вашей организации

Ограничьте, какие серверы MCP пользователи могут добавлять или подключать, или предоставьте серверы каждому пользователю с помощью управляемых файлов конфигурации, управляемых параметров, списков разрешений и списков запретов.

По умолчанию любой, кто запускает Claude Code, может подключить любой MCP сервер по своему выбору. Anthropic проверяет соединители в соответствии с его критериями листинга перед добавлением их в Anthropic Directory, но не проводит проверку безопасности и не управляет никакими MCP серверами. Как администратор, вы можете ограничить, какие серверы работают в вашей организации, от развертывания фиксированного одобренного набора до полного отключения MCP, и вы можете предоставить серверы каждому пользователю.

Эти ограничения охватывают серверы, которые Claude Code загружает сам, включая соединители, которые он получает из claude.ai. Соединители, которые настольное приложение доставляет в свои локальные и SSH сеансы, поступают внутри процесса и управляются из параметров вашей организации claude.ai вместо этого; Как соединители достигают Claude Code показывает, какие элементы управления применяются к соединителям в каждом типе сеанса, включая облачные сеансы.

На этой странице рассматривается, как:

Выберите шаблон

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

Исключительный контроль с помощью managed-mcp.json

Когда вы развёртываете файл managed-mcp.json, Claude Code загружает только эти MCP серверы:

Пользователи не могут добавлять, изменять или использовать какие-либо другие 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. Передавайте учётные данные для каждого пользователя одним из следующих способов:

Серверы, переданные с помощью `--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 для каждой группы перед обновлением ваших пользователей.

Проверка конфигурации

Чтобы подтвердить, что файл действует, выполните две проверки на управляемой машине:

  1. claude mcp list показывает только серверы в managed-mcp.json, плюс любые, которые вы предоставляете через managedMcpServers. Два других результата означают, что что-то не так:
    • Если собственные серверы пользователя по-прежнему отображаются, Claude Code не читает файл, поэтому проверьте его путь и разрешения на его родительских каталогах.
    • Если серверы файла не отображаются и раздел MCP config diagnostics отмечает конфигурацию предприятия как не удалось разобрать, Claude Code не может прочитать или разобрать файл. Исправьте ошибку, которую называет этот раздел, затем попросите пользователя перезагрузить Claude Code.
  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 сервер, кроме встроенных серверов, которые регистрирует приложение, запустившее сеанс:

{
  "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 — это URL https://. Claude Code отказывает в обычном URL http://, включая тот, который указывает на 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.

Блокировка применяется из каждого управляемого источника, контролируемого администратором, поэтому блокировка в развернутом файле все еще применяется, когда также используются управляемые параметры сервера, которые не упоминают MCP. Пока блокировка включена, управляемый список разрешений поступает из источника администратора с наивысшим рейтингом, который устанавливает его. Чтение блокировки и списка разрешений в разных источниках требует Claude Code v2.1.273 или позже.

Ограничить список разрешений только управляемыми параметрами показывает конфигурацию.

Без allowManagedMcpServersOnly списки разрешений из каждой области параметров объединяются, включая собственный файл ~/.claude/settings.json пользователя, поэтому пользователь может расширить то, что разрешает ваш список разрешений. Списки запретов объединяются из каждой области независимо.

Сопоставление серверов по URL, команде или имени

allowedMcpServers и deniedMcpServers — это списки записей. Каждая запись — это объект с одним ключом, который идентифицирует серверы по их URL, команде или имени:

Ключ Совпадает с Используется для
serverUrl URL удаленного сервера, точный или с подстановочными знаками * HTTP и SSE серверы
serverCommand Точная команда и аргументы, которые запускают сервер stdio Серверы stdio
serverName Метка, назначенная пользователем. Только точное совпадение; подстановочные знаки не расширяются Любой тип, но см. предупреждение ниже

Оставление allowedMcpServers неустановленным отличается от установки его в пустой массив:

Параметр Не установлен (по умолчанию) Пустой массив [] Заполненный
allowedMcpServers Все серверы разрешены Серверы не разрешены, кроме собственных серверов организации Разрешены только совпадающие серверы, кроме собственных серверов организации
deniedMcpServers Серверы не блокируются Серверы не блокируются Совпадающие серверы блокируются

Информацию о том, что происходит, когда запись не проходит проверку схемы, см. в разделе Недействительные записи в управляемых параметрах.

Проверка serverName отличается между двумя списками:

  • В deniedMcpServers serverName принимает любую непустую строку без начальных или конечных пробелов, поэтому вы можете блокировать соединители claude.ai по их отображаемому имени. Например, { "serverName": "claude.ai Slack" } блокирует соединитель Slack. Предпочитайте запись serverUrl, когда вам нужно, чтобы запрет был устойчив к переименованиям, или когда имя соединителя конфликтует и получает суффикс (N).
  • В allowedMcpServers serverName ограничен буквами, цифрами, дефисами и подчеркиваниями. Используйте serverUrl для добавления в список разрешений соединителя claude.ai, который Claude Code загружает сам; для соединителей, которые облачный хост доставляет в самостоятельно размещаемые сеансы, используйте вместо этого записи, указанные в разделе Трафик соединителя покидает вашу сеть.

Чтобы отключить все соединители claude.ai, которые Claude Code загружает сам, см. disableClaudeAiConnectors.

Как оценивается сервер

Перед загрузкой сервера, включая сервер из managed-mcp.json, Claude Code выполняет три проверки ниже по порядку. Он выполняет их снова, когда пользователь переподключает сервер или включает отключенный в /mcp. Серверы type: "sdk" в процессе, которые приложение, запустившее сеанс, регистрирует, пропускают все три.

  1. Объедините списки. Записи списка разрешений и запретов из каждой области параметров объединяются в один список разрешений и один список запретов. Когда allowManagedMcpServersOnly имеет значение true, сохраняется только управляемый список разрешений; список запретов всегда объединяется из каждой области. Когда присутствует более одного управляемого источника, раздел Ключи, читаемые из каждого источника администратора указывает, какие из них предоставляют списки управляемой области.

  2. Проверьте список запретов. Сервер, который совпадает с любой записью списка запретов по URL, команде или имени, блокируется. Ничто не переопределяет совпадение списка запретов.

  3. Проверьте список разрешений. Если 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 Список разрешений разрешенных серверов Любой файл настроек; Как сервер оценивается говорит о том, как списки из нескольких областей и управляемых источников объединяются Для применения, источник управляемых настроек: server-managed settings, managed-settings.json, профиль MDM или реестр
deniedMcpServers Список запретов заблокированных серверов Любой файл настроек; Как сервер оценивается говорит о том, как списки из нескольких областей и управляемых источников объединяются То же, что 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, управление местами и сценарий развертывания