אירוח שרתים של 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. נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud 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

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud 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

  5. Verify that billing is enabled for your Google Cloud project.

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

    המסוף

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

      כניסה לדף 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 במספר הפרויקט ב- Google Cloud .
    • ‫PROJECT_ID במזהה הפרויקט ב- Google Cloud .
    • PRINCIPAL עם החשבון שאליו מוסיפים את הקישור. בדרך כלל זו כתובת האימייל שמשמשת לפריסת השירות של Cloud Run.
    • ‫ROLE בתפקיד שאתם מוסיפים לחשבון הפריסה.
  9. למחירון של 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.

מקורות

אפשר לפרוס ב-Cloud Run שרתי MCP מרוחקים שלא מסופקים כקובצי אימג' של קונטיינרים מהמקורות שלהם, במיוחד אם הם כתובים ב-Node.js או ב-Python.

  1. משכפלים את מאגר Git של שרת ה-MCP:

    git clone https://github.com/ORGANIZATION/REPOSITORY.git

  2. עוברים לתיקיית הבסיס של שרת ה-MCP:

    cd REPOSITORY

  3. פורסים ב-Cloud Run באמצעות הפקודה הבאה ב-CLI של gcloud:

    gcloud run deploy --source .

אחרי שפורסים את שרת ה-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 באזור Google Cloudשבו פרסתם את השירות. לדוגמה, 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 של *.run.app בשירות המקבל, אלא אם אתם משתמשים בקהלים בהתאמה אישית. אתם צריכים גם לכלול את טוקן המזהה בבקשות של הלקוח, כמו 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.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: Google Cloud האזור שבו רוצים לפרוס את השירות, לדוגמה europe-west1

    עדכון

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

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

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

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

    • ‫REGION: Google Cloud האזור שבו פרסתם את השירות, לדוגמה 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 נפרדים, קראו את המאמר אימות בין שירותים.

שימוש ב-Cloud Service Mesh

סוכן שמארח לקוח MCP יכול להתחבר לשרת MCP מרוחק באמצעות Cloud Service Mesh. שימוש ב-Service mesh מפשט את התזמור של מיקרו-שירותים, כי הוא מטפל באימות ובניהול תעבורת נתונים באופן אוטומטי.

אפשר להגדיר לשירות של שרת ה-MCP שם מקוצר ברשת, והלקוח של ה-MCP יכול לתקשר עם שרת ה-MCP באמצעות השם המקוצר http://mcp-server. האימות מנוהל על ידי הרשת.

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