Contrôler l'accès aux serveurs MCP pour votre organisation
Limitez les serveurs MCP que les utilisateurs peuvent ajouter ou connecter avec des fichiers de configuration gérés, des listes blanches et des listes noires.
Par défaut, toute personne exécutant Claude Code peut connecter n'importe quel serveur MCP de son choix. Anthropic examine les connecteurs par rapport à ses critères d'examen avant de les ajouter à l'Annuaire Anthropic, mais n'effectue pas d'audit de sécurité ni ne gère aucun serveur MCP. En tant qu'administrateur, vous pouvez restreindre les serveurs qui s'exécutent dans votre organisation, du déploiement d'un ensemble approuvé fixe à la désactivation complète de MCP.
Ces restrictions couvrent les serveurs que Claude Code charge lui-même, y compris les connecteurs qu'il récupère depuis claude.ai. Les connecteurs que l'application de bureau fournit à ses sessions locales et SSH arrivent en processus et sont gouvernés par vos paramètres d'organisation claude.ai à la place ; Comment les connecteurs atteignent Claude Code montre quels contrôles s'appliquent aux connecteurs dans chaque type de session, y compris les sessions cloud.
Cette page couvre comment :
- Choisir un modèle qui correspond au niveau de contrôle dont vous avez besoin
- Déployer un ensemble de serveurs fixe avec
managed-mcp.json, y compris comment désactiver MCP entièrement - Contrôler les serveurs avec des listes blanches et des listes noires
- Indiquer aux utilisateurs à quoi s'attendre quand une restriction bloque un serveur
- Surveiller les serveurs que votre organisation utilise réellement
La page Sécurité couvre le modèle de menace MCP et comment évaluer un serveur avant de l'approuver. Décider ce qu'il faut appliquer couvre les restrictions MCP aux côtés des autres contrôles administratifs.
Choisir un modèle
Claude Code prend en charge une gamme de niveaux de restriction. Chaque modèle utilise l'un ou les deux mécanismes couverts ci-dessous : managed-mcp.json pour déployer un ensemble fixe, et allowedMcpServers/deniedMcpServers pour filtrer ce que les utilisateurs configurent.
| Modèle | Ce qu'il fait | Configurer |
|---|---|---|
| Désactiver MCP | Aucun serveur ne se charge, à part les serveurs en processus que l'application qui a démarré la session enregistre | managed-mcp.json avec une carte de serveurs vide |
| Déploiement fixe | Chaque utilisateur obtient les mêmes serveurs et ne peut pas en ajouter d'autres | managed-mcp.json avec les serveurs que vous voulez |
| Catalogue approuvé | Publiez une liste de serveurs approuvés ; les utilisateurs ajoutent ceux qu'ils veulent, tout le reste est bloqué | allowedMcpServers + allowManagedMcpServersOnly: true |
| Serveurs de plugins uniquement | Les utilisateurs ne peuvent pas ajouter de serveurs via ~/.claude.json ou .mcp.json ; les serveurs de plugins se chargent toujours |
strictPluginOnlyCustomization avec mcp dans la liste |
| Liste blanche souple | Appliquer une liste blanche que les utilisateurs peuvent élargir dans leurs propres paramètres | allowedMcpServers sans allowManagedMcpServersOnly |
| Liste noire uniquement | Bloquer les serveurs connus comme mauvais, autoriser tout le reste | deniedMcpServers |
| Aucune restriction | Les utilisateurs ajoutent n'importe quoi | Ne déployez aucune configuration MCP gérée |
Claude Code n'a pas de registre de serveurs MCP intégré que les utilisateurs peuvent parcourir et installer. Pour le modèle de catalogue approuvé, partagez la liste approuvée et ses commandes claude mcp add quelque part où vos utilisateurs les trouveront, comme un wiki interne, ou distribuez les serveurs en tant que plugins via une place de marché de plugins gérée afin que les utilisateurs puissent les parcourir et les installer à partir de /plugin.
Contrôle exclusif avec managed-mcp.json
Si vous déployez un fichier managed-mcp.json, Claude Code charge uniquement les serveurs que ce fichier définit, plus tous les serveurs en processus que l'application qui a démarré la session enregistre, comme le serveur propre de l'extension VS Code ou les connecteurs que l'application de bureau fournit. Les utilisateurs ne peuvent pas ajouter, modifier ou utiliser d'autres serveurs MCP, y compris les serveurs fournis par les plugins et les serveurs passés avec le drapeau CLI --mcp-config. Le fichier supprime également les connecteurs claude.ai que Claude Code récupère lui-même sauf si vous les autorisez aux côtés de l'ensemble géré.
Ce qu'un utilisateur voit quand une session reçoit des serveurs --mcp-config dépend de l'endroit où la session s'exécute :
- Sur une station de travail, Claude Code se ferme au démarrage avec
You cannot dynamically configure MCP servers when an enterprise MCP config is present. - Dans les sessions cloud sur un hôte où le fichier est déployé, comme un exécuteur auto-hébergé, Claude Code démarre avec les serveurs gérés uniquement et ignore les connecteurs claude.ai et les autres serveurs que l'hôte cloud fournit via
--mcp-config. Rien dans la session ne dit à l'utilisateur quels serveurs ont été laissés de côté. Claude Code les nomme dans un avertissement sur son stderr, qu'un exécuteur auto-hébergé enregistre au niveau de journaldebug. Avant v2.1.229, ces sessions se fermaient avec la même erreur qu'une station de travail affiche.
Si un utilisateur passe --strict-mcp-config, Claude Code se ferme au démarrage sur une station de travail et dans une session cloud de la même manière, car ce drapeau demande de remplacer l'ensemble géré.
Deux autres paramètres peuvent filtrer davantage l'ensemble géré :
allowedMcpServersetdeniedMcpServerss'appliquent également aux serveurs gérés, donc un serveur géré qui ne les satisfait pas ne se chargera pas.- Le propre
deniedMcpServersd'un utilisateur se fusionne à partir de ses paramètres, donc les utilisateurs peuvent bloquer un serveur géré pour eux-mêmes.
Voir Comment un serveur est évalué pour l'ordre complet des vérifications.
managed-mcp.json est un fichier autonome, il ne peut donc pas être livré via les paramètres gérés par le serveur. Tout processus pouvant écrire dans un chemin système avec des privilèges d'administrateur peut le déployer. À grande échelle, c'est généralement via des outils de gestion des appareils, tels que Jamf ou un profil de configuration sur macOS, Group Policy ou Intune sur Windows, ou votre gestion de flotte de choix sur Linux. Claude Code recherche le fichier à l'un de ces chemins :
| Plateforme | Chemin |
|---|---|
| macOS | /Library/Application Support/ClaudeCode/managed-mcp.json |
| Linux et WSL | /etc/claude-code/managed-mcp.json |
| Windows | C:\Program Files\ClaudeCode\managed-mcp.json |
Le fichier utilise le même format qu'un fichier de projet .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"
}
}
}
}
S'authentifier avec des identifiants par utilisateur
N'importe quel utilisateur sur la machine peut lire ce fichier, donc ne stockez pas de clés API ou d'autres identifiants dans les blocs env. Transmettez plutôt les identifiants par utilisateur avec l'un de ceux-ci :
- Expansion
${VAR}pour lire les secrets de l'environnement de chaque utilisateur. - OAuth ou en-têtes par utilisateur afin que chaque utilisateur s'authentifie en tant que lui-même.
headersHelperpour générer des identifiants au moment de la connexion.
Valider la configuration
Pour confirmer que le fichier est en vigueur, exécutez deux vérifications sur une machine gérée :
claude mcp listaffiche uniquement les serveurs dansmanaged-mcp.json. Si les propres serveurs d'un utilisateur apparaissent toujours, le fichier n'est pas lu ; vérifiez le chemin et les permissions.claude mcp add --transport http test https://example.com/mcpéchoue avecCannot add MCP server: enterprise MCP configuration is active and has exclusive control over MCP servers. L'URL n'a pas besoin d'être un vrai serveur, car la vérification de la politique rejette la commande avant que quoi que ce soit ne soit contacté.
Désactiver MCP entièrement
Déployez un managed-mcp.json contenant une carte de serveurs vide pour bloquer tous les serveurs MCP en dehors des serveurs en processus que l'application qui a démarré la session enregistre :
{
"mcpServers": {}
}
claude mcp add échoue avec l'erreur de politique d'entreprise ci-dessus. Les serveurs que les utilisateurs avaient précédemment configurés cessent de se charger la prochaine fois qu'ils démarrent une session, sans avertissement que la politique en est la raison.
Autoriser les connecteurs claude.ai aux côtés de l'ensemble géré
Par défaut, le déploiement de managed-mcp.json supprime les connecteurs claude.ai que Claude Code récupère lui-même, y compris les connecteurs qu'un administrateur a configurés pour l'organisation dans la console d'administration claude.ai. Pour charger ces connecteurs aux côtés des serveurs dans managed-mcp.json, définissez "allowAllClaudeAiMcps": true dans une source de paramètres gérés.
Avec le paramètre activé, Claude Code charge les mêmes connecteurs claude.ai qu'il chargerait si managed-mcp.json n'était pas déployé. Les listes blanches et listes noires s'appliquent toujours à ces connecteurs, vous pouvez donc en bloquer des spécifiques avec deniedMcpServers. Le paramètre affecte uniquement les connecteurs claude.ai que Claude Code récupère lui-même ; les serveurs fournis par les plugins restent supprimés.
Les sessions cloud et les sessions locales et SSH de l'application de bureau reçoivent les connecteurs d'une autre manière, décrite dans Comment les connecteurs atteignent Claude Code. Un managed-mcp.json sur l'hôte qui exécute une session cloud, comme un hôte d'exécuteur auto-hébergé, supprime les connecteurs de cette session que vous ayez défini allowAllClaudeAiMcps ou non. Aucun managed-mcp.json n'atteint les connecteurs que l'application de bureau fournit à ses sessions locales et SSH.
Claude Code lit allowAllClaudeAiMcps uniquement à partir des niveaux de politique contrôlés par l'administrateur : paramètres gérés par le serveur, une clé plist déployée par MDM ou une clé de registre HKLM, ou un fichier managed-settings.json système. Le placer dans les paramètres utilisateur ou projet n'a aucun effet, donc les utilisateurs ne peuvent pas réactiver les connecteurs que le contrôle exclusif a supprimés.
Contrôle basé sur les politiques avec listes blanches et listes noires
Les listes blanches et les listes noires filtrent les serveurs configurés autorisés à se charger. Ce ne sont pas un registre : un serveur doit toujours être ajouté par un utilisateur, un plugin ou managed-mcp.json avant que la liste blanche ou la liste noire ne s'applique à lui. Pour déployer des serveurs aux utilisateurs, utilisez managed-mcp.json. Les deux listes filtrent également les serveurs transmis avec l'indicateur CLI --mcp-config, à l'exception des entrées type: "sdk" en processus ; --strict-mcp-config limite les fichiers de configuration qui se chargent et ne contourne aucune des deux listes.
Pour rendre la liste blanche faisant autorité, définissez allowedMcpServers et allowManagedMcpServersOnly: true ensemble dans une source de paramètres gérés, telle que les paramètres gérés par le serveur ou un fichier managed-settings.json déployé. Restreindre la liste blanche aux paramètres gérés uniquement montre la configuration. Sans allowManagedMcpServersOnly, les listes blanches de chaque source de paramètres fusionnent, y compris le propre ~/.claude/settings.json d'un utilisateur, donc un utilisateur peut élargir ce que votre liste blanche permet. Les listes noires fusionnent de chaque source indépendamment.
allowManagedMcpServersOnly est séparé de allowManagedPermissionRulesOnly, qui verrouille uniquement les règles de permission. La définition de cet indicateur n'applique pas la liste blanche MCP.
Faire correspondre les serveurs par URL, commande ou nom
allowedMcpServers et deniedMcpServers sont des listes d'entrées. Chaque entrée est un objet avec une seule clé qui identifie les serveurs par leur URL, leur commande ou leur nom :
| Clé | Correspond à | Utiliser pour |
|---|---|---|
serverUrl |
Une URL de serveur distant, exacte ou avec des caractères génériques * |
Serveurs HTTP et SSE |
serverCommand |
La commande exacte et les arguments qui démarrent un serveur stdio | Serveurs stdio |
serverName |
L'étiquette assignée par l'utilisateur. Correspondance exacte uniquement ; les caractères génériques ne sont pas développés | L'un ou l'autre type, mais voir l'Avertissement ci-dessous |
Laisser allowedMcpServers non défini est différent de le définir sur un tableau vide :
| Paramètre | Non défini (par défaut) | Tableau vide [] |
Rempli |
|---|---|---|---|
allowedMcpServers |
Tous les serveurs autorisés | Aucun serveur autorisé | Seuls les serveurs correspondants autorisés |
deniedMcpServers |
Aucun serveur bloqué | Aucun serveur bloqué | Serveurs correspondants bloqués |
Voir Entrées invalides dans les paramètres gérés pour savoir ce qui se passe quand une entrée échoue la validation du schéma.
Une entrée serverName, dans l'une ou l'autre liste, n'est pas un contrôle de sécurité. Le nom est l'étiquette qu'un utilisateur assigne lors de l'exécution de claude mcp add ou de la modification d'un fichier de configuration, pas le serveur sous-jacent, donc un utilisateur peut appeler n'importe quel serveur github. Pour les connecteurs claude.ai, le nom est le nom d'affichage renvoyé par claude.ai, qui peut changer. Pour appliquer les serveurs qui s'exécutent réellement, ajoutez des entrées serverCommand ou serverUrl.
La validation serverName diffère entre les deux listes :
- Dans
deniedMcpServers,serverNameaccepte n'importe quelle chaîne non vide, donc vous pouvez bloquer les connecteurs claude.ai par leur nom d'affichage. Par exemple,{ "serverName": "claude.ai Slack" }bloque le connecteur Slack. Préférez une entréeserverUrlquand vous avez besoin que le refus soit robuste aux renommages, ou quand un nom de connecteur entre en collision et gagne un suffixe(N). - Dans
allowedMcpServers,serverNameest limité aux lettres, chiffres, traits d'union et traits de soulignement. UtilisezserverUrlpour ajouter un connecteur claude.ai à la liste blanche que Claude Code récupère lui-même ; pour les connecteurs qu'un hôte cloud livre aux sessions auto-hébergées, utilisez plutôt les entrées répertoriées sous Le trafic des connecteurs quitte votre réseau.
Pour désactiver tous les connecteurs claude.ai que Claude Code récupère lui-même, voir disableClaudeAiConnectors.
Comment un serveur est évalué
Avant de charger un serveur, y compris un serveur de managed-mcp.json, Claude Code exécute les trois vérifications ci-dessous dans l'ordre. Il les exécute à nouveau quand un utilisateur reconnecte un serveur ou réactive un serveur désactivé dans /mcp. Les serveurs type: "sdk" en processus, que l'application qui a démarré la session enregistre, ignorent les trois.
- Fusionner les listes. Les entrées de liste blanche et de liste noire de chaque source de paramètres se combinent en une liste blanche et une liste noire, les listes de la source gérée provenant de la source ou des sources gérées que Claude Code applique. Quand
allowManagedMcpServersOnlyesttrue, seule la liste blanche gérée est conservée ; la liste noire fusionne toujours de chaque source. - Vérifier la liste noire. Un serveur qui correspond à n'importe quelle entrée de liste noire, par URL, commande ou nom, est bloqué. Rien ne remplace une correspondance de liste noire.
- Vérifier la liste blanche. Si
allowedMcpServersn'est défini nulle part, chaque serveur qui a réussi la liste noire se charge. S'il est défini, ce à quoi le serveur doit correspondre dépend de son type, indiqué dans le tableau ci-dessous. Les serveurs intégrés tels que Claude dans Chrome, le serveurideauquel Claude Code se connecte dans un IDE VS Code ou JetBrains en cours d'exécution, et les serveurs que l'interface CLI elle-même configure ignorent cette vérification.
| Type de serveur | Autorisé quand il correspond à |
|---|---|
| Distant (HTTP ou SSE) | Une entrée serverUrl. Une correspondance serverName compte uniquement quand la liste blanche ne contient aucune entrée serverUrl |
| Stdio | Une entrée serverCommand. Une correspondance serverName compte uniquement quand la liste blanche ne contient aucune entrée serverCommand |
Trois règles de correspondance s'appliquent dans ces vérifications :
- Les commandes correspondent exactement. Chaque argument, dans l'ordre.
["npx", "-y", "server"]ne correspond pas à["npx", "server"]ou["npx", "-y", "server", "--flag"]. - Les valeurs
serverCommandetserverUrlse développent avant la correspondance. La valeur de la politique et la valeur configurée du serveur passent toutes les deux par la même expansion${VAR}et${VAR:-default}, donc une entrée écrite comme["${HOME}/bin/server"]correspond à une configuration de serveur qui utilise soit la même référence, soit le chemin développé. Sur Windows, référencez une variable d'environnement qui y est définie, telle que${USERPROFILE}au lieu de${HOME}. Les valeursserverNamecorrespondent littéralement et ne se développent jamais. Les deux côtés lisent des environnements différents ; Comment les entrées de politique se développent couvre lesquels, et comment les entrées de liste blanche et de liste noire diffèrent. - Les URL supportent les caractères génériques
*n'importe où dans le modèle, y compris le schéma. La correspondance du nom d'hôte est insensible à la casse et ignore un point FQDN final, donchttps://Mcp.Example.com/*correspond àhttps://mcp.example.com/api. Les chemins restent sensibles à la casse.
| Modèle | Autorise |
|---|---|
https://mcp.example.com/* |
Tous les chemins sur un domaine spécifique |
https://mcp.example.com |
Aussi tous les chemins sur ce domaine. Un modèle sans chemin correspond à n'importe quel chemin |
https://*.example.com/* |
N'importe quel sous-domaine de example.com |
http://localhost:*/* |
N'importe quel port sur localhost |
*://mcp.example.com/* |
N'importe quel schéma vers un domaine spécifique |
Comment les entrées de politique se développent
La valeur configurée du serveur se développe à partir de l'environnement de processus en direct, comme le reste de .mcp.json. Une entrée de politique se développe à partir d'un environnement épinglé à la place, donc une variable définie par un fichier de paramètres de projet ou d'utilisateur ne peut pas changer ce qu'une entrée de liste blanche signifie. Parce qu'une entrée de politique dépend toujours de la valeur du shell de lancement pour toute variable qu'elle référence, utilisez des URL et des commandes littérales pour les entrées sur lesquelles vous comptez pour l'application.
| Liste d'entrées | Se développe à partir de | Expansion qui changerait le schéma, l'hôte ou la portée du chemin d'une entrée d'URL |
|---|---|---|
allowedMcpServers |
L'environnement avec lequel Claude Code a démarré, plus les valeurs env des paramètres gérés |
Claude Code ignore l'entrée |
deniedMcpServers |
Le même, et une variable sans valeur de démarrage et sans :-default se remplit à partir des fichiers de paramètres en dehors du référentiel, tels que les paramètres utilisateur ou gérés, qui n'élargissent jamais ce que l'entrée correspond |
L'entrée correspond toujours |
Nécessite Claude Code v2.1.219 ou ultérieur.
Exemple de configuration
La configuration ci-dessous configure une liste blanche stricte avec une liste noire. Les lignes en surbrillance changent la façon dont le reste de la liste est évalué, et les légendes après le bloc expliquent chacune :
{
"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/*" }
]
}
- Ligne 3 : la première entrée
serverUrl. Une fois qu'elle existe, chaque serveur distant doit correspondre à un modèle d'URL, donc un utilisateur ne peut pas obtenir un serveur distant non répertorié en lui donnant un nom autorisé. - Ligne 5 : la première entrée
serverCommand. Même effet pour les serveurs stdio, donc chaque serveur local doit correspondre exactement à une commande répertoriée. - Ligne 11 : une entrée
serverNamedans la liste noire. Les entrées de liste noire s'appliquent toujours, donc n'importe quel serveur nommédangerous-serverest bloqué indépendamment de son URL ou de sa commande.
Une entrée serverName dans cette liste blanche ne correspondrait jamais à rien, car les deux types de transport ont déjà des entrées plus strictes.
Les accordéons ci-dessous parcourent la façon dont un serveur est évalué par rapport à d'autres combinaisons de listes blanches et de listes noires.
Liste blanche URL uniquement
{
"allowedMcpServers": [
{ "serverUrl": "https://mcp.example.com/*" },
{ "serverUrl": "https://*.internal.example.com/*" }
]
}
| Serveur | Résultat |
|---|---|
Serveur HTTP à https://mcp.example.com/api |
Autorisé : correspond au modèle d'URL |
Serveur HTTP à https://api.internal.example.com/mcp |
Autorisé : correspond au sous-domaine générique |
Serveur HTTP à https://external.example.com/mcp |
Bloqué : ne correspond à aucun modèle d'URL |
| Serveur stdio avec n'importe quelle commande | Bloqué : aucune entrée de nom ou de commande pour correspondre |
Liste blanche commande uniquement
{
"allowedMcpServers": [
{ "serverCommand": ["npx", "-y", "approved-package"] }
]
}
| Serveur | Résultat |
|---|---|
Serveur stdio avec ["npx", "-y", "approved-package"] |
Autorisé : correspond à la commande |
Serveur stdio avec ["node", "server.js"] |
Bloqué : ne correspond pas à la commande |
Serveur HTTP nommé my-api |
Bloqué : aucune entrée de nom pour correspondre |
Liste blanche mixte nom et commande
{
"allowedMcpServers": [
{ "serverName": "github" },
{ "serverCommand": ["npx", "-y", "approved-package"] }
]
}
| Serveur | Résultat |
|---|---|
Serveur stdio nommé local-tool avec ["npx", "-y", "approved-package"] |
Autorisé : correspond à la commande |
Serveur stdio nommé local-tool avec ["node", "server.js"] |
Bloqué : les entrées de commande existent mais ne correspondent pas |
Serveur stdio nommé github avec ["node", "server.js"] |
Bloqué : les serveurs stdio doivent correspondre aux commandes quand les entrées de commande existent |
Serveur HTTP nommé github |
Autorisé : correspond au nom |
Serveur HTTP nommé other-api |
Bloqué : le nom ne correspond pas |
Liste blanche nom uniquement
{
"allowedMcpServers": [
{ "serverName": "github" },
{ "serverName": "internal-tool" }
]
}
| Serveur | Résultat |
|---|---|
Serveur stdio nommé github avec n'importe quelle commande |
Autorisé : aucune restriction de commande |
Serveur stdio nommé internal-tool avec n'importe quelle commande |
Autorisé : aucune restriction de commande |
Serveur HTTP nommé github |
Autorisé : correspond au nom |
N'importe quel serveur nommé other |
Bloqué : le nom ne correspond pas |
Liste blanche avec remplacement de liste noire
{
"allowedMcpServers": [
{ "serverUrl": "https://*.example.com/*" }
],
"deniedMcpServers": [
{ "serverUrl": "https://staging.example.com/*" }
]
}
| Serveur | Résultat |
|---|---|
Serveur HTTP à https://mcp.example.com/api |
Autorisé : correspond au modèle d'URL de la liste blanche, aucune correspondance de liste noire |
Serveur HTTP à https://staging.example.com/api |
Bloqué : correspond aux deux, mais la liste noire a la priorité |
Serveur HTTP à https://other.com/mcp |
Bloqué : ne correspond pas à la liste blanche |
Restreindre la liste blanche aux paramètres gérés uniquement
Pour que la liste blanche gérée soit la seule qui s'applique, définissez allowManagedMcpServersOnly dans le fichier de paramètres gérés :
{
"allowManagedMcpServersOnly": true,
"allowedMcpServers": [
{ "serverUrl": "https://api.githubcopilot.com/*" },
{ "serverUrl": "https://*.internal.example.com/*" }
]
}
Quand allowManagedMcpServersOnly est true, les listes blanches des paramètres utilisateur, projet et local sont ignorées. La liste noire fusionne toujours de toutes les sources, donc les utilisateurs peuvent toujours bloquer les serveurs pour eux-mêmes.
Comment les restrictions apparaissent aux utilisateurs
Pour voir ce que les utilisateurs voient au démarrage quand managed-mcp.json est déployé et que la session a également des serveurs --mcp-config, consultez Contrôle exclusif avec managed-mcp.json. Utilisez ce tableau pour reconnaître les autres rapports et pour indiquer aux utilisateurs à quoi s'attendre avant de déployer une modification :
| Restriction | Ce que l'utilisateur voit |
|---|---|
managed-mcp.json est présent et l'utilisateur exécute claude mcp add |
Cannot add MCP server: enterprise MCP configuration is active and has exclusive control over MCP servers |
Le serveur est sur une liste noire et l'utilisateur exécute claude mcp add |
Cannot add MCP server "<name>": server is explicitly blocked by enterprise policy |
Le serveur n'est pas sur la liste blanche et l'utilisateur exécute claude mcp add |
Cannot add MCP server "<name>": not allowed by enterprise policy |
| Un serveur précédemment configuré est maintenant bloqué par la politique | Le serveur disparaît silencieusement de /mcp et claude mcp list sans avertissement |
Un serveur devient bloqué pendant qu'une session est en cours, et l'utilisateur sélectionne Reconnect ou l'active à nouveau dans /mcp |
MCP server <name> is blocked by enterprise managed policy |
Quand un serveur disparaît silencieusement, l'utilisateur n'obtient aucun signal que la politique est la raison, donc informez les utilisateurs affectés des serveurs bloqués quand vous déployez une nouvelle restriction.
Surveiller l'utilisation de MCP
Quand l'export OpenTelemetry est configuré, Claude Code peut enregistrer les serveurs MCP et les outils que les utilisateurs invoquent. Définissez OTEL_LOG_TOOL_DETAILS=1 pour inclure les noms de serveur MCP et d'outils dans les événements d'outils, puis agrégez-les dans votre collecteur pour voir les serveurs auxquels vos utilisateurs se connectent réellement. Voir Surveillance pour configurer l'exportateur et pour le schéma d'événement complet.
Résumé de la configuration
Chaque fichier et paramètre que cette page couvre, ce qu'il contrôle et comment le livrer :
| Surface | Ce qu'il contrôle | Où il se trouve | Comment le livrer |
|---|---|---|---|
managed-mcp.json |
Ensemble de serveurs fixe, contrôle exclusif | Chemin système : /Library/Application Support/ClaudeCode/, /etc/claude-code/, ou C:\Program Files\ClaudeCode\ |
MDM, GPO, gestion de flotte, ou tout processus avec privilèges d'administrateur. Ne peut pas être défini via les paramètres gérés par le serveur |
allowedMcpServers |
Liste blanche des serveurs autorisés | N'importe quel paramètre de paramètres ; Claude Code fusionne les listes de chaque portée sauf si allowManagedMcpServersOnly est défini, et prend la liste de la portée gérée à partir de la source gérée unique qu'il sélectionne ou compose |
Pour l'application, une source de paramètres gérés : paramètres gérés par le serveur, managed-settings.json, profil MDM, ou registre |
deniedMcpServers |
Liste noire des serveurs bloqués | N'importe quel paramètre de paramètres ; Claude Code fusionne les listes de chaque portée, et entre les sources gérées comme comment Claude Code combine les sources gérées le décrit | Identique à allowedMcpServers |
allowManagedMcpServersOnly |
Verrouille la liste blanche aux sources gérées uniquement | Sources de paramètres gérés uniquement ; le paramètre n'a aucun effet ailleurs | Identique à allowedMcpServers |
allowAllClaudeAiMcps |
Charge les connecteurs claude.ai que Claude Code récupère lui-même aux côtés de managed-mcp.json. Un managed-mcp.json sur l'hôte qui exécute une session cloud supprime toujours les connecteurs de cette session |
Sources de paramètres gérés uniquement ; le paramètre n'a aucun effet ailleurs | Identique à allowedMcpServers |
Ressources connexes
- Décider ce qu'il faut appliquer : restrictions MCP aux côtés des règles de permission, du sandboxing et des autres contrôles d'administration
- Connecter Claude Code aux outils via MCP : la référence MCP complète, y compris les transports, les portées et l'authentification
- Paramètres : la hiérarchie des paramètres et comment les paramètres gérés ont la priorité
- Paramètres gérés par le serveur : livrer
allowedMcpServersetdeniedMcpServersà partir de la console d'administration Claude.ai - Sécurité : le modèle de menace que ces contrôles défendent
- Guide de l'administrateur Claude Enterprise : SSO, SCIM, gestion des sièges et playbook de déploiement