Skip to main content
Glama
LMWCoding

MCP Weather Service

by LMWCoding
README.md
# MCP Weather Service

A FastMCP-based weather service for Singapore that provides current weather conditions and forecasts from the National Environment Agency (NEA) APIs.

## Features

- **Current Weather Data**: Temperature, rainfall, humidity, wind speed, and wind direction from all weather stations
- **Weather Forecasts**: 2-hour, 24-hour, and 4-day forecasts for all areas in Singapore
- **Comprehensive API Integration**: All data from official NEA weather APIs
- **Robust Error Handling**: Retry logic, timeouts, and graceful degradation
- **Async Implementation**: Efficient concurrent API calls

## Available Tools

### 1. `get_sg_weather_forecast`
Fetches comprehensive weather forecasts including:
- 2-hour weather forecast for all areas in Singapore
- 24-hour weather forecast with detailed period breakdowns
- 4-day weather outlook with temperature, humidity, and wind information

### 2. `get_sg_current_weather`
Fetches current weather data from all weather stations:
- Temperature readings (°C)
- Rainfall measurements (mm)
- Humidity levels (%)
- Wind speed (m/s)
- Wind direction (degrees)

### 3. `health_check`
Simple health status check for the weather service.

## API Endpoints Used

- **2-Hour Forecast**: `https://api-open.data.gov.sg/v2/real-time/api/two-hr-forecast`
- **24-Hour Forecast**: `https://api-open.data.gov.sg/v2/real-time/api/twenty-four-hr-forecast`
- **4-Day Outlook**: `https://api-open.data.gov.sg/v2/real-time/api/four-day-outlook`
- **Temperature**: `https://api-open.data.gov.sg/v2/real-time/api/air-temperature`
- **Rainfall**: `https://api-open.data.gov.sg/v2/real-time/api/rainfall`
- **Humidity**: `https://api-open.data.gov.sg/v2/real-time/api/relative-humidity`
- **Wind Speed**: `https://api-open.data.gov.sg/v2/real-time/api/wind-speed`
- **Wind Direction**: `https://api-open.data.gov.sg/v2/real-time/api/wind-direction`

## Installation

```bash
# Install dependencies
pip install -e .
```

## Usage

Start the server:
```bash
python weatherserver.py
```

The service will be available at `http://localhost:3002`

## Robustness Features

- **Retry Logic**: Automatic retries for failed API calls (3 attempts with 2s delay)
- **Timeout Handling**: Configurable timeouts (20s) for all API requests
- **Error Recovery**: Graceful degradation when data is unavailable
- **Logging**: Comprehensive logging for debugging and monitoring
- **Health Check**: Built-in health status endpoint

## Requirements

- Python 3.13+
- FastMCP 3.4.7+
- httpx 0.28.1+

## Docker Builds Instruction

This is used in dev container envrionment.  So have to take care of the building of container during development, and production.

### Build only the production stage image

docker build --target production -t my-python-product:latest .

### Run the production container with port mapping

docker run -d -p 3002:3002 --name my-product-app my-python-product:latest