Skip to content

Commit e12d327

Browse files
authored
feat: prompt and configure GCP and BigQuery variables during installation (#54)
updates the installation workflows to prompt users for essential Google Cloud configuration variables during setup. These inputs are then dynamically injected into the plugin's .mcp.json configuration file, ensuring the various Data Cloud toolboxes (BigQuery, Spanner, AlloyDB, etc.) are pre-configured with the correct project, region, and location details upon installation.
1 parent 0af022a commit e12d327

6 files changed

Lines changed: 117 additions & 38 deletions

File tree

.claude-mcp.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
"datacloud.claude"
3737
],
3838
"env": {
39-
"BIGQUERY_LOCATION": "",
40-
"BIGQUERY_PROJECT": ""
39+
"BIGQUERY_LOCATION": "${user_config.BIGQUERY_LOCATION}",
40+
"BIGQUERY_PROJECT": "${user_config.PROJECT_ID}"
4141
}
4242
},
4343
"datacloud_spanner_toolbox": {
@@ -55,7 +55,7 @@
5555
"SPANNER_DATABASE": "",
5656
"SPANNER_DIALECT": "",
5757
"SPANNER_INSTANCE": "",
58-
"SPANNER_PROJECT": ""
58+
"SPANNER_PROJECT": "${user_config.PROJECT_ID}"
5959
}
6060
},
6161
"datacloud_alloydb-postgres-admin_toolbox": {
@@ -88,8 +88,8 @@
8888
"ALLOYDB_POSTGRES_INSTANCE": "",
8989
"ALLOYDB_POSTGRES_IP_TYPE": "",
9090
"ALLOYDB_POSTGRES_PASSWORD": "",
91-
"ALLOYDB_POSTGRES_PROJECT": "",
92-
"ALLOYDB_POSTGRES_REGION": "",
91+
"ALLOYDB_POSTGRES_PROJECT": "${user_config.PROJECT_ID}",
92+
"ALLOYDB_POSTGRES_REGION": "${user_config.GCP_REGION}",
9393
"ALLOYDB_POSTGRES_USER": ""
9494
}
9595
},
@@ -122,8 +122,8 @@
122122
"CLOUD_SQL_POSTGRES_INSTANCE": "",
123123
"CLOUD_SQL_POSTGRES_IP_TYPE": "",
124124
"CLOUD_SQL_POSTGRES_PASSWORD": "",
125-
"CLOUD_SQL_POSTGRES_PROJECT": "",
126-
"CLOUD_SQL_POSTGRES_REGION": "",
125+
"CLOUD_SQL_POSTGRES_PROJECT": "${user_config.PROJECT_ID}",
126+
"CLOUD_SQL_POSTGRES_REGION": "${user_config.GCP_REGION}",
127127
"CLOUD_SQL_POSTGRES_USER": ""
128128
}
129129
},
@@ -139,7 +139,7 @@
139139
"datacloud.claude"
140140
],
141141
"env": {
142-
"DATAPLEX_PROJECT": ""
142+
"DATAPLEX_PROJECT": "${user_config.PROJECT_ID}"
143143
}
144144
},
145145
"datacloud_dataproc_toolbox": {
@@ -154,8 +154,8 @@
154154
"datacloud.claude"
155155
],
156156
"env": {
157-
"DATAPROC_PROJECT": "",
158-
"DATAPROC_REGION": ""
157+
"DATAPROC_PROJECT": "${user_config.PROJECT_ID}",
158+
"DATAPROC_REGION": "${user_config.GCP_REGION}"
159159
}
160160
},
161161
"datacloud_serverless-spark_toolbox": {
@@ -170,8 +170,8 @@
170170
"datacloud.claude"
171171
],
172172
"env": {
173-
"SERVERLESS_SPARK_PROJECT": "",
174-
"SERVERLESS_SPARK_LOCATION": ""
173+
"SERVERLESS_SPARK_PROJECT": "${user_config.PROJECT_ID}",
174+
"SERVERLESS_SPARK_LOCATION": "${user_config.GCP_REGION}"
175175
}
176176
}
177177
}

.claude-plugin/plugin.json

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,25 @@
22
"name": "data-agent-kit-starter-pack",
33
"version": "0.1.3",
44
"description": "This plugin provides a specialized suite of skills for data engineers and database practitioners working on Google Cloud. It acts as an expert assistant, allowing you to use natural language prompts in your preferred coding agent to architect complex data pipelines, transform data with dbt, write Spark and BigQuery SQL notebooks, and orchestrate end-to-end workflows across GCP's data ecosystem.",
5-
"mcpServers": "./.claude-mcp.json"
5+
"mcpServers": "./.claude-mcp.json",
6+
"userConfig": {
7+
"PROJECT_ID": {
8+
"type": "string",
9+
"title": "GCP Project ID",
10+
"description": "Project ID when using the MCP toolbox for databases",
11+
"required": true
12+
},
13+
"GCP_REGION": {
14+
"type": "string",
15+
"title": "GCP Region",
16+
"description": "Region for GCP services (e.g. us-west1)",
17+
"required": true
18+
},
19+
"BIGQUERY_LOCATION": {
20+
"type": "string",
21+
"title": "BigQuery Location",
22+
"description": "Location for BigQuery datasets (e.g. US)",
23+
"required": true
24+
}
25+
}
626
}

.mcp.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636
"datacloud.codex"
3737
],
3838
"env": {
39-
"BIGQUERY_LOCATION": "",
40-
"BIGQUERY_PROJECT": ""
39+
"BIGQUERY_LOCATION": "$BIGQUERY_LOCATION",
40+
"BIGQUERY_PROJECT": "$PROJECT_ID"
4141
}
4242
},
4343
"datacloud_spanner_toolbox": {
@@ -55,7 +55,7 @@
5555
"SPANNER_DATABASE": "",
5656
"SPANNER_DIALECT": "",
5757
"SPANNER_INSTANCE": "",
58-
"SPANNER_PROJECT": ""
58+
"SPANNER_PROJECT": "$PROJECT_ID"
5959
}
6060
},
6161
"datacloud_alloydb-postgres-admin_toolbox": {
@@ -88,8 +88,8 @@
8888
"ALLOYDB_POSTGRES_INSTANCE": "",
8989
"ALLOYDB_POSTGRES_IP_TYPE": "",
9090
"ALLOYDB_POSTGRES_PASSWORD": "",
91-
"ALLOYDB_POSTGRES_PROJECT": "",
92-
"ALLOYDB_POSTGRES_REGION": "",
91+
"ALLOYDB_POSTGRES_PROJECT": "$PROJECT_ID",
92+
"ALLOYDB_POSTGRES_REGION": "$GCP_REGION",
9393
"ALLOYDB_POSTGRES_USER": ""
9494
}
9595
},
@@ -122,8 +122,8 @@
122122
"CLOUD_SQL_POSTGRES_INSTANCE": "",
123123
"CLOUD_SQL_POSTGRES_IP_TYPE": "",
124124
"CLOUD_SQL_POSTGRES_PASSWORD": "",
125-
"CLOUD_SQL_POSTGRES_PROJECT": "",
126-
"CLOUD_SQL_POSTGRES_REGION": "",
125+
"CLOUD_SQL_POSTGRES_PROJECT": "$PROJECT_ID",
126+
"CLOUD_SQL_POSTGRES_REGION": "$GCP_REGION",
127127
"CLOUD_SQL_POSTGRES_USER": ""
128128
}
129129
},
@@ -139,7 +139,7 @@
139139
"datacloud.codex"
140140
],
141141
"env": {
142-
"DATAPLEX_PROJECT": ""
142+
"DATAPLEX_PROJECT": "$PROJECT_ID"
143143
}
144144
},
145145
"datacloud_dataproc_toolbox": {
@@ -154,8 +154,8 @@
154154
"datacloud.codex"
155155
],
156156
"env": {
157-
"DATAPROC_PROJECT": "",
158-
"DATAPROC_REGION": ""
157+
"DATAPROC_PROJECT": "$PROJECT_ID",
158+
"DATAPROC_REGION": "$GCP_REGION"
159159
}
160160
},
161161
"datacloud_serverless-spark_toolbox": {
@@ -170,8 +170,8 @@
170170
"datacloud.codex"
171171
],
172172
"env": {
173-
"SERVERLESS_SPARK_PROJECT": "",
174-
"SERVERLESS_SPARK_LOCATION": ""
173+
"SERVERLESS_SPARK_PROJECT": "$PROJECT_ID",
174+
"SERVERLESS_SPARK_LOCATION": "$GCP_REGION"
175175
}
176176
}
177177
}

codex-install.ps1

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@ function Write-TextFileNoBom {
6262

6363
Write-Host "--- $pluginName Installer for Codex ---"
6464

65+
Write-Host "GCP Project ID"
66+
$projectId = Read-Host "Project ID when using the MCP toolbox for databases"
67+
68+
Write-Host "GCP Region"
69+
$gcpRegion = Read-Host "Region for GCP services (e.g. us-west1)"
70+
71+
Write-Host "BigQuery Location"
72+
$bigqueryLocation = Read-Host "Location for BigQuery datasets (e.g. US)"
73+
6574
New-Item -ItemType Directory -Force -Path $pluginsRoot | Out-Null
6675

6776
if (Test-Path $installDir) {
@@ -85,6 +94,16 @@ if ($Tag) {
8594
Write-Host "Removing git metadata..."
8695
Remove-Item -LiteralPath (Join-Path $installDir ".git") -Recurse -Force
8796

97+
$targetMcp = Join-Path $installDir ".mcp.json"
98+
99+
# Apply configuration
100+
Write-Host "Applying configuration..."
101+
$mcpContent = Get-Content -LiteralPath $targetMcp -Raw
102+
$mcpContent = $mcpContent.Replace('$PROJECT_ID', $projectId)
103+
$mcpContent = $mcpContent.Replace('$GCP_REGION', $gcpRegion)
104+
$mcpContent = $mcpContent.Replace('$BIGQUERY_LOCATION', $bigqueryLocation)
105+
Write-TextFileNoBom -Path $targetMcp -Content $mcpContent
106+
88107
if (-not (Test-Path $marketplaceFile)) {
89108
Write-Host "Creating new personal marketplace..."
90109
Write-TextFileNoBom -Path $marketplaceFile -Content '{"name":"personal","plugins":[]}'

codex-install.sh

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,17 @@ MARKETPLACE_FILE="$HOME/.agents/plugins/marketplace.json"
2424

2525
echo "--- $PLUGIN_NAME Installer for Codex ---"
2626

27+
# Prompt for configuration variables
28+
echo "Please enter the following configuration variables:"
29+
echo "GCP Project ID"
30+
read -p "Project ID when using the MCP toolbox for databases: " PROJECT_ID </dev/tty
31+
32+
echo "GCP Region"
33+
read -p "Region for GCP services (e.g. us-west1): " GCP_REGION </dev/tty
34+
35+
echo "BigQuery Location"
36+
read -p "Location for BigQuery datasets (e.g. US): " BIGQUERY_LOCATION </dev/tty
37+
2738
# 1. Download/Update Plugin Content
2839
mkdir -p "$HOME/.agents/plugins"
2940
if [ -d "$INSTALL_DIR" ]; then
@@ -45,6 +56,18 @@ fi
4556
echo "Removing git metadata..."
4657
rm -rf "$INSTALL_DIR/.git"
4758

59+
echo "Applying configuration..."
60+
node -e "
61+
const fs = require('fs');
62+
const path = require('path');
63+
const mcpFilePath = path.join(process.argv[1], '.mcp.json');
64+
let mcpContent = fs.readFileSync(mcpFilePath, 'utf8');
65+
mcpContent = mcpContent.replace(/\\\$PROJECT_ID/g, process.argv[2]);
66+
mcpContent = mcpContent.replace(/\\\$GCP_REGION/g, process.argv[3]);
67+
mcpContent = mcpContent.replace(/\\\$BIGQUERY_LOCATION/g, process.argv[4]);
68+
fs.writeFileSync(mcpFilePath, mcpContent);
69+
" "$INSTALL_DIR" "$PROJECT_ID" "$GCP_REGION" "$BIGQUERY_LOCATION"
70+
4871
# 2. Register with Codex Marketplace
4972
if [ ! -f "$MARKETPLACE_FILE" ]; then
5073
echo "Creating new personal marketplace..."

gemini-extension.json

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
"datacloud.gemini-cli"
3434
],
3535
"env": {
36-
"BIGQUERY_LOCATION": "",
37-
"BIGQUERY_PROJECT": ""
36+
"BIGQUERY_LOCATION": "$BIGQUERY_LOCATION",
37+
"BIGQUERY_PROJECT": "$PROJECT_ID"
3838
}
3939
},
4040
"datacloud_spanner_toolbox": {
@@ -52,7 +52,7 @@
5252
"SPANNER_DATABASE": "",
5353
"SPANNER_DIALECT": "",
5454
"SPANNER_INSTANCE": "",
55-
"SPANNER_PROJECT": ""
55+
"SPANNER_PROJECT": "$PROJECT_ID"
5656
}
5757
},
5858
"datacloud_alloydb-postgres-admin_toolbox": {
@@ -85,8 +85,8 @@
8585
"ALLOYDB_POSTGRES_INSTANCE": "",
8686
"ALLOYDB_POSTGRES_IP_TYPE": "",
8787
"ALLOYDB_POSTGRES_PASSWORD": "",
88-
"ALLOYDB_POSTGRES_PROJECT": "",
89-
"ALLOYDB_POSTGRES_REGION": "",
88+
"ALLOYDB_POSTGRES_PROJECT": "$PROJECT_ID",
89+
"ALLOYDB_POSTGRES_REGION": "$GCP_REGION",
9090
"ALLOYDB_POSTGRES_USER": ""
9191
}
9292
},
@@ -119,8 +119,8 @@
119119
"CLOUD_SQL_POSTGRES_INSTANCE": "",
120120
"CLOUD_SQL_POSTGRES_IP_TYPE": "",
121121
"CLOUD_SQL_POSTGRES_PASSWORD": "",
122-
"CLOUD_SQL_POSTGRES_PROJECT": "",
123-
"CLOUD_SQL_POSTGRES_REGION": "",
122+
"CLOUD_SQL_POSTGRES_PROJECT": "$PROJECT_ID",
123+
"CLOUD_SQL_POSTGRES_REGION": "$GCP_REGION",
124124
"CLOUD_SQL_POSTGRES_USER": ""
125125
}
126126
},
@@ -136,7 +136,7 @@
136136
"datacloud.gemini-cli"
137137
],
138138
"env": {
139-
"DATAPLEX_PROJECT": ""
139+
"DATAPLEX_PROJECT": "$PROJECT_ID"
140140
}
141141
},
142142
"datacloud_dataproc_toolbox": {
@@ -151,8 +151,8 @@
151151
"datacloud.gemini-cli"
152152
],
153153
"env": {
154-
"DATAPROC_PROJECT": "",
155-
"DATAPROC_REGION": ""
154+
"DATAPROC_PROJECT": "$PROJECT_ID",
155+
"DATAPROC_REGION": "$GCP_REGION"
156156
}
157157
},
158158
"datacloud_serverless-spark_toolbox": {
@@ -167,9 +167,26 @@
167167
"datacloud.gemini-cli"
168168
],
169169
"env": {
170-
"SERVERLESS_SPARK_PROJECT": "",
171-
"SERVERLESS_SPARK_LOCATION": ""
170+
"SERVERLESS_SPARK_PROJECT": "$PROJECT_ID",
171+
"SERVERLESS_SPARK_LOCATION": "$GCP_REGION"
172172
}
173173
}
174-
}
174+
},
175+
"settings": [
176+
{
177+
"name": "GCP Project ID",
178+
"description": "Project ID when using the MCP toolbox for databases",
179+
"envVar": "PROJECT_ID"
180+
},
181+
{
182+
"name": "GCP Region",
183+
"description": "Region for GCP services (e.g. us-west1)",
184+
"envVar": "GCP_REGION"
185+
},
186+
{
187+
"name": "BigQuery Location",
188+
"description": "Location for BigQuery datasets (e.g. US)",
189+
"envVar": "BIGQUERY_LOCATION"
190+
}
191+
]
175192
}

0 commit comments

Comments
 (0)