도구: run_bq_command
단일 BigQuery CLI (bq) 명령어를 실행합니다. 이 도구를 사용하면 GCP 리소스 (즉, 변경)를 만들거나 업데이트하거나 삭제하는 명령어를 포함하여 사용자의 프로젝트에서 모든 bq 명령어를 실행할 수 있습니다.
중요한 안전 경고 (잠재적으로 파괴적): 이 도구는 BigQuery 리소스 (bq rm, bq cancel, bq query 등)를 만들거나 업데이트하거나 삭제할 수 있습니다. 읽기 전용 명령어로 제한되지 않습니다. 매우 주의하세요.
금지된 명령어: 에이전트는 bq init, bq pyshell, bq shell bq 명령어를 실행해서는 안 됩니다.
엄격한 실행 규칙:
- 명령어 문자열에
--project_id또는--quota_project_id중 하나 이상을 지정해야 합니다. - 프로젝트 ID와 할당량 프로젝트: --project_id 플래그는 명령어가 작동하는 리소스 프로젝트를 지정합니다 (gcloud의 --project 플래그를 미러링함). --quota_project_id 플래그는 다운스트림 BigQuery API 호출의 결제/할당량에 대해 청구되는 프로젝트를 지정합니다 (gcloud의
--billing-project플래그를 미러링함). 명령어에--project_id가 지정되면 결제/할당량 프로젝트로 사용됩니다.--project_id가 지정되지 않거나--quota_project_id가 추가로 지정된 경우 결제/할당량 프로젝트는--quota_project_id플래그에 설정된 프로젝트가 됩니다. - 플래그 형식 지정: 모든 긴 옵션에 대해 항상 '=' 기호를 사용하여 플래그 키와 값을 구분해야 합니다. 올바른 예:
'--project_id=my-project'또는'--location=us'. 잘못된 예:'--project_id my-project'또는'--location us'. 플래그와 값 사이에 공백을 사용하지 마세요. - 구성 기본값 없음: bq 명령어는 상태 비저장 방식으로 실행됩니다. .bigqueryrc와 같은 로컬 구성 파일을 로드하지 않습니다. 따라서 모든 리전 작업 (예: 데이터 세트 만들기 또는 리전 데이터 세트 쿼리)의 경우
--location플래그 (예:--location=us또는--location=EU)를 명시적으로 지정해야 합니다. - 비동기 작업: 일부 명령어는 동기식 장기 실행 작업 (예: 쿼리 작업 실행)을 시작합니다. 에이전트 시간 초과를 방지하려면 이러한 명령어에 항상
--nosync플래그를 전달해야 합니다. - 명령어 제한:
bq init,bq pyshell,bq shellbq 명령어를 사용해서는 안 됩니다. 명령어 파이핑 또는 체이닝은 지원되지 않습니다. - 자가 수정: 명령어가 오류를 반환하면 stderr를 분석하고, 문법 또는 플래그를 수정하고, 다음 반복에서 다시 시도합니다.
변경 bq 명령어의 예로는 bq mk, bq rm, bq update, bq insert, bq query (--dry_run 없음) 등이 있습니다. 사용법: RunBq(command="bq query --project_id=PROJECT_ID 'SELECT 1'", project="projects/PROJECT_ID", input_files=[{"path": "PATH", "contents": "CONTENTS"}]) 'command' 매개변수에 전체 bq 명령어를 단일 문자열로 제공해야 합니다. 결제, API 사용 설정, 할당량 소비 확인을 위한 API 실행 프로젝트로 'project' 매개변수 (형식: projects/PROJECT_ID)를 제공해야 합니다.
bq 명령어/패턴 예:
- 쿼리 실행:
bq query --use_legacy_sql=false --project_id=PROJECT_ID 'SELECT * FROMproject.dataset.tableLIMIT 10' - 데이터 세트 만들기:
bq mk --dataset --location=us --project_id=PROJECT_ID myDataset - 테이블 만들기:
bq mk --table --project_id=PROJECT_ID myDataset.myTable name:string,value:integer - 데이터 세트 삭제:
bq rm -f --dataset --project_id=PROJECT_ID myDataset - 테이블 삭제:
bq rm -f -t --project_id=PROJECT_ID myDataset.myTable - 테이블 설명 업데이트:
bq update --description="New description" --project_id=PROJECT_ID myDataset.myTable - 프로젝트의 데이터 세트 나열:
bq ls --datasets=true --project_id=PROJECT_ID
다음 코드 샘플은 curl을 사용하여 run_bq_command MCP 도구를 호출하는 방법을 보여줍니다.
| curl 요청 |
|---|
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 }' |
입력 스키마
RunBq의 요청 메시지입니다.
RunBqRequest
| JSON 표현 |
|---|
{
"project": string,
"command": string,
"inputFiles": [
{
object ( |
| 필드 | |
|---|---|
project |
필수 항목입니다. CloudCli API의 API 사용 설정 및 할당량 소비를 위한 프로젝트입니다. 형식은 projects/ |
command |
필수 항목입니다. 단일 문자열로 실행할 전체 bq 명령어 줄입니다. 예: 'bq ls my-dataset --location=us' LLM은 시간 초과를 방지하기 위해 장기 실행 작업에 |
inputFiles[] |
선택사항입니다. 실행을 위해 bq 명령어에 제공할 파일입니다. |
파일
| JSON 표현 |
|---|
{ "path": string, "contents": string } |
| 필드 | |
|---|---|
path |
필수 항목입니다. 홈 디렉터리를 기준으로 하는 파일 경로입니다. 상위 디렉터리 탐색 (..) 또는 셸 확장을 포함해서는 안 됩니다. |
contents |
필수 항목입니다. 파일의 콘텐츠입니다. |
출력 스키마
RunBq의 응답 메시지입니다.
RunBqResponse
| JSON 표현 |
|---|
{ "response": { object ( |
| 필드 | |
|---|---|
response |
독립적인 stdout, stderr 스트림과 종료 코드를 포함하는 CLI 도구 실행의 응답입니다. |
outputFiles[] |
실행에서 bq 명령어로 생성된 파일입니다. |
CliExecutionResponse
| JSON 표현 |
|---|
{ "stdout": string, "stderr": string, "exitCode": string } |
| 필드 | |
|---|---|
stdout |
CLI 도구 실행의 stdout 스트림입니다. |
stderr |
CLI 도구 실행의 stderr 스트림입니다. |
exitCode |
CLI 도구 실행의 종료 코드입니다. |
파일
| JSON 표현 |
|---|
{ "path": string, "contents": string } |
| 필드 | |
|---|---|
path |
필수 항목입니다. 홈 디렉터리를 기준으로 하는 파일 경로입니다. 상위 디렉터리 탐색 (..) 또는 셸 확장을 포함해서는 안 됩니다. |
contents |
필수 항목입니다. 파일의 콘텐츠입니다. |
도구 주석
파괴적 힌트: ✅ | 멱등성 힌트: ❌ | 읽기 전용 힌트: ❌ | 개방형 세계 힌트: ❌