Tool: execute_sql
Führen Sie beliebige gültige SQL-Anweisung für eine Cloud SQL-Instanz aus, einschließlich Anweisungen der Datendefinitionssprache (DDL), der Datenkontrollsprache (DCL), der Datenabfragesprache (DQL) oder der Datenbearbeitungssprache (DML).
Damit das execute_sql-Tool unterstützt wird, muss eine Cloud SQL-Instanz die folgenden Anforderungen erfüllen:
- Der Wert von
data_api_accessmuss aufALLOW_DATA_APIfestgelegt werden. - Für integrierte Nutzer muss „password_secret_version“ festgelegt werden.
- Andernfalls muss für IAM-Nutzer für eine MySQL-Instanz das Datenbank-Flag
cloudsql_iam_authenticationaufonfestgelegt werden. Für eine PostgreSQL-Instanz muss das Datenbank-Flagcloudsql.iam_authenticationaufongesetzt sein. - Nachdem Sie mit dem Tool
create_instanceeine Instanz erstellt haben, können Sie mit dem Toolcreate_userein IAM-Nutzerkonto für den Nutzer erstellen, der derzeit im Projekt angemeldet ist.
Für das execute_sql-Tool gelten die folgenden Einschränkungen:
- Wenn eine SQL-Anweisung eine Antwort zurückgibt, die größer als 10 MB ist, wird die Antwort abgeschnitten.
- Das Tool
execute_sqlhat ein Standardzeitlimit von 30 Sekunden. Wenn eine Abfrage länger als 30 Sekunden dauert, gibt das Tool einenDEADLINE_EXCEEDED-Fehler zurück. - Das Tool
execute_sqlwird für SQL Server nicht unterstützt.
Wenn Sie Fehler wie „IAM-Authentifizierung ist für die Instanz nicht aktiviert“ erhalten, können Sie mit dem Tool get_instance den Wert des Flags für die IAM-Datenbankauthentifizierung für die Instanz prüfen.
Wenn Sie Fehler wie „Die Instanz erlaubt keinen Zugriff auf diese Instanz über executeSql“ erhalten, können Sie mit dem Tool get_instance die Einstellung data_api_access prüfen.
Wenn Sie Authentifizierungsfehler erhalten:
- Prüfen Sie mit dem
list_users-Tool, ob das aktuell angemeldete Nutzerkonto als IAM-Nutzer in der Instanz vorhanden ist. - Wenn das IAM-Nutzerkonto nicht vorhanden ist, erstellen Sie es mit dem
create_user-Tool für den angemeldeten Nutzer. - Wenn der aktuell angemeldete Nutzer nicht die richtigen Datenbanknutzerrollen hat, können Sie ihm mit dem Tool
update_userDatenbankrollen zuweisen. Mit der Rollecloudsqlsuperuserkann einem IAM-Nutzer beispielsweise eine Vielzahl der erforderlichen Berechtigungen gewährt werden. Prüfen Sie, ob dem aktuell angemeldeten Nutzer die richtigen IAM-Berechtigungen für das Projekt zugewiesen sind. Mit dem Befehl
gcloud projects get-iam-policy [PROJECT_ID]können Sie prüfen, ob dem Nutzer die richtigen IAM-Rollen oder -Berechtigungen für das Projekt zugewiesen sind.- Der Nutzer muss die Berechtigung
cloudsql.instance.loginhaben, um die automatische IAM-Datenbankauthentifizierung durchzuführen. - Der Nutzer muss die Berechtigung
cloudsql.instances.executeSqlhaben, um SQL-Anweisungen mit dem Toolexecute_sqloder der APIexecuteSqlauszuführen. - Häufig verwendete IAM-Rollen, die die erforderlichen Berechtigungen enthalten: Cloud SQL-Instanznutzer (
roles/cloudsql.instanceUser) oder Cloud SQL-Administrator (roles/cloudsql.admin)
- Der Nutzer muss die Berechtigung
Wenn Sie eine ExecuteSqlResponse erhalten, prüfen Sie immer die Felder message und status im Antworttext. Ein erfolgreicher HTTP-Statuscode bedeutet nicht, dass alle SQL-Anweisungen vollständig ausgeführt wurden. Die Felder message und status geben an, ob während der Ausführung der SQL-Anweisung teilweise Fehler oder Warnungen aufgetreten sind.
Im folgenden Beispiel wird gezeigt, wie Sie mit curl das MCP-Tool execute_sql aufrufen.
| Curl-Anfrage |
|---|
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 }' |
Eingabeschema
Instanz führt SQL-Anfrage für MCP aus.
SqlInstancesExecuteSqlMcpRequest
| JSON-Darstellung |
|---|
{ "instance": string, "project": string, "sqlStatement": string, "database": string, "user": string, "passwordSecretVersion": string } |
| Felder | |
|---|---|
instance |
Erforderlich. ID der Datenbankinstanz. Die Projekt-ID ist darin nicht enthalten. |
project |
Erforderlich. Projekt-ID des Projekts mit der Instanz. |
sqlStatement |
Erforderlich. SQL-Anweisungen, die für die Datenbank ausgeführt werden sollen. Es kann sich um eine einzelne Anweisung oder eine durch Semikolons getrennte Folge von Anweisungen handeln. |
database |
Optional. Name der Datenbank, für die die Anweisung ausgeführt wird. Für Postgres ist es erforderlich, für MySQL optional. Wenn Ihre Anfrage für Postgres nicht auf eine vorhandene Datenbank beschränkt ist, z. B. zum Auflisten von Datenbanken, Erstellen einer neuen Datenbank oder Zuweisen von Rollen, können Sie den Standardwert „postgres“ übergeben. |
user |
Optional. Der Name eines vorhandenen Datenbanknutzers, mit dem eine Verbindung zur Datenbank hergestellt werden soll. Wenn |
passwordSecretVersion |
Optional. Der Ressourcenname des Secret Manager-Secrets, das das Passwort für den Nutzer enthält, mit dem er sich in der Datenbank anmelden kann. Das erwartete Format ist |
Ausgabeschema
Antwort auf die Ausführung von SQL-Anweisungen.
SqlInstancesExecuteSqlResponse
| JSON-Darstellung |
|---|
{ "messages": [ { object ( |
| Felder | |
|---|---|
messages[] |
Eine Liste der Hinweise und Warnungen, die während der Ausführung der Abfrage generiert wurden. Für PostgreSQL umfasst dies alle Hinweise und Warnungen. Für MySQL umfasst dies Warnungen, die von der zuletzt ausgeführten Anweisung generiert wurden. Wenn Sie alle Warnungen für eine Abfrage mit mehreren Anweisungen abrufen möchten, muss |
metadata |
Die zusätzlichen Metadaten zur Ausführung der SQL-Anweisungen. |
results[] |
Die Liste der Ergebnisse nach Ausführung aller SQL-Anweisungen. |
status |
Enthält den Fehler aus der Datenbank, wenn die SQL-Ausführung fehlgeschlagen ist. |
Nachricht
| JSON-Darstellung |
|---|
{ // Union field |
| Felder | |
|---|---|
Union-Feld Für |
|
message |
Der vollständige Nachrichtenstring. Für PostgreSQL ist dies ein formatierter String, der Schweregrad, Code und die Hinweis-/Warnmeldung enthalten kann. Für MySQL enthält dies die Warnmeldung. |
Union-Feld Für |
|
severity |
Der Schweregrad der Meldung, z.B. „NOTICE“ für PostgreSQL oder „WARNING“ für MySQL. |
Metadaten
| JSON-Darstellung |
|---|
{ "sqlStatementExecutionTime": string } |
| Felder | |
|---|---|
sqlStatementExecutionTime |
Die Zeit, die für die Ausführung der SQL-Anweisungen benötigt wurde. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit „ |
Dauer
| JSON-Darstellung |
|---|
{ "seconds": string, "nanos": integer } |
| Felder | |
|---|---|
seconds |
Signierte Sekunden des Zeitraums. Muss zwischen -315.576.000.000 und +315.576.000.000 (einschließlich) liegen. Hinweis: Diese Grenzen werden aus folgenden Werten berechnet: 60 Sek./Min. × 60 Min./Std. × 24 Std./Tag × 365,25 Tage/Jahr × 10.000 Jahre |
nanos |
Signierte Sekundenbruchteile mit Nanosekunden-Auflösung für den Zeitraum. Dauern von weniger als einer Sekunde werden mit dem Feld „0“ |
QueryResult
| JSON-Darstellung |
|---|
{ "columns": [ { object ( |
| Felder | |
|---|---|
columns[] |
Liste der Spalten, die im Ergebnis enthalten sind. Dazu gehört auch der Datentyp der Spalte. |
rows[] |
Von der SQL-Anweisung zurückgegebene Zeilen. |
message |
Meldung zum SQL-Ausführungsergebnis. |
partialResult |
Wird auf „true“ gesetzt, wenn das Ergebnis der SQL-Ausführung aufgrund von Größenbeschränkungen oder eines Fehlers beim Abrufen von Ergebnissen gekürzt wird. |
status |
Wenn die Ergebnisse aufgrund eines Fehlers gekürzt wurden, werden Details zu diesem Fehler angezeigt. |
Spalte
| JSON-Darstellung |
|---|
{ "name": string, "type": string } |
| Felder | |
|---|---|
name |
Name der Spalte. |
type |
Datentyp der Spalte. |
Zeile
| JSON-Darstellung |
|---|
{
"values": [
{
object ( |
| Felder | |
|---|---|
values[] |
Die Werte für die Zeile. |
Wert
| JSON-Darstellung |
|---|
{ "value": string, "nullValue": boolean } |
| Felder | |
|---|---|
value |
Der Zellenwert im Stringformat. |
nullValue |
Wenn der Zellwert null ist, wird dieses Flag auf „true“ gesetzt. |
Status
| JSON-Darstellung |
|---|
{ "code": integer, "message": string, "details": [ { "@type": string, field1: ..., ... } ] } |
| Felder | |
|---|---|
code |
Der Statuscode, der idealerweise ein ENUM-Wert von |
message |
Eine an Entwickler gerichtete Fehlermeldung, die englischsprachig sein sollte. Jede für Nutzer sichtbare Fehlermeldung sollte lokalisiert und im Feld |
details[] |
Eine Auflistung aller Meldungen, die die Fehlerdetails enthalten. Es gibt einen gemeinsamen Satz von Nachrichtentypen, die APIs verwenden können. Ein Objekt, das Felder eines beliebigen Typs enthält. Ein zusätzliches Feld |
Beliebig
| JSON-Darstellung |
|---|
{ "typeUrl": string, "value": string } |
| Felder | |
|---|---|
typeUrl |
Gibt den Typ der serialisierten Protobuf-Nachricht mit einem URI-Verweis an, der aus einem Präfix, das mit einem Schrägstrich endet, und dem vollständig qualifizierten Typnamen besteht. Beispiel: type.googleapis.com/google.protobuf.StringValue Dieser String muss mindestens ein Das Präfix ist beliebig. Protobuf-Implementierungen entfernen einfach alles bis zum letzten Alle Typ-URL-Strings müssen gültige URI-Referenzen sein. Für das Textformat gilt die zusätzliche Einschränkung, dass der Inhalt der Referenz nur aus alphanumerischen Zeichen, prozentual codierten Escape-Sequenzen und Zeichen aus der folgenden Menge bestehen darf (ohne die äußeren Backticks): Im ursprünglichen Design von |
value |
Enthält eine Protobuf-Serialisierung des Typs, der durch „type_url“ beschrieben wird. Ein base64-codierter String. |
Tool-Annotationen
Destruktiver Hinweis: ✅ | Idempotenter Hinweis: ❌ | Nur-Lese-Hinweis: ❌ | Open-World-Hinweis: ❌