מדריך MCP בעברית

פרק 3

שתי התעבורות

פרוטוקול MCP מבוסס על הודעות בתקן JSON-RPC 2.0. כדי שהודעות אלו יעברו בצורה אמינה בין המארח (Host) לבין השרת (Server), המפרט מגדיר שני אפיקי תעבורה (Transports) רשמיים:

  1. תעבורת stdio (תהליך מקומי)
  2. תעבורת Streamable HTTP (שרת מרוחק ברשת)

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

תעבורת stdio (תהליך מקומי):
+---------------------+     stdin / stdout     +---------------------+
|      MCP Host       | <====================> |  Local Process      |
| (Claude Code, Grok) |  (JSON-RPC per line)   | (Node.js / Python)  |
+---------------------+                        +---------------------+

תעבורת Streamable HTTP (שרת מרוחק):
+---------------------+     HTTP POST + SSE    +---------------------+
|      MCP Host       | <====================> |  Remote Web Server  |
| (Claude Code, Grok) |  (Auth Headers / OAuth)| (Cloud / SaaS / API)|
+---------------------+                        +---------------------+

#1. תעבורת stdio (תהליך מקומי)

בתעבורת stdio, אפליקציית המארח מפעילה תוכנית מקומית כתהליך בן (Subprocess) ומתקשרת איתה ישירות דרך ערוצי הקלט הסטנדרטי והפלט הסטנדרטי של מערכת ההפעלה:

  • המארח כותב הודעת בקשת JSON-RPC לערוץ ה-stdin של השרת.
  • השרת קורא את הבקשה, מבצע את הפעולה ומחזיר את תשובת ה-JSON-RPC דרך ערוץ ה-stdout.
  • כל הודעה מועברת בשורה יחידה (Newline-delimited JSON).

#דוגמאות להוספת שרת stdio

הוספה ב-Grok CLI:

grok mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem /workspace/project

הוספה ב-Claude Code:

claude mcp add --transport stdio airtable -- npx -y airtable-mcp-server

הוספה עם משתנה סביבה ייעודי (לדוגמה חיבור ל-PostgreSQL):

claude mcp add --env DATABASE_URL=postgres://user:pass@localhost:5432/mydb --transport stdio pg -- npx -y @modelcontextprotocol/server-postgres

#החשיבות המכרעת של מפריד המקפים הכפול (--)

שימו לב לתו -- המופיע בפקודות:

  • כל הדגלים שנכתבים לפני ה--- שייכים ללקוח ה-CLI עצמו (כמו --transport stdio או --env).
  • כל הפקודות והארגומנטים שנכתבים אחרי ה--- מועברים כפי שהם לתהליך שמופעל (למשל npx -y package-name /path).
  • אם תשמיטו את ה---, כלי ה-CLI ינסה לפענח את הדגלים של השרת כדגלים פנימיים שלו, וההפעלה תיכשל.

#יתרונות וחסרונות של stdio

יתרונות:

  • זמן תגובה מיידי ללא תקורת רשת.
  • בידוד מלא: התהליך רץ על המכונה שלכם ואינו נגיש לרשת חיצונית.
  • אין צורך לפתוח פורטים, להגדיר חומות אש או לנהל תעודות SSL.

חסרונות:

  • דורש שסביבת ההרצה (Node.js או Python) תהיה מותקנת מקומית על המחשב.
  • הפעלה ראשונית של חבילות דרך npx עשויה לקחת כמה שניות (הפעלה קרה).
  • קשה לשתף ישירות בין מחשבים שונים בצוות אם הנתיבים המקומיים אינם זהים.

#2. תעבורת Streamable HTTP (שרת מרוחק)

תעבורת Streamable HTTP מיועדת לשרתים שרצים בענן, בתוך רשת ארגונית פנימית, או כשירותי SaaS של צד שלישי (כגון Sentry או Linear).

בתעבורה זו:

  • המארח שולח בקשות HTTP POST אל נקודת הקצה (Endpoint) של השרת.
  • השרת יכול להזרים תשובות בזמן אמת באמצעות מנגנון Server-Sent Events (SSE).
  • האימות מתבצע באמצעות כותרות HTTP סטנדרטיות (Bearer Token, API Keys) או דרך זרימת OAuth 2.0 אינטראקטיבית.

#דוגמאות להוספת שרת HTTP

הוספה ב-Claude Code עבור שירות ענן עם אימות טוקן:

claude mcp add --transport http sentry https://mcp.sentry.dev/mcp \
  --header "Authorization: Bearer sntrys_your_token_here"

הוספה ב-Grok CLI עם אימות OAuth (נפתח דפדפן לאישור):

grok mcp add --transport http linear https://mcp.linear.app/mcp

הוספה של שרת פנימי הרץ על שרת ארגוני מאובטח:

claude mcp add --transport http n8n https://n8n.internal.example.com/mcp-server/http \
  --header "X-N8N-API-KEY: secret_key_123"

#השוואה מסכמת: stdio מול Streamable HTTP

מאפייןתעבורת stdioתעבורת Streamable HTTP
מיקום השרתמקומי על המחשב (Subprocess)מרוחק בענן או שרת ברשת
ערוץ תקשורתStandard I/O (צינורות מערכת הפעלה)רשת (HTTP POST + SSE)
מנגנון אימותהרשאות המשתמש המקומי במערכתBearer Token, כותרות HTTP, OAuth 2.0
צורך בסביבת הרצהדורש Node.js / Python מותקנים מקומיתאין צורך בהתקנה מקומית, רק כתובת URL
מתאים במיוחד עבורגישה לקבצים מקומיים, Git, מסדי נתונים מקומייםשירותי SaaS, מערכות מעקב שגיאות, שרתי צוות
קלות שיתוף בצוותבינונית (תלויה בנתיבי המחשב)גבוהה מאוד (כתובת URL אחידה לכל הפרויקט)

#מלכודת נפוצה: עטיפת שרתים ב-mcp-remote

בעבר, כאשר כלי מארח מסוימים תמכו רק ב-stdio, משתמשים נהגו לעטוף שרתי HTTP מרוחקים באמצעות חבילת עזר מקומית כמו npx mcp-remote https://....

כיום, הן קלוד קוד והן גרוק CLI תומכים ב-Streamable HTTP באופן ישיר וטבעי. שימוש בעטיפת ביניים כזו רק מוסיף שכבת כשל, מעכב את זמן העלייה ועלול לפגום בתהליך האימות של OAuth. השתמשו תמיד בדגל --transport http הישיר.