Tool: run_bq_command
Führt einen einzelnen BigQuery-Befehlszeilenbefehl (bq) aus. Mit diesem Tool können Sie jeden bq-Befehl im Projekt des Nutzers ausführen, einschließlich Befehlen, mit denen GCP-Ressourcen erstellt, aktualisiert oder gelöscht werden (d.h. Mutationen).
WICHTIGER SICHERHEITSHINWEIS (POTENZIELL DESTRUKTIV): Mit diesem Tool können BigQuery-Ressourcen erstellt, aktualisiert oder gelöscht werden (z.B. bq rm, bq cancel, bq query). Es ist NICHT auf schreibgeschützte Befehle beschränkt. Seien Sie äußerst vorsichtig.
VERBOTENE BEFEHLE: Ein Agent darf die folgenden bq-Befehle NICHT ausführen: bq init, bq pyshell, bq shell.
STRENGE AUSFÜHRUNGSREGELN:
- Im Befehlsstring muss mindestens
--project_idoder--quota_project_idangegeben werden. - Projekt-ID im Vergleich zu Kontingentprojekt: Mit dem Flag `--project_id` wird das Ressourcenprojekt angegeben, für das der Befehl ausgeführt wird (entspricht dem Flag `--project` von gcloud). Mit dem Flag `--quota_project_id` wird das Projekt angegeben, das für die Abrechnung/das Kontingent des nachgelagerten BigQuery API-Aufrufs in Rechnung gestellt wird (entspricht dem Flag
--billing-projectvon gcloud). Wenn--project_idim Befehl angegeben ist, wird es als Abrechnungs-/Kontingentprojekt verwendet. Wenn--project_idnicht angegeben ist ODER--quota_project_idzusätzlich angegeben ist, ist das Abrechnungs-/Kontingentprojekt das Projekt, das im Flag--quota_project_idfestgelegt ist. - Flag-Formatierung: Sie MÜSSEN immer ein Gleichheitszeichen verwenden, um Flag-Schlüssel von ihren Werten zu trennen. Korrekt:
'--project_id=my-project'oder'--location=us'. Falsch:'--project_id my-project'oder'--location us'. Verwenden Sie keine Leerzeichen zwischen Flags und ihren Werten. - Keine Standardkonfigurationen: Der bq-Befehl wird zustandslos ausgeführt. Es werden keine lokalen Konfigurationsdateien wie .bigqueryrc geladen. Daher MÜSSEN Sie für alle regionalen Vorgänge (z.B. das Erstellen eines Datasets oder das Abfragen eines regionalen Datasets) das Flag
--locationexplizit angeben (z.B.--location=usoder--location=EU). - Asynchrone Vorgänge: Einige Befehle starten synchrone, lang andauernde Vorgänge (z.B. das Ausführen von Abfragejobs). Sie SOLLTEN für diese Befehle IMMER das Flag
--nosyncübergeben, um Agent-Time-outs zu vermeiden. - Befehlsbeschränkungen: Sie DÜRFEN die folgenden bq-Befehle NICHT verwenden:
bq init,bq pyshell,bq shell. Befehlspiping oder -verkettung wird NICHT unterstützt. - Selbstkorrektur: Wenn ein Befehl einen Fehler zurückgibt, analysieren Sie die Standardfehlerausgabe, korrigieren Sie die Syntax oder Flags und versuchen Sie es in der nächsten Iteration noch einmal.
Beispiele für mutierende bq-Befehle sind: bq mk, bq rm, bq update, bq insert, bq query (ohne --dry_run) usw. Verwendung: RunBq(command="bq query --project_id=PROJECT_ID 'SELECT 1'", project="projects/PROJECT_ID", input_files=[{"path": "PATH", "contents": "CONTENTS"}]) Sie MÜSSEN den vollständigen bq-Befehl als einzelnen String im Parameter „command“ angeben. Sie MÜSSEN den Parameter „project“ (Format: projects/PROJECT_ID) als API-Ausführungsprojekt für Abrechnungs-, API-Aktivierungs- und Kontingentnutzungsprüfungen angeben.
Beispiele für bq-Befehle/Muster:
- Abfrage ausführen:
bq query --use_legacy_sql=false --project_id=PROJECT_ID 'SELECT * FROMproject.dataset.tableLIMIT 10' - Dataset erstellen:
bq mk --dataset --location=us --project_id=PROJECT_ID myDataset - Tabelle erstellen:
bq mk --table --project_id=PROJECT_ID myDataset.myTable name:string,value:integer - Dataset entfernen:
bq rm -f --dataset --project_id=PROJECT_ID myDataset - Tabelle entfernen:
bq rm -f -t --project_id=PROJECT_ID myDataset.myTable - Tabellenbeschreibung aktualisieren:
bq update --description="New description" --project_id=PROJECT_ID myDataset.myTable - Datasets in einem Projekt auflisten:
bq ls --datasets=true --project_id=PROJECT_ID
Das folgende Codebeispiel zeigt, wie Sie curl verwenden, um das MCP-Tool run_bq_command aufzurufen.
| Curl-Anfrage |
|---|
curl --location 'https://cloudcli.googleapis.com/mcp' \ --header 'content-type: application/json' \ --header 'accept: application/json, text/event-stream' \ --data '{ "method": "tools/call", "params": { "name": "run_bq_command", "arguments": { // provide these details according to the tool's MCP specification } }, "jsonrpc": "2.0", "id": 1 }' |
Eingabeschema
Anfragenachricht für RunBq.
RunBqRequest
| JSON-Darstellung |
|---|
{
"project": string,
"command": string,
"inputFiles": [
{
object ( |
| Felder | |
|---|---|
project |
Erforderlich. Projekt für die API-Aktivierung und den Kontingentverbrauch für die CloudCli API. Das Format muss „projects/ |
command |
Erforderlich. Die vollständige bq-Befehlszeile, die als einzelner String ausgeführt werden soll. Beispiel: „bq ls my-dataset --location=us“ LLMs werden angewiesen, das Flag |
inputFiles[] |
Optional. Dateien, die dem bq-Befehl für die Ausführung zur Verfügung gestellt werden sollen. |
Datei
| JSON-Darstellung |
|---|
{ "path": string, "contents": string } |
| Felder | |
|---|---|
path |
Erforderlich. Dateipfad relativ zum Basisverzeichnis. Darf keine übergeordneten Verzeichnisse (..) oder Shell-Erweiterungen enthalten. |
contents |
Erforderlich. Inhalt der Datei. |
Ausgabeschema
Antwortnachricht für RunBq.
RunBqResponse
| JSON-Darstellung |
|---|
{ "response": { object ( |
| Felder | |
|---|---|
response |
Die Antwort von der Ausführung des Befehlszeilentools, die unabhängige Streams für die Standardausgabe und die Standardfehlerausgabe sowie einen Exit-Code enthält. |
outputFiles[] |
Dateien, die vom bq-Befehl bei der Ausführung generiert wurden. |
CliExecutionResponse
| JSON-Darstellung |
|---|
{ "stdout": string, "stderr": string, "exitCode": string } |
| Felder | |
|---|---|
stdout |
Der Stream der Standardausgabe von der Ausführung des Befehlszeilentools. |
stderr |
Der Stream der Standardfehlerausgabe von der Ausführung des Befehlszeilentools. |
exitCode |
Der Exit-Code der Ausführung des Befehlszeilentools. |
Datei
| JSON-Darstellung |
|---|
{ "path": string, "contents": string } |
| Felder | |
|---|---|
path |
Erforderlich. Dateipfad relativ zum Basisverzeichnis. Darf keine übergeordneten Verzeichnisse (..) oder Shell-Erweiterungen enthalten. |
contents |
Erforderlich. Inhalt der Datei. |
Tool-Anmerkungen
Destruktiver Hinweis: ✅ | Hinweis auf Idempotenz: ❌ | Hinweis auf schreibgeschützt: ❌ | Hinweis auf offene Welt: ❌