gcloud MCP Cloud Run
Enables interaction with Google Cloud Platform services through gcloud CLI commands via a Cloud Run deployed MCP server. Supports executing gcloud commands and managing GCP resources through natural language.
README
Deploy gcloud-mcp ke Google Cloud Run
Dokumentasi singkat untuk folder ini. Berisi helper untuk membangun dan mendeploy MCP server @google-cloud/gcloud-mcp ke Cloud Run, serta skrip untuk testing deploy.
Isi folder
deploy-cloudrun.sh— helper script untuk build/push image ke Artifact Registry dan deploy ke Cloud Run.Dockerfile— Docker image yang menjalankan sebuah HTTP wrapper (server.js) yang memanggil bundle CLI@google-cloud/gcloud-mcp.server.js— HTTP wrapper: menerima request body, mem-spawn bundle CLI, mengirim stdin dan mengembalikan stdout sebagai response.package.json— mendeklarasikan dependency@google-cloud/gcloud-mcp.test.sh— smoke test untuk memverifikasi bahwa Cloud Run service sukses di-deploy dan merespon.
Prasyarat (lokal)
- Docker (untuk build dan push image)
- gcloud CLI (authenticated dan project ter-set)
- Akses untuk membuat Artifact Registry repository dan Cloud Run service
- (Opsional) akses ke Secret Manager jika ingin menyimpan
GEMINI_API_KEY
Pastikan Anda sudah login dan memilih project:
gcloud auth login
gcloud config set project YOUR_PROJECT_ID
Environment variables yang dapat dikonfigurasi
Variabel ini digunakan oleh deploy-cloudrun.sh dan test.sh. Bila tidak di-set, skrip menggunakan nilai default (lihat keterangan).
PROJECT_ID— (default: darigcloud config get-value project) GCP project id.REGION— (default:us-central1) Region untuk Artifact Registry & Cloud Run.SERVICE— (default:gcloud-mcp) Nama Cloud Run service.REPO— (default:gcloud-mcp) Nama Artifact Registry repository.PLATFORM— (default:linux/amd64) target platform untukdocker build --platform.GEMINI_API_KEY— (opsional) API key yang akan dimasukkan ke Secret Managergemini-api-key.SERVICE_ACCOUNT— (opsional) service account email yang akan dipakai oleh Cloud Run revision.
Tambahan variabel internal yang dapat Anda sesuaikan dalam skrip jika perlu: MEMORY, TIMEOUT.
Cara deploy (cepat)
- (Opsional) set environment variables yang diinginkan atau pass key sebagai arg pertama:
export PROJECT_ID=my-project
export REGION=asia-southeast2
export SERVICE=gcloud-mcp
export REPO=gcloud-mcp
# atau pass GEMINI key sebagai arg saat memanggil skrip
./deploy-cloudrun.sh "MY_GEMINI_KEY"
NOTE: Dockerfile sekarang mengharuskan package-lock.json yang di-commit untuk build yang dapat direproduksi. Sebelum menjalankan deploy/build, pastikan Anda menghasilkan dan meng-commit lockfile:
# jalankan secara lokal untuk membuat package-lock.json
npm install
# commit package-lock.json ke repo
git add package-lock.json && git commit -m "chore: add package-lock.json"
- Skrip
deploy-cloudrun.shakan:
- Meng-enable layanan yang diperlukan (Artifact Registry, Cloud Run)
- Membuat Artifact Registry repo bila belum ada
- Build Docker image dan push ke
REGION-docker.pkg.dev/PROJECT/REPO/SERVICE:latest - Membuat atau menambahkan versi secret
gemini-api-keybila parameterGEMINI_API_KEYdiberikan - Deploy Cloud Run service (meng-set secret
GEMINI_API_KEYke environment container jika tersedia)
Cara test deploy
Jalankan test.sh untuk pengecekan cepat:
# gunakan overrides jika perlu
SERVICE=gcloud-mcp REGION=us-central1 PROJECT_ID=my-project ./test.sh
test.sh akan mencoba:
- Resolve URL service via
gcloud run services describe. - GET
/healthdan GET/diag(unauthenticated; jika gagal dan token tersedia, dicoba authenticated). - Uji jalur cepat
run_gcloud_command:--version(output teks)run services list --format=json(output JSON)run revisions list --service=$SERVICE --format=json(output JSON)
- Jika ada langkah gagal, script akan menampilkan 50 baris log terakhir via
gcloud beta run services logs read.
Catatan penting
-
@google-cloud/gcloud-mcppada repository upstream memeriksa ketersediaangcloud(CLI) pada saat runtime. Jika intent Anda adalah menjalankan fungsionalitasgclouddari dalam container, pastikan container berisi Google Cloud SDK (gcloud).- Opsi mudah: gunakan base image resmi Cloud SDK (
gcr.io/google.com/cloudsdktool/cloud-sdk:slim) dan install Node.js, atau install Cloud SDK di Dockerfile. Ini akan menaikkan ukuran image. - Alternatif: jika Anda hanya perlu MCP sebagai helper tanpa akses ke
gclouddi dalam container, Anda harus memastikan fitur yang memanggilgcloudtidak dieksekusi, atau mock behavior tersebut.
- Opsi mudah: gunakan base image resmi Cloud SDK (
-
Desain saat ini menjalankan bundle CLI per-request (spawn). Untuk latensi lebih baik dan beban mesin lebih rendah, pertimbangkan menjalankan MCP server sebagai proses long-lived di container (jalankan bundle sekali saat container start, dan implement bridge request→stdio). Saya bisa bantu ubah
server.jske mode persistent jika Anda mau.
Endpoint yang tersedia
-
GET /health— mengembalikan JSON status layanan, contoh:{ "status": "ok", "time": "2025-09-26T12:27:34.200Z" } -
GET /diag— menjalankangcloud --versiondalam container dan mengembalikan hasilnya (text/plain). -
POST /— HTTP wrapper yang:- Jika body JSON cocok dengan pola
{"tool":"run_gcloud_command","input":{"args":[...]}}, maka server akan menjalankangcloudlangsung dengan argumen tersebut dan mengembalikan hasilnya. - Jika tidak, body akan dipass-through ke
npx -y @google-cloud/gcloud-mcpsebagai stdin, dan stdout bundle akan jadi respons.
- Jika body JSON cocok dengan pola
Contoh request run_gcloud_command
Versi gcloud (teks):
curl -s -H "Content-Type: application/json" \
-d '{"tool":"run_gcloud_command","input":{"args":["--version"]}}' \
"$SERVICE_URL"/
Daftar layanan (JSON):
curl -s -H "Content-Type: application/json" \
-d '{"tool":"run_gcloud_command","input":{"args":["run","services","list","--project=YOUR_PROJECT","--region=YOUR_REGION","--format=json"]}}' \
"$SERVICE_URL"/ | jq .
Daftar revisi untuk service aktif (JSON):
curl -s -H "Content-Type: application/json" \
-d '{"tool":"run_gcloud_command","input":{"args":["run","revisions","list","--project=YOUR_PROJECT","--region=YOUR_REGION","--service=YOUR_SERVICE","--format=json"]}}' \
"$SERVICE_URL"/ | jq .
Pengujian layanan privat (authenticated)
Jika layanan dibuat privat (tanpa akses publik), gunakan ID token saat melakukan request:
SERVICE_URL="https://<YOUR_SERVICE_URL>"
ID_TOKEN="$(gcloud auth print-identity-token --audiences=${SERVICE_URL})"
curl -i -H "Authorization: Bearer ${ID_TOKEN}" "${SERVICE_URL}/health"
Troubleshooting cepat
- Jika image tidak bisa push: periksa autentikasi Docker →
gcloud auth configure-docker "${REGION}-docker.pkg.dev"
- Jika
gcloud run deployerror: periksa permissions, apakah Artifact Registry dan Cloud Run API sudah di-enable untuk project. - Jika container exit karena
gcloudnot found: tambahkan Cloud SDK ke Docker image (lihat Catatan penting di atas).
Next steps (opsional)
- Tambah Cloud SDK ke
Dockerfile(saya bisa update file untuk itu). - Ubah
server.jssupaya menjalankan MCP server persistently dan gunakan internal queue/mux untuk melayani beberapa request. - Menambahkan healthcheck endpoint pada
server.jsuntuk Cloud Run readiness.
Jika ingin saya lakukan salah satu opsi di atas, beri tahu pilihan Anda (mis. "install Cloud SDK ke Dockerfile" atau "ubah server ke persistent mode").
Menggunakan custom Service Account (disarankan)
Untuk keamanan dan kontrol akses, sangat disarankan menjalankan Cloud Run service Anda dengan sebuah custom Service Account (SA) khusus untuk MCP. Dengan SA khusus Anda bisa memberikan permission seminimal mungkin (least privilege) dan mengganti izin tanpa harus mengubah container image.
Saya sudah menambahkan sebuah helper script deploy-service-account.sh yang membuat SA dan memberikan beberapa role umum (viewer, logging.viewer). Script juga akan menambahkan akses roles/secretmanager.secretAccessor pada Secret gemini-api-key jika secret tersebut ada.
Contoh penggunaan script ini:
# set project jika belum
export PROJECT_ID=my-project
# jalankan script untuk membuat SA dan beri permission
./deploy-service-account.sh
# setelah script selesai, deploy Cloud Run dengan SA yang dibuat
gcloud run deploy $SERVICE --image $IMAGE_PATH --region $REGION --platform managed --service-account ${SA_EMAIL} --allow-unauthenticated
File deploy-service-account.sh melakukan operasi idempotent (mencoba buat SA hanya jika belum ada) dan akan menampilkan SA_EMAIL yang harus Anda pakai saat deploy.
Jika Anda butuh bantuan untuk menambahkan role tertentu ke SA (mis. akses ke Compute, Storage, Artifact Registry), beri tahu saya role spesifiknya dan saya dapat menambahkan flag/otomatisasi ke script.
Menambahkan role tambahan ke Service Account
deploy-service-account.sh mendukung variabel lingkungan EXTRA_ROLES untuk memberikan role tambahan saat pembuatan SA. EXTRA_ROLES adalah daftar role terpisah-komma.
Contoh menambahkan akses Storage dan Artifact Registry:
PROJECT_ID=your-project SA_NAME=gcloud-mcp-sa EXTRA_ROLES="roles/storage.objectAdmin,roles/artifactregistry.writer" ./deploy-service-account.sh
Script akan menambahkan role-role tersebut ke SA selain role default (roles/viewer, roles/logging.viewer).
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.