MCP Reference: cloud-sql

Un serveur MCP (Model Context Protocol) sert de proxy entre un service externe qui fournit du contexte, des données ou des capacités à un grand modèle de langage (LLM) ou à une application d'IA. Les serveurs MCP connectent les applications d'IA à des systèmes externes tels que des bases de données et des services Web, et traduisent leurs réponses dans un format que l'application d'IA peut comprendre.

Configuration du serveur

Vous devez activer les serveurs MCP et configurer l'authentification avant de les utiliser. Pour en savoir plus sur l'utilisation des serveurs MCP distants Google et Google Cloud, consultez Présentation des serveurs MCP Google Cloud.

API Cloud SQL Admin pour MCP

Points de terminaison du serveur

Un point de terminaison de service MCP est l'adresse réseau et l'interface de communication (généralement une URL) du serveur MCP qu'une application d'IA (l'hôte du client MCP) utilise pour établir une connexion sécurisée et standardisée. Il s'agit du point de contact permettant au LLM de demander du contexte, d'appeler un outil ou d'accéder à une ressource. Les points de terminaison Google MCP peuvent être globaux ou régionaux.

Le serveur MCP cloud-sql possède le point de terminaison MCP suivant :

  • https://sqladmin.googleapis.com/mcp

Outils MCP

Un outil MCP est une fonction ou une capacité exécutable qu'un serveur MCP expose à un LLM ou à une application d'IA pour effectuer une action dans le monde réel.

Le serveur MCP cloud-sql comprend les outils suivants :

Outils MCP
list_instances Répertorie toutes les instances Cloud SQL du projet.
get_instance Obtenez les détails d'une instance Cloud SQL.
create_instance

Lance la création d'une instance Cloud SQL.

  • L'outil renvoie une opération de longue durée. Utilisez l'outil get_operation pour interroger son état jusqu'à ce que l'opération soit terminée.
  • La création de l'instance peut prendre plusieurs minutes. Utilisez un outil de ligne de commande pour mettre en pause pendant 30 secondes avant de vérifier à nouveau l'état.
  • Après avoir utilisé l'outil create_instance pour créer une instance, vous pouvez utiliser l'outil create_user pour créer un compte utilisateur IAM pour l'utilisateur actuellement connecté au projet.
  • La valeur de data_api_access est définie sur ALLOW_DATA_API par défaut. Ce paramètre vous permet d'exécuter des instructions SQL à l'aide de l'outil execute_sql et de l'API executeSql.

Sauf indication contraire, une instance nouvellement créée utilise la configuration d'instance par défaut d'un environnement de développement.

Voici la configuration par défaut d'une instance dans un environnement de développement :

{
  "tier": "db-perf-optimized-N-2",
  "data_disk_size_gb": 100,
  "region": "us-central1",
  "database_version": "POSTGRES_18",
  "edition": "ENTERPRISE_PLUS",
  "availability_type": "ZONAL",
  "tags": [{"environment": "dev"}]
}

La configuration suivante est recommandée pour une instance dans un environnement de production :

{
  "tier": "db-perf-optimized-N-8",
  "data_disk_size_gb": 250,
  "region": "us-central1",
  "database_version": "POSTGRES_18",
  "edition": "ENTERPRISE_PLUS",
  "availability_type": "REGIONAL",
  "tags": [{"environment": "prod"}]
}

La configuration d'instance suivante est recommandée pour SQL Server :

{
  "tier": "db-perf-optimized-N-8",
  "data_disk_size_gb": 250,
  "region": "us-central1",
  "database_version": "SQLSERVER_2022_STANDARD",
  "edition": "ENTERPRISE_PLUS",
  "availability_type": "REGIONAL",
  "tags": [{"environment": "prod"}]
}
execute_sql

Exécutez n'importe quelle instruction SQL valide, y compris les instructions de langage de définition de données (LDD), de langage de contrôle de données (LCD), de langage de requête de données (LRD) ou de langage de manipulation de données (LMD), sur une instance Cloud SQL.

Pour que l'outil execute_sql soit compatible, une instance Cloud SQL doit répondre aux exigences suivantes :

  • La valeur de data_api_access doit être définie sur ALLOW_DATA_API.
  • Pour une instance MySQL, l'option de base de données cloudsql_iam_authentication doit être définie sur on. Pour une instance PostgreSQL, l'option de base de données cloudsql.iam_authentication doit être définie sur on.
  • Un compte utilisateur IAM ou un compte de service IAM (CLOUD_IAM_USER ou CLOUD_IAM_SERVICE_ACCOUNT) est requis pour appeler l'outil execute_sql. L'outil exécute les instructions SQL à l'aide des droits d'accès de l'utilisateur de base de données connecté avec l'authentification IAM pour les bases de données.

Après avoir utilisé l'outil create_instance pour créer une instance, vous pouvez utiliser l'outil create_user pour créer un compte utilisateur IAM pour l'utilisateur actuellement connecté au projet.

L'outil execute_sql présente les limites suivantes :

  • Si une instruction SQL renvoie une réponse de plus de 10 Mo, elle sera tronquée.
  • L'outil execute_sql a un délai avant expiration par défaut de 30 secondes. Si une requête s'exécute pendant plus de 30 secondes, l'outil renvoie une erreur DEADLINE_EXCEEDED.
  • L'outil execute_sql n'est pas compatible avec SQL Server.

Si vous recevez des erreurs semblables à "L'authentification IAM n'est pas activée pour l'instance", vous pouvez utiliser l'outil get_instance pour vérifier la valeur du flag d'authentification IAM pour les bases de données de l'instance.

Si vous recevez des erreurs telles que "L'instance n'autorise pas l'utilisation d'executeSql pour accéder à cette instance", vous pouvez utiliser l'outil get_instance pour vérifier le paramètre data_api_access.

Lorsque vous recevez des erreurs d'authentification :

  1. Vérifiez si le compte utilisateur actuellement connecté existe en tant qu'utilisateur IAM sur l'instance à l'aide de l'outil list_users.
  2. Si le compte utilisateur IAM n'existe pas, utilisez l'outil create_user pour créer le compte utilisateur IAM pour l'utilisateur connecté.
  3. Si l'utilisateur actuellement connecté ne dispose pas des rôles d'utilisateur de base de données appropriés, vous pouvez utiliser l'outil update_user pour lui accorder ces rôles. Par exemple, le rôle cloudsqlsuperuser peut fournir à un utilisateur IAM de nombreuses autorisations requises.
  4. Vérifiez si l'utilisateur actuellement connecté dispose des autorisations IAM appropriées pour le projet. Vous pouvez utiliser la commande gcloud projects get-iam-policy [PROJECT_ID] pour vérifier si les rôles ou autorisations IAM appropriés sont attribués à l'utilisateur pour le projet.

    • L'utilisateur doit disposer de l'autorisation cloudsql.instance.login pour effectuer l'authentification IAM automatique pour les bases de données.
    • L'utilisateur doit disposer de l'autorisation cloudsql.instances.executeSql pour exécuter des instructions SQL à l'aide de l'outil execute_sql ou de l'API executeSql.
    • Rôles IAM courants contenant les autorisations requises : utilisateur d'instance Cloud SQL (roles/cloudsql.instanceUser) ou administrateur Cloud SQL (roles/cloudsql.admin)

Lorsque vous recevez un ExecuteSqlResponse, vérifiez toujours les champs message et status dans le corps de la réponse. Un code d'état HTTP réussi ne garantit pas le succès complet de toutes les instructions SQL. Les champs message et status indiquent si des erreurs ou des avertissements partiels se sont produits lors de l'exécution de l'instruction SQL.

get_operation Obtient l'état d'une opération de longue durée. Une opération de longue durée peut prendre plusieurs minutes. Si une opération prend beaucoup de temps, utilisez un outil de ligne de commande pour faire une pause de 30 secondes avant de vérifier à nouveau l'état de l'opération.
create_user

Créez un utilisateur de base de données pour une instance Cloud SQL.

  • Cet outil renvoie une opération de longue durée. Utilisez l'outil get_operation pour interroger son état jusqu'à ce que l'opération soit terminée.
  • Lorsque vous utilisez l'outil create_user, spécifiez le type d'utilisateur : CLOUD_IAM_USER ou CLOUD_IAM_SERVICE_ACCOUNT.
  • Par défaut, le rôle cloudsqlsuperuser est attribué au nouvel utilisateur, sauf si vous spécifiez explicitement d'autres rôles de base de données dans la requête.
  • Vous pouvez utiliser un utilisateur nouvellement créé avec l'outil execute_sql si l'utilisateur est un utilisateur IAM actuellement connecté. L'outil execute_sql exécute les instructions SQL à l'aide des droits de l'utilisateur de base de données connecté à l'aide de l'authentification IAM pour les bases de données.

L'outil create_user présente les limites suivantes :

  • Vous ne pouvez pas créer d'utilisateur intégré avec un mot de passe.
  • L'outil create_user ne permet pas de créer un utilisateur pour SQL Server.

Pour créer un utilisateur IAM dans PostgreSQL :

  • Le nom d'utilisateur de la base de données doit correspondre à l'adresse e-mail de l'utilisateur IAM, en minuscules. Par exemple, pour créer un utilisateur pour l'utilisateur IAM PostgreSQL example-user@example.com, vous pouvez utiliser la requête suivante :
{
  "name": "example-user@example.com",
  "type": "CLOUD_IAM_USER",
  "instance":"test-instance",
  "project": "test-project"
}

Le nom d'utilisateur de base de données créé pour l'utilisateur IAM est example-user@example.com.

Pour créer un compte de service IAM dans PostgreSQL :

  • Le nom d'utilisateur de la base de données doit être créé sans le suffixe .gserviceaccount.com, même si l'adresse e-mail complète du compte est service-account-name@project-id.iam.gserviceaccount.com. Par exemple, pour créer un compte de service IAM pour PostgreSQL, vous pouvez utiliser le format de requête suivant :
{
   "name": "test@test-project.iam",
   "type": "CLOUD_IAM_SERVICE_ACCOUNT",
   "instance": "test-instance",
   "project": "test-project"
}

Le nom d'utilisateur de base de données créé pour le compte de service IAM est test@test-project.iam.

Pour créer un utilisateur IAM ou un compte de service IAM dans MySQL :

  • Lorsque Cloud SQL pour MySQL stocke un nom d'utilisateur, il tronque le signe @ et le nom de domaine de l'adresse e-mail de l'utilisateur ou du compte de service. Par exemple, example-user@example.com devient example-user.
  • Pour cette raison, vous ne pouvez pas ajouter deux utilisateurs IAM ou comptes de service ayant le même nom d'utilisateur, mais des noms de domaine différents, à la même instance Cloud SQL.
  • Par exemple, pour créer un utilisateur pour l'utilisateur IAM MySQL example-user@example.com, utilisez la requête suivante :
{
   "name": "example-user@example.com",
   "type": "CLOUD_IAM_USER",
   "instance": "test-instance",
   "project": "test-project"
}

Le nom d'utilisateur de base de données créé pour l'utilisateur IAM est example-user.

  • Par exemple, pour créer le compte de service IAM MySQL service-account-name@project-id.iam.gserviceaccount.com, utilisez la requête suivante :
{
   "name": "service-account-name@project-id.iam.gserviceaccount.com",
   "type": "CLOUD_IAM_SERVICE_ACCOUNT",
   "instance": "test-instance",
   "project": "test-project"
}

Le nom d'utilisateur de base de données créé pour le compte de service IAM est service-account-name.

update_user

Mettez à jour un utilisateur de base de données pour une instance Cloud SQL. Un cas d'utilisation courant pour update_user consiste à accorder à un utilisateur le rôle cloudsqlsuperuser, qui peut lui fournir de nombreuses autorisations requises.

Cet outil ne permet que d'attribuer des rôles de base de données aux utilisateurs.

  • Cet outil renvoie une opération de longue durée. Utilisez l'outil get_operation pour interroger son état jusqu'à ce que l'opération soit terminée.
  • Avant d'appeler l'outil update_user, vérifiez toujours la configuration existante de l'utilisateur, comme le type d'utilisateur avec l'outil list_users.
  • Dans le cas particulier de MySQL, si l'outil list_users renvoie une adresse e-mail complète pour le champ iamEmail, par exemple {name=test-account, iamEmail=test-account@project-id.iam.gserviceaccount.com}, utilisez cette adresse e-mail complète dans le champ iamEmail de la requête update_user dans le champ name de votre toolrequest. Par exemple : name=test-account@project-id.iam.gserviceaccount.com.

Paramètres clés pour modifier les rôles utilisateur :

  • database_roles : liste des rôles de base de données à attribuer à l'utilisateur.
  • revokeExistingRoles : champ booléen (valeur par défaut : false) qui contrôle la façon dont les rôles existants sont gérés.

Fonctionnement des mises à jour des rôles :

  1. Si revokeExistingRoles est "true" :

    • Tous les rôles existants accordés à l'utilisateur, mais qui ne figurent PAS dans la liste database_roles fournie, seront RÉVOQUÉS.
    • La révocation ne s'applique qu'aux rôles non système. Les rôles système tels que cloudsqliamuser, etc. ne seront pas révoqués.
    • Tous les rôles de la liste database_roles que l'utilisateur ne possède PAS encore lui seront ACCORDÉS.
    • Si database_roles est vide, TOUS les rôles existants non système sont révoqués.
  2. Si revokeExistingRoles est défini sur "false" (valeur par défaut) :

    • Tous les rôles de la liste database_roles que l'utilisateur ne possède PAS encore lui seront ACCORDÉS.
    • Les rôles existants qui ne figurent PAS dans la liste database_roles sont CONSERVÉS.
    • Si database_roles est vide, les rôles de l'utilisateur ne sont pas modifiés.

Exemples :

  • Rôles existants : [roleA, roleB]

    • Requête : database_roles: [roleB, roleC], revokeExistingRoles: true
    • Résultat : roleA révoqué, roleC accordé. Les rôles utilisateur deviennent [roleB, roleC].
    • Requête : database_roles: [roleB, roleC], revokeExistingRoles: false
    • Résultat : Subventions roleC. Les rôles utilisateur deviennent [roleA, roleB, roleC].
    • Requête : database_roles: [], revokeExistingRoles: true
    • Résultat : révoque roleA, révoque roleB. Les rôles utilisateur deviennent [].
    • Requête : database_roles: [], revokeExistingRoles: false
    • Résultat : aucun changement. Les rôles utilisateur restent [roleA, roleB].
clone_instance

Créez une instance Cloud SQL en tant que clone d'une instance source.

  • Cet outil renvoie une opération de longue durée. Utilisez l'outil get_operation pour interroger son état jusqu'à ce que l'opération soit terminée.
  • L'opération de clonage peut prendre plusieurs minutes. Utilisez un outil de ligne de commande pour faire une pause de 30 secondes avant de vérifier à nouveau l'état.
update_instance

Met à jour partiellement les paramètres de configuration d'une instance Cloud SQL.

  • Cet outil renvoie une opération de longue durée. Utilisez l'outil get_operation pour interroger son état jusqu'à ce que l'opération soit terminée.
list_users Répertorie tous les utilisateurs de base de données pour une instance Cloud SQL.
import_data

Importer des données dans une instance Cloud SQL

Si le fichier ne commence pas par gs://, il est considéré comme stocké en local. Si le fichier est local, il doit être importé dans Cloud Storage avant que vous puissiez effectuer l'appel import_data. Pour importer le fichier dans Cloud Storage, vous pouvez utiliser les commandes gcloud ou gsutil.

Avant d'importer le fichier dans Cloud Storage, déterminez si vous souhaitez utiliser un bucket existant ou en créer un dans le projet fourni.

Une fois le fichier importé dans Cloud Storage, le compte de service de l'instance doit disposer des autorisations suffisantes pour lire le fichier importé à partir du bucket Cloud Storage.

Pour ce faire :

  1. Utilisez l'outil get_instance pour obtenir l'adresse e-mail du compte de service de l'instance. À partir du résultat de l'outil, obtenez la valeur du champ serviceAccountEmailAddress.
  2. Attribuez le rôle storage.objectAdmin au compte de service de l'instance sur le bucket Cloud Storage fourni. Utilisez une commande telle que gcloud storage buckets add-iam-policy-binding ou une requête à l'API Cloud Storage. Il peut s'écouler entre deux et sept minutes, voire plus, avant que le rôle ne soit accordé et que les autorisations ne soient propagées au compte de service dans Cloud Storage. Si vous rencontrez une erreur d'autorisation après avoir mis à jour la stratégie IAM, attendez quelques minutes, puis réessayez.

Une fois les autorisations accordées, vous pouvez importer les données. Nous vous recommandons de laisser les paramètres facultatifs vides et d'utiliser les valeurs par défaut du système. Le type de fichier peut généralement être déterminé par l'extension du fichier. Par exemple, si le fichier est un fichier SQL, .sql ou .csv pour un fichier CSV.

Voici un exemple de importContext SQL pour MySQL.

{
  "uri": "gs://sample-gcs-bucket/sample-file.sql",
  "kind": "sql#importContext",
  "fileType": "SQL"
}

Aucun paramètre database n'est présent pour MySQL, car le nom de la base de données doit figurer dans le fichier SQL. Ne spécifiez qu'un seul URI. Aucun autre champ n'est obligatoire en dehors de importContext.

Pour PostgreSQL, le champ database est obligatoire. Voici un exemple de importContext PostgreSQL avec le champ database spécifié.

{
  "uri": "gs://sample-gcs-bucket/sample-file.sql",
  "kind": "sql#importContext",
  "fileType": "SQL",
  "database": "sample-db"
}

L'outil import_data renvoie une opération de longue durée. Utilisez l'outil get_operation pour interroger son état jusqu'à ce que l'opération soit terminée.

Obtenir les spécifications de l'outil MCP

Pour obtenir les spécifications des outils MCP pour tous les outils d'un serveur MCP, utilisez la méthode tools/list. L'exemple suivant montre comment utiliser curl pour lister tous les outils et leurs spécifications actuellement disponibles sur le serveur MCP.

Requête curl
                      
curl --location 'https://sqladmin.googleapis.com/mcp' \
--header 'content-type: application/json' \
--header 'accept: application/json, text/event-stream' \
--data '{
    "method": "tools/list",
    "jsonrpc": "2.0",
    "id": 1
}'