เริ่มต้นใช้งานเซิร์ฟเวอร์ MCP ของ Google

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 และ gcloud CLI
  • Google Cloud Shell (ติดตั้ง Gemini CLI ไว้ล่วงหน้าแล้วที่นี่)

Codelab นี้ออกแบบมาสำหรับผู้ใช้และนักพัฒนาซอฟต์แวร์ทุกระดับ (รวมถึงผู้เริ่มต้น)

การรายงานปัญหา

คุณอาจพบปัญหาขณะทำ Codelab และใช้ Antigravity

หากพบปัญหาที่เกี่ยวข้องกับ Codelab (การสะกดผิด คำสั่งที่ไม่ถูกต้อง) โปรดเปิดข้อบกพร่องโดยใช้ปุ่ม Report a mistake ที่มุมล่างซ้ายของ Codelab นี้

b06b582bcd847f6d.png

2. ก่อนที่คุณจะเริ่มต้น

ในขั้นตอนนี้ คุณจะได้เตรียมสภาพแวดล้อม Google Cloud เราจะดำเนินการทุกอย่างภายใน Google Cloud Shell ซึ่งมีเทอร์มินัลที่กำหนดค่าไว้ล่วงหน้าและทำงานอย่างต่อเนื่อง

เปิดใช้งาน Cloud Shell

  1. ไปที่ คอนโซล Google Cloud
  2. คลิกไอคอนเปิดใช้งาน Cloud Shell ในส่วนหัวด้านขวาบน
  3. เมื่อเซสชันเทอร์มินัลเริ่มต้นแล้ว ให้ให้สิทธิ์พรอมต์หากระบบขอ

ตั้งค่ารหัสโปรเจ็กต์

ตรวจสอบว่า 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 บานที่ต้องได้รับการตรวจสอบที่ประตูหรือเพื่อให้ประตูเปิด

  1. Gate 1 (สิทธิ์เข้าถึง MCP): บทบาทที่ช่วยให้คุณเรียกโปรโตคอลได้
  2. 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?

สังเกตการณ์ตัวแทน:

  1. เอเจนต์อาจแจ้งให้คุณระบุรหัสโปรเจ็กต์ Google Cloud โปรดระบุข้อมูลดังกล่าว
  2. โดยจะระบุว่าต้องใช้list_log_entries
  3. โดยจะขอสิทธิ์จากคุณเพื่อเรียกใช้เครื่องมือ เลือก 1. ใช่ อนุญาตครั้งเดียว
  4. โดยจะแยกวิเคราะห์การตอบกลับ 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 นี้เท่านั้น

  1. เรียกใช้สคริปต์ต่อไปนี้เพื่อสร้างและเรียกคีย์
# 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)"
  1. คัดลอกสตริงอักขระแบบยาวที่คำสั่งที่ 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 เพื่อแทรกอุปสรรคด้านโครงสร้างพื้นฐานต่างๆ ตั้งแต่ข้อผิดพลาด "ปฏิเสธสิทธิ์" ไปจนถึงปัญหาโควต้า ลงในบันทึกโดยตรง

  1. สร้างโฟลเดอร์ที่คุณต้องการใน Cloud Shell แล้วไปที่โฟลเดอร์นั้น
  2. สร้างไฟล์ชื่อ simulate_errors.py
nano simulate_errors.py
  1. วางโค้ดต่อไปนี้ลงในตัวแก้ไข
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)
  1. กด Ctrl+O, Enter และ Ctrl+X เพื่อบันทึกและออก
  2. ติดตั้งไลบรารี 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 |.

สิ่งที่จะเกิดขึ้น

ตอนนี้คุณกำลังดูเวิร์กโฟลว์ของเอเจนต์แบบเรียลไทม์ ตัวแทนจะทำสิ่งต่อไปนี้

  1. โทรหา list_log_entries เพื่อดู "วันที่แย่" ที่เราเพิ่งจำลอง
  2. วิเคราะห์ข้อความเพื่อระบุว่า GCS, Cloud Run และ Secret Manager ทำงานไม่สำเร็จ
  3. โทรหา search_documents และ get_document สำหรับแต่ละบริการเพื่อค้นหาบทบาท IAM ที่ถูกต้องหรือการแก้ไขการกำหนดค่า
  4. แสดงตารางที่มีโครงสร้างซึ่งมีลักษณะคล้ายกับตารางนี้ (คำแนะนำอาจแตกต่างกัน)

บริการ

สรุปข้อผิดพลาด

การแก้ไขที่แนะนำ

Cloud Storage

403 Forbidden เมื่ออัปโหลด

ให้สิทธิ์ roles/storage.objectCreator แก่บัญชีบริการ

Cloud Run

ฟังบนพอร์ต 8080 ไม่สำเร็จ

ตรวจสอบว่าแอปเชื่อมโยงกับ 0.0.0.0 ในพอร์ตที่กำหนดโดย $PORT

Secret Manager

ไม่มีบทบาทการเข้าถึงเวอร์ชัน

กำหนด roles/secretmanager.secretAccessor ให้กับข้อมูลประจำตัว

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. ด่านที่ 1 (ด่าน MCP): ข้อมูลประจำตัวมี roles/mcp.toolUser ไหม (สิทธิ์ในการใช้โปรโตคอล)
  2. ด่านที่ 2 (ด่านบริการ): ข้อมูลประจำตัวมีบทบาทผลิตภัณฑ์ที่เฉพาะเจาะจง (เช่น roles/datastore.viewer) หรือไม่ (สิทธิ์ในการดูข้อมูล)

งานที่ 1: เลเยอร์ 1 - การกรองฝั่งไคลเอ็นต์ (excludeTools)

ด่านแรกของการป้องกันคือการซ่อนเครื่องมือจากเอเจนต์เพื่อไม่ให้เอเจนต์ "คิด" ที่จะใช้เครื่องมือเหล่านั้น

  1. เปิดการตั้งค่า Gemini CLI ในโปรแกรมแก้ไข Cloud Shell โดยทำดังนี้
cloudshell edit ~/.gemini/settings.json
  1. ค้นหาบล็อก 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.

จะเกิดอะไรขึ้น

  1. โดยเอเจนต์จะพยายามใช้เครื่องมือ delete_database ในเซิร์ฟเวอร์ MCP ของ Firestore ก่อน การดำเนินการจะล้มเหลวเนื่องจากไม่มีสิทธิ์
  2. จากนั้นจะพยายาม "ช่วยเหลือ" โดยกลับไปใช้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 หลายเครื่องเพื่อแก้ปัญหาทางธุรกิจเพียงปัญหาเดียว