אירוח שרתים של 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 Admin ‏ (roles/run.admin) ו-Service Account User ‏ (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 עם התפקיד שאתם מוסיפים לחשבון של כלי הפריסה.

אירוח שרתי 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 מרוחקים שלא מסופקים כקובצי אימג' בקונטיינר ב-Cloud Run מהמקורות שלהם, במיוחד אם הם כתובים ב-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 .

אחרי שפורסים את שרת ה-MCP של HTTP ב-Cloud Run, שרת ה-MCP מקבל כתובת 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 עם 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 שפועלים ב-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. האימות מנוהל על ידי הרשת.

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