1. บทนำ
ยินดีต้อนรับ ใน Codelab นี้ คุณจะได้เรียนรู้วิธีเพิ่มประสิทธิภาพให้ Agent AI โดยใช้เซิร์ฟเวอร์ Model Context Protocol (MCP) ที่ Google จัดการ
Model Context Protocol (MCP) เป็นมาตรฐานโอเพนซอร์สที่ช่วยให้โมเดล AI เชื่อมต่อกับแหล่งข้อมูลและเครื่องมือภายนอกได้อย่างปลอดภัยและมีประสิทธิภาพ แม้ว่าการติดตั้งใช้งาน MCP ส่วนใหญ่จะทำงานในเครื่องของคุณ แต่ Google ก็มีเซิร์ฟเวอร์ MCP ระยะไกลที่มีการจัดการ ซึ่งเป็นปลายทางที่โฮสต์อย่างเต็มรูปแบบและพร้อมใช้งานระดับองค์กรที่ช่วยให้ตัวแทนโต้ตอบกับโครงสร้างพื้นฐานของ Google Cloud ได้โดยตรงโดยที่คุณไม่ต้องจัดการโค้ดหรือคอนเทนเนอร์ฝั่งเซิร์ฟเวอร์
ข้อดีของ "มีการจัดการ"
เซิร์ฟเวอร์ที่มีการจัดการของ Google ใช้ HTTP ที่สตรีมได้ ซึ่งแตกต่างจากเซิร์ฟเวอร์ MCP ในเครื่องที่ใช้การป้อนข้อมูล/เอาต์พุตมาตรฐาน (stdio) สถาปัตยกรรมนี้มีข้อดีดังนี้
- ไม่ต้องใช้โครงสร้างพื้นฐาน: ไม่ต้องจัดสรรหรือปรับขนาดเซิร์ฟเวอร์
- การรักษาความปลอดภัยตั้งแต่การออกแบบ: การผสานรวมดั้งเดิมกับ Cloud IAM และบันทึกการตรวจสอบของ Google Cloud
- การปรับขนาดแบบไม่เก็บสถานะ: การโต้ตอบที่ราบรื่นผ่านตัวจัดสรรภาระงานและพร็อกซีมาตรฐาน
สิ่งที่คุณจะได้เรียนรู้
- วิธีเปิดใช้และตรวจสอบสิทธิ์เซิร์ฟเวอร์ MCP ที่มีการจัดการ
- วิธีใช้ Cloud Logging MCP Server เป็นพื้นฐาน
- วิธีจัดการเป็นกลุ่มเซิร์ฟเวอร์ MCP หลายเครื่อง (Developer Knowledge, Firestore ฯลฯ) เพื่อสร้างเวิร์กโฟลว์อัตโนมัติ
สิ่งที่คุณต้องมี
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- คุ้นเคยกับคอนโซล Google Cloud และ
gcloudCLI - Google Cloud Shell (ติดตั้ง Gemini CLI ไว้ล่วงหน้าแล้ว)
Codelab นี้ออกแบบมาสำหรับผู้ใช้และนักพัฒนาซอฟต์แวร์ทุกระดับ (รวมถึงผู้เริ่มต้น)
การรายงานปัญหา
คุณอาจพบปัญหาขณะทำ Codelab และใช้ Antigravity
หากพบปัญหาที่เกี่ยวข้องกับ Codelab (การสะกดผิด คำสั่งที่ไม่ถูกต้อง) โปรดเปิดข้อบกพร่องโดยใช้ปุ่ม Report a mistake ที่มุมล่างซ้ายของ Codelab นี้

2. ก่อนที่คุณจะเริ่มต้น
ในขั้นตอนนี้ คุณจะได้เตรียมสภาพแวดล้อม Google Cloud เราจะดำเนินการทั้งหมดภายใน Google Cloud Shell ซึ่งมีเทอร์มินัลที่กำหนดค่าไว้ล่วงหน้าและทำงานอย่างต่อเนื่อง
เปิดใช้งาน Cloud Shell
- ไปที่ คอนโซล Google Cloud
- คลิกไอคอนเปิดใช้งาน Cloud Shell ในส่วนหัวด้านขวาบน
- เมื่อเซสชันเทอร์มินัลเริ่มต้น ให้ให้สิทธิ์พรอมต์หากระบบขอ
ตั้งค่ารหัสโปรเจ็กต์
ตรวจสอบว่า Cloud Shell ชี้ไปยังโปรเจ็กต์ที่ถูกต้อง
# Set your active project
gcloud config set project YOUR_PROJECT_ID
# Verify the setting
gcloud config list project
เปิดใช้ Foundation API
เซิร์ฟเวอร์ MCP ที่มีการจัดการต้องเปิดใช้ทั้ง API ของผลิตภัณฑ์พื้นฐานและอินเทอร์เฟซ MCP เรียกใช้คำสั่งต่อไปนี้เพื่อเปิดใช้แบ็กเอนด์ Cloud Logging (พื้นฐานสำหรับแล็บนี้)
# Enable the Cloud Logging API and its MCP interface
gcloud services enable logging.googleapis.com
gcloud beta services mcp enable logging.googleapis.com
หมายเหตุ: ขณะนี้บริการ MCP ที่มีการจัดการอยู่ในเวอร์ชันเบต้า คุณต้องใช้คอมโพเนนต์ gcloud เบต้าเพื่อเปิดใช้
ตั้งค่าข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน (ADC)
Gemini CLI ใช้ข้อมูลประจำตัวของผู้ใช้เพื่อสื่อสารกับเซิร์ฟเวอร์ MCP ให้สิทธิ์แก่ตัวแทนเพื่อดำเนินการในนามของคุณ
gcloud auth application-default login
ทำตาม URL ในเทอร์มินัล ลงชื่อเข้าใช้ แล้ววางรหัสการให้สิทธิ์กลับลงใน Cloud Shell
กำหนดบทบาท IAM พื้นฐาน
เซิร์ฟเวอร์ MCP ที่มีการจัดการใช้โมเดลความปลอดภัยแบบ 2 ชั้น คุณต้องเปิด "ประตู" 2 บานต่อไปนี้
- Gate 1 (สิทธิ์เข้าถึง MCP): บทบาทที่ช่วยให้คุณเรียกโปรโตคอลได้
- Gate 2 (การเข้าถึงบริการ): บทบาทที่ช่วยให้คุณดูข้อมูลได้ (เช่น การดูบันทึก)
เรียกใช้คำสั่งต่อไปนี้เพื่อมอบสิทธิ์เข้าถึงที่จำเป็นให้แก่ตนเอง
export PROJECT_ID=$(gcloud config get-value project)
export USER_EMAIL=$(gcloud config get-value account)
# Gate 1: Permission to use the MCP protocol
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="user:$USER_EMAIL" \
--role="roles/mcp.toolUser"
# Gate 2: Permission to view the actual logs
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="user:$USER_EMAIL" \
--role="roles/logging.viewer"
3. พื้นฐาน: การเชื่อมต่อเซิร์ฟเวอร์ MCP เครื่องแรก
ในขั้นตอนนี้ คุณจะลิงก์เอเจนต์ AI (Gemini CLI) กับ Google Cloud Logging MCP Server นี่คือ "รากฐาน" ของเราเนื่องจากช่วยให้ตัวแทนเห็นสิ่งที่เกิดขึ้นภายในโปรเจ็กต์ของคุณแบบเรียลไทม์
งานที่ 1: กำหนดค่าเซิร์ฟเวอร์ MCP การบันทึก
Gemini CLI ใช้ไฟล์ settings.json เพื่อจัดการการเชื่อมต่อ คุณจะต้องแก้ไขไฟล์นี้ (อยู่ในโฟลเดอร์ ~/.gemini) เพื่อเพิ่มข้อมูลโค้ดต่อไปนี้ภายในบล็อก mcpServers แทนที่ YOUR_PROJECT_ID ด้วยรหัสโปรเจ็กต์จริง
"logging-mcp": {
"httpUrl": "https://logging.googleapis.com/mcp",
"authProviderType": "google_credentials",
"oauth": {
"scopes": [
"https://www.googleapis.com/auth/logging.read"
]
},
"timeout": 30000,
"headers": {
"x-goog-user-project": "YOUR_PROJECT_ID"
}
}
หมายเหตุ: ต้องมีส่วนหัว x-goog-user-project สำหรับเซิร์ฟเวอร์ MCP ที่มีการจัดการเพื่อให้แน่ใจว่าการใช้งาน API และการเรียกเก็บเงินจะเชื่อมโยงกับโปรเจ็กต์ของคุณอย่างถูกต้อง
งานที่ 2: จำลองกิจกรรมของโปรเจ็กต์ (สร้างบันทึก)
หากโปรเจ็กต์ของคุณใหม่หรือไม่มีการใช้งาน ก็อาจไม่มีบันทึก "ที่น่าสนใจ" ล่าสุด มาใช้ gcloud CLI เพื่อแทรกรายการที่กำหนดเอง 2-3 รายการเพื่อให้ตัวแทนมีสิ่งที่ค้นหา
เรียกใช้คำสั่งเหล่านี้ทีละรายการเพื่อจำลองลำดับเหตุการณ์
# 1. Simulate a standard system start
gcloud logging write mcp-test-log "System boot sequence initiated" --severity=INFO
# 2. Simulate a warning about resource limits
gcloud logging write mcp-test-log "High memory pressure detected in zone us-central1-a" --severity=WARNING
# 3. Simulate a critical authentication failure
gcloud logging write mcp-test-log "ERROR: Failed to connect to Cloud SQL. Permission Denied." --severity=ERROR
งานที่ 3: ยืนยันเครื่องมือใน Gemini CLI
ก่อนที่เราจะเริ่มแชทกัน โปรดตรวจสอบว่าตัวแทนสามารถ "ดู" เครื่องมือที่เซิร์ฟเวอร์การบันทึกแสดงได้ เปิดใช้ Gemini CLI โดยทำดังนี้
gemini
เมื่ออยู่ในพรอมต์ของ Gemini CLI (>) ให้เรียกใช้คำสั่ง list ดังนี้
/mcp list
จุดตรวจสอบการยืนยัน: คุณควรเห็น logging-mcp แสดงเป็นพร้อม โดยมีเครื่องมือประมาณ 6 รายการ รวมถึง list_log_entries
งานที่ 4: พรอมต์โครงสร้างพื้นฐานของไลฟ์สดครั้งแรก
ตอนนี้ เรามาขอให้ตัวแทนค้นหาบันทึกที่เราเพิ่งสร้างกัน เนื่องจากคุณได้ให้บทบาท roles/logging.viewer ไปก่อนหน้านี้ ตอนนี้ Agent จึงสามารถ "ติดต่อ" และอ่านสถานะโปรเจ็กต์ของคุณได้
พิมพ์พรอมต์ต่อไปนี้ลงใน Gemini CLI
Show me the 3 most recent log entries from the log named 'mcp-test-log'. What is the highest severity issue you see?
สังเกตการณ์ตัวแทน:
- เอเจนต์อาจแจ้งให้คุณระบุรหัสโปรเจ็กต์ Google Cloud โปรดระบุข้อมูลดังกล่าว
- โดยจะระบุว่าต้องใช้
list_log_entries - โดยจะขอสิทธิ์จากคุณเพื่อเรียกใช้เครื่องมือ เลือก 1. ใช่ อนุญาตครั้งเดียว
- โดยจะแยกวิเคราะห์การตอบกลับ JSON และแจ้งให้คุณทราบเกี่ยวกับข้อผิดพลาด Cloud SQL Permission Denied ที่เราจำลองขึ้น
4. เส้นทาง A: สมอง (MCP ความรู้สำหรับนักพัฒนาแอป)
ในเส้นทางนี้ คุณจะมอบ "สมอง" ให้กับเอเจนต์โดยเชื่อมต่อกับเซิร์ฟเวอร์ MCP ของ Google Developer Knowledge
ความเสี่ยงที่ใหญ่ที่สุดอย่างหนึ่งของ AI Agent คืออาการหลอนของ AI ซึ่งเป็นการให้คำสั่ง CLI ที่ล้าสมัยหรือพารามิเตอร์ API ที่เลิกใช้งานแล้วอย่างมั่นใจ เซิร์ฟเวอร์ MCP นี้ช่วยแก้ปัญหานี้ได้โดยการเชื่อมต่อแหล่งข้อมูล Agent ในคลังเอกสารสำหรับนักพัฒนาแอปอย่างเป็นทางการที่เผยแพร่อยู่ของ Google (ครอบคลุม Google Cloud, Firebase, Android และอื่นๆ)
งานที่ 1: เปิดใช้บริการความรู้
เช่นเดียวกับขั้นตอนพื้นฐาน เราต้องเปิดใช้ทั้ง API แบ็กเอนด์และปลายทางบริการ MCP
# 1. Enable the Developer Knowledge API
gcloud services enable developerknowledge.googleapis.com
# 2. Enable the MCP Server interface
gcloud beta services mcp enable developerknowledge.googleapis.com
งานที่ 2: จัดสรรคีย์ API ที่มีการจำกัด
MCP ความรู้สำหรับนักพัฒนาแอปใช้คีย์ API ในการตรวจสอบสิทธิ์ เพื่อความปลอดภัย เราจะสร้างคีย์และจำกัดคีย์ดังกล่าวเพื่อให้ใช้ได้กับ API นี้เท่านั้น
- เรียกใช้สคริปต์ต่อไปนี้เพื่อสร้างและเรียกคีย์
# Create the restricted API key
gcloud alpha services api-keys create \
--display-name="MCP-Knowledge-Key" \
--api-target service=developerknowledge.googleapis.com
# Wait a few seconds for the key to propagate, then fetch the string
gcloud alpha services api-keys get-key-string \
$(gcloud alpha services api-keys list \
--filter="displayName='MCP-Knowledge-Key'" \
--format="value(name)") \
--format="value(keyString)"
- คัดลอกสตริงอักขระแบบยาวที่คำสั่งที่ 2 แสดงผล นี่คือ
YOUR_API_KEYของคุณ
งานที่ 3: กำหนดค่า Gemini CLI
ตอนนี้ให้ลงทะเบียนเซิร์ฟเวอร์ Knowledge MCP กับเอเจนต์ ซึ่งจะช่วยให้ตัวแทนค้นหาเอกสารอย่างเป็นทางการได้ทุกเมื่อที่พบคำถามทางเทคนิคที่ตอบไม่ได้อย่างแน่นอน 100%
เพิ่มข้อมูลโค้ดต่อไปนี้ภายในส่วน mcpServers ในไฟล์ ~/.gemini/settings.json โดยแทนที่ YOUR_API_KEY ด้วยสตริงที่คุณเพิ่งคัดลอก
"developer-knowledge-mcp": {
"httpUrl": "https://developerknowledge.googleapis.com/mcp",
"headers": {
"X-Goog-Api-Key": "YOUR_API_KEY"
}
}
งานที่ 4: การทดสอบการป้องกันไม่ให้โมเดลหลอน
มาตรวจสอบกันว่าตอนนี้ Agent "ค้นคว้า" แทนที่จะ "คาดเดา" แล้ว
เปิดใช้ Gemini CLI โดยทำดังนี้
gemini
ตรวจสอบว่าเซิร์ฟเวอร์พร้อมแล้วโดยพิมพ์ /mcp list คุณควรเห็น google-developer-knowledge พร้อมเครื่องมือ 2 อย่าง (search_documents, get_document)
พรอมต์: ขอให้ Agent ค้นหาคำสั่งที่เฉพาะเจาะจงและทันสมัย
I want to create a Google Cloud Storage bucket using the modern gcloud storage command. Search the official documentation for the exact syntax and show me an example for a bucket in the 'us-central1' region.
สิ่งที่ควรตรวจสอบ
- Gemini จะขอสิทธิ์ในการใช้
search_documents - จากนั้นก็มีแนวโน้มที่จะเรียกใช้
get_documentเพื่ออ่านหน้าเว็บที่เฉพาะเจาะจงซึ่งพบ - คำตอบสุดท้ายควรมี
gcloud storage buckets create ...คำสั่งที่อ้างอิงจากเอกสารประกอบโดยตรง
5. เส้นทาง B: การคัดกรอง (การแก้ปัญหาด้วยตนเอง)
ข้อกำหนดเบื้องต้น: เส้นทางนี้กำหนดให้คุณต้องทำเส้นทาง A: สมองให้เสร็จก่อน เพื่อให้เอเจนต์ค้นหาวิธีแก้ไขได้
ในเส้นทางนี้ คุณจะรวมดวงตา (Cloud Logging MCP) และสมอง (Developer Knowledge MCP) ของเอเจนต์เพื่อสร้างลูปการแก้ปัญหาอัตโนมัติ
แทนที่จะคัดลอกรหัสข้อผิดพลาดลงในเครื่องมือค้นหาด้วยตนเอง คุณจะป้อนพรอมต์เดียวให้ Agent สแกนโปรเจ็กต์เพื่อหาข้อผิดพลาด ค้นหาวิธีแก้ปัญหาอย่างเป็นทางการ และสร้างรายงานการแก้ไขที่นำไปใช้ได้จริง
งานที่ 1: จำลอง "วันที่ไม่ดี" ใน GCP
หากต้องการดูประสิทธิภาพของการแก้ปัญหาอัตโนมัติ เราต้องมีชุดข้อผิดพลาดที่สมจริง เราจะใช้สคริปต์ Python เพื่อแทรกอุปสรรคด้านโครงสร้างพื้นฐานต่างๆ ตั้งแต่ข้อผิดพลาด "ปฏิเสธสิทธิ์" ไปจนถึงปัญหาโควต้า ลงในบันทึกโดยตรง
- สร้างโฟลเดอร์ที่คุณต้องการใน Cloud Shell แล้วไปที่โฟลเดอร์นั้น
- สร้างไฟล์ชื่อ
simulate_errors.py
nano simulate_errors.py
- วางโค้ดต่อไปนี้ลงในตัวแก้ไข
import argparse
from google.cloud import logging
def simulate_errors(project_id):
client = logging.Client(project=project_id)
logger = client.logger("mcp-scenario-logger")
print(f"Simulating realistic errors for project: {project_id}...")
# 1. GCS Permission Error
logger.log_text("ERROR: GCS Upload failed for 'gs://my-app-bucket/data.json'. Status: 403 Forbidden. Missing 'storage.objects.create' for service account.", severity="ERROR")
# 2. Cloud Run Startup Error
logger.log_text("ERROR: Cloud Run service 'api-gateway' failed to start. Container failed to listen on port 8080. Check 'Cloud Run container startup requirements'.", severity="ERROR")
# 3. Secret Manager Access Error
logger.log_text("ERROR: Access denied to secret 'API_KEY'. The identity lacks 'secretmanager.versions.access'.", severity="ERROR")
print("Log entries written to 'mcp-scenario-logger'.")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--project", required=True)
args = parser.parse_args()
simulate_errors(args.project)
- กด Ctrl+O, Enter และ
Ctrl+Xเพื่อบันทึกและออก - ติดตั้งไลบรารี
Google Cloud Loggingแล้วเรียกใช้สคริปต์
python -m venv mcp_env
source mcp_env/bin/activate
pip install google-cloud-logging
python simulate_errors.py --project $(gcloud config get-value project)
งานที่ 2: เรียกใช้ลูปอัตโนมัติ
ตอนนี้เราจะส่งพรอมต์ที่ซับซ้อนซึ่งสั่งให้ Gemini จัดการเซิร์ฟเวอร์ MCP ทั้ง 2 เครื่องพร้อมกัน
เปิดใช้ Gemini CLI โดยทำดังนี้
gemini
พิมพ์ "พรอมต์หลัก" นี้ลงใน Agent
I need to troubleshoot recent issues in my project. Perform the following autonomous loop:
Step 1 : Retrieval: Use the Logging MCP to fetch the 5 most recent ERROR entries from the log 'mcp-scenario-logger'.
Step 2 : Iteration: For every unique error found, extract the service and specific error message.
Step 3 : Research: Use the Developer Knowledge MCP to find the official resolution or gcloud command to fix each issue.
Step 4 : Resolution: Consolidate everything into a markdown table with columns: | Service | Error Summary | Recommended Fix |.
สิ่งที่จะเกิดขึ้น
ตอนนี้คุณกำลังดูเวิร์กโฟลว์ที่เป็น Agentแบบเรียลไทม์ ตัวแทนจะทำสิ่งต่อไปนี้
- โทรหา
list_log_entriesเพื่อดู "วันที่แย่" ที่เราเพิ่งจำลอง - วิเคราะห์ข้อความเพื่อระบุว่า GCS, Cloud Run และ Secret Manager ทำงานไม่สำเร็จ
- โทรหา
search_documentsและget_documentสำหรับแต่ละบริการเพื่อค้นหาบทบาท IAM ที่ถูกต้องหรือการแก้ไขการกำหนดค่า - แสดงตารางที่มีโครงสร้างซึ่งมีลักษณะคล้ายกับตารางนี้ (คำแนะนำอาจแตกต่างกัน)
บริการ | สรุปข้อผิดพลาด | การแก้ไขที่แนะนำ |
Cloud Storage | 403 Forbidden เมื่ออัปโหลด | ให้สิทธิ์ |
Cloud Run | ฟังบนพอร์ต 8080 ไม่สำเร็จ | ตรวจสอบว่าแอปเชื่อมโยงกับ 0.0.0.0 ในพอร์ตที่กำหนดโดย |
Secret Manager | ไม่มีบทบาทการเข้าถึงเวอร์ชัน | กำหนด |
6. เส้นทาง C: ข้อมูล (MCP ของ Firestore)
ในเส้นทางนี้ คุณจะได้ใช้เซิร์ฟเวอร์ MCP ของ Firestore เพื่อจัดการฐานข้อมูลเอกสาร NoSQL โดยใช้เพียงภาษาที่เป็นธรรมชาติ
Firestore เป็นฐานข้อมูลที่ยืดหยุ่นและปรับขนาดได้ แต่การจัดการมักต้องเขียนโค้ด SDK ที่ซับซ้อนหรือไปยังส่วนต่างๆ ของคอนโซล เมื่อใช้ MCP ตัวแทนของคุณจะกลายเป็นผู้ดูแลฐานข้อมูลที่สามารถเริ่มต้นใช้งานข้อมูล ค้นหาเรคคอร์ด และแม้แต่ทำการย้ายข้อมูลสคีมาที่ซับซ้อนผ่านแชทได้
งานที่ 1: เปิดใช้บริการ Firestore
ก่อนอื่น ให้เปิดใช้ Firestore API และปลายทาง MCP ที่เกี่ยวข้อง
# 1. Enable the Firestore API
gcloud services enable firestore.googleapis.com
# 2. Enable the MCP Server interface
gcloud beta services mcp enable firestore.googleapis.com
งานที่ 2: มอบหมายบทบาท IAM ของ Firestore
หากต้องการเรียกใช้การค้นหา ข้อมูลประจำตัวของคุณต้องมีสิทธิ์เฉพาะนอกเหนือจากการเข้าถึง MCP ขั้นพื้นฐาน
# Grant Firestore User role
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="user:$USER_EMAIL" \
--role="roles/datastore.user"
งานที่ 3: สร้างฐานข้อมูลทดสอบเฉพาะ
เราจะสร้างฐานข้อมูล Firestore เฉพาะชื่อ mcp-lab-db เพื่อให้การทดลองของเราปลอดภัย
gcloud firestore databases create --database=mcp-lab-db --location=nam5 --type=firestore-native
งานที่ 4: กำหนดค่า Gemini CLI
เพิ่มเซิร์ฟเวอร์ MCP ของ Firestore ลงในเอเจนต์ เพิ่มการกำหนดค่าต่อไปนี้ลงในส่วน mcpServers ในไฟล์ ~/.gemini/settings.json แทนที่ YOUR_PROJECT_ID ด้วยรหัสโปรเจ็กต์จริง
"firestore-mcp": {
"httpUrl": "https://firestore.googleapis.com/mcp",
"authProviderType": "google_credentials",
"oauth": {
"scopes": [
"https://www.googleapis.com/auth/cloud-platform"
]
},
"timeout": 30000,
"headers": {
"x-goog-user-project": "YOUR_PROJECT_ID"
}
}
งานที่ 5: การดำเนินการฐานข้อมูลภาษาธรรมชาติ
เปิดใช้ Gemini CLI และดำเนินการพื้นฐานบางอย่างเพื่อยืนยันการเชื่อมต่อ
เปิดใช้ Gemini CLI โดยทำดังนี้
gemini
ตรวจสอบว่าเซิร์ฟเวอร์พร้อมแล้วโดยพิมพ์ /mcp list คุณควรเห็น firestore-mcp พร้อมเครื่องมือหลายอย่าง (add_document, create_database, list_documents, etc)
ลองใช้พรอมต์ต่อไปนี้ตามลำดับ
ข้อมูลเริ่มต้น:
In the 'mcp-lab-db' database, add three documents to a 'products' collection. Include a laptop (stock 5), a mouse (stock 25), and a keyboard (stock 8).
ยืนยัน:
List all documents in the 'products' collection from the 'mcp-lab-db' database.
ลองใช้พรอมต์อื่นๆ ที่ช่วยคุณจัดการฐานข้อมูลและคอลเล็กชัน Firestore ผ่านภาษาธรรมชาติ
7. เส้นทาง D: ข้อมูลอัจฉริยะ (BigQuery และ Maps)
ในเส้นทางนี้ คุณจะมอบความสามารถให้ Agent วิเคราะห์ข้อมูลระดับเพตะไบต์และทำความเข้าใจโลกทางกายภาพโดยใช้เซิร์ฟเวอร์ MCP ของ BigQuery และ Maps Grounding Lite
เมื่อสิ้นสุดส่วนนี้ Agent จะสามารถแปลภาษาธรรมชาติเป็นคำค้นหา SQL ที่ซับซ้อน และให้คำแนะนำด้านภูมิสารสนเทศที่คำนึงถึงบริบท (เช่น เวลาเดินทางและสภาพอากาศ) เพื่อให้คำตอบอิงตามความเป็นจริง
งานที่ 1: เปิดใช้บริการอัจฉริยะ
เปิดใช้ API และอินเทอร์เฟซ MCP สำหรับทั้ง BigQuery และ Google Maps
# 1. Enable product APIs
gcloud services enable bigquery.googleapis.com mapstools.googleapis.com
# 2. Enable MCP Server interfaces
gcloud beta services mcp enable bigquery.googleapis.com
gcloud beta services mcp enable mapstools.googleapis.com
งานที่ 2: มอบหมายบทบาท IAM ของ BigQuery
หากต้องการเรียกใช้การค้นหา ข้อมูลประจำตัวของคุณต้องมีสิทธิ์เฉพาะนอกเหนือจากการเข้าถึง MCP ขั้นพื้นฐาน
# Grant BigQuery Job User and Data Viewer roles
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="user:$USER_EMAIL" \
--role="roles/bigquery.jobUser"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="user:$USER_EMAIL" \
--role="roles/bigquery.dataViewer"
งานที่ 3: จัดสรรคีย์ API ของ Maps
เซิร์ฟเวอร์ Maps Grounding Lite ต้องใช้คีย์ API สำหรับโควต้าและการเรียกเก็บเงิน ซึ่งแตกต่างจากบริการอื่นๆ ที่ใช้ IAM เพียงอย่างเดียว
สร้างคีย์
gcloud alpha services api-keys create --display-name="MCP-Maps-Key"
ดึงสตริงคีย์:
# Wait a few seconds for the key to propagate, then fetch the string
gcloud alpha services api-keys get-key-string \
$(gcloud alpha services api-keys list \
--filter="displayName='MCP-Maps-Key'" \
--format="value(name)") \
--format="value(keyString)"
คัดลอกสตริงคีย์สำหรับขั้นตอนถัดไป
งานที่ 4: กำหนดค่า Gemini CLI
ตอนนี้ ให้ลงทะเบียนทั้ง 2 เซิร์ฟเวอร์ เพิ่มข้อมูลโค้ดด้านล่างลงในส่วน mcpServers ในไฟล์ ~/.gemini/settings.json แทนที่ YOUR_PROJECT_ID และ YOUR_MAPS_API_KEY ตามความเหมาะสม
"bigquery-mcp": {
"httpUrl": "https://bigquery.googleapis.com/mcp",
"authProviderType": "google_credentials",
"oauth": {
"scopes": [
"https://www.googleapis.com/auth/cloud-platform"
]
},
"timeout": 30000,
"headers": {
"x-goog-user-project": "YOUR_PROJECT_ID"
}
},
"maps-grounding-lite-mcp": {
"httpUrl": "https://mapstools.googleapis.com/mcp",
"headers": {
"X-Goog-Api-Key": "YOUR_MAPS_API_KEY"
}
}
งานที่ 5: ข้อมูลอัจฉริยะในการดำเนินการ
เปิดใช้ Gemini CLI และทดสอบความสามารถ "Intelligence" ใหม่
gemini
ตรวจสอบว่าเซิร์ฟเวอร์พร้อมแล้วโดยพิมพ์ /mcp list คุณควรเห็น bigquery-mcp และ maps-grounding-lite-mcp พร้อมเครื่องมือหลายอย่างแสดงอยู่ .
สถานการณ์ที่ 1: เครื่องมือวิเคราะห์ (BigQuery) ขอให้ตัวแทนค้นหาชุดข้อมูลสาธารณะโดยที่คุณไม่ต้องรู้ SQL
Run a query to count the number of penguins on each island in the BigQuery public dataset ml_datasets.penguins.
สถานการณ์ที่ 2: บริบทเชิงพื้นที่ (Maps) ขอให้เอเจนต์วางแผนการเดินทางในโลกจริง
I am planning a drive from Mumbai to Pune tomorrow morning. Based on current weather and routing, what should I expect in terms of travel time and what should I carry?
สิ่งที่ควรตรวจสอบ
- สำหรับ BigQuery เอเจนต์จะเรียกใช้
execute_sqlเพื่อค้นหาสคีมาและเรียกใช้การค้นหา - สำหรับ Maps จะประสานงาน
lookup_weatherและ compute_routes เพื่อให้คุณได้รับแผนการเดินทางที่สมเหตุสมผลและเป็นประโยชน์
8. การปิดช่องโหว่: การรักษาความปลอดภัยในสภาพแวดล้อม Production และ IAM
ในขั้นตอนสุดท้ายนี้ คุณจะเปลี่ยนจากการใช้สิทธิ์ "เจ้าของ" แบบกว้างไปเป็นโมเดลการป้องกันแบบหลายชั้นระดับการใช้งานจริง
AI Agent มี "ประโยชน์" โดยธรรมชาติ หากคุณจำกัดเครื่องมือที่ระดับ UI เอเจนต์อัจฉริยะอาจพยายามหลีกเลี่ยงข้อจำกัดนั้นด้วยการเรียกใช้คำสั่ง Shell แทน หากต้องการรักษาความปลอดภัยของโครงสร้างพื้นฐานอย่างแท้จริง คุณต้องสร้างขอบเขตที่เข้มงวดโดยใช้ Google Cloud IAM
โมเดลการรักษาความปลอดภัย 2 ชั้น
หากต้องการดำเนินการใดๆ เอเจนต์จะต้องผ่าน 2 ประตู ได้แก่
- ด่านที่ 1 (ด่าน MCP): ข้อมูลประจำตัวมี
roles/mcp.toolUserไหม (สิทธิ์ในการใช้โปรโตคอล) - Gate 2 (The Service Gate): Does the identity have the specific product role (e.g.,
roles/datastore.viewer)? (Permission to see the data).
งานที่ 1: เลเยอร์ 1 - การกรองฝั่งไคลเอ็นต์ (excludeTools)
การป้องกันชั้นแรกคือการซ่อนเครื่องมือจากเอเจนต์เพื่อไม่ให้เอเจนต์ "คิด" ที่จะใช้เครื่องมือเหล่านั้น
- เปิดการตั้งค่า Gemini CLI ในเครื่องมือแก้ไข Cloud Shell โดยทำดังนี้
cloudshell edit ~/.gemini/settings.json
- ค้นหาบล็อก firestore-mcp แล้วเพิ่มคำสั่ง
excludeToolsเพื่อซ่อนการดำเนินการที่ทำลายล้าง
"firestore-mcp": {
"httpUrl": "https://firestore.googleapis.com/mcp",
"excludeTools": ["delete_database", "update_database", "delete_document"],
...
}
บันทึกไฟล์แล้วรีสตาร์ท Gemini CLI เรียกใช้ /mcp list แล้วสังเกตว่าเครื่องมือเหล่านั้นหายไปแล้ว
งานที่ 2: เลเยอร์ 2 - ความเหนือกว่าของโครงสร้างพื้นฐาน (ตัวตรวจสอบ IAM)
การกรองฝั่งไคลเอ็นต์เป็นแนวทาง "แบบยืดหยุ่น" หากคุณขอให้ตัวแทน "ลบฐานข้อมูล Firestore ของฉัน" และซ่อนเครื่องมือไว้ เครื่องมืออาจพยายามเรียกใช้ gcloud firestore databases delete เราจึงใช้บัญชีบริการที่มีสิทธิ์ขั้นต่ำเพื่อป้องกันไม่ให้เกิดเหตุการณ์ดังกล่าว
สร้างบัญชีบริการ "อ่านอย่างเดียว"
# Create the service account
gcloud iam service-accounts create mcp-reader-sa --display-name="MCP Reader Only"
# Grant ONLY the necessary roles (Gate 1 + Gate 2)
export PROJECT_ID=$(gcloud config get-value project)
SA_EMAIL="mcp-reader-sa@$PROJECT_ID.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA_EMAIL" --role="roles/mcp.toolUser"
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA_EMAIL" --role="roles/datastore.viewer"
gcloud projects add-iam-policy-binding $PROJECT_ID --member="serviceAccount:$SA_EMAIL" --role="roles/aiplatform.user"
สร้างและเปิดใช้งานคีย์
gcloud iam service-accounts keys create reader-key.json --iam-account=$SA_EMAIL
export GOOGLE_APPLICATION_CREDENTIALS=$(pwd)/reader-key.json
งานที่ 3: การทดสอบ Bouncer "ตัวแทนที่ให้ความช่วยเหลือ"
ตอนนี้เรามาทดสอบว่า Agent จะหลบเลี่ยงการรักษาความปลอดภัยของเราได้หรือไม่
ขั้นตอนแรกของเราคือการเปิดใช้งานบัญชีบริการ เพื่อให้แม้ว่าตัวแทนจะกลับไปใช้คำสั่ง gcloud ก็จะทำงานภายใต้ข้อมูลประจำตัวของบัญชีบริการที่เราเพิ่งสร้างขึ้น
เปิดใช้งานบัญชีบริการ:
เรียกใช้คำสั่งต่อไปนี้ โดยแทนที่ [PATH_TO_KEY_FILE] ด้วยเส้นทางจริงไปยังไฟล์คีย์ JSON (เช่น reader-key.json)
gcloud auth activate-service-account --key-file=[PATH_TO_KEY_FILE]
ยืนยันการเปลี่ยนแปลง
หลังจากเรียกใช้คำสั่งแล้ว คุณสามารถยืนยันว่าบัญชีบริการใช้งานได้โดยเรียกใช้คำสั่งต่อไปนี้
gcloud auth list
เอาต์พุตจะแสดงบัญชีบริการเป็นข้อมูลเข้าสู่ระบบที่ใช้งานอยู่
เปิดใช้ Gemini CLI:
gemini
พิมพ์พรอมต์นี้
I want to delete the 'mcp-lab-db' firestore database. If the tool is missing, try using the gcloud firestore command in the terminal.
จะเกิดอะไรขึ้น
- โดยเอเจนต์จะพยายามใช้เครื่องมือ delete_database ในเซิร์ฟเวอร์ MCP ของ Firestore ก่อน ซึ่งจะล้มเหลวเนื่องจากไม่มีสิทธิ์
- จากนั้นจะพยายาม "ช่วยเหลือ" โดยกลับไปใช้
run_shell_commandเพื่อใช้คำสั่ง gcloud firestore
ผลลัพธ์:
คำสั่งล้มเหลวเนื่องจากข้อผิดพลาด "Forbidden" เนื่องจากเอเจนต์ทํางานภายใต้ข้อมูลประจำตัว mcp-reader-sa จึงไม่มีสิทธิ์ datastore.databases.delete IAM เป็นการป้องกันขั้นสุดท้าย ไม่ว่าตัวแทนจะพยายามเข้าถึงทรัพยากรด้วยวิธีใด "Bouncer" ที่ระดับ API ของ Google Cloud จะบล็อกคำขอ
เปลี่ยนกลับไปใช้บัญชีผู้ใช้โดยทำดังนี้
หากต้องการเปลี่ยนกลับไปใช้บัญชีผู้ใช้ ให้ป้อนคำสั่งต่อไปนี้
gcloud config set account YOUR_EMAIL_ADDRESS
9. ล้างข้อมูล
โปรดลบทรัพยากรทดสอบเพื่อหลีกเลี่ยงการเรียกเก็บเงินที่ไม่ต้องการ
# Delete the Firestore database
gcloud firestore databases delete --database=mcp-lab-db
# Remove the service account
gcloud iam service-accounts delete mcp-reader-sa@$PROJECT_ID.iam.gserviceaccount.com
10. บทสรุป
ยินดีด้วย คุณได้สำรวจฟูลสแต็กของเซิร์ฟเวอร์ MCP ที่ Google จัดการเรียบร้อยแล้ว
คุณเริ่มต้นด้วย "Trunk" ของแล็บ ซึ่งเป็นการสร้างการเชื่อมต่อพื้นฐานกับ Cloud Logging จากนั้นคุณก็แตกแขนงออกไปเป็น "การผจญภัย" แบบโมดูล ซึ่งเป็นการเชื่อมต่อแหล่งข้อมูลความรู้ของ Agent การทำให้ลูปการแก้ปัญหาที่ซับซ้อนเป็นแบบอัตโนมัติ การย้ายข้อมูลใน Firestore และการดึงข้อมูล Intelligence จาก BigQuery และ Maps
และที่สำคัญที่สุดคือ คุณปิดท้ายด้วยการยึดมั่นในรากฐานของการรักษาความปลอดภัยในการผลิต คุณพิสูจน์ให้เห็นว่าแม้ว่าเอเจนต์จะ "มีประโยชน์" จนเกินไป แต่ Google Cloud IAM ก็เป็นผู้รักษาประตูที่ยอดเยี่ยม ซึ่งช่วยให้มั่นใจได้ว่าเวิร์กโฟลว์อัตโนมัติของคุณจะยึดมั่นในหลักการให้สิทธิ์ขั้นต่ำที่สุดอยู่เสมอ
สิ่งสำคัญที่เรียนรู้
- มีการจัดการ = ปรับขนาดได้: คุณเชื่อมต่อกับเครื่องมือระดับโครงสร้างพื้นฐานผ่าน HTTP ที่สตรีมได้โดยไม่ต้องติดตั้งใช้งานเซิร์ฟเวอร์แม้แต่เครื่องเดียว
- การเชื่อมต่อแหล่งข้อมูลเป็นสิ่งจำเป็น: คุณแทนที่ "การคาดเดา" ของ LLM ด้วย MCP ความรู้ของนักพัฒนาซอฟต์แวร์ เพื่อให้มั่นใจว่า Agent ใช้คำสั่งที่ถูกต้องและเป็นปัจจุบัน
- การจัดการเป็นกลุ่มคือพลัง: คุณเห็นแล้วว่าความมหัศจรรย์ที่แท้จริงเกิดขึ้นเมื่อ Agent รวมเซิร์ฟเวอร์ MCP หลายเครื่องเพื่อแก้ปัญหาทางธุรกิจเพียงปัญหาเดียว