אירוח שרתים של 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.

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

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

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

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

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

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

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

כברירת מחדל, כתובת ה-URL של שירותי Cloud Run דורשת שכל הבקשות יאושרו באמצעות התפקיד Cloud Run Invoker ‏(roles/run.invoker) ב-IAM. קישור מדיניות ה-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 נפרדים, קראו את המאמר אימות בין שירותים.

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