Nếu bạn đã đọc bài trước về GCP MCP nói chung, bài này đi sâu vào một stack cụ thể mà rất nhiều team dùng hàng ngày: Claude Code CLI (chạy trong terminal) kết hợp với extension VS Code của Claude Code. Đây là combo mạnh vì bạn vừa có agent chạy độc lập trong terminal cho các task dài (batch query, kiểm tra deploy), vừa có agent nhìn thấy code context trực tiếp trong editor khi bạn cần viết SQL hay script liên quan đến BigQuery và Cloud Run. Bài này sẽ hướng dẫn setup, một vài pattern prompt an toàn, và các lỗi thường gặp khi mới chuyển từ "tôi tự gõ gcloud" sang "agent gõ gcloud thay tôi".
Cài Đặt Và Kết Nối GCP MCP Với Claude Code
Claude Code đọc cấu hình MCP server từ file .mcp.json ở root project (project-scoped) hoặc từ config global (~/.claude.json, áp dụng cho mọi project). Với GCP MCP, tôi luôn khuyên scope theo project vì mỗi project thường tương ứng với một GCP project khác nhau — tránh trường hợp agent lỡ tay chạy nhầm project khi bạn mở nhiều repo cùng lúc.
Tạo file .mcp.json ở root repo:
{
"mcpServers": {
"gcp-mcp": {
"command": "npx",
"args": ["-y", "@google-cloud/mcp-server", "--project=my-gcp-project-id"],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "/Users/you/.config/gcloud/agent-mcp-sa-key.json"
}
}
}
}
Sau khi lưu file, chạy claude trong terminal ở đúng thư mục project, rồi gõ /mcp để kiểm tra server đã kết nối chưa. Nếu thấy gcp-mcp: connected kèm danh sách tool (bigquery_run_query, run_describe_service, gcs_list_objects,...) là đã setup xong phần command line.
Với VS Code, extension Claude Code (cài từ Marketplace, tìm "Claude Code") tự động đọc lại cùng file .mcp.json này — không cần cấu hình riêng lần hai. Điểm khác biệt là trong VS Code bạn có thêm sidebar hiển thị lịch sử tool call, rất tiện khi cần review lại agent đã chạy query gì trước khi approve.
Một lưu ý quan trọng: Claude Code mặc định sẽ hỏi xác nhận (permission prompt) trước khi agent gọi một MCP tool lần đầu trong session. Đừng tắt tính năng này (--dangerously-skip-permissions) cho các tool có khả năng write hoặc chạy query tốn tiền — chỉ nên bật auto-approve cho các tool đọc thuần (list dataset, describe service).
Mẹo: Sau khi kết nối MCP lần đầu, chạy thử một lệnh vô hại như "list các dataset trong BigQuery" để xác nhận agent gọi đúng tool và đúng project trước khi giao task thực sự — tránh trường hợp config sai project mà bạn không phát hiện ra ngay.
Viết Và Ước Tính Chi Phí BigQuery SQL Bằng AI Trước Khi Chạy
Đây là use case tôi thấy giá trị nhất của combo Claude Code + GCP MCP: bạn không cần nhớ tên cột, không cần tự viết JOIN phức tạp — chỉ cần mô tả câu hỏi kinh doanh, agent sẽ tự lấy schema thật rồi viết SQL tương ứng.
Ví dụ prompt thực tế:
Dùng GCP MCP, lấy schema của table `ecommerce.order_items` và `ecommerce.products`.
Viết query BigQuery tính top 15 sản phẩm có doanh thu cao nhất trong tháng 7/2026,
group theo category. Chạy dry-run trước để tôi xem estimate bytes scanned,
chỉ chạy thật khi tôi confirm.
Agent sẽ gọi bigquery_get_table_schema cho cả hai table, viết SQL join đúng theo tên cột thật (không phải suy đoán), rồi gọi bigquery_dry_run để trả về số byte sẽ scan. Đây là bước quan trọng nhất trong toàn bộ workflow — dry-run của BigQuery không tốn phí và cho bạn biết trước chi phí ước tính (BigQuery tính phí theo TB scan, khoảng $5/TB ở thời điểm viết bài, tùy region).
Khi review kết quả dry-run, nếu số byte scan quá lớn so với kỳ vọng (ví dụ query chỉ cần dữ liệu 1 tháng nhưng agent quét full table nhiều năm), đây là dấu hiệu SQL thiếu filter partition. Hỏi lại agent:
Query này scan 800GB nhưng tôi chỉ cần dữ liệu tháng 7/2026.
Table có partition theo column nào? Viết lại query để filter đúng partition,
chạy dry-run lại để so sánh bytes scanned trước/sau.
Đa số dataset BigQuery được thiết kế tốt sẽ partition theo ngày (_PARTITIONTIME hoặc một column DATE), và agent có thể tự kiểm tra qua bigquery_get_table_schema (thường trả về cả thông tin partitioning) rồi sửa lại WHERE clause cho đúng.
Mẹo: Luôn thêm câu "chạy dry-run trước, cho tôi xem estimate cost, chỉ chạy thật khi tôi xác nhận" vào system prompt hoặc file
CLAUDE.mdcủa project — biến nó thành quy tắc mặc định thay vì phải nhắc lại mỗi lần.
Kiểm Tra Cloud Run Revisions, Traffic Splits Và Logs Từ Terminal
Sau khi deploy một service lên Cloud Run, việc kiểm tra revision mới có healthy không, traffic đã chuyển hết chưa, thường đòi hỏi bạn gõ vài lệnh gcloud run services describe, gcloud run revisions list, rồi tự parse output JSON dài. Với GCP MCP, bạn hỏi thẳng bằng ngôn ngữ tự nhiên.
Ví dụ prompt sau khi vừa deploy:
Dùng GCP MCP, describe service `checkout-api` ở region asia-southeast1.
Cho tôi biết: revision mới nhất có đang active không, traffic split hiện tại
giữa các revision là bao nhiêu %, và nếu revision mới có lỗi thì log gần nhất
báo lỗi gì.
Agent sẽ tuần tự gọi run_describe_service để lấy traffic split và trạng thái revision, nếu phát hiện revision mới ở trạng thái False (chưa Ready) hoặc traffic 0%, agent tiếp tục gọi tool logging để trace nguyên nhân — thường là container health check fail, hoặc lỗi khởi động do thiếu biến môi trường.
Một pattern hữu ích khác là so sánh hai revision liên tiếp khi nghi ngờ regression:
So sánh revision `checkout-api-00042` (đang chạy ổn) với revision `checkout-api-00043`
(mới deploy, đang lỗi). Liệt kê khác biệt về resource limit, biến môi trường,
và image tag giữa hai revision này.
Đây đặc biệt hữu ích khi debug sự cố "deploy xong tự dưng lỗi" mà bạn không có sẵn changelog rõ ràng — agent đọc trực tiếp config của cả hai revision và so sánh, nhanh hơn nhiều so với bạn tự mở hai tab Console rồi soi từng field.
Mẹo: Khi mới deploy xong, luôn hỏi agent "traffic đã chuyển 100% sang revision mới chưa" trước khi báo team là deploy thành công — Cloud Run có thể giữ traffic ở revision cũ nếu bạn quên set
--to-latesthoặc rollout đang gradual.
Các Mẫu Prompt Để Khám Phá Dữ Liệu An Toàn, Có Giới Hạn
Khi giao quyền BigQuery và Cloud Logging cho agent, rủi ro lớn nhất không phải là agent "cố ý" làm sai, mà là agent quá nhiệt tình — tự mở rộng phạm vi truy vấn để "chắc chắn có đủ dữ liệu trả lời". Dưới đây là các pattern prompt giúp giới hạn phạm vi rõ ràng.
Giới hạn theo thời gian và kích thước: luôn chỉ định khoảng thời gian cụ thể và ngưỡng bytes tối đa.
Chỉ query dữ liệu trong 24 giờ gần nhất. Nếu dry-run estimate vượt 5GB scanned,
dừng lại và báo cho tôi biết tại sao, không tự động chạy.
Giới hạn theo dataset/table cụ thể, tránh agent tự "khám phá" toàn project:
Chỉ được truy cập dataset `analytics_prod.events_daily`. Không list hay query
bất kỳ dataset nào khác trong project, dù có liên quan.
Yêu cầu agent giải thích SQL trước khi chạy, đặc biệt với query có DELETE, UPDATE, hoặc CREATE TABLE AS SELECT (dù bạn thường không nên cấp quyền write cho agent, một số workflow ETL cần nó):
Trước khi chạy bất kỳ câu lệnh nào không phải SELECT, giải thích rõ tác động
(bao nhiêu row sẽ bị ảnh hưởng) và chờ tôi gõ "OK" mới thực thi.
Những pattern này nên được viết sẵn trong file CLAUDE.md ở root project (Claude Code tự đọc file này làm system instructions), thay vì phải nhắc lại trong từng session — điều này cũng giúp mọi thành viên trong team dùng agent theo cùng một chuẩn an toàn.
Mẹo: Viết một section riêng trong
CLAUDE.mdtên "GCP MCP Safety Rules" liệt kê rõ dataset nào được phép truy cập, ngưỡng bytes scanned tối đa, và yêu cầu dry-run bắt buộc — coi đây như một phần của code review checklist cho toàn team, không chỉ riêng bạn.
Tips
- Luôn kiểm tra
/mcptrong Claude Code để xác nhận đúng project GCP đang kết nối trước khi bắt đầu bất kỳ session làm việc dài. - Dùng file
CLAUDE.mdđể cố định hóa các quy tắc an toàn (dry-run trước, giới hạn dataset, giới hạn thời gian) — đừng phụ thuộc vào việc nhớ nhắc agent mỗi lần. - Trong VS Code, tận dụng sidebar lịch sử tool call để review lại toàn bộ query agent đã chạy trong ngày, đặc biệt trước khi trình bày kết quả phân tích cho stakeholder.