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 gli utenti integrati, deve essere impostata password_secret_version.
- In caso contrario, per gli utenti IAM, 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. - Dopo aver utilizzato lo strumento
create_instanceper creare un'istanza, puoi utilizzare lo strumentocreate_userper 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 nell'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, "user": string, "passwordSecretVersion": 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. |
user |
Facoltativo. Il nome di un utente del database esistente per connettersi al database. Se |
passwordSecretVersion |
Facoltativo. Il nome della risorsa del secret di Secret Manager contenente la password per l'accesso dell'utente al database. Il formato previsto è |
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, "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 di 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 |
Impostato 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 |
Identifica il tipo di messaggio Protobuf serializzato con un riferimento URI costituito da un prefisso che termina con una barra e il nome del tipo completo. Esempio: type.googleapis.com/google.protobuf.StringValue Questa stringa deve contenere almeno un carattere Il prefisso è arbitrario e le implementazioni di Protobuf devono semplicemente rimuovere tutto fino all'ultimo Tutte le stringhe URL di tipo devono essere riferimenti URI validi con l'ulteriore limitazione (per il formato di testo) che il contenuto del riferimento deve essere costituito solo da caratteri alfanumerici, sequenze di escape codificate in percentuale e caratteri del seguente insieme (esclusi i backtick esterni): Nel design originale di |
value |
Contiene una serializzazione Protobuf del tipo descritto da type_url. Una stringa con codifica in base64. |
Annotazioni dello strumento
Suggerimento distruttivo: ✅ | Suggerimento idempotente: ❌ | Suggerimento di sola lettura: ❌ | Suggerimento open world: ❌