כמה מילים ודוגמה על MCP
פרוטוקול MCP הוא הדרך שלנו להוסיף יכולות לסוכני ה AI שאנחנו מריצים על המחשב. כתבתי לפני כמה ימים על הרעיון של שימוש בכלים מתוך מודל שפה. למדנו שם שמודל שפה בסך הכל קורא וכותב טקסט, ורוב כלי ה AI שיש לנו משלבים מודל שפה עם קוד שעוטף את אותו, משפר קצת את הקלט לפני שהוא נשלח למודל השפה ועושה משהו עם הפלט של מודל השפה. בדוגמת הכלים ראינו שאנחנו יכולים לשכנע את מודל השפה לשתול "רמזים" בפלט שלו, ואז הסוכן שעוטף את מודל השפה יכול לתפוס רמזים אלה ולהשתמש בהם כדי להריץ קוד.
פרוטוקול MCP הוא בסך הכל דרך פורמלית בה סוכן מבקש ממודל שפה לשתול את אותם רמזים ומפענח את הפלט של מודל השפה.
בפרוטוקול MCP אנחנו מגדירים יכולות לפי קטגוריות:
כלים - יכולות שגורמות לשינוי כלשהו בעולם
משאבים - יכולות שקשורות למשיכת מידע לקריאה בלבד
פרומפטים - יכולות שקשורות לקיצורי דרך ב UI
לכן אם אני רוצה שאפליקציית Claude Desktop שרצה אצלי על המחשב תוכל ליצור קבצים על הדיסק אני יכול ליצור "כלי" שיוצר קבצים. אם אני רוצה שמתוך צ'ט עם האפליקציה היא תוכל לקרוא תוכן של קבצים מתיקייה מסוימת אני מוסיף את הקבצים בתור משאב לקריאה.
אפשר לחשוב על "שרת MCP" בתור תוסף לאפליקציית שיחה עם מודל שפה, ומה שיפה בו שהוא מתחבר באותו אופן להרבה מאוד אפליקציות שיחה, בדוגמה שלנו גם Claude Desktop תומך ב MCP אבל גם Cursor ולכן בדיוק באותו פרוטוקול אני יכול לתת ל Cursor אופציה להריץ קוד אוטומטית או לקרוא מידע מבסיס הנתונים.
1. דוגמה: שרת MCP ליצירת קבצים
בשביל הדוגמה כדאי להתקין את אפליקציית Claude Desktop (זה בחינם ועובד גם עם התוכנית החינמית של קלוד). לאחר מכן מתוך סביבה וירטואלית חדשה של פייתון אני יוצר את הקובץ הבא:
# server.py
import os
from mcp.server.fastmcp import FastMCP
HOME = os.environ["HOME"]
# Create an MCP server
mcp = FastMCP("Demo")
# Add an addition tool
@mcp.tool()
def create_empty_file(name: str):
"""creates a new empty file in the home directory"""
try:
filename = f"{HOME}/{name}"
print(f"Trying to create file {filename}")
with open(filename, 'a', encoding='utf8'):
pass
except Exception:
raise Exception(f"Failed to create file {filename}")
@mcp.prompt()
def review_code(code: str) -> str:
return f"Please review this code:\n\n{code}"
הקובץ מכיל כלי אחד ו prompt אחד. הכלי נקרא create_empty_file
. יש לו פרמטר בשם name והוא פשוט יוצר קובץ ריק חדש בתיקיית הבית בשם שבחרתי. מחרוזת התיעוד של הפונקציה נשמרת בתור התיעוד של הכלי.
בנוסף הכלי מכיל פרומפט בשם review_code
שכולל פרמטר אחד בשם code ומחזיר פרומפט סטנדרטי שעוטף את הקוד שהעברתי.
2. שימוש בשרת החדש
בשביל להתקין את השרת החדש בקלוד אני מריץ משורת הפקודה:
pip install "mcp[cli]"
ומקבל את הכלי mcp
בתוך סביבת הפייתון הוירטואלית שלי. עכשיו אני מפעיל:
mcp install server.py
בשביל לחבר את השרת שלי לאפליקציית Claude Desktop. (באפליקציות אחרות ההתקנה תהיה שונה כל אפליקציה עם השיטה שלה).
אחרי ההתקנה מפעילים מחדש את קלוד ואפשר לבקש ממנו בצ'אט ליצור קבצים. קלוד יזהה שיש לו Tool שיודע ליצור קבצים ויציע להפעיל את הכלי ואחרי אישור שלכם בתוך הצ'אט הכלי מופעל והקובץ או הקבצים נוצרים.
מה לגבי הפרומפט? אותו אנחנו מפעילים דרך התפריטים. באפליקציית Claude Desktop בדיוק מתחת לשורת הצ'אט יש אייקון של שני דברים מתחברים, לוחצים עליו ואז בוחרים ב Choose an integration את הפרומפט שיצרנו. יופיע מסך קופץ בו נתבקש להקליד ערך לפרמטר code (הפרמטר שהגדרנו לפונקציה) ואחרי אישור המחרוזת שחזרה מהפונקציה נשלחת למודל השפה בתור הפרומפט.
3. מה הלאה
כמה ניסויים שאני ממליץ גם לכם לעשות על מודל השפה ו MCP-
מודל השפה מחליט לקרוא לכלי כי תיאור הכלי נראה לו מתאים לבקשה שלנו לא בגלל שהוא יודע מה הכלי עושה. נסו לשנות את שם הפונקציה ותיאור הכלי כדי להבין מה עובד ומה לא עובד, ואיך אפשר לבלבל קצת את קלוד. אחרי זה נסו להוסיף עוד פונקציות עם שמות דומים או שונים ותראו איך קלוד מתמודד עם קונפליקטים. שימו לב גם שמספיק לשנות את קובץ ה server.py ולהפעיל מחדש את קלוד כדי שהוא ישתמש בכלים החדשים, כלומר מי שמריץ את השרת זה אפליקציית קלוד עצמה.
קלוד יכול להחליט להריץ את הכלי מספר פעמים. התוצאה אינה מופעלת בטרנזאקציה וביטול ריצה באמצע פשוט גורם להפסקת השימוש בכלי, מה שעלול להוביל לבעיות קונסיסטנטיות אם באמת ניתן לו לעבוד על מידע אמיתי. נסו לגרום לקלוד ליצור 10 קבצים והפסיקו אותו באמצע כדי לראות שנתקעתם עם חלק מהקבצים.
באתר mcp.so תוכלו למצוא המון שרתי MCP שאנשים אחרים כתבו. מומלץ לקרוא את הקוד לפני שמתקינים.