Weather MCP Agent
by yehyaabk
README.md
# Weather MCP Agent
## Introduction
This project was built by **Yehya Abou Khechfe**.
The project is a **Weather MCP Agent** that retrieves current weather conditions and forecasts for any city, using the [OpenWeatherMap API](https://openweathermap.org/api).
The MCP server exposes weather tools that can be consumed in multiple ways:
- Connected to **Ollama** (local LLM) for natural-language interaction — see [`ollama_weather_mcp/ollama_mcp_client.py`](./ollama_weather_mcp/ollama_mcp_client.py) and [`ollama_weather_mcp/ollama_mcp_server.py`](./ollama_weather_mcp/ollama_mcp_server.py).
- Connected to **Claude Desktop** — add the server to your Claude configuration file (`claude_desktop_config.json`) as described below.
- A **simple client with no LLM integrated**, used for testing the server directly — see [`weather_mcp/mcp_client.py`](./weather_mcp/mcp_client.py) and [`weather_mcp/mcp_server.py`](./weather_mcp/mcp_server.py).
## Project Structure
```
wheather-mcp-agent/
├── ollama_weather_mcp/
│ ├── ollama_mcp_client.py # Interactive client powered by Ollama
│ └── ollama_mcp_server.py # MCP server extended with a prompt for Ollama
├── weather_mcp/
│ ├── __init__.py
│ ├── mcp_client.py # Simple client (no LLM) for testing the server
│ └── mcp_server.py # Core MCP server exposing the weather tools
├── .env # Environment variables (OpenWeatherMap API key)
├── main.py
├── pyproject.toml
└── README.md
```
## Prerequisites
- **Python** 3.10+
- **[uv](https://docs.astral.sh/uv/)** — used as the package and project manager
- **[Ollama](https://ollama.com/)** installed and running locally, with a pulled model (e.g. `llama3`)
- **`mcp[cli]`** — the MCP Python SDK
- **`httpx`** — for async HTTP requests to the OpenWeatherMap API
- **`python-dotenv`** — for loading environment variables from `.env`
- An **OpenWeatherMap API key** — get one at [openweathermap.org/api](https://openweathermap.org/api)
### Installing dependencies with `uv`
```bash
uv sync
```
### Setting up your `.env` file
Create a `.env` file at the project root:
```
OPENWEATHER_API_KEY=your_api_key_here
```
## Connecting to Claude Desktop
To use this MCP server with Claude Desktop, add it to your Claude configuration file (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"weather": {
"command": "uv",
"args": ["run", "--directory", "C:\\path\\to\\wheather-mcp-agent", "weather_mcp/mcp_server.py"]
}
}
}
```
Restart Claude Desktop after saving the configuration — the weather tools should then appear as available tools in a new conversation.
## Running the Ollama-powered client
```bash
uv run .\ollama_weather_mcp\ollama_mcp_client.py
```
### Example session
```
[INFO] Server-client connection initialized
Weather Assistant — ask about current conditions or the forecast for any city.
You can also ask general questions.
Type 'q', 'exit', or 'quit' to leave.
You: what is the current weather in paris
[INFO] Requesting Ollama to extract tool and arguments...
Current weather in Paris, FR: clear sky, 32.79°C (feels like 31.48°C), ranging from 32.3°C to 35.03°C, with 28% humidity.
You: and tomorrow ?
[INFO] Requesting Ollama to extract tool and arguments...
--------------------
Weather Forecast in Paris, FR
2026-07-29 12:00:00 — 33.5°C, clear sky
2026-07-29 15:00:00 — 35.88°C, clear sky
2026-07-29 18:00:00 — 37.16°C, clear sky
2026-07-29 21:00:00 — 30.5°C, clear sky
2026-07-30 00:00:00 — 25.28°C, clear sky
2026-07-30 03:00:00 — 22.37°C, scattered clouds
2026-07-30 06:00:00 — 21.97°C, broken clouds
2026-07-30 09:00:00 — 24.71°C, overcast clouds
2026-07-30 12:00:00 — 28.47°C, overcast clouds
2026-07-30 15:00:00 — 33.05°C, clear sky
--------------------
You: what is the capital of lebanon
[INFO] Requesting Ollama to extract tool and arguments...
[INFO] Requesting Ollama to answer a general question ...
Answer: The capital of Lebanon is Beirut (بيروت).
You:
```
## Running the simple test client (no LLM)
Useful for testing the MCP server's tools directly, without going through an LLM:
```bash
uv run .\weather_mcp\mcp_client.py
```
## Available Tools
| Tool | Description |
|---|---|
| `fetch_current_weather` | Fetches the current weather conditions for a given city. |
| `fetch_weather_forecast` | Fetches the weather forecast (3-hour intervals) for a given city. |TDQS
A4.2/5.0
Scored across 2 tools
Disambiguation5/5
The two tools are clearly distinct: one provides current conditions, the other provides a forecast. There is no overlap or ambiguity between them.
Naming Consistency5/5
Both tool names follow a consistent 'fetch_' + noun pattern, with names fetch_current_weather and fetch_weather_forecast. The naming is predictable and uniform.
Tool Count3/5
With only 2 tools, the set is on the thin side for a weather server, though it covers the core current and forecast needs. It feels slightly minimal but not inadequate.
Completeness4/5
The server covers the two most essential weather operations: current conditions and forecasts. Notable gaps include historical weather data and alerts, but these are optional extras rather than essential missing functionality.
Maintenance
ActivitySlowing
ResponsivenessNo issues