אירוח שרתים של MCP ב-Cloud Run

במדריך הזה נסביר איך לארח שרת Model Context Protocol ‏ (MCP) עם העברת HTTP שניתנת להזרמה ב-Cloud Run, ונספק הנחיות לאימות לקוחות MCP. אם אתם משתמשים חדשים ב-MCP, כדאי לקרוא את המקורות הבאים:

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

אתם יכולים לארח לקוחות ושרתים של MCP באותו מחשב מקומי, לארח לקוח MCP באופן מקומי ולגרום לו לתקשר עם שרתי MCP מרוחקים שמתארחים בפלטפורמת ענן כמו Cloud Run, או לארח גם את הלקוח וגם את השרת של MCP בפלטפורמת ענן.

ב-Cloud Run יש תמיכה באירוח של שרתי MCP עם העברת HTTP בסטרימינג, אבל לא בשרתי MCP עם העברת stdio.

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

שרת MCP מתקשר עם סוכן AI באמצעות לקוח MCP.
איור 1.שרת ה-MCP שמתארח ב-Cloud Run יוצר אינטראקציה עם לקוח ה-MCP, שיוצר אינטראקציה עם סוכן ה-AI.

ההנחיות בדף הזה רלוונטיות אם אתם מפתחים שרת MCP משלכם או אם אתם משתמשים בשרת MCP קיים.

לפני שמתחילים

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. הגדרת סביבת הפיתוח של Cloud Run בפרויקט ב- Cloud de Confiance .
  4. מוודאים שיש לכם את ההרשאות המתאימות לפריסת שירותים, ושהתפקידים אדמין ב-Cloud Run ‏ (roles/run.admin) ומשתמש בחשבון שירות ‏ (roles/iam.serviceAccountUser) הוקצו לחשבון שלכם.
  5. איך מקצים את התפקידים

    המסוף

    1. נכנסים לדף IAM במסוף Cloud de Confiance .

      כניסה לדף IAM
    2. בוחרים את הפרויקט.
    3. לוחצים על Grant access.
    4. בשדה New principals, מזינים את מזהה המשתמש. בדרך כלל זו כתובת האימייל שמשמשת לפריסת שירות Cloud Run.

    5. בוחרים תפקיד מהרשימה Select a role.
    6. כדי להקצות עוד תפקידים, לוחצים על Add another role ומוסיפים את כולם.
    7. לוחצים על Save.

    gcloud

    כדי להקצות לחשבון את תפקידי ה-IAM הנדרשים בפרויקט:

       gcloud projects add-iam-policy-binding PROJECT_ID \
           --member=PRINCIPAL \
           --role=ROLE
       

    מחליפים את:

    • מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Cloud de Confiance .
    • ‫PROJECT_ID במזהה הפרויקט ב- Cloud de Confiance .
    • PRINCIPAL עם החשבון שאליו מוסיפים את הקישור. בדרך כלל זו כתובת האימייל שמשמשת לפריסת השירות של Cloud Run.
    • ‫ROLE בתפקיד שאתם מוסיפים לחשבון הפריסה.
  6. אפשר לעיין במחירון של Cloud Run או להשתמש במחשבון התמחור כדי לקבל הערכה של העלויות.

אירוח שרתי MCP מרוחקים של SSE או HTTP שניתנים להזרמה

שרתי MCP שמשתמשים באירועים שנשלחים מהשרת (SSE) או בתעבורת HTTP בסטרימינג יכולים להתארח מרחוק מהלקוחות שלהם ב-MCP.

כדי לפרוס שרת MCP מסוג כזה ל-Cloud Run, אפשר לפרוס את שרת ה-MCP כקובץ אימג' של קונטיינר או כקוד מקור (בדרך כלל Node.js או Python), בהתאם לאופן האריזה של שרת ה-MCP.

קובצי אימג' של קונטיינרים

שרתי MCP מרוחקים שמופצים כקובצי אימג' של קונטיינרים הם שרתי אינטרנט שמאזינים לבקשות HTTP ביציאה ספציפית. כלומר, הם פועלים בהתאם לחוזה זמן הריצה של הקונטיינר של Cloud Run, ואפשר לפרוס אותם בשירות Cloud Run.

כדי לפרוס שרת MCP שנארז כקובץ אימג' של קונטיינר, צריך את כתובת ה-URL של קובץ האימג' של קונטיינר ואת היציאה שדרכה השרת אמור לקבל בקשות. אפשר לפרוס אותם באמצעות הפקודה הבאה ב-CLI של gcloud:

gcloud run deploy --image IMAGE_URL --port PORT

מחליפים את:

  • ‫IMAGE_URL בכתובת ה-URL של קובץ אימג' של קונטיינר, לדוגמה us-docker.pkg.dev/cloudrun/container/mcp.
  • PORT עם היציאה שבה הוא מאזין, לדוגמה 3000.

אחרי שפורסים את שרת ה-MCP של HTTP ב-Cloud Run, השרת מקבל כתובת URL מסוג HTTPS והתקשורת יכולה להשתמש בתמיכה המובנית של Cloud Run בהזרמת תגובות HTTP.

אימות לקוחות MCP לסוכני AI

בהתאם למקום שבו מתארח לקוח ה-MCP, אפשר לעיין בקטע שרלוונטי לכם:

אימות של לקוחות MCP מקומיים

אם סוכן ה-AI שמארח את לקוח ה-MCP פועל במחשב מקומי, משתמשים באחת מהשיטות הבאות כדי לאמת את לקוח ה-MCP:

מידע נוסף זמין במפרט של MCP בנושא אימות.

הרשאת הפעלה ב-IAM

כברירת מחדל, כדי לגשת לכתובת ה-URL של שירותי Cloud Run, צריך לאשר את כל הבקשות באמצעות תפקיד ה-IAM‏ Cloud Run Invoker‏ (roles/run.invoker). קישור מדיניות ה-IAM הזה מבטיח שנעשה שימוש במנגנון אבטחה חזק כדי לאמת את לקוח ה-MCP המקומי.

אחרי שפורסים את שרת ה-MCP לשירות Cloud Run באזור מסוים, מריצים את ה-proxy של Cloud Run במחשב המקומי כדי לחשוף בצורה מאובטחת את שרת ה-MCP המרוחק ללקוח באמצעות פרטי הכניסה שלכם:

gcloud run services proxy MCP_SERVER_NAME --region REGION --port=3000

מחליפים את:

  • ‫MCP_SERVER_NAME מחליפים בשם של שירות Cloud Run.
  • REGION באזור Cloud de Confiance by S3NSשבו פרסתם את השירות. לדוגמה, europe-west1.

הפקודה של שרת ה-proxy של Cloud Run יוצרת שרת proxy מקומי ביציאה 3000 שמעביר בקשות לשרת ה-MCP המרוחק ומזריק את הזהות שלכם.

מעדכנים את קובץ התצורה של MCP בלקוח ה-MCP באמצעות הפרטים הבאים:

{
  "mcpServers": {
    "cloud-run": {
      "url": "http://localhost:3000/sse"
    }
  }
}

אם לקוח ה-MCP שלכם לא תומך במאפיין url, אתם יכולים להשתמש בחבילת ה-npm של mcp-remote:

{
  "mcpServers": {
    "cloud-run": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "http://localhost:3000/sse"
      ]
    }
  }
}

טוקן של מזהה OIDC

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

אתם יכולים להשתמש בספריות אימות שונות של Google כדי לקבל טוקן של מזהה מסביבת זמן הריצה, למשל Google Auth Library for Python. האסימון הזה חייב לכלול את הצהרת הקהל הנכונה שתואמת לכתובת ה-URL של *.s3nsrun.fr בשירות המקבל, אלא אם אתם משתמשים בקהלים בהתאמה אישית. אתם צריכים גם לכלול את טוקן המזהה בבקשות של הלקוח, כמו Authorization: Bearer <token value>.

אם לקוח ה-MCP לא חושף כותרות או תעבורה, צריך להשתמש בשיטת אימות אחרת.

אימות לקוחות MCP מקומיים באמצעות IAP

בקטע הזה מוסבר איך לאמת לקוחות MCP מקומיים שפועלים ב-Cloud Run.

כדי ליצור את מדיניות הכניסה:

  1. מקצים את התפקיד "הפעלת Cloud Run"‏ (roles/run.invoker) לסוכן השירות של IAP.

    gcloud run services add-iam-policy-binding SERVICE_NAME \
        --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-iap.s3ns-system.iam.gserviceaccount.com' \
        --role='roles/run.invoker'
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫SERVICE_NAME: השם של השירות שרוצים להוסיף לו את קישור המדיניות

    • ‫PROJECT_NUMBER: מספר הפרויקט שמכיל את השירות

  2. מפעילים את IAP בשירות Cloud Run.

    יצירה

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

    gcloud run deploy SERVICE_NAME --image=MCP_SERVER_IMAGE
      --functional-type=MCP_SERVER \
      --region=REGION \
      --iap
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫SERVICE_NAME: השם של השירות שרוצים להוסיף לו את קישור המדיניות

    • ‫MCP_SERVER_IMAGE: הנתיב של קובץ האימג' של שרת ה-MCP

    • ‫REGION: Cloud de Confiance האזור שבו רוצים לפרוס את השירות, לדוגמה europe-west1

    עדכון

    כדי להפעיל אימות IAP לשירות קיים, מריצים את הפקודה הבאה:

    gcloud run services update SERVICE_NAME \
      --region=REGION \
      --functional-type=MCP_SERVER \
      --iap
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫SERVICE_NAME: שם השירות שרוצים לעדכן

    • ‫REGION: Cloud de Confiance by S3NS האזור שבו פרסתם את השירות, לדוגמה europe-west1

אימות של לקוחות MCP שפועלים ב-Cloud Run

אם סוכן ה-AI שמארח את לקוח ה-MCP פועל ב-Cloud Run, אתם יכולים להשתמש באחת מהשיטות הבאות כדי לאמת את לקוח ה-MCP:

פריסת שרת ה-MCP כ-sidecar

אפשר לפרוס את שרת ה-MCP כ-sidecar במקום שבו לקוח ה-MCP פועל.

לא נדרש אימות ספציפי לתרחיש השימוש הזה, כי לקוח ה-MCP ושרת ה-MCP נמצאים באותו מופע. הלקוח יכול להתחבר לשרת ה-MCP באמצעות יציאה ב-http://localhost:PORT. מחליפים את הערך PORT ביציאה אחרת מזו שמשמשת לשליחת בקשות לשירות Cloud Run.

אימות בין שירותים

אם שרת ה-MCP ולקוח ה-MCP פועלים כשירותים נפרדים של Cloud Run, כדאי לעיין במאמר בנושא אימות בין שירותים.

המאמרים הבאים