Skip to main content
Glama
Rivka55

Weather Israel MCP Server

by Rivka55
README.md
# MCP עם Playwright — תחזית מזג אוויר לישראל

פרויקט זה מממש שרת **MCP (Model Context Protocol)** שמאפשר למודל שפה לגשת לנתוני מזג אוויר עדכניים בישראל באמצעות אוטומציית דפדפן עם **Playwright**, במקום API סטנדרטי.

בנוסף קיים שרת MCP מקביל לארה״ב (NWS API), והמארח (`host.py`) מחבר את שני השרתים לסוכן שיחה אחד שיודע לנתב שאילתות בהתאם למדינה.

---

## תיאור הפרויקט

בניגוד לשימוש ב־API קבוע, השרת הישראלי:

1. פותח דפדפן Chromium (גלוי לעין)
2. מנווט לאתר [Weather2Day](https://www.weather2day.co.il/forecast)
3. מחפש עיר, בוחר תוצאה מהרשימה
4. מחלץ את תוכן הדף כטקסט נקי
5. מעביר את הטקסט למודל השפה כקונטקסט (RAG דינמי)

### קבצים עיקריים

| קובץ | תפקיד |
|------|--------|
| `weather_Israel.py` | שרת FastMCP בשם `WeatherIsrael` + 4 כלי Playwright |
| `weather_USA.py` | שרת FastMCP לתחזיות/התראות ארה״ב דרך NWS |
| `client.py` | לקוח MCP גנרי (stdio) |
| `host.py` | ממשק הצ׳אט שמחבר LLM לכלי ה־MCP |
| `pyproject.toml` | תלויות הפרויקט לניהול עם `uv` |
| `.env` | הגדרות ספק ה־LLM (Ollama / Gemini) |

### כלי השרת הישראלי (4 Tools)

1. `open_weather_forecast_israel` — פתיחת דפדפן וניווט לדף התחזית
2. `enter_weather_forecast_city_israel(city_name)` — הקלדת שם העיר בתיבת החיפוש
3. `select_weather_forecast_city_israel` — בחירת התוצאה הראשונה מה־dropdown
4. `extract_weather_data_israel` — חילוץ טקסט נקי מהדף עבור המודל

---

## דרישות מקדימות

- Python 3.13+
- [uv](https://docs.astral.sh/uv/)
- [Ollama](https://ollama.com/) מותקן ורץ מקומית
- מודל שתומך ב־tool calling (למשל `llama3.2`)

---

## התקנה והרצה מקומית עם Ollama ו־uv

### 1. סנכרון תלויות

```bash
uv sync
```

### 2. התקנת דפדפן Chromium ל־Playwright

```bash
uv run playwright install chromium
```

### 3. התקנת מודל ב־Ollama

```bash
ollama pull llama3.2
```

ודאו ש־Ollama רץ (בדרך כלל על `http://127.0.0.1:11434`).

### 4. הגדרת קובץ `.env`

העתיקו את הקובץ לדוגמה:

```bash
copy .env.example .env
```

ערכו את `.env` כך:

```env
LLM_PROVIDER=ollama
OLLAMA_MODEL=llama3.2
OLLAMA_HOST=http://127.0.0.1:11434
```

> אופציונלי: אפשר גם `LLM_PROVIDER=gemini` עם מפתח חינמי מ־[Google AI Studio](https://aistudio.google.com/apikey).

### 5. הרצת המארח (Host)

```bash
uv run host.py
```

לאחר ההרצה יופיע ממשק צ׳אט בטרמינל. הקלידו שאלה בעברית או באנגלית, או `quit` ליציאה.

---

## דוגמה להרצה מוצלחת

**שאלה:**

```text
What is the weather in Jerusalem?
```

או בעברית:

```text
מה מזג האוויר בירושלים?
```

**מה שקורה מאחורי הקלעים:**

המודל מזהה שמדובר בעיר בישראל ומפעיל את ארבעת הכלים בסדר:

```text
[Calling tool weather_Israel__open_weather_forecast_israel with args {}]
[Calling tool weather_Israel__enter_weather_forecast_city_israel with args {'city_name': 'ירושלים'}]
[Calling tool weather_Israel__select_weather_forecast_city_israel with args {}]
[Calling tool weather_Israel__extract_weather_data_israel with args {}]
```

**תוצאה לדוגמה (מתוך חילוץ חי מהאתר):**

```text
Selected city forecast page: https://www.weather2day.co.il/jerusalem

מזג אוויר ירושלים
24.5°
רוח: 13.3 קמ"ש (צפון מערבי)
לחות: 46%
תחזית לשבוע הקרוב: טמפרטורות מקסימום סביב 32–36°
```

הדפדפן נפתח באופן גלוי (`headless=False`) כך שניתן לצפות באוטומציה בזמן אמת, והמודל מסכם את הטקסט שחולץ לתשובה קריאה למשתמש.

---

## מבנה הזרימה

```text
משתמש → host.py (Ollama/Gemini)
            ├─ weather_USA.py   (API של NWS)
            └─ weather_Israel.py (Playwright → weather2day.co.il)
```

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

---

## שאלת בונוס

**שאלה:** איזו ספרייה "ישנה" קיבלה דחיפה מחודשת בעידן ה־AI?

**תשובה:** ספריות כמו **BeautifulSoup** ו־**Scrapy**.

בעבר הן שימשו בעיקר לסקראפינג קלאסי של אתרים. בעידן ה־AI הן קיבלו חיים חדשים כחלק מצינורות **RAG** וסוכנים: לפני שמזינים מסמכי אינטרנט למודל שפה, צריך לחלץ טקסט נקי מ־HTML. BeautifulSoup מאפשרת לפרסר דפים ולנקות רעש (תפריטים, סקריפטים, פרסומות), ו־Scrapy מאפשרת לזחול ולאסוף תוכן בקנה מידה גדול. כך ספריות "ותיקות" הפכו לרכיב מרכזי באיסוף קונטקסט איכותי עבור LLMs — לצד כלים חדשים יותר כמו Playwright, שמתאימים במיוחד לאתרים דינמיים (כמו בפרויקט זה).

---

## הערות טכניות

- השרת הישראלי שומר מצב גלובלי של Playwright (`playwright_context`, `browser`, `page`) כדי שהדפדפן יישאר פתוח בין קריאות כלים עוקבות.
- חיפוש ערים באתר Weather2Day עובד בעיקר בעברית; הפרויקט ממיר שמות ערים נפוצים באנגלית (למשל `Jerusalem` → `ירושלים`).
- להרצות בדיקה אוטומטיות אפשר להגדיר `WEATHER_ISRAEL_HEADLESS=1`.

---

## רישיון / הגשה

הפרויקט הוגש כחלק ממטלת MCP עם Playwright לתחזית מזג אוויר בישראל.

TDQS

A3.8/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct purpose in a sequential workflow: open browser, enter city, select suggestion, extract data. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow the verb_..._israel pattern with snake_case, maintaining a consistent style across the set.

Tool Count5/5

4 tools is appropriate for the simple workflow of opening a browser, searching for a city, selecting, and extracting data. Not over- or under-scoped.

Completeness4/5

Covers the primary workflow well, but lacks a tool to close the browser or handle errors, which is a minor gap for real-world use.

Maintenance

ActivityStale
ResponsivenessNo issues