בניית שרתי MCP מקומיים: תקשורת HTTP + SSE

BlogNavon

מבוא לפרוטוקול MCP ותקשורת HTTP + SSE

בעולם הבינה המלאכותית, פרוטוקול MCP (Model Context Protocol) מאפשר תקשורת יעילה בין סוכני AI שונים. במדריך הזה, נתמקד בתקשורת באמצעות HTTP + SSE (Server-Sent Events) ונראה איך אפשר לבנות שרת MCP לוקאלי משלכם בקלות. בניגוד לתקשורת סטנדרטית של קלט/פלט (std IO),‏ HTTP + SSE מאפשר תקשורת דו-כיוונית ומאובטחת יותר.

בעבר, דיברנו על שימוש בשיטות קלט/פלט סטנדרטיות (std IO). עכשיו, נתמקד בשימוש ב-SSE כדי לקבל עדכונים בפורמט JSON מהשרת דרך HTTP Post.

מה זה HTTP + SSE?

HTTP + SSE הוא פרוטוקול תקשורת שמאפשר לשרת לשלוח עדכונים ללקוח באופן מיידי, בלי שהלקוח יצטרך לשלוח בקשות שוב ושוב. זה יתרון משמעותי בעדכונים בזמן אמת, כמו במקרה של סוכני AI.

  • SSE (Server-Sent Events): מאפשר לשרת לשלוח עדכונים ללקוח באופן רציף.
  • HTTP Post: משמש את הלקוח לשלוח הודעות לשרת.

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

יתרונות וחסרונות של HTTP + SSE

יתרונות:

  • השרת יכול לטפל בכמה חיבורי לקוח בו-זמנית.
  • תקשורת דו-כיוונית בזמן אמת.
  • גמישות גבוהה יותר לעומת תקשורת סטנדרטית של קלט/פלט.

חסרונות:

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

איך עובדת התקשורת באמצעות HTTP + SSE?

יש כמה שלבים בתהליך:

  1. הלקוח פותח חיבור SSE לשרת.
  2. השרת שולח אירוע (event) שמיידע את הלקוח על כתובת ה-HTTP Post.
  3. הלקוח שולח הודעות לשרת באמצעות HTTP Post בפורמט JSON.
  4. השרת מחזיר הודעה בפורמט JSON כאירוע SSE.
  5. כשהמשימה מסתיימת, הלקוח סוגר את חיבור ה-SSE.

יצירת פרויקט MCP מקומי עם HTTP + SSE

כדי ליצור פרויקט MCP מקומי עם HTTP + SSE, נשתמש בסביבת הפיתוח UV. UV עוזרת לנו ליצור ולנהל סביבות וירטואליות בקלות.

  1. יצירת פרויקט חדש:
    • פתחו את הטרמינל ועברו לתיקייה שבה אתם רוצים ליצור את הפרויקט.
    • הריצו את הפקודה: uv init your_project_name
  2. יצירת סביבה וירטואלית:
    • עברו לתיקיית הפרויקט: cd your_project_name
    • צרו סביבה וירטואלית: uv venv
    • הפעילו את הסביבה הווירטואלית: source .venv/bin/activate (בלינוקס/מק) או .venv\Scripts\activate (בווינדוס).
  3. התקנת ספריות נדרשות:
    • התקינו את הספריות הנדרשות: uv pip install beautifulsoup4 html2text mcp-cli requests starlette uvicorn

דוגמאות קוד: client.py ו-server.py

עכשיו ניצור שני קבצים: client.py ו-server.py. הקובץ client.py יכיל את הקוד של הלקוח שמתקשר עם השרת, ו-server.py יכיל את הקוד של השרת שמטפל בבקשות.

client.py

קוד הלקוח כולל את הפונקציות הבאות:

  • print_items: מציג את הכלים, המשאבים וההנחיות הזמינים בשרת.
  • main (פונקציה אסינכרונית): מתחבר לשרת MCP, מציג את היכולות שלו וקורא לכלי מסוים (לא חובה).

הקוד משתמש בספריות asyncio,‏ urllib.parse ו-mcp כדי ליצור חיבור SSE ולשלוח בקשות HTTP Post.

server.py

קוד השרת כולל את הפונקציות הבאות:

  • MCP Server: מוגדר באמצעות fast_mcp = MCP() ומטפל בבקשות שמגיעות.
  • read_wikipedia_article (כלי MCP): מוגדר באמצעות דקורטור @fast_mcp.tool ושולף תוכן ממאמר ויקיפדיה בפורמט Markdown.
  • SSE Transport: מוגדר באמצעות SSEServerTransport ומאפשר לשלוח הודעות בפורמט JSON ללקוח.

הקוד משתמש בספריות starlette ו-uvicorn כדי ליצור שרת HTTP שמטפל בחיבורי SSE ובבקשות HTTP Post.

אפשר לחבר את השרת הזה ל-N8N כדי להוסיף לו יכולות אוטומציה.

הרצת השרת והלקוח

  1. הרצת השרת:
    • ודאו שאתם בתוך הסביבה הווירטואלית.
    • הריצו את הפקודה: uvicorn server:app --reload
  2. הרצת הלקוח:
    • פתחו טרמינל חדש (או תשאירו את השרת פועל בטרמינל אחר).
    • ודאו שאתם בתוך הסביבה הווירטואלית.
    • הריצו את הפקודה: python client.py --server_url http://localhost:8000 --article_url https://en.wikipedia.org/wiki/Artificial_intelligence

הלקוח יתחבר לשרת, יציג את הכלים הזמינים ויקרא לכלי read_wikipedia_article. התוצאה תוצג בטרמינל.

אפשר גם להשתמש ב-AI Studio של גוגל כדי לעצב את ה-API שלכם.

אבטחה

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

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

סיכום ומבט קדימה

במדריך הזה, למדנו איך לבנות שרת MCP מקומי עם תקשורת HTTP + SSE. ראינו איך ליצור קליינט וסרבר משלנו, ואיך להריץ אותם. בהמשך, נבדוק דרכים לחבר מודלים שונים של שפה (LLMs) ולבנות אפליקציות Streamlit כדי להפוך את השרת שלנו ליעיל ושימושי יותר.

כדי להתמודד עם בעיות כמו אובדן הקשר במערכות RAG, אפשר לנסות טכניקות מתקדמות.

תגובות

יש להתחבר כדי להגיב

טוען תגובות...