Strumento: 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_accessdeve essere impostato suALLOW_DATA_API. - Per un'istanza MySQL, il flag di database
cloudsql_iam_authenticationdeve essere impostato suon. Per un'istanza PostgreSQL, il flag di databasecloudsql.iam_authenticationdeve essere impostato suon. - Per chiamare lo strumento
execute_sqlè necessario un account utente IAM o un account di servizio IAM (CLOUD_IAM_USERoCLOUD_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_sqlha un timeout predefinito di 30 secondi. Se una query viene eseguita per più di 30 secondi, lo strumento restituisce un erroreDEADLINE_EXCEEDED. - Lo strumento
execute_sqlnon è 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:
- Controlla se l'account utente attualmente connesso esiste come utente IAM sull'istanza utilizzando lo strumento
list_users. - Se l'account utente IAM non esiste, utilizza lo strumento
create_userper creare l'account utente IAM per l'utente che ha eseguito l'accesso. - Se l'utente attualmente connesso non dispone dei ruoli utente del database appropriati, puoi utilizzare lo strumento
update_userper concedere i ruoli del database all'utente. Ad esempio, il ruolocloudsqlsuperuserpuò fornire a un utente IAM molte autorizzazioni richieste. 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.loginper eseguire l'autenticazione IAM dei database automatica. - L'utente deve disporre dell'autorizzazione
cloudsql.instances.executeSqlper eseguire istruzioni SQL utilizzando lo strumentoexecute_sqlo l'APIexecuteSql. - Ruoli IAM comuni che contengono le autorizzazioni richieste: Utente istanza Cloud SQL (
roles/cloudsql.instanceUser) o Amministratore Cloud SQL (roles/cloudsql.admin)
- L'utente deve disporre dell'autorizzazione
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.
Il seguente esempio mostra come utilizzare curl per richiamare lo strumento MCP execute_sql.
| Curl Request |
|---|
curl --location 'https://sqladmin.googleapis.com/mcp' \ --header 'content-type: application/json' \ --header 'accept: application/json, text/event-stream' \ --data '{ "method": "tools/call", "params": { "name": "execute_sql", "arguments": { // provide these details according to the tool's MCP specification } }, "jsonrpc": "2.0", "id": 1 }' |
Schema di input
Richiesta di esecuzione SQL dell'istanza per MCP.
SqlInstancesExecuteSqlMcpRequest
| Rappresentazione JSON |
|---|
{ "instance": string, "project": string, "sqlStatement": string, "database": string } |
| Campi | |
|---|---|
instance |
Obbligatorio. ID istanza database. L'ID progetto non è incluso. |
project |
Obbligatorio. ID progetto del progetto che contiene l'istanza. |
sqlStatement |
Obbligatorio. Istruzioni SQL da eseguire sul database. Può trattarsi di una singola istruzione o di una sequenza di istruzioni separate da punti e virgola. |
database |
Facoltativo. Nome del database su cui verrà eseguita l'istruzione. Per Postgres è obbligatorio, per MySQL è facoltativo. Per Postgres, se la query non è limitata a un database esistente, ad esempio elenca database / crea nuovo database / concedi ruoli, puoi passare il valore predefinito come postgres. |
Schema di output
Esegui la risposta delle istruzioni SQL.
SqlInstancesExecuteSqlResponse
| Rappresentazione JSON |
|---|
{ "messages": [ { object ( |
| Campi | |
|---|---|
messages[] |
Un elenco di avvisi e avvisi generati durante l'esecuzione della query. Per PostgreSQL, sono inclusi tutti gli avvisi e gli avvertimenti. Per MySQL, sono inclusi gli avvisi generati dall'ultima istruzione eseguita. Per recuperare tutti gli avvisi per una query con più istruzioni, |
metadata |
Le informazioni aggiuntive sui metadati relative all'esecuzione delle istruzioni SQL. |
results[] |
L'elenco dei risultati dopo l'esecuzione di tutte le istruzioni SQL. |
status |
Contiene l'errore del database se l'esecuzione SQL non è riuscita. |
Messaggio
| Rappresentazione JSON |
|---|
{ // Union field |
| Campi | |
|---|---|
Campo unione
|
|
message |
La stringa del messaggio completa. Per PostgreSQL, si tratta di una stringa formattata che può includere gravità, codice e il messaggio di avviso/notifica. Per MySQL, questo campo contiene il messaggio di avviso. |
Campo unione
|
|
severity |
La gravità del messaggio (ad es. "NOTICE" per PostgreSQL e "WARNING" per MySQL. |
Metadati
| Rappresentazione JSON |
|---|
{ "sqlStatementExecutionTime": string } |
| Campi | |
|---|---|
sqlStatementExecutionTime |
Il tempo impiegato per eseguire le istruzioni SQL. Una durata in secondi con un massimo di nove cifre frazionarie, che termina con " |
Durata
| Rappresentazione JSON |
|---|
{ "seconds": string, "nanos": integer } |
| Campi | |
|---|---|
seconds |
Secondi firmati dell'intervallo di tempo. Deve essere compreso tra -315.576.000.000 e +315.576.000.000 inclusi. Nota: questi limiti vengono calcolati in base a: 60 sec/min * 60 min/ora * 24 ore/giorno * 365,25 giorni/anno * 10.000 anni |
nanos |
Frazioni di secondo con segno con risoluzione in nanosecondi dell'intervallo di tempo. Le durate inferiori a un secondo sono rappresentate con un campo |
QueryResult
| Rappresentazione JSON |
|---|
{ "columns": [ { object ( |
| Campi | |
|---|---|
columns[] |
Elenco delle colonne incluse nel risultato. È incluso anche il tipo di dati della colonna. |
rows[] |
Righe restituite dall'istruzione SQL. |
message |
Messaggio relativo al risultato dell'esecuzione SQL. |
partialResult |
Imposta il valore su true se il risultato dell'esecuzione SQL viene troncato a causa dei limiti di dimensione o di un errore durante il recupero dei risultati. |
status |
Se i risultati sono stati troncati a causa di un errore, i dettagli dell'errore. |
Colonna
| Rappresentazione JSON |
|---|
{ "name": string, "type": string } |
| Campi | |
|---|---|
name |
Nome della colonna. |
type |
Tipo di dati della colonna. |
Riga
| Rappresentazione JSON |
|---|
{
"values": [
{
object ( |
| Campi | |
|---|---|
values[] |
I valori per la riga. |
Valore
| Rappresentazione JSON |
|---|
{ "value": string, "nullValue": boolean } |
| Campi | |
|---|---|
value |
Il valore della cella in formato stringa. |
nullValue |
Se il valore della cella è nullo, questo flag verrà impostato su true. |
Stato
| Rappresentazione JSON |
|---|
{ "code": integer, "message": string, "details": [ { "@type": string, field1: ..., ... } ] } |
| Campi | |
|---|---|
code |
Il codice di stato, che deve essere un valore enum di |
message |
Un messaggio di errore rivolto agli sviluppatori, che deve essere in inglese. Qualsiasi messaggio di errore rivolto agli utenti deve essere localizzato e inviato nel campo |
details[] |
Un elenco di messaggi contenenti i dettagli dell'errore. Esiste un insieme comune di tipi di messaggi da utilizzare per le API. Un oggetto contenente campi di tipo arbitrario. Un campo aggiuntivo |
Qualsiasi
| Rappresentazione JSON |
|---|
{ "typeUrl": string, "value": string } |
| Campi | |
|---|---|
typeUrl |
Un URL/nome risorsa che identifica in modo univoco il tipo di messaggio del buffer del protocollo serializzato. Questa stringa deve contenere almeno un carattere "/". L'ultimo segmento del percorso dell'URL deve rappresentare il nome completo del tipo (come in In pratica, i team precompilano nel binario tutti i tipi che prevedono di utilizzare nel contesto di Any. Tuttavia, per gli URL che utilizzano lo schema
Nota: questa funzionalità non è attualmente disponibile nella release ufficiale di protobuf e non viene utilizzata per gli URL di tipo che iniziano con type.googleapis.com. A partire da maggio 2023, non esistono implementazioni di server di tipo ampiamente utilizzate e non sono previsti piani per implementarne una. Gli schemi diversi da |
value |
Deve essere un buffer di protocollo serializzato valido del tipo specificato sopra. Una stringa con codifica in base64. |
Annotazioni dello strumento
Suggerimento distruttivo: ✅ | Suggerimento idempotente: ❌ | Suggerimento di sola lettura: ❌ | Suggerimento open world: ❌