gcloud auth logingcloud config set project YOUR_PROJECT_ID# Enable BigQuery API
gcloud services enable bigquery.googleapis.com
# Enable Cloud Resource Manager API (if needed)
gcloud services enable cloudresourcemanager.googleapis.comgcloud iam service-accounts create bigquery-mcp-service \
--display-name="BigQuery MCP Service Account" \
--description="Service account for BigQuery MCP access"# Get your project ID
PROJECT_ID=$(gcloud config get-value project)
# Choose one of the following based on your needs:
# Option 1: Grant BigQuery Data Viewer role (read-only access)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:bigquery-mcp-service@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/bigquery.dataViewer"
# Option 2: Grant BigQuery User role (query execution)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:bigquery-mcp-service@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/bigquery.user"
# Option 3: Grant BigQuery Admin role (full admin access)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:bigquery-mcp-service@$PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/bigquery.admin"# Create and download the service account key
gcloud iam service-accounts keys create ./bigquery-service-account.json \
--iam-account=bigquery-mcp-service@$PROJECT_ID.iam.gserviceaccount.com
# Verify the file was created
ls -la bigquery-service-account.json# Create a custom role with minimal permissions
gcloud iam roles create bigqueryMcpRole \
--project=$PROJECT_ID \
--title="BigQuery MCP Role" \
--description="Minimal permissions for BigQuery MCP" \
--permissions="bigquery.datasets.create,bigquery.datasets.get,bigquery.datasets.getIamPolicy,bigquery.datasets.update,bigquery.jobs.create,bigquery.jobs.get,bigquery.jobs.list,bigquery.tables.create,bigquery.tables.delete,bigquery.tables.get,bigquery.tables.getData,bigquery.tables.list,bigquery.tables.update,bigquery.tables.updateData"
# Assign the custom role
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:bigquery-mcp-service@$PROJECT_ID.iam.gserviceaccount.com" \
--role="projects/$PROJECT_ID/roles/bigqueryMcpRole"# Convert JSON file to base64
base64 -i bigquery-service-account.json
# Or save to a file
base64 -i bigquery-service-account.json > service-account-base64.txt
# To decode back (for verification)
base64 -d service-account-base64.txt > decoded-service-account.json# PowerShell method
[Convert]::ToBase64String([IO.File]::ReadAllBytes("bigquery-service-account.json"))
# Or using certutil
certutil -encode bigquery-service-account.json service-account-base64.txtimport base64
import json
# Read and encode the JSON file
with open('bigquery-service-account.json', 'rb') as f:
encoded = base64.b64encode(f.read()).decode('utf-8')
print(encoded)curl -O https://storage.googleapis.com/genai-toolbox/v0.13.0/darwin/arm64/toolbox
chmod +x toolboxclaude mcp add-json bigquery-toolbox '{
"command": "./toolbox",
"args": ["--prebuilt", "bigquery", "--stdio"],
"env": {
"BIGQUERY_PROJECT": "YOUR_PROJECT_ID",
"GOOGLE_APPLICATION_CREDENTIALS": "/path/to/bigquery-service-account.json"
}
}'# List service accounts
gcloud iam service-accounts list
# Check service account permissions
gcloud projects get-iam-policy $PROJECT_ID \
--flatten="bindings[].members" \
--format="table(bindings.role)" \
--filter="bindings.members:bigquery-mcp-service@$PROJECT_ID.iam.gserviceaccount.com"
# Test BigQuery access
bq --project_id=$PROJECT_ID ls
# Validate JSON file
cat bigquery-service-account.json | python -m json.tool