Gouvernance MCP pour Q Developer - Amazon Q Developer

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gouvernance MCP pour Q Developer

Les clients professionnels qui utilisent IAM Identity Center comme méthode de connexion peuvent contrôler l'accès MCP pour les utilisateurs au sein de leur organisation. Par défaut, vos utilisateurs peuvent utiliser n'importe quel serveur MCP dans leur client Q. En tant qu'administrateur, vous pouvez soit désactiver complètement l'utilisation des serveurs MCP par vos utilisateurs, soit spécifier une liste approuvée de serveurs MCP autorisés à utiliser par vos utilisateurs.

Ces restrictions sont contrôlées par le biais d'une on/off bascule MCP et d'un registre MCP, respectivement. Le bouton MCP et les attributs de registre font partie du profil Q Developer, qui peut être défini au niveau de l'organisation ou au niveau du compte, le profil au niveau du compte remplaçant le profil au niveau de l'organisation. Cela vous permet de définir une politique MCP par défaut pour l'ensemble de votre organisation, puis de remplacer cette politique par défaut pour des comptes spécifiques ; par exemple, désactiver le MCP pour l'ensemble de l'organisation, mais activé avec une liste autorisée pour certaines équipes (comptes).

Note

La bascule et les paramètres de registre sont tous deux appliqués côté client. Sachez que vos utilisateurs finaux peuvent le contourner.

Désactivation des serveurs MCP de votre organisation

Pour désactiver MCP pour votre compte ou votre organisation, procédez comme suit :

  1. Ouvrez la console Amazon Q Developer.

  2. Sélectionnez Paramètres.

  3. Sous Préférences, choisissez Modifier.

  4. Dans la fenêtre contextuelle Modifier les préférences, réglez le Model Context Protocol (MCP) sur Désactivé.

  5. Choisissez Enregistrer.

Spécification d'une liste d'autorisation MCP pour votre organisation

Pour contrôler les serveurs MCP que les utilisateurs de votre organisation sont autorisés à utiliser, vous pouvez spécifier une liste de serveurs MCP autorisés dans un fichier JSON, diffuser ce fichier JSON via HTTPS et saisir cette URL dans le profil de développeur Q souhaité. Tous les clients Q Developer utilisant ce profil feront alors en sorte que les utilisateurs ne puissent utiliser que les serveurs MCP que vous avez autorisés dans le fichier JSON.

Spécification de l'URL du registre MCP

  1. Ouvrez la console Amazon Q Developer.

  2. Sélectionnez Paramètres.

  3. Sous Préférences, choisissez Modifier.

  4. Dans la fenêtre contextuelle Modifier les préférences, assurez-vous que le protocole MCP (Model Context Protocol) est activé.

  5. Dans le champ URL du registre MCP, entrez l'URL d'un fichier JSON du registre MCP contenant les serveurs MCP autorisés.

  6. Choisissez Enregistrer.

Notez que l'URL du registre MCP est cryptée à la fois en transit et au repos conformément à notre politique de chiffrement des données.

Format de fichier de registre MCP

Le format du fichier JSON de registre est un sous-ensemble du schéma de serveur JSON de la norme de registre MCP v0.1. La définition du schéma JSON pour le sous-ensemble pris en charge par Q Developer est disponible dans la section du schéma de registre à la fin de ce document.

Vous trouverez ci-dessous un exemple simple et artificiel de fichier de registre MCP contenant à la fois une définition de serveur MCP distant (HTTP) et une définition de serveur MCP local (stdio).

{ "servers": [ { "server": { "name": "my-remote-server", "title": "My server", "description": "My server description", "version": "1.0.0", "remotes": [ { "type": "streamable-http", "url": "https://acme.com/my-server", "headers": [ { "name": "X-My-Header", "value": "SomeValue" } ] } ] } }, { "server": { "name": "my-local-server", "title": "My server", "description": "My server description", "version": "1.0.0", "packages": [ { "registryType": "npm", "registryBaseUrl": "https://npm.acme.com", "identifier": "@acme/my-server", "transport": { "type": "stdio" }, "runtimeArguments": [ { "type": "positional", "value": "-q" } ], "packageArguments": [ { "type": "positional", "value": "start" } ], "environmentVariables": [ { "name": "ENV_VAR", "value": "ENV_VAR_VALUE" } ] } ] } } ] }

Le tableau suivant décrit chaque propriété du fichier JSON de registre. Toutes les propriétés sont obligatoires, sauf indication contraire. Consultez la section sur le schéma de registre pour le schéma JSON complet.

Les attributs imbriqués sont affichés avec un décalage horizontal par rapport à leur parent. Par exemple, « en-têtes » est un attribut enfant des « télécommandes », et « nom » et « valeur » sont des attributs enfants des « en-têtes ».

Attribut Description Facultatif ? Exemple de valeur
Attributs communs
nom Nom du serveur. Doit être unique dans un fichier de registre donné. "aws-ccapi-mcp"
title Nom de serveur lisible par l'homme. Oui « API AWS CC »
description Description du serveur « Gérez l'infrastructure AWS via le langage naturel. »
version Version du serveur. Le versionnement sémantique (x.y.z) est fortement recommandé. « 1,0,2 »
Attributs du serveur distant (HTTP)
télécommandes Tableau contenant exactement une entrée spécifiant le point de terminaison distant. -
  type Doit être l'un des types « streamable-http » ou « sse ». « streamable-http »
  url URL du point de terminaison du serveur MCP. « https://mcp.figma.com /mcp »
  headers Tableau d'en-têtes HTTP à inclure dans chaque requête. Oui -
    nom Nom de l'en-tête HTTP. « Autorisation »
    value Valeur d'en-tête HTTP. « Porteur MF_9.B5F-4.1jqm »
Attributs du serveur local (stdio)
packages Tableau contenant exactement une entrée contenant la définition du serveur MCP. -
  Type de registre

Doit être l'un des types « npm », « pypi » ou « oci ».

Les exécuteurs de packages suivants sont utilisés pour télécharger et exécuter le package du serveur MCP :

  • Pour le type de registre « npm », le lanceur « npx » est utilisé

  • Pour « pypi », « uvx » est utilisé

  • Pour « oci », « docker » est utilisé

Les machines clientes doivent être préinstallées sur les machines clientes appropriées.

« npm »
  registryBaseUrl URL du registre du package. Oui "https://npm.acme.com"
  identifiant Identifiant du package du serveur. « @acme /mon-serveur »
  transport Objet avec une seule propriété, « type ». -
    type Ça doit être « studio ». « studio »
  Arguments d'exécution Tableau d'arguments fournis au runtime, c'est-à-dire à npx, uvx ou docker. Oui -
    type Doit être « positionnel ». « positionnel »
    value Valeur de l'argument d'exécution. « -q »
  Arguments du package Tableau d'arguments fourni au serveur MCP. Oui -
    type Doit être « positionnel ». « positionnel »
    value Valeur de l'argument du package. « démarrer »
  Variables d'environnement Tableau de variables d'environnement à définir avant de démarrer le serveur. Oui -
    nom Nom de la variable d'environnement. « LOG_LEVEL »
    value Valeur de la variable d'environnement. « INFORMATIONS »

Service du fichier de registre MCP

Le fichier JSON du registre MCP doit être diffusé via HTTPS. Vous pouvez le servir comme vous le souhaitez, par exemple en utilisant S3, Apache/Nginx, etc. Cette URL doit être accessible aux clients Q Developer exécutés sur vos utilisateurs PCs. Il n'est toutefois pas nécessaire qu'il soit accessible depuis la console AWS, ce qui signifie qu'il peut être privé sur le réseau de votre entreprise.

Pour des raisons de sécurité, le point de terminaison HTTPS doit disposer d'un certificat SSL valide signé par une autorité de certification fiable. En particulier, vous ne pouvez pas utiliser de certificat auto-signé pour le point de terminaison du registre.

Q récupérera le registre MCP au démarrage et périodiquement (toutes les 24 heures). Si, au cours de la synchronisation périodique, Q remarque qu'un serveur MCP installé localement n'est plus présent dans le registre, il mettra fin à ce serveur et empêchera l'utilisateur de le rajouter. S'il remarque que le serveur installé localement possède une version différente de celle du serveur du registre, il relancera le serveur avec la version définie dans le registre.

Plug-ins pour développeurs Q

Lorsqu'un utilisateur lance Q Developer, il vérifie si une URL de registre est définie sur le profil. Si tel est le cas, il récupérera le JSON du registre à cette URL et veillera à ce que les utilisateurs ne puissent utiliser que les serveurs MCP définis dans le registre. Lorsque les utilisateurs tentent d'ajouter un serveur MCP, ils peuvent sélectionner une liste de serveurs définis dans le registre.

Capture d'écran montrant l'ajout de serveurs MCP définis dans le registre.

Les utilisateurs ne peuvent modifier aucun des paramètres (URL, identifiant de package, arguments d'exécution, etc.) d'un serveur MCP de registre. Toutefois, ils peuvent toujours effectuer les opérations suivantes :

  1. Ajustez les autorisations de l'outil MCP (« Demander l'exécution », « Toujours exécuter » ou « Refuser »).

  2. Sélectionnez l'étendue du serveur MCP (Global ou Workspace).

  3. Modifiez le délai d'expiration de la demande.

  4. Spécifiez des variables d'environnement supplémentaires pour les serveurs MCP locaux.

  5. Spécifiez des en-têtes HTTP supplémentaires pour les serveurs MCP distants.

Note

Si l'utilisateur spécifie une variable d'environnement ou un en-tête HTTP déjà défini dans le registre, la définition de l'utilisateur prévaut. Cela permet aux utilisateurs de spécifier des attributs spécifiques à leur configuration, par exemple des clés d'authentification ou des chemins de dossiers locaux.

Schéma JSON du registre MCP

Vous trouverez ci-dessous la définition du schéma JSON pour les fichiers JSON du registre MCP pris en charge par Q Developer. Vous pouvez utiliser ce schéma pour valider les fichiers de registre que vous créez.

{ "$schema": "https://json-schema.org/draft-07/schema", "properties": { "servers": { "type": "array", "items": { "type": "object", "properties": { "server": { "$ref": "#/definitions/ServerDetail" } }, "required": [ "server" ] } } }, "definitions": { "ServerDetail": { "properties": { "name": { "description": "Server name. Must be unique within a given registry file.", "example": "weather-mcp", "maxLength": 200, "minLength": 3, "pattern": "^[a-zA-Z0-9._-]+$", "type": "string" }, "title": { "description": "Optional human-readable title or display name for the MCP server. MCP subregistries or clients MAY choose to use this for display purposes.", "example": "Weather API", "maxLength": 100, "minLength": 1, "type": "string" }, "description": { "description": "Clear human-readable explanation of server functionality. Should focus on capabilities, not implementation details.", "example": "MCP server providing weather data and forecasts via OpenWeatherMap API", "maxLength": 100, "minLength": 1, "type": "string" }, "version": { "description": "Version string for this server. SHOULD follow semantic versioning (e.g., '1.0.2', '2.1.0-alpha'). Equivalent of Implementation.version in MCP specification. Non-semantic versions are allowed but may not sort predictably. Version ranges are rejected (e.g., '^1.2.3', '~1.2.3', '\u003e=1.2.3', '1.x', '1.*').", "example": "1.0.2", "maxLength": 255, "type": "string" }, "packages": { "items": { "$ref": "#/definitions/Package" }, "type": "array" }, "remotes": { "items": { "anyOf": [ { "$ref": "#/definitions/StreamableHttpTransport" }, { "$ref": "#/definitions/SseTransport" } ] }, "type": "array" } }, "required": [ "name", "description", "version" ], "type": "object" }, "Package": { "properties": { "registryType": { "description": "Registry type indicating how to download packages (e.g., 'npm', 'pypi', 'oci')", "enum": [ "npm", "pypi", "oci" ], "type": "string" }, "registryBaseUrl": { "description": "Base URL of the package registry", "examples": [ "https://registry.npmjs.org", "https://pypi.org", "https://docker.io" ], "format": "uri", "type": "string" }, "identifier": { "description": "Package identifier - either a package name (for registries) or URL (for direct downloads)", "examples": [ "@modelcontextprotocol/server-brave-search", "https://github.com/example/releases/download/v1.0.0/package.mcpb" ], "type": "string" }, "transport": { "anyOf": [ { "$ref": "#/definitions/StdioTransport" }, { "$ref": "#/definitions/StreamableHttpTransport" }, { "$ref": "#/definitions/SseTransport" } ], "description": "Transport protocol configuration for the package" }, "runtimeArguments": { "description": "A list of arguments to be passed to the package's runtime command (such as docker or npx).", "items": { "$ref": "#/definitions/PositionalArgument" }, "type": "array" }, "packageArguments": { "description": "A list of arguments to be passed to the package's binary.", "items": { "$ref": "#/definitions/PositionalArgument" }, "type": "array" }, "environmentVariables": { "description": "A mapping of environment variables to be set when running the package.", "items": { "$ref": "#/definitions/KeyValueInput" }, "type": "array" } }, "required": [ "registryType", "identifier", "transport" ], "type": "object" }, "StdioTransport": { "properties": { "type": { "description": "Transport type", "enum": [ "stdio" ], "example": "stdio", "type": "string" } }, "required": [ "type" ], "type": "object" }, "StreamableHttpTransport": { "properties": { "type": { "description": "Transport type", "enum": [ "streamable-http" ], "example": "streamable-http", "type": "string" }, "url": { "description": "URL template for the streamable-http transport. Variables in {curly_braces} reference argument valueHints, argument names, or environment variable names. After variable substitution, this should produce a valid URI.", "example": "https://api.example.com/mcp", "type": "string" }, "headers": { "description": "HTTP headers to include", "items": { "$ref": "#/definitions/KeyValueInput" }, "type": "array" } }, "required": [ "type", "url" ], "type": "object" }, "SseTransport": { "properties": { "type": { "description": "Transport type", "enum": [ "sse" ], "example": "sse", "type": "string" }, "url": { "description": "Server-Sent Events endpoint URL", "example": "https://mcp-fs.example.com/sse", "format": "uri", "type": "string" }, "headers": { "description": "HTTP headers to include", "items": { "$ref": "#/definitions/KeyValueInput" }, "type": "array" } }, "required": [ "type", "url" ], "type": "object" }, "PositionalArgument": { "properties": { "value": { "description": "The value for the input.", "type": "string" } }, "required": [ "value" ], "type": "object" }, "KeyValueInput": { "properties": { "name": { "description": "Name of the header or environment variable.", "example": "SOME_VARIABLE", "type": "string" }, "value": { "description": "The value for the input.", "type": "string" } }, "required": [ "name" ], "type": "object" } }, "required": [ "servers" ], "type": "object" }