MCP Reference: cloud-sql

Un server Model Context Protocol (MCP) funge da proxy tra un servizio esterno che fornisce contesto, dati o funzionalità a un modello linguistico di grandi dimensioni (LLM) o a un'applicazione AI. I server MCP connettono le applicazioni di AI a sistemi esterni come database e servizi web, traducendo le loro risposte in un formato che l'applicazione di AI può comprendere.

Configurazione del server

Prima dell'uso, devi abilitare i server MCP e configurare l'autenticazione. Per saperne di più sull'utilizzo dei server MCP remoti di Google e Google Cloud, consulta la panoramica dei server MCP di Google Cloud.

API Cloud SQL Admin per MCP

Endpoint server

Un endpoint di servizio MCP è l'indirizzo di rete e l'interfaccia di comunicazione (di solito un URL) del server MCP che un'applicazione AI (l'host per il client MCP) utilizza per stabilire una connessione sicura e standardizzata. È il punto di contatto per l'LLM per richiedere il contesto, chiamare uno strumento o accedere a una risorsa. Gli endpoint Google MCP possono essere globali o regionali.

Il server MCP cloud-sql ha il seguente endpoint MCP:

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

Strumenti MCP

Uno strumento MCP è una funzione o una funzionalità eseguibile che un server MCP espone a un LLM o a un'applicazione AI per eseguire un'azione nel mondo reale.

Il server MCP cloud-sql dispone dei seguenti strumenti:

Strumenti MCP
list_instances Elenca tutte le istanze Cloud SQL nel progetto.
get_instance Recupera i dettagli di un'istanza Cloud SQL.
create_instance

Avvia la creazione di un'istanza Cloud SQL.

  • Lo strumento restituisce un'operazione a lunga esecuzione. Utilizza lo strumento get_operation per eseguire il polling del relativo stato fino al completamento dell'operazione.
  • L'operazione di creazione dell'istanza può richiedere diversi minuti. Utilizza uno strumento a riga di comando per mettere in pausa per 30 secondi prima di ricontrollare lo stato.
  • Dopo aver utilizzato lo strumento create_instance per creare un'istanza, puoi utilizzare lo strumento create_user per creare un account utente IAM per l'utente attualmente connesso al progetto.
  • Per impostazione predefinita, il valore di data_api_access è impostato su ALLOW_DATA_API. Questa impostazione consente di eseguire istruzioni SQL utilizzando lo strumento execute_sql e l'API executeSql.

Se non diversamente specificato, un'istanza appena creata utilizza la configurazione predefinita di un ambiente di sviluppo.

Di seguito è riportata la configurazione predefinita per un'istanza in un ambiente di sviluppo:

{
  "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"}]
}

Per un'istanza in un ambiente di produzione è consigliata la seguente configurazione:

{
  "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"}]
}

Per SQL Server è consigliata la seguente configurazione dell'istanza:

{
  "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

Esegui qualsiasi istruzione SQL valida, incluse istruzioni DDL (Data Definition Language), DCL (Data Control Language), DQL (Data Query Language) o DML (Data Manipulation Language), su un'istanza Cloud SQL.

Per supportare lo strumento execute_sql, un'istanza Cloud SQL deve soddisfare i seguenti requisiti:

  • Il valore di data_api_access deve essere impostato su ALLOW_DATA_API.
  • Per un'istanza MySQL, il flag di database cloudsql_iam_authentication deve essere impostato su on. Per un'istanza PostgreSQL, il flag di database cloudsql.iam_authentication deve essere impostato su on.
  • Per chiamare lo strumento execute_sql è necessario un account utente IAM o un account di servizio IAM (CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT). Lo strumento esegue le istruzioni SQL utilizzando i privilegi dell'utente del database che ha eseguito l'accesso con l'autenticazione IAM dei database.

Dopo aver utilizzato lo strumento create_instance per creare un'istanza, puoi utilizzare lo strumento create_user per creare un account utente IAM per l'utente attualmente connesso al progetto.

Lo strumento execute_sql presenta le seguenti limitazioni:

  • Se un'istruzione SQL restituisce una risposta superiore a 10 MB, la risposta verrà troncata.
  • Lo strumento execute_sql ha un timeout predefinito di 30 secondi. Se una query viene eseguita per più di 30 secondi, lo strumento restituisce un errore DEADLINE_EXCEEDED.
  • Lo strumento execute_sql non è supportato per SQL Server.

Se ricevi errori simili a "L'autenticazione IAM non è abilitata per l'istanza", puoi utilizzare lo strumento get_instance per controllare il valore del flag di autenticazione database IAM per l'istanza.

Se ricevi errori come "L'istanza non consente l'utilizzo di executeSql per accedere a questa istanza", puoi utilizzare lo strumento get_instance per controllare l'impostazione data_api_access.

Quando ricevi errori di autenticazione:

  1. Controlla se l'account utente attualmente connesso esiste come utente IAM sull'istanza utilizzando lo strumento list_users.
  2. Se l'account utente IAM non esiste, utilizza lo strumento create_user per creare l'account utente IAM per l'utente che ha eseguito l'accesso.
  3. Se l'utente attualmente connesso non dispone dei ruoli utente del database appropriati, puoi utilizzare lo strumento update_user per concedere i ruoli del database all'utente. Ad esempio, il ruolo cloudsqlsuperuser può fornire a un utente IAM molte autorizzazioni richieste.
  4. Controlla se all'utente attualmente connesso sono assegnate le autorizzazioni IAM corrette per il progetto. Puoi utilizzare il comando gcloud projects get-iam-policy [PROJECT_ID] per verificare se all'utente sono assegnati i ruoli o le autorizzazioni IAM appropriati per il progetto.

    • L'utente deve disporre dell'autorizzazione cloudsql.instance.login per eseguire l'autenticazione IAM dei database automatica.
    • L'utente deve disporre dell'autorizzazione cloudsql.instances.executeSql per eseguire istruzioni SQL utilizzando lo strumento execute_sql o l'API executeSql.
    • Ruoli IAM comuni che contengono le autorizzazioni richieste: Utente istanza Cloud SQL (roles/cloudsql.instanceUser) o Amministratore Cloud SQL (roles/cloudsql.admin)

Quando ricevi un ExecuteSqlResponse, controlla sempre i campi message e status nel corpo della risposta. Un codice di stato HTTP riuscito non garantisce la riuscita completa di tutte le istruzioni SQL. I campi message e status indicheranno se si sono verificati errori o avvisi parziali durante l'esecuzione dell'istruzione SQL.

get_operation Recupera lo stato di un'operazione a lunga esecuzione. Il completamento di un'operazione a lunga esecuzione può richiedere diversi minuti. Se un'operazione richiede molto tempo, utilizza uno strumento a riga di comando per mettere in pausa per 30 secondi prima di ricontrollare lo stato dell'operazione.
create_user

Crea un utente del database per un'istanza Cloud SQL.

  • Questo strumento restituisce un'operazione a lunga esecuzione. Utilizza lo strumento get_operation per eseguire il polling del relativo stato fino al completamento dell'operazione.
  • Quando utilizzi lo strumento create_user, specifica il tipo di utente: CLOUD_IAM_USER o CLOUD_IAM_SERVICE_ACCOUNT.
  • Per impostazione predefinita, al nuovo utente viene assegnato il ruolo cloudsqlsuperuser, a meno che tu non specifichi esplicitamente altri ruoli del database nella richiesta.
  • Puoi utilizzare un utente appena creato con lo strumento execute_sql se l'utente è un utente IAM attualmente connesso. Lo strumento execute_sql esegue le istruzioni SQL utilizzando i privilegi dell'utente del database che ha eseguito l'accesso utilizzando l'autenticazione IAM dei database.

Lo strumento create_user presenta le seguenti limitazioni:

  • Non puoi creare un utente integrato con una password.
  • Lo strumento create_user non supporta la creazione di un utente per SQL Server.

Per creare un utente IAM in PostgreSQL:

  • Il nome utente del database deve essere l'indirizzo email dell'utente IAM e deve essere tutto in minuscolo. Ad esempio, per creare un utente per l'utente PostgreSQL IAM example-user@example.com, puoi utilizzare la seguente richiesta:
{
  "name": "example-user@example.com",
  "type": "CLOUD_IAM_USER",
  "instance":"test-instance",
  "project": "test-project"
}

Il nome utente del database creato per l'utente IAM è example-user@example.com.

Per creare un account di servizio IAM in PostgreSQL:

  • Il nome utente del database deve essere creato senza il suffisso .gserviceaccount.com anche se l'indirizzo email completo dell'account è service-account-name@project-id.iam.gserviceaccount.com. Ad esempio, per creare un account di servizio IAM per PostgreSQL, puoi utilizzare il seguente formato di richiesta:
{
   "name": "test@test-project.iam",
   "type": "CLOUD_IAM_SERVICE_ACCOUNT",
   "instance": "test-instance",
   "project": "test-project"
}

Il nome utente del database creato per il account di servizio IAM è test@test-project.iam.

Per creare un utente IAM o un account di servizio IAM in MySQL:

  • Quando Cloud SQL per MySQL archivia un nome utente, tronca il carattere @ e il nome di dominio dall'indirizzo email dell'utente o del account di servizio. Ad esempio, example-user@example.com diventa example-user.
  • Per questo motivo, non puoi aggiungere due utenti IAM o service account con lo stesso nome utente, ma nomi di dominio diversi, alla stessa istanza Cloud SQL.
  • Ad esempio, per creare un utente per l'utente IAM MySQL example-user@example.com, utilizza la seguente richiesta:
{
   "name": "example-user@example.com",
   "type": "CLOUD_IAM_USER",
   "instance": "test-instance",
   "project": "test-project"
}

Il nome utente del database creato per l'utente IAM è example-user.

  • Ad esempio, per creare il account di servizio IAM MySQL service-account-name@project-id.iam.gserviceaccount.com, utilizza la seguente richiesta:
{
   "name": "service-account-name@project-id.iam.gserviceaccount.com",
   "type": "CLOUD_IAM_SERVICE_ACCOUNT",
   "instance": "test-instance",
   "project": "test-project"
}

Il nome utente del database creato per il account di servizio IAM è service-account-name.

update_user

Aggiorna un utente database per un'istanza Cloud SQL. Un caso d'uso comune per update_user è concedere a un utente il ruolo cloudsqlsuperuser, che può fornire a un utente molte autorizzazioni richieste.

Questo strumento supporta solo l'aggiornamento degli utenti per assegnare ruoli di database.

  • Questo strumento restituisce un'operazione a lunga esecuzione. Utilizza lo strumento get_operation per eseguire il polling del relativo stato fino al completamento dell'operazione.
  • Prima di chiamare lo strumento update_user, controlla sempre la configurazione esistente dell'utente, ad esempio il tipo di utente, con lo strumento list_users.
  • Come caso speciale per MySQL, se lo strumento list_users restituisce un indirizzo email completo per il campo iamEmail, ad esempio {name=test-account, iamEmail=test-account@project-id.iam.gserviceaccount.com}, nella richiesta update_user utilizza l'indirizzo email completo nel campo iamEmail del campo name della richiesta dello strumento. Ad esempio, name=test-account@project-id.iam.gserviceaccount.com.

Parametri chiave per l'aggiornamento dei ruoli utente:

  • database_roles: un elenco di ruoli del database da assegnare all'utente.
  • revokeExistingRoles: un campo booleano (valore predefinito: false) che controlla la gestione dei ruoli esistenti.

Come funzionano gli aggiornamenti dei ruoli:

  1. Se revokeExistingRoles è vero:

    • Tutti i ruoli esistenti concessi all'utente ma NON presenti nell'elenco database_roles fornito verranno REVOCATI.
    • La revoca si applica solo ai ruoli non di sistema. I ruoli di sistema come cloudsqliamuser e così via non verranno revocati.
    • Tutti i ruoli nell'elenco database_roles che l'utente NON ha già verranno CONCESSI.
    • Se database_roles è vuoto, vengono revocati TUTTI i ruoli non di sistema esistenti.
  2. Se revokeExistingRoles è false (impostazione predefinita):

    • Tutti i ruoli nell'elenco database_roles che l'utente NON ha già verranno CONCESSI.
    • I ruoli esistenti NON presenti nell'elenco database_roles vengono MANTENUTI.
    • Se database_roles è vuoto, i ruoli dell'utente non vengono modificati.

Esempi:

  • Ruoli esistenti: [roleA, roleB]

    • Richiesta: database_roles: [roleB, roleC], revokeExistingRoles: true
    • Risultato: revoca roleA, concessione roleC. I ruoli utente diventano [roleB, roleC].
    • Richiesta: database_roles: [roleB, roleC], revokeExistingRoles: false
    • Risultato: sovvenzioni roleC. I ruoli utente diventano [roleA, roleB, roleC].
    • Richiesta: database_roles: [], revokeExistingRoles: true
    • Risultato: Revokes roleA, Revokes roleB. I ruoli utente diventano [].
    • Richiesta: database_roles: [], revokeExistingRoles: false
    • Risultato: nessuna modifica. I ruoli utente rimangono [roleA, roleB].
clone_instance

Crea un'istanza Cloud SQL come clone di un'istanza di origine.

  • Questo strumento restituisce un'operazione a lunga esecuzione. Utilizza lo strumento get_operation per eseguire il polling del suo stato fino al completamento dell'operazione.
  • L'operazione di clonazione può richiedere diversi minuti. Utilizza uno strumento a riga di comando per mettere in pausa per 30 secondi prima di ricontrollare lo stato.
update_instance

Aggiorna parzialmente le impostazioni di configurazione di un'istanza Cloud SQL.

  • Questo strumento restituisce un'operazione a lunga esecuzione. Utilizza lo strumento get_operation per eseguire il polling del relativo stato fino al completamento dell'operazione.
list_users Elenca tutti gli utenti del database per un'istanza Cloud SQL.
import_data

Importa i dati in un'istanza Cloud SQL.

Se il file non inizia con gs://, si presume che sia archiviato localmente. Se il file è locale, deve essere caricato in Cloud Storage prima di poter effettuare la chiamata import_data effettiva. Per caricare il file su Cloud Storage, puoi utilizzare i comandi gcloud o gsutil.

Prima di caricare il file in Cloud Storage, valuta se vuoi utilizzare un bucket esistente o crearne uno nuovo nel progetto fornito.

Dopo il caricamento del file su Cloud Storage, il account di servizio dell'istanza deve disporre di autorizzazioni sufficienti per leggere il file caricato dal bucket Cloud Storage.

Per eseguire questa operazione:

  1. Utilizza lo strumento get_instance per ottenere l'indirizzo email del account di servizio dell'istanza. Dall'output dello strumento, ottieni il valore del campo serviceAccountEmailAddress.
  2. Concedi al account di servizio dell'istanza il ruolo storage.objectAdmin nel bucket Cloud Storage fornito. Utilizza un comando come gcloud storage buckets add-iam-policy-binding o una richiesta all'API Cloud Storage. Possono essere necessari da 2 a 7 minuti o più prima che il ruolo venga concesso e le autorizzazioni vengano propagate al account di servizio in Cloud Storage. Se si verifica un errore di autorizzazione dopo aver aggiornato il criterio IAM, attendi qualche minuto e riprova.

Una volta concesse le autorizzazioni, puoi importare i dati. Ti consigliamo di lasciare vuoti i parametri facoltativi e di utilizzare i valori predefiniti del sistema. Il tipo di file può in genere essere determinato dall'estensione del file. Ad esempio, se il file è un file SQL, .sql o .csv per il file CSV.

Di seguito è riportato un esempio di SQL importContext per MySQL.

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

Non è presente alcun parametro database per MySQL, poiché il nome del database deve essere presente nel file SQL. Specifica un solo URI. Al di fuori di importContext, non sono necessari altri campi.

Per PostgreSQL, il campo database è obbligatorio. Di seguito è riportato un importContext PostgreSQL di esempio con il campo database specificato.

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

Lo strumento import_data restituisce un'operazione a lunga esecuzione. Utilizza lo strumento get_operation per eseguire il polling del suo stato fino al completamento dell'operazione.

Ottenere le specifiche dello strumento MCP

Per ottenere le specifiche dello strumento MCP per tutti gli strumenti in un server MCP, utilizza il metodo tools/list. L'esempio seguente mostra come utilizzare curl per elencare tutti gli strumenti e le relative specifiche attualmente disponibili nel server MCP.

Curl Request
                      
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
}'