MCP-with-Playwright
# שרת MCP למזג אוויר בישראל (Playwright & Gemini) 🌦️🤖
מימוש של שרת מבוסס פרוטוקול הקשר למודלים (MCP - Model Context Protocol) המעניק למודל שפה גדול (LLM) יכולות שליטה אוטומטיות בדפדפן (**Browser Use**). הפרויקט משתמש בספריית **Playwright** כדי לנונווט, לבצע אינטראקציה ולשלוף נתוני מזג אוויר בזמן אמת מאתר התחזית הישראלי, תוך ביצוע לולאת **RAG (Retrieval-Augmented Generation)** מלאה ואוטונומית ישירות בתוך הטרמינל.
## 🎯 מטרות הפרויקט ויעדי למידה
* **ארכיטקטורת MCP:** בנייה וחשיפה של כלים (Tools) מותאמים אישית ל-LLM באמצעות ה-SDK הרשמי של Anthropic.
* **אוטומציית דפדפן:** שימוש ב-Microsoft Playwright לצורך שליטה תוכנתית בדפדפן Chromium, תוך עקיפת המגבלות של גירוד מידע (Scraping) סטטי רגיל.
* **סוכן RAG מבוסס פעולה (Agentic Flow):** מתן אפשרות ל-LLM לנהל בעצמו ובאופן אוטומטי מספר שלבים בדפדפן בזה אחר זה (פתיחה ➔ חימוש ➔ בחירה ➔ חילוץ מידע) ולהשיב למשתמש על בסיס התוכן הדינמי של העמוד.
---
## 🧩 ארכיטקטורה ועיצוב טכנולוגי
בניגוד למימושים פשוטים של Scraping, פרויקט זה מבטיח יציבות גבוהה ושמירה על מצב הדפדפן (State) באמצעות:
1. **ניהול State גלובלי בשרת:** מופע הדפדפן והעמוד (`browser` ו-`page`) מנוהלים כמשתנים גלובליים בתוך הקובץ `weather_Israel.py`. השרת שומר על דפדפן פעיל אחד לאורך כל סבבי הקריאות של הכלים, במקום לפתוח ולסגור אותו מחדש בכל פעם. הדבר חוסך במשאבים ושומר על הקשר השיחה.
2. **סנכרון חסין (Robust Synchronization):** שימוש בזמני המתנה אסינכרוניים מפורשים (`wait_for_selector` ו-`wait_for_load_state("networkidle")`) כדי להבטיח שרשימות נפתחות (Dropdown) ומעברי דפים נטענים לחלוטין לפני שהסוכן מנסה ללחוץ או לקרוא מהם, מה שמונע קריסות בשמות ערים מורכבים.
3. **אופטימיזציית טוקנים (RAG נקי):** במקום להעביר את כל קוד ה-HTML הגולמי והרועש של העמוד לתוך הקונטקסט של המודל, כלי השליפה מטרגט סלקטורים ספציפיים (CSS Selectors) המכילים את נתוני התחזית בלבד ומסנן רעשי רקע עיצוביים.
---
## 🛠️ סטאק טכנולוגי
* **MCP SDK:** שכבת הפרוטוקול הרשמית של Anthropic לחיבור הכלים למודל.
* **Playwright:** ספריית האוטומציה המודרנית של Microsoft לשליטה בדפדפנים.
* **UV:** מנהל החבילות המהיר לפייתון לצורך התקנה וסנכרון סביבת העבודה.
* **Gemini 2.5 Flash:** מודל השפה המרכזי המנהל את לולאת קבלת ההחלטות והפעלת הכלים.
---
## 🚀 התקנה והרצה
עקבי אחר השלבים הבאים כדי להרים את הסביבה ולהריץ את הפרויקט באופן מקומי:
1. **סנכרון התלויות והפעלת סביבת העבודה:**
```bash
uv sync
התקנת דפדפן כרום (Chromium) עבור Playwright:
Bash
uv run playwright install chromium
הרצת צ'אט הטרמינל (ה-Client):
Bash
uv run host.py
💻 דוגמת שימוש והרצה בזמן אמת
לאחר הפעלת ה-Client, ניתן לשוחח עם הסוכן בשפה חופשית בעברית. המודל יחליט בעצמו באילו כלים להשתמש, יבצע את הפעולות בדפדפן הפתוח (הנפתח במצב נראה לעין - headless=False), ויציג את התחזית הסופית בטרמינל.
לוג הרצה מוצלח מהטרמינל (עבור ירושלים):
Plaintext
Query: מה המזג אוויר בירושלים?
Connected to server with tools: ['open_weather_forecast_israel', 'enter_weather_forecast_city_israel', 'select_weather_forecast_city_israel', 'get_page_content_israel']
🤖 גמיני חושב... (סיבוב 1/5)
📞 המודל מפעיל את הכלי: weather_Israel__open_weather_forecast_israel עם הפרמטרים: {}
🤖 גמיני חושב... (סיבוב 2/5)
📞 המודל מפעיל את הכלי: weather_Israel__enter_weather_forecast_city_israel עם הפרמטרים: {'city_name': 'ירושלים'}
🤖 גמיני חושב... (סיבוב 3/5)
📞 המודל מפעיל את הכלי: weather_Israel__select_weather_forecast_city_israel עם הפרמטרים: {}
🤖 גמיני חושב... (סיבוב 4/5)
📞 המודל מפעיל את הכלי: weather_Israel__get_page_content_israel עם הפרמטרים: {}
🤖 גמיני חושב... (סיבוב 5/5)
[Calling tool weather_Israel__open_weather_forecast_israel]
[Calling tool weather_Israel__enter_weather_forecast_city_israel]
[Calling tool weather_Israel__select_weather_forecast_city_israel]
[Calling tool weather_Israel__get_page_content_israel]
הטמפרטורה הנוכחית בירושלים היא 30.2 מעלות צלזיוס.
**תחזית להיום:**
לאחר התפזרות עננות הבוקר, ייעשה בהיר. הטמפרטורות יוסיפו להיות מעט גבוהות מהרגיל לעונה, בעיקר בהרים ובפנים הארץ.
**הלילה:**
מעונן חלקית עד בהיר.
**תחזית לימים הקרובים:**
* **רביעי:** לאחר התפזרות עננות הבוקר, ייעשה נאה. תחול ירידה קלה בטמפרטורות בהרים ובפנים הארץ.
* **חמישי:** לאחר התפזרות עננות הבוקר, ייעשה נאה. לא צפוי שינוי ניכר בטמפרטורות.TDQS
Scored across 4 tools
Each tool has a distinct role in the workflow: opening the site, entering city, selecting from dropdown, and retrieving content. Only potential confusion is between enter and select, but descriptions clarify they are different steps.
Tool names use a mix of patterns: 'open_weather_forecast_israel' lacks 'city', while others include 'city' or 'page_content'. The verb prefixes are consistent, but the descriptive suffixes vary.
Four tools are well-scoped for the task of retrieving a weather forecast for an Israeli city. Each tool is necessary and none are superfluous.
The tools cover the essential steps of the weather retrieval workflow. A minor gap might be the absence of error handling or city validation, but the surface is complete for basic usage.