דלג לתוכן הראשי
מעודכן ליוני 2026 18 דקות קריאה מפתחים ומשתמשים מתקדמים

MCP — הפרוטוקול שמחבר
AI לכל כלי בעולם

Model Context Protocol (MCP) הוא תקן פתוח שפיתחה Anthropic — מעין "USB-C לעולם ה-AI". במקום לכתוב integration מיוחד לכל כלי, MCP נותן ל-Claude (ולמודלים אחרים) גישה לכלים, קבצים, מסדי נתונים ו-APIs בדרך אחידה ואוניברסלית.

2024
שנת השקה
1,000+
שרתי MCP
Open
Source & Standard
JSON-RPC
פרוטוקול תקשורת

מה זה MCP ולמה זה חשוב?

לפני MCP, כל מי שרצה לחבר AI לכלי חיצוני — Slack, GitHub, מסד נתונים, קבצים — היה צריך לכתוב integration מאפס, מותאם אישית לכל מודל ולכל שירות. כפולת עבודה אינסופית, תחזוקה קשה, וחוסר תאימות.

MCP פותר את זה בצורה אלגנטית: פרוטוקול תקשורת אחיד (JSON-RPC מעל stdio או SSE) שמגדיר כיצד AI Clients (כמו Claude Desktop, Cursor, Windsurf) מדברים עם MCP Servers שחושפים tools, resources ו-prompts.

ארכיטקטורת MCP
MCP Client
Claude Desktop
Cursor, Windsurf
⟺
MCP Protocol
JSON-RPC
stdio / SSE
⟺
MCP Server
GitHub, Slack
DB, Files, API

MCP לעומת Function Calling

Function Calling (שיש ב-OpenAI ו-Anthropic) מאפשר ל-AI להפעיל פונקציות — אבל הפונקציות האלה מוגדרות ב-prompt ורצות בצד ה-client. MCP הוא שכבה מעל זה: הכלים חיים בשרת נפרד, מנוהלים בנפרד, וניתן לחבר אותם לכל AI client שתומך בפרוטוקול.

איך MCP עובד — מתחת למכסה

One protocol connects any host to any toolMCP · ARCHITECTUREHostClaude / IDEHOSTMCP clientprotocol layerMCP serverexposes capabilitiesSERVERToolsfunctionsResourcesdata / filesPromptstemplatesJSON-RPCconnectexposeexposeexpose

שלושת הפרימיטיבים של MCP

Tools
פונקציות שה-AI יכול לקרוא: חיפוש ב-DB, שליחת מייל, קריאת קובץ. כל tool מגיע עם JSON schema של הפרמטרים.
Resources
נתונים שה-AI יכול לקרוא: קבצים, מסמכים, תוצאות query. Resources הם read-only ומשמשים לContext.
Prompts
תבניות prompt שהשרת מגדיר. משתמשים יכולים להפעיל אותם ישירות מה-client.

Transport Layers — איך Client ו-Server מתקשרים

המפרט של 2026-07-28 — מה השתנה ולמה זה שובר קוד

עדכון: המפרט עבר שינוי גדול

גרסת המפרט 2026-07-28 מחליפה את 2025-11-25 ואינה תואמת לאחור. אם כתבת שרת MCP לפני התאריך הזה — הוא ידרוש שינויים. הסעיף הזה מתאר בדיוק מה.

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

מה הוסר

מה נוסף

מה זה אומר בפועל

אם אתה משתמש ב-MCP דרך Claude Desktop, Cursor או כלי אחר — כמעט כלום. הכלי מתעדכן, ואתה ממשיך. מה שכן שווה לבדוק הוא שהשרתים שהתקנת עודכנו גם הם; שרת ישן מול לקוח חדש לא בהכרח יעבוד.

אם אתה כותב שרת MCP, שלושה דברים דורשים עבודה. הראשון — מימוש server/discover, שהוא חובה. השני — הוצאת המצב מהחיבור: כל מקום שבו שמרת נתונים "לאורך הסשן" צריך לעבור למזהה מפורש שעובר בארגומנטים. השלישי — עדכון ספריית הפיתוח: הגרסאות הרשמיות שמיישמות את המפרט הזה הן שינוי גרסה ראשי, כמו python-sdk שעבר לגרסה 2.

למה בכלל לעבור לחסר-מצב

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

שני שינויים קטנים ששווה להכיר

המקור: מסמך השינויים הרשמי של המפרט, גרסה 2026-07-28. אומת מול המפרט עצמו, לא מול סיכום.

הגירה מעשית — שרת ישן לשרת חדש

שלושת התיקונים שלמטה מכסים את רוב השרתים. הם מוצגים כ"לפני ואחרי" כי ההבדל התפיסתי ברור יותר ככה מאשר בתיאור.

1. מצב שהיה בסשן — עובר לארגומנט

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

# לפני — מצב תלוי-חיבור
sessions = {}

@server.tool()
def open_cart(session_id: str):        # הגיע מ-Mcp-Session-Id
    sessions[session_id] = {"items": []}

@server.tool()
def add_item(session_id: str, sku: str):
    sessions[session_id]["items"].append(sku)   # נשבר מול מופע אחר


# אחרי — מזהה מפורש שהשרת מנפיק, ומצב שנשמר בחוץ
@server.tool()
def open_cart() -> dict:
    cart_id = uuid4().hex
    store.put(cart_id, {"items": []}, ttl=3600)   # Redis / DB
    return {"cart_id": cart_id}                    # הלקוח שומר ומחזיר

@server.tool()
def add_item(cart_id: str, sku: str) -> dict:
    cart = store.get(cart_id)
    if cart is None:
        raise ValueError("cart_id לא קיים או פג תוקף")
    cart["items"].append(sku)
    store.put(cart_id, cart, ttl=3600)
    return {"items": len(cart["items"])}

שים לב ל-ttl ולבדיקה של None. ברגע שהמצב יצא מהזיכרון של התהליך, הוא יכול לפוג או להימחק — ומזהה שלא נמצא הוא מצב תקין שצריך לטפל בו, לא תקלה.

2. server/discover — חובה

@server.discover()
def discover() -> dict:
    return {
        "protocolVersions": ["2026-07-28"],
        "serverInfo": {"name": "inventory-mcp", "version": "2.0.0"},
        "capabilities": {"tools": {}, "resources": {}},
    }

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

3. בקשות שהשרת יזם — לדפוס MRTR

שרת שהיה עוצר באמצע כדי לבקש מהלקוח משהו — אישור, בחירה, הרשאה — לא יכול לעשות את זה יותר. במקום זה הוא מחזיר תוצאה שאומרת "חסר לי", והלקוח שולח את הבקשה שוב עם המידע.

@server.tool()
def delete_records(query: str, confirmed: bool = False) -> dict:
    n = count_matching(query)
    if n > 10 and not confirmed:
        return {
            "resultType": "input_required",
            "inputRequests": [{
                "type": "confirmation",
                "message": f"הפעולה תמחק {n} רשומות. להמשיך?",
            }],
        }
    return {"resultType": "complete", "deleted": run_delete(query)}

הדפוס הזה נראה מסורבל בהתחלה, ויש בו יתרון אמיתי: הבקשה השנייה עומדת בפני עצמה. אם החיבור נפל בין השתיים, שום דבר לא תקוע — הלקוח פשוט שולח שוב.

סדר העבודה שאני ממליץ עליו

חיבור MCP ל-Claude Desktop

Claude Desktop הוא ה-MCP client הרשמי של Anthropic. הגדרת שרתי MCP נעשית דרך קובץ JSON אחד.

מיקום קובץ ההגדרה

מבנה הקובץ

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/yourname/Documents"
      ]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..."
      }
    },
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-brave-search"],
      "env": {
        "BRAVE_API_KEY": "BSA..."
      }
    }
  }
}
אחרי כל שינוי — הפעל מחדש את Claude Desktop

השינויים ב-config.json לא נטענים דינמית. צריך לסגור ולפתוח מחדש את האפליקציה. כשהחיבור הצליח תראה איקון פטיש (🔨) בממשק ה-chat — זה סימן שהכלים זמינים.

5 שרתים שכדאי להוסיף מיד

@modelcontextprotocol/server-filesystem
גישה לקריאה/כתיבה של קבצים מקומיים. מגביל ל-directories שאתה מגדיר.
@modelcontextprotocol/server-brave-search
חיפוש ווב בזמן אמת עם Brave Search API (חינם עד 2,000 בקשות/חודש).
@modelcontextprotocol/server-github
ניהול GitHub: repos, issues, PRs, commits. דורש Personal Access Token.
@modelcontextprotocol/server-postgres
גישה ל-PostgreSQL DB. Claude יכול לכתוב ולהריץ SQL queries ישירות.
@modelcontextprotocol/server-memory
זיכרון מתמשך ל-Claude — שמירת עובדות, העדפות וקשרים בין sessions.

MCP עם Cursor ו-Windsurf

גם Cursor וגם Windsurf תומכים ב-MCP ומאפשרים לעורכי הקוד לגשת לכלים חיצוניים ישירות מ-Agent Mode. זה עוצמתי במיוחד כשמפתחים — Claude ב-Cursor יכול לשלוח metrics ל-Datadog, לפתוח tickets ב-Jira, ולבדוק Supabase — הכל בלי לצאת מה-IDE.

הגדרה ב-Cursor

ב-Cursor, עוברים ל-Settings → Features → MCP ולוחצים על "Add new MCP server". ניתן גם לערוך ישירות את ~/.cursor/mcp.json:

{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": ["-y", "@supabase/mcp-server-supabase@latest",
               "--supabase-url", "https://xxx.supabase.co",
               "--supabase-service-role-key", "eyJ..."]
    }
  }
}
אל תשים API Keys ב-git!

קבצי MCP config מכילים לעיתים keys רגישים. הוסף את mcp.json ל-.gitignore, או השתמש במשתני סביבה (env vars) ל-secrets.

אבטחה — מה שמשתנה כששרת נגיש לרשת

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

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

שרתי MCP שכדאי להכיר

פיתוח ו-DevTools

שרת מה הוא עושה קוד פתוח
GitHubRepos, Issues, PRs, Code Searchכן
GitLabניהול GitLab repos ו-pipelinesכן
SupabaseDB, Auth, Storage, Edge Functionsכן
Playwrightאוטומציה ובדיקות דפדפןכן
Dockerניהול containers ו-imagesכן
Sentryניתוח errors ו-stack tracesכן

ניהול ותפעול

שרת שימוש
Slackקריאה ושליחת הודעות, ניהול channels
Notionקריאה/כתיבה ל-Notion databases ודפים
Google Driveגישה לקבצים, Docs, Sheets ו-Slides
Linearניהול issues, projects ו-sprints
Jiratickets, epics, workflows של Atlassian
Stripeניהול תשלומים, customers ו-subscriptions
איפה למצוא שרתים?

הרשימה הרשמית נמצאת ב-github.com/modelcontextprotocol/servers. בנוסף, האתר mcp.so ו-glama.ai/mcp/servers אוספים אלפי שרתים מהקהילה עם חיפוש ודירוג.

בניית שרת MCP משלך

בניית שרת MCP היא מפתיעה בפשטותה. Anthropic מספקת SDK ל-Python ול-TypeScript. תוך 30 שורות קוד אפשר ליצור שרת שחושף כלים ל-Claude.

שרת בסיסי ב-Python (FastMCP)

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("my-server")

@mcp.tool()
def get_weather(city: str) -> str:
    """קבל תחזית מזג אוויר לעיר"""
    # בפועל — קריאה ל-API
    return f"מזג האוויר ב-{city}: 25°C, מעונן חלקית"

@mcp.tool()
def calculate(expression: str) -> float:
    """חשב ביטוי מתמטי"""
    return eval(expression)  # רק לדוגמה!

@mcp.resource("docs://readme")
def get_readme() -> str:
    """קרא את ה-README של הפרויקט"""
    with open("README.md") as f:
        return f.read()

if __name__ == "__main__":
    mcp.run()  # stdio transport כברירת מחדל

שרת ב-TypeScript

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({ name: "my-server", version: "1.0.0" });

server.tool(
  "search_database",
  { query: z.string(), limit: z.number().optional() },
  async ({ query, limit = 10 }) => {
    // קריאה ל-DB בפועל
    const results = await db.search(query, limit);
    return {
      content: [{ type: "text", text: JSON.stringify(results) }]
    };
  }
);

const transport = new StdioServerTransport();
await server.connect(transport);

חיבור השרת שבנית ל-Claude Desktop

{
  "mcpServers": {
    "my-server": {
      "command": "python",
      "args": ["/path/to/my_server.py"]
    }
  }
}

דוגמאות מהשדה — מה אנשים בונים עם MCP

Customer Support Bot
Claude + MCP לCRM + Ticketing System. Claude קורא היסטוריית לקוח, מתעדכן ב-open tickets ומשיב ב-context מלא.
BI Assistant
שאל שאלות עסקיות בעברית, Claude כותב SQL, מריץ על PostgreSQL ומציג גרפים — הכל דרך MCP.
AI Code Reviewer
Cursor + GitHub MCP. Claude קורא PR, מריץ tests, בודק security issues ומוסיף review comments אוטומטית.
Personal Assistant
Claude + Calendar + Gmail + Notion. תשאל "מה יש לי היום?" וקיבלת תקציר פגישות, emails דחופים ו-tasks פתוחים.
MCP + Agents = הדור הבא

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

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