Herramienta: execute_sql
Ejecutar cualquier instrucción de SQL válida, incluidas las instrucciones del lenguaje de definición de datos (DDL), el lenguaje de control de datos (DCL), el lenguaje de consulta de datos (DQL) o el lenguaje de manipulación de datos (DML) en una instancia de Cloud SQL
Para admitir la herramienta execute_sql, una instancia de Cloud SQL debe cumplir con los siguientes requisitos:
- El valor de
data_api_accessdebe establecerse enALLOW_DATA_API. - En el caso de una instancia de MySQL, la marca de base de datos
cloudsql_iam_authenticationdebe establecerse enon. En el caso de una instancia de PostgreSQL, la marca de base de datoscloudsql.iam_authenticationdebe establecerse enon. - Se requiere una cuenta de usuario o una cuenta de servicio de IAM (
CLOUD_IAM_USERoCLOUD_IAM_SERVICE_ACCOUNT) para llamar a la herramientaexecute_sql. La herramienta ejecuta las sentencias SQL con los privilegios del usuario de la base de datos que accedió con la autenticación de la base de datos de IAM.
Después de usar la herramienta create_instance para crear una instancia, puedes usar la herramienta create_user para crear una cuenta de usuario de IAM para el usuario que actualmente accedió al proyecto.
La herramienta execute_sql tiene las siguientes limitaciones:
- Si una instrucción de SQL devuelve una respuesta de más de 10 MB, la respuesta se truncará.
- La herramienta
execute_sqltiene un tiempo de espera predeterminado de 30 segundos. Si una consulta se ejecuta durante más de 30 segundos, la herramienta devuelve un error deDEADLINE_EXCEEDED. - La herramienta
execute_sqlno es compatible con SQL Server.
Si recibes errores similares a "La autenticación de IAM no está habilitada para la instancia", puedes usar la herramienta get_instance para verificar el valor de la marca de autenticación de la base de datos de IAM para la instancia.
Si recibes errores como "La instancia no permite usar executeSql para acceder a esta instancia", puedes usar la herramienta get_instance para verificar el parámetro de configuración data_api_access.
Cuando recibas errores de autenticación, haz lo siguiente:
- Verifica si la cuenta de usuario con la que se accedió actualmente existe como usuario de IAM en la instancia con la herramienta
list_users. - Si la cuenta de usuario de IAM no existe, usa la herramienta
create_userpara crearla para el usuario que accedió. - Si el usuario que accedió actualmente no tiene los roles de usuario de la base de datos adecuados, puedes usar la herramienta
update_userpara otorgarle roles de base de datos. Por ejemplo, el rolcloudsqlsuperuserpuede proporcionar a un usuario de IAM muchos permisos requeridos. Verifica si el usuario que accedió actualmente tiene los permisos de IAM correctos asignados para el proyecto. Puedes usar el comando
gcloud projects get-iam-policy [PROJECT_ID]para verificar si el usuario tiene los roles o permisos de IAM adecuados asignados para el proyecto.- El usuario debe tener permiso
cloudsql.instance.loginpara realizar la autenticación automática de la base de datos de IAM. - El usuario debe tener permiso
cloudsql.instances.executeSqlpara ejecutar instrucciones SQL con la herramientaexecute_sqlo la API deexecuteSql. - Roles de IAM comunes que contienen los permisos requeridos: Usuario de instancia de Cloud SQL (
roles/cloudsql.instanceUser) o Administrador de Cloud SQL (roles/cloudsql.admin)
- El usuario debe tener permiso
Cuando recibas un ExecuteSqlResponse, siempre verifica los campos message y status dentro del cuerpo de la respuesta. Un código de estado HTTP correcto no garantiza el éxito total de todas las sentencias SQL. Los campos message y status indicarán si hubo errores o advertencias parciales durante la ejecución de la instrucción de SQL.
En el siguiente ejemplo, se muestra cómo usar curl para invocar la herramienta de MCP execute_sql.
| Solicitud de Curl |
|---|
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 }' |
Esquema de entrada
Es una solicitud de ejecución de SQL de instancia para MCP.
SqlInstancesExecuteSqlMcpRequest
| Representación JSON |
|---|
{ "instance": string, "project": string, "sqlStatement": string, "database": string } |
| Campos | |
|---|---|
instance |
Obligatorio. El ID de instancia de la base de datos. Esto no incluye el ID del proyecto. |
project |
Obligatorio. El ID del proyecto que contiene la instancia. |
sqlStatement |
Obligatorio. Son las instrucciones de SQL que se ejecutarán en la base de datos. Puede ser una sola instrucción o una secuencia de instrucciones separadas por punto y coma. |
database |
Es opcional. Nombre de la base de datos en la que se ejecutará la instrucción. Es obligatorio para Postgres y opcional para MySQL. En el caso de Postgres, si tu consulta no se limita a una base de datos existente, como enumerar bases de datos, crear una base de datos nueva o otorgar roles, puedes pasar el valor predeterminado como postgres. |
Esquema de salida
Es la respuesta de la ejecución de instrucciones de SQL.
SqlInstancesExecuteSqlResponse
| Representación JSON |
|---|
{ "messages": [ { object ( |
| Campos | |
|---|---|
messages[] |
Es una lista de avisos y advertencias generados durante la ejecución de la consulta. En el caso de PostgreSQL, esto incluye todos los avisos y advertencias. En el caso de MySQL, esto incluye las advertencias generadas por la última instrucción ejecutada. Para recuperar todas las advertencias de una consulta de varias instrucciones, se debe ejecutar |
metadata |
Es la información de metadatos adicional sobre la ejecución de las sentencias SQL. |
results[] |
Es la lista de resultados después de ejecutar todas las instrucciones SQL. |
status |
Contiene el error de la base de datos si falló la ejecución de SQL. |
Mensaje
| Representación JSON |
|---|
{ // Union field |
| Campos | |
|---|---|
Campo de unión
|
|
message |
Es la cadena de mensaje completa. En el caso de PostgreSQL, se trata de una cadena con formato que puede incluir la gravedad, el código y el mensaje de aviso o advertencia. En el caso de MySQL, contiene el mensaje de advertencia. |
Campo de unión
|
|
severity |
Es la gravedad del mensaje (p.ej., "NOTICE" para PostgreSQL y "WARNING" para MySQL |
Metadatos
| Representación JSON |
|---|
{ "sqlStatementExecutionTime": string } |
| Campos | |
|---|---|
sqlStatementExecutionTime |
Es el tiempo que se tarda en ejecutar las instrucciones de SQL. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
Duración
| Representación JSON |
|---|
{ "seconds": string, "nanos": integer } |
| Campos | |
|---|---|
seconds |
Son los segundos firmados del período. Debe estar entre -315,576,000,000 y +315,576,000,000, inclusive. Nota: Estos límites se calculan de la siguiente manera: 60 s/min * 60 min/h * 24 h/día * 365.25 días/año * 10,000 años. |
nanos |
Fracciones firmadas de un segundo con una resolución de nanosegundos del período. Las duraciones inferiores a un segundo se representan con un campo |
QueryResult
| Representación JSON |
|---|
{ "columns": [ { object ( |
| Campos | |
|---|---|
columns[] |
Es la lista de columnas incluidas en el resultado. Esto también incluye el tipo de datos de la columna. |
rows[] |
Son las filas que devuelve la instrucción de SQL. |
message |
Es un mensaje relacionado con el resultado de la ejecución de SQL. |
partialResult |
Se establece en verdadero si el resultado de la ejecución de SQL se trunca debido a límites de tamaño o a un error al recuperar los resultados. |
status |
Son los detalles del error si los resultados se truncaron debido a un error. |
Columna
| Representación JSON |
|---|
{ "name": string, "type": string } |
| Campos | |
|---|---|
name |
Nombre de la columna. |
type |
Es el tipo de datos de la columna. |
Fila
| Representación JSON |
|---|
{
"values": [
{
object ( |
| Campos | |
|---|---|
values[] |
Son los valores de la fila. |
Valor
| Representación JSON |
|---|
{ "value": string, "nullValue": boolean } |
| Campos | |
|---|---|
value |
Es el valor de la celda en formato de cadena. |
nullValue |
Si el valor de la celda es nulo, esta marca se establecerá en verdadero. |
Estado
| Representación JSON |
|---|
{ "code": integer, "message": string, "details": [ { "@type": string, field1: ..., ... } ] } |
| Campos | |
|---|---|
code |
El código de estado, que debe ser un valor enum de |
message |
Un mensaje de error dirigido al desarrollador, que debe estar en inglés. Cualquier mensaje de error dirigido al usuario debe localizarse y enviarse al campo |
details[] |
Una lista de mensajes que contienen los detalles del error. Hay un conjunto común de tipos de mensajes para que usen las API. Un objeto que contiene campos de un tipo arbitrario. Un campo adicional |
Cualquiera
| Representación JSON |
|---|
{ "typeUrl": string, "value": string } |
| Campos | |
|---|---|
typeUrl |
Es una URL o un nombre de recurso que identifica de forma única el tipo de mensaje del búfer de protocolo serializado. Esta cadena debe contener al menos un carácter "/". El último segmento de la ruta de acceso de la URL debe representar el nombre completamente calificado del tipo (como en En la práctica, los equipos suelen precompilar en el archivo binario todos los tipos que esperan que se usen en el contexto de Any. Sin embargo, para las URLs que usan el esquema
Nota: Actualmente, esta funcionalidad no está disponible en la versión oficial de Protobuf y no se usa para las URLs de tipo que comienzan con type.googleapis.com. A partir de mayo de 2023, no hay implementaciones de servidores de tipos ampliamente utilizadas ni planes para implementar una. Se pueden usar esquemas distintos de |
value |
Debe ser un búfer de protocolo serializado válido del tipo especificado anteriormente. Es una cadena codificada en Base64. |
Anotaciones de herramientas
Sugerencia destructiva: ✅ | Sugerencia idempotente: ❌ | Sugerencia de solo lectura: ❌ | Sugerencia de mundo abierto: ❌