תחילת העבודה עם שרתי Google MCP

1. מבוא

שלום! ב-Codelab הזה תלמדו איך לשפר את סוכני ה-AI באמצעות שרתי Model Context Protocol‏ (MCP) בניהול Google.

Model Context Protocol‏ (MCP) הוא תקן בקוד פתוח שמאפשר למודלים של AI להתחבר בבטחה וביעילות למקורות נתונים ולכלים חיצוניים. ברוב ההטמעות של MCP, השרת פועל באופן מקומי במחשב, אבל Google מספקת שרתי MCP מנוהלים מרחוק. אלה נקודות קצה שמתארחות באופן מלא ומוכנות לשימוש בארגונים, ומאפשרות לסוכנים שלכם ליצור אינטראקציה ישירה עם תשתית הענן של Google Cloud בלי שתצטרכו לנהל קוד או קונטיינרים בצד השרת.

היתרון של ניהול

בניגוד לשרתי MCP מקומיים שמשתמשים בקלט/פלט רגילים (stdio), השרתים המנוהלים של Google משתמשים ב-Streamable HTTP. הארכיטקטורה הזו מציעה:

  • אפס תשתית: אין שרתים לספק או לשנות את הגודל שלהם.
  • אבטחה מובנית: שילוב מקורי עם Cloud IAM ויומני ביקורת של Google Cloud.
  • התאמה לעומס בלי שמירת מצב: אינטראקציה חלקה באמצעות מאזני עומסים ושרתי proxy רגילים.

מה תלמדו

  • איך מפעילים ומאמתים שרתי MCP מנוהלים.
  • איך משתמשים בשרת Cloud Logging MCP כבסיס.
  • איך לתזמר כמה שרתי MCP (ידע למפתחים, Firestore וכו') כדי ליצור תהליכי עבודה אוטונומיים.

הדרישות

  • פרויקט ב-Google Cloud שהחיוב בו מופעל.
  • היכרות עם מסוף Google Cloud ועם gcloud CLI.
  • Google Cloud Shell (Gemini CLI מותקן מראש כאן).

ה-Codelab הזה מיועד למשתמשים ולמפתחים בכל הרמות (כולל מתחילים).

בעיות בדיווח

יכול להיות שתיתקלו בבעיות במהלך העבודה עם Antigravity ובמהלך הלימוד באמצעות Codelab.

אם נתקלתם בבעיות שקשורות ל-codelab (שגיאות הקלדה, הוראות שגויות), אתם יכולים ללחוץ על הלחצן Report a mistake בפינה הימנית התחתונה של ה-codelab כדי לפתוח באג:

b06b582bcd847f6d.png

2. לפני שתתחיל

בשלב הזה תכינו את סביבת Google Cloud. נבצע את כל המשימות ב-Google Cloud Shell, שמספק טרמינל קבוע שהוגדר מראש.

הפעלת Cloud Shell

  1. עוברים אל מסוף Google Cloud.
  2. לוחצים על הסמל Activate Cloud Shell (הפעלת Cloud Shell) בכותרת שבפינה השמאלית העליונה.
  3. אחרי שמתחיל סשן הטרמינל, מאשרים את ההנחיה אם מתבקשים.

הגדרת מזהה הפרויקט

מוודאים ש-Cloud Shell מצביע על הפרויקט הנכון:

# Set your active project
gcloud config set project YOUR_PROJECT_ID

# Verify the setting
gcloud config list project

הפעלת ממשקי 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 beta.

הגדרת Application Default Credentials‏ (ADC)

ממשק Gemini CLI משתמש בזהות המשתמש שלכם כדי לתקשר עם שרתי MCP. נותנים לסוכן הרשאה לפעול בשמכם:

gcloud auth application-default login

עוברים לכתובת ה-URL בטרמינל, נכנסים לחשבון ומדביקים את קוד ההרשאה בחזרה ב-Cloud Shell.

הקצאת תפקידי IAM בסיסיים

שרתי MCP מנוהלים משתמשים במודל אבטחה דו-שכבתי. צריך לפתוח שני 'שערים' ספציפיים:

  1. שער 1 (גישה ל-MCP): התפקיד שמאפשר לכם לקרוא לפרוטוקול.
  2. שער 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. זהו ה "בסיס" שלנו, כי הוא מאפשר לסוכן לראות מה קורה בתוך הפרויקט בזמן אמת.

משימה 1: הגדרת שרת ה-MCP של Logging

‫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: הדמיה של פעילות בפרויקט (יצירת יומנים)

אם הפרויקט חדש או לא פעיל, יכול להיות שלא יהיו בו יומני רישום עדכניים של פעולות 'מעניינות'. נשתמש ב-CLI של gcloud כדי להוסיף כמה רשומות מותאמות אישית, כדי שיהיה לסוכן מה למצוא.

מריצים את הפקודות האלה אחת אחרי השנייה כדי לדמות רצף של אירועים:

# 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 ‏ (>), מריצים את פקודת הרשימה:

/mcp list

נקודת בידוק לאימות: צריך לראות את logging-mcp ברשימה עם הסטטוס מוכן, עם כ-6 כלים זמינים, כולל list_log_entries.

משימה 4: ההנחיה הראשונה שלכם בנושא תשתיות בשידור חי

עכשיו נבקש מהסוכן למצוא את היומנים שיצרנו. מכיוון שהענקתם את התפקיד 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. מסע א': המוח (Developer Knowledge MCP)

במהלך התהליך הזה, תעניקו לאמצעי התקשורת שלכם 'מוח' על ידי חיבור שלו לשרת ה-MCP של Google Developer Knowledge.

אחד הסיכונים הכי גדולים בשימוש בסוכני AI הוא הזיה – מתן פקודות CLI לא עדכניות או פרמטרים של API שיצאו משימוש, בביטחון מלא. שרת ה-MCP הזה פותר את הבעיה על ידי ביסוס הסוכן על מאגר של מסמכי תיעוד רשמיים ועדכניים למפתחים של 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 של Developer Knowledge משתמש במפתחות 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. מעתיקים את המחרוזת הארוכה של התווים שמוחזרת מהפקודה השנייה. זה ה-YOUR_API_KEY שלך.

משימה 3: הגדרת Gemini CLI

עכשיו צריך לרשום את שרת ה-MCP של Knowledge אצל הסוכן. כך הסוכן יכול לחפש במסמכים הרשמיים בכל פעם שהוא נתקל בשאלה טכנית שהוא לא יכול לענות עליה בוודאות של 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) כדי ליצור לולאה אוטונומית לפתרון בעיות.

במקום להעתיק קודי שגיאה למנוע חיפוש באופן ידני, תוכלו לתת לסוכן הנחיה אחת לסרוק את הפרויקט שלכם כדי למצוא שגיאות, לחפש את הפתרון הרשמי וליצור דוח תיקונים שניתן ליישום.

משימה 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 בו-זמנית.

מפעילים את 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. תוצג לכם טבלה מובנית שדומה לטבלה הזו (ההמלצות עשויות להיות שונות):

Service

סיכום השגיאות

המלצה לתיקון

Cloud Storage

שגיאה מסוג ‎403 Forbidden בהעלאה

מקצים את התפקיד roles/storage.objectCreator לחשבון השירות.

Cloud Run

ההאזנה ביציאה 8080 נכשלה

מוודאים שהאפליקציה נקשרת ל-0.0.0.0 ביציאה שמוגדרת על ידי $PORT.

Secret Manager

חסר תפקיד גישה לגרסה

מקצים את roles/secretmanager.secretAccessor לזהות.

6. מסע C: הנתונים (Firestore MCP)

במסגרת התהליך הזה, תשתמשו בשרת ה-MCP של Firestore כדי לנהל מסד נתונים של מסמכי NoSQL באמצעות שפה טבעית בלבד.

‫Firestore הוא מסד נתונים גמיש וניתן להרחבה, אבל כדי לנהל אותו צריך לכתוב קוד SDK מורכב או לנווט במסוף. בעזרת MCP, הנציג שלכם הופך לאדמין של מסד נתונים, שיכול להזין נתונים, לשלוח שאילתות לגבי רשומות ואפילו לבצע העברות מורכבות של סכימות באמצעות צ'אט.

משימה 1: הפעלת שירותי Firestore

קודם כול, מפעילים את Firestore API ואת נקודת הקצה (endpoint) המתאימה של 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. שלב ד': אינטליגנציה (BigQuery ו-Maps)

במסגרת התהליך הזה, תציידו את הסוכן ביכולת לנתח פטה-בייט של נתונים ולהבין את העולם הפיזי באמצעות שרתי BigQuery ו-Maps Grounding Lite MCP.

בסוף הקטע הזה, הסוכן יוכל לתרגם שפה טבעית לשאילתות SQL מורכבות ולספק עצות גיאו-מרחביות בהתאם להקשר (כמו זמני נסיעה ומזג אוויר) כדי שהתשובות שלו יהיו מבוססות על נתונים אמיתיים.

משימה 1: הפעלת שירותי ה-AI

מפעילים את ממשקי ה-API ואת הממשקים של MCP גם ל-BigQuery וגם למפות Google.

# 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: הקצאת מפתח Maps API

בניגוד לשירותים אחרים שמסתמכים רק על IAM, שרת Maps Grounding Lite דורש מפתח API למכסות ולחיוב.

יוצרים את המפתח:

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

עכשיו, רושמים את שני השרתים. מוסיפים את קטעי הקוד שלמטה לקטע 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: שימוש בתכונות מבוססות-AI

מפעילים את Gemini CLI ובודקים את היכולות החדשות של 'אינטליגנציה'.

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: הקשר גיאוספציאלי (מפות) מבקשים מהסוכן לתכנן נסיעה בעולם האמיתי:

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 כדי לגלות את הסכימה ולהריץ את השאילתה.
  • במקרה של מפות Google, הוא יארגן את lookup_weather ויחשב מסלולים כדי לספק לכם תוכנית נסיעה מבוססת ומועילה.

8. הקשחה: אבטחה ו-IAM בסביבת ייצור

בשלב האחרון הזה, תעברו משימוש בהרשאות רחבות של 'בעלים' למודל הגנה מעמיקה ברמת הייצור.

סוכני AI הם "מועילים" מטבעם. אם מגבילים כלי ברמת ממשק המשתמש, סוכן חכם עשוי לנסות לעקוף את ההגבלה הזו על ידי הפעלת פקודת מעטפת במקום זאת. כדי לאבטח את התשתית באמת, צריך ליצור גבולות ברורים באמצעות Google Cloud IAM.

מודל האבטחה הדו-שכבתי

כדי לבצע פעולה כלשהי, סוכן צריך לעבור דרך שני שערים:

  1. שער 1 (שער ה-MCP): האם לישות יש roles/mcp.toolUser? (הרשאה לשימוש בפרוטוקול).
  2. שער 2 (שער השירות): האם לזהות יש תפקיד ספציפי במוצר (למשל roles/datastore.viewer)? (הרשאה לראות את הנתונים).

משימה 1: שכבה 1 – סינון בצד הלקוח (excludeTools)

שכבת ההגנה הראשונה היא הסתרת הכלים מהנציג, כדי שהוא אפילו לא "יחשוב" להשתמש בהם.

  1. פותחים את ההגדרות של Gemini CLI ב-Cloud Shell Editor:
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: בדיקת הניתוב של סוכן מועיל

עכשיו נבדוק אם הסוכן יכול לעקוף את האבטחה שלנו.

השלב הראשון הוא להפעיל את חשבון השירות, כדי שגם אם הסוכן יחזור להשתמש בפקודה 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 הוא קו ההגנה האחרון. לא משנה איך הסוכן מנסה להגיע למשאב, ה-Bouncer ברמת Google Cloud API יחסום את הבקשה.

כדי לחזור לחשבון המשתמש:

כדי לחזור לחשבון המשתמש, מריצים את הפקודה הבאה:

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.

התחלתם עם החלק המרכזי של שיעור ה-Lab, ויצרתם חיבור בסיסי ל-Cloud Logging. משם התרחבתם ל'הרפתקאות' מודולריות – ביסוס הידע של הסוכן, אוטומציה של לולאות מורכבות לפתרון בעיות, העברת נתונים ב-Firestore וחילוץ תובנות מ-BigQuery ומ-מפות Google.

והכי חשוב, סיימתם בהצגת הסוכן בשורשים של אבטחת הייצור. הוכחתם שאף על פי שאפשר להגדיר סוכן כ "מועיל" מדי, Google Cloud IAM הוא המאבטח האולטימטיבי, שמבטיח שתהליכי העבודה האוטונומיים שלכם תמיד יפעלו בהתאם לעיקרון ההרשאה המינימלית.

נקודות עיקריות

  • מנוהל = ניתן להרחבה: התחברתם לכלים ברמת התשתית באמצעות HTTP שניתן להזרמה בלי לפרוס שרת אחד.
  • עיגון במציאות הוא חובה: החלפתם את הניחושים של ה-LLM ב-MCP של הידע למפתחים, כדי להבטיח שהסוכן ישתמש בפקודות עדכניות ותקפות.
  • התיאום הוא העוצמה: ראיתם שהקסם האמיתי קורה כשסוכן משלב כמה שרתים של MCP כדי לפתור בעיה עסקית אחת.