Skip to main content
Glama
Clement-Okolo

Weather MCP Server

README.md
# 🌦️ Weather MCP Server and Client

Welcome to the **Weather Model Context Protocol (MCP) Project**! This project provides real-time weather intelligence by integrating with external APIs like the National Weather Service (NWS). It is built using the **FastMCP** framework and supports both server and client interactions.

## 🚀 Features
- **Weather Alerts**: Fetch weather alerts for any US state.
- **Weather Forecasts**: Get detailed weather forecasts for specific locations.
- **Asynchronous Operations**: Fully asynchronous for high performance.
- **Modular Design**: Clean separation of server, client, and utility logic.
- **LLM Integration**: Summarize weather data using a language model (DistilGPT-2).

## 📂 Project Structure
- **`server.py`**: The main server file that registers tools for fetching weather alerts and forecasts.
- **`client.py`**: A command-line client to interact with the server.
- **`app.py`**: A Streamlit-based web app for user-friendly interaction.
- **`agent.py`**: An advanced client integrating a language model for summarizing weather data.

## 🛠️ Setup Instructions
1. **Clone the Repository**:
   ```bash
   git clone <repository-url>
   cd mcp
   ```

2. **Install Dependencies**:
   Ensure Python 3.8+ is installed, then run:
   ```bash
   pip install -r requirements.txt
   ```

3. **Run the Server**:
   Start the FastMCP server:
   ```bash
   python server.py
   ```

4. **Interact with the Client**:
   Use the command-line client or the Streamlit app to interact with the server.

## 🖥️ Usage

### Command-Line Client
1. **List Available Tools**:
   ```bash
   python client.py list_tools
   ```
2. **Fetch Alerts**:
   ```bash
   python client.py get_alerts --state CA
   ```
3. **Fetch Forecasts**:
   ```bash
   python client.py get_forecast --latitude 34.05 --longitude -118.25
   ```

### Streamlit Web App
1. Run the app:
   ```bash
   streamlit run app.py
   ```
2. Use the sidebar to select actions like "List Tools," "Get Alerts," or "Get Forecast."

### LLM Integration
1. Summarize weather data using the language model:
   ```bash
   python agent.py interact_with_llm --llm_action get_alerts --state CA
   python agent.py interact_with_llm --llm_action get_forecast --latitude 34.05 --longitude -118.25
   ```

## 🎥 Video Demonstration
Watch a quick demonstration of the Weather MCP Project in action:

[[Weather MCP Demo]](https://youtu.be/J_gK5BL8xhY)

## 🌐 External Dependencies
- **FastMCP**: Framework for building MCP servers and clients.
- **httpx**: For making asynchronous HTTP requests.
- **Streamlit**: For building the web app.
- **Transformers**: For integrating the DistilGPT-2 language model.

## 📋 Notes
- Ensure the server is running before using the client or web app.
- Follow the asynchronous programming model to avoid blocking operations.

## ❤️ Acknowledgments
- **FastMCP** for the server-client framework.
- **National Weather Service (NWS)** for providing weather data.
- **Hugging Face Transformers** for the DistilGPT-2 model.

## 🤝 Contributing
We welcome contributions to the Weather MCP Project! Here's how you can help:

1. **Report Bugs**: If you encounter any issues, please open an issue on the GitHub repository.
2. **Suggest Features**: Have an idea for a new feature? Let us know by creating a feature request.
3. **Submit Pull Requests**: Fork the repository, make your changes, and submit a pull request for review.
4. **Improve Documentation**: Help us enhance the documentation by fixing typos, adding examples, or clarifying instructions.

### Contribution Guidelines
- Follow the project's coding conventions and structure.
- Ensure all new code is covered by tests.
- Use clear and concise commit messages.
- Test your changes thoroughly before submitting.

Enjoy exploring the weather with **Weather MCP**! 🌤️