Skip to main content
Glama
PrasadMankar1309

Weather MCP Server

README.md
# ๐ŸŒฆ๏ธ Weather MCP Server for Claude Integration

> A production-ready **Model Context Protocol (MCP)** server built using the **official Python MCP SDK** that provides real-time weather information, forecasts, air quality, and weather alerts through the OpenWeatherMap API.

![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)
![MCP](https://img.shields.io/badge/MCP-Compatible-green.svg)
![OpenWeather](https://img.shields.io/badge/OpenWeather-API-orange.svg)
![License](https://img.shields.io/badge/License-MIT-blue.svg)

---

# ๐Ÿ“– Overview

This project demonstrates how to build a **local MCP Server** using the official **Python MCP SDK**. The server exposes multiple weather-related tools that can be consumed by any MCP-compatible client such as **Claude Code**, **MCP Inspector**, or other MCP hosts.

The server communicates with the OpenWeatherMap API and returns structured weather information through the MCP protocol.

---

# โœจ Features

- ๐ŸŒค๏ธ Current Weather
- ๐Ÿ“… 5-Day Weather Forecast
- ๐ŸŒช๏ธ Weather Alerts
- ๐ŸŒซ๏ธ Air Quality Index
- ๐Ÿ“š MCP Resources
- ๐Ÿ’ฌ MCP Prompt Templates
- ๐Ÿ“ Structured Logging
- โš ๏ธ Robust Error Handling
- ๐Ÿ”Œ Standard I/O (STDIO) Transport
- ๐Ÿ—๏ธ Clean Layered Architecture

---

# ๐Ÿ—๏ธ Architecture

```
                   User
                     โ”‚
                     โ–ผ
              Claude Desktop
              Claude Code
             MCP Inspector
                     โ”‚
                     โ–ผ
            MCP Protocol (STDIO)
                     โ”‚
                     โ–ผ
            Weather MCP Server
                     โ”‚
      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
      โ–ผ              โ–ผ              โ–ผ
   Tools         Resources      Prompts
      โ”‚
      โ–ผ
 OpenWeatherMap REST API
      โ”‚
      โ–ผ
 Weather Information
```

---

# ๐Ÿ“‚ Project Structure

```text
weather-mcp/
โ”‚
โ”œโ”€โ”€ server.py
โ”œโ”€โ”€ config.py
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ .env.example
โ”‚
โ”œโ”€โ”€ models/
โ”‚   โ”œโ”€โ”€ weather_model.py
โ”‚   โ””โ”€โ”€ forecast_model.py
โ”‚
โ”œโ”€โ”€ services/
โ”‚   โ”œโ”€โ”€ parser.py
โ”‚   โ””โ”€โ”€ weather_api.py
โ”‚
โ”œโ”€โ”€ tools/
โ”‚   โ”œโ”€โ”€ current_weather.py
โ”‚   โ”œโ”€โ”€ forecast.py
โ”‚   โ”œโ”€โ”€ alerts.py
โ”‚   โ””โ”€โ”€ air_quality.py
โ”‚
โ”œโ”€โ”€ prompts/
โ”‚   โ””โ”€โ”€ README.md
โ”‚
โ”œโ”€โ”€ resources/
โ”‚   โ””โ”€โ”€ README.md
โ”‚
โ”œโ”€โ”€ tests/
โ”‚   โ””โ”€โ”€ test_weather_parsing.py
โ”‚
โ””โ”€โ”€ utils/
    โ”œโ”€โ”€ logger.py
    โ”œโ”€โ”€ helpers.py
    โ””โ”€โ”€ exceptions.py
```

---

# โš™๏ธ Installation

Clone the repository

```bash
git clone https://github.com/PrasadMankar1309/Weather-MCP-Tool-for-the-Claude-Integration.git

cd Weather-MCP-Tool-for-the-Claude-Integration
```

Create a virtual environment

```bash
python -m venv .venv
```

Activate it

### Windows

```bash
.venv\Scripts\activate
```

### Linux / macOS

```bash
source .venv/bin/activate
```

Install dependencies

```bash
pip install -r requirements.txt
```

---

# ๐Ÿ”‘ Configuration

Create a `.env` file in the project root.

```env
OPENWEATHER_API_KEY=your_api_key_here
OPENWEATHER_BASE_URL=https://api.openweathermap.org/data/2.5
REQUEST_TIMEOUT_SECONDS=10
LOG_LEVEL=INFO
```

You can obtain a free API key from:

https://openweathermap.org/api

---

# โ–ถ๏ธ Running the MCP Server

```bash
python server.py
```

The server communicates using the **STDIO transport** and is intended to be launched by an MCP-compatible client.

---

# ๐Ÿ”Œ Claude Desktop Integration

Example configuration:

```json
{
  "mcpServers": {
    "weather": {
      "command": "python",
      "args": [
        "C:/path/to/server.py"
      ]
    }
  }
}
```

Restart Claude Desktop after updating the configuration.

---

# ๐Ÿ” Testing with MCP Inspector

Launch the MCP Inspector:

```bash
npx @modelcontextprotocol/inspector
```

Add a new STDIO server:

Command

```text
python
```

Argument

```text
server.py
```

If configured correctly, the Inspector will display:

- Tools
- Resources
- Prompts

---

# ๐Ÿ› ๏ธ Available MCP Tools

| Tool | Description |
|------|-------------|
| Current Weather | Retrieves current weather for a city |
| Forecast | Retrieves weather forecast |
| Weather Alerts | Displays active weather alerts |
| Air Quality | Retrieves AQI information |

---

# ๐Ÿ“š MCP Resources

| Resource | Description |
|-----------|-------------|
| weather://supported-cities | Supported cities |
| weather://api-docs | API information |
| weather://prompt-examples | Example prompts |

---

# ๐Ÿ’ฌ MCP Prompt Templates

- Travel Weather Report
- Farmer Weather Report
- Weather Summary

---

# ๐Ÿ’ก Example Prompts

```
What's the weather in Pune?
```

```
Forecast for Mumbai
```

```
Weather alerts in Delhi
```

```
Air quality in London
```

---

# ๐Ÿ”„ MCP Workflow

```text
User Prompt
      โ”‚
      โ–ผ
Claude Desktop / Claude Code
      โ”‚
      โ–ผ
MCP Client
      โ”‚
      โ–ผ
Weather MCP Server
      โ”‚
      โ–ผ
OpenWeatherMap API
      โ”‚
      โ–ผ
JSON Response
      โ”‚
      โ–ผ
Claude Response
```

---

# โš ๏ธ Error Handling

The server gracefully handles:

- Invalid city names
- Missing API keys
- Network failures
- Request timeouts
- API errors

---

# ๐Ÿš€ Future Improvements

- Hourly Forecast
- Weather Maps
- Geolocation Support
- Historical Weather
- Severe Weather Notifications
- Multi-language Support
- Docker Deployment
- Streamable HTTP Transport

---

# ๐Ÿงช Technologies Used

- Python 3.10
- Model Context Protocol (MCP)
- Official Python MCP SDK
- OpenWeatherMap API
- Dataclasses
- Logging
- dotenv

---

# ๐Ÿค Contributing

Contributions are welcome!

1. Fork the repository
2. Create a feature branch
3. Commit your changes
4. Open a Pull Request

---

# ๐Ÿ“œ License

This project is licensed under the MIT License.

---

# ๐Ÿ‘จโ€๐Ÿ’ป Author

**Prasad Mankar**

- GitHub: https://github.com/PrasadMankar1309
- LinkedIn: https://www.linkedin.com/in/prasad-mankar/

---

โญ If you found this project useful, consider giving it a star!