1. บทนำ
ยินดีต้อนรับ ใน Codelab นี้ คุณจะได้เรียนรู้วิธีเพิ่มประสิทธิภาพให้ Agent AI โดยใช้เซิร์ฟเวอร์ Model Context Protocol (MCP) ที่มีการจัดการของ Google
Model Context Protocol (MCP) เป็นมาตรฐานโอเพนซอร์สที่ช่วยให้โมเดล AI เชื่อมต่อกับแหล่งข้อมูลและเครื่องมือภายนอกได้อย่างปลอดภัยและมีประสิทธิภาพ แม้ว่าการติดตั้งใช้งาน MCP ส่วนใหญ่จะทำงานในเครื่องของคุณ แต่ Google ก็มีเซิร์ฟเวอร์ MCP ระยะไกลที่มีการจัดการ ซึ่งเป็นปลายทางที่โฮสต์อย่างเต็มรูปแบบและพร้อมใช้งานระดับองค์กรที่ช่วยให้ตัวแทนโต้ตอบกับโครงสร้างพื้นฐานของระบบคลาวด์ของ Google ได้โดยตรงโดยที่คุณไม่ต้องจัดการโค้ดหรือคอนเทนเนอร์ฝั่งเซิร์ฟเวอร์
ข้อดีของ "จัดการแล้ว"
เซิร์ฟเวอร์ที่มีการจัดการของ Google ใช้ Streamable 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 การเปิดใช้บริการจะทำให้ระบบเปิดใช้ส่วนติดต่อ MCP พื้นฐานสำหรับบริการด้วย
เรียกใช้คำสั่งต่อไปนี้เพื่อเปิดใช้แบ็กเอนด์ Cloud Logging (พื้นฐานสำหรับแล็บนี้)
# Enable the Cloud Logging API and its MCP interface
gcloud services enable logging.googleapis.com
หมายเหตุ: ขณะนี้บริการ MCP ที่มีการจัดการอยู่ในเวอร์ชันเบต้า คุณต้องใช้คอมโพเนนต์ gcloud เบต้าเพื่อเปิดใช้
ตั้งค่าข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน (ADC)
Gemini CLI ใช้ข้อมูลประจำตัวของผู้ใช้เพื่อสื่อสารกับเซิร์ฟเวอร์ MCP ให้สิทธิ์ Agent ดำเนินการในนามของคุณโดยทำดังนี้
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 นี่คือ "รากฐาน" ของเราเนื่องจากช่วยให้ Agent เห็นสิ่งที่เกิดขึ้นภายในโปรเจ็กต์ของคุณแบบเรียลไทม์
งานที่ 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: พรอมต์โครงสร้างพื้นฐานของไลฟ์สดครั้งแรก
ตอนนี้เรามาขอให้ Agent ค้นหาบันทึกที่เราเพิ่งสร้างกัน เนื่องจากคุณได้ให้บทบาท roles/logging.viewer ไปก่อนหน้านี้ ตอนนี้เอเจนต์จึงสามารถ "ติดต่อ" และอ่านสถานะโปรเจ็กต์ของคุณได้
พิมพ์พรอมต์ต่อไปนี้ลงใน 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
ความเสี่ยงที่ใหญ่ที่สุดอย่างหนึ่งของเอเจนต์ 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: จัดสรรคีย์ 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: การทดสอบการป้องกันไม่ให้โมเดลหลอน
มาตรวจสอบกันว่าตอนนี้เอเจนต์ "ค้นคว้า" แทนที่จะ "คาดเดา" แล้ว
เปิดใช้ Gemini CLI
gemini
ตรวจสอบว่าเซิร์ฟเวอร์พร้อมแล้วโดยพิมพ์ /mcp list คุณควรเห็น google-developer-knowledge พร้อมเครื่องมือ 2 อย่าง (search_documents, get_document)
พรอมต์: ขอให้เอเจนต์ค้นหาคำสั่งที่เฉพาะเจาะจงและทันสมัย
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
พิมพ์ "พรอมต์หลัก" นี้ลงในเอเจนต์
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 |.
สิ่งที่จะเกิดขึ้น
ตอนนี้คุณกำลังดูเวิร์กโฟลว์ของเอเจนต์แบบเรียลไทม์ ตัวแทนจะทำสิ่งต่อไปนี้
- โทรหา
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: มอบหมายบทบาท 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 ลงใน Agent เพิ่มการกำหนดค่าต่อไปนี้ลงในส่วน 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: การดำเนินการ DB ด้วยภาษาธรรมชาติ
เปิดใช้ 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: เปิดใช้บริการ Intelligence
เปิดใช้ API และอินเทอร์เฟซ MCP สำหรับทั้ง BigQuery และ Google Maps
# 1. Enable product APIs
gcloud services enable bigquery.googleapis.com 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) ขอให้ Agent วางแผนการเดินทางในโลกจริง
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. การปิดช่องโหว่: การรักษาความปลอดภัยในสภาพแวดล้อมการผลิตและ IAM
ในขั้นตอนสุดท้ายนี้ คุณจะเปลี่ยนจากการใช้สิทธิ์ "เจ้าของ" แบบกว้างไปเป็นโมเดลการป้องกันแบบหลายชั้นระดับการใช้งานจริง
AI Agent มี "ประโยชน์" โดยธรรมชาติ หากคุณจำกัดเครื่องมือที่ระดับ UI เอเจนต์อัจฉริยะอาจพยายามหลีกเลี่ยงข้อจำกัดนั้นด้วยการเรียกใช้คำสั่งเชลล์แทน หากต้องการรักษาความปลอดภัยของโครงสร้างพื้นฐานอย่างแท้จริง คุณต้องสร้างขอบเขตที่เข้มงวดโดยใช้ Google Cloud IAM
โมเดลการรักษาความปลอดภัยแบบ 2 ชั้น
หากต้องการดำเนินการใดๆ เอเจนต์จะต้องผ่าน 2 ประตูต่อไปนี้
- ด่านที่ 1 (ด่าน MCP): ข้อมูลประจำตัวมี
roles/mcp.toolUserไหม (สิทธิ์ในการใช้โปรโตคอล) - ด่านที่ 2 (ด่านบริการ): ข้อมูลประจำตัวมีบทบาทผลิตภัณฑ์ที่เฉพาะเจาะจง (เช่น
roles/datastore.viewer) หรือไม่ (สิทธิ์ในการดูข้อมูล)
งานที่ 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 "ตัวแทนที่ให้ความช่วยเหลือ"
ตอนนี้เรามาทดสอบว่าเอเจนต์จะหลบเลี่ยงการรักษาความปลอดภัยของเราได้หรือไม่
ขั้นตอนแรกของเราคือการเปิดใช้งานบัญชีบริการ เพื่อให้แม้ว่าตัวแทนจะกลับไปใช้คำสั่ง 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 เป็นการป้องกันขั้นสุดท้าย ไม่ว่า Agent จะพยายามเข้าถึงทรัพยากรด้วยวิธีใด "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 จากนั้นคุณก็แตกแขนงออกไปเป็น "การผจญภัย" แบบแยกส่วน ซึ่งเป็นการวางรากฐานความรู้ของเอเจนต์ การทำงานลูปการแก้ปัญหาที่ซับซ้อนโดยอัตโนมัติ การย้ายข้อมูลใน Firestore และการดึงข้อมูลเชิงลึกจาก BigQuery และ Maps
และที่สำคัญที่สุด คุณได้ปิดท้ายด้วยการยึดมั่นในรากฐานของการรักษาความปลอดภัยในการผลิต คุณพิสูจน์ให้เห็นว่าแม้ว่าเอเจนต์จะ "มีประโยชน์" จนเกินไป แต่ Google Cloud IAM ก็เป็นผู้รักษาประตูที่ยอดเยี่ยม ซึ่งช่วยให้มั่นใจได้ว่าเวิร์กโฟลว์อัตโนมัติของคุณจะยึดมั่นในหลักการให้สิทธิ์ขั้นต่ำที่สุดอยู่เสมอ
สิ่งสำคัญที่เรียนรู้
- มีการจัดการ = ปรับขนาดได้: คุณเชื่อมต่อกับเครื่องมือระดับโครงสร้างพื้นฐานผ่าน HTTP ที่สตรีมได้โดยไม่ต้องติดตั้งใช้งานเซิร์ฟเวอร์แม้แต่เครื่องเดียว
- การอ้างอิงเป็นสิ่งจำเป็น: คุณแทนที่ "การคาดเดา" ของ LLM ด้วย MCP ความรู้ของนักพัฒนาซอฟต์แวร์ เพื่อให้มั่นใจว่าเอเจนต์จะใช้คำสั่งที่ถูกต้องและเป็นปัจจุบัน
- การประสานงานคือพลัง: คุณจะเห็นว่าความมหัศจรรย์ที่แท้จริงเกิดขึ้นเมื่อเอเจนต์รวมเซิร์ฟเวอร์ MCP หลายเครื่องเพื่อแก้ปัญหาทางธุรกิจเพียงปัญหาเดียว