Skip to main content
Glama
tomw66

UK Weather & Travel Outfit Recommender MCP Server

by tomw66
README.md
# UK Weather & Travel Outfit Recommender MCP Server

A Model Context Protocol (MCP) server that combines Met Office weather data with travel routing to recommend what to wear for your journey.

## Features

- **Outfit Recommendations**: Get personalised clothing suggestions based on weather conditions and your travel plans
- **Weather Forecasts**: Detailed hourly weather forecasts for UK locations
- **Travel Information**: Calculate travel time and distance between locations
- Supports multiple travel modes: walking, cycling, and driving
- Real-time UK weather data from the Met Office DataHub API
- Intelligent clothing recommendations based on temperature, precipitation, wind, and UV index

## Prerequisites

- Python 3.12 or higher
- [uv](https://docs.astral.sh/uv/) package manager
- Met Office DataHub API key (register at https://datahub.metoffice.gov.uk/)

## Installation

1. Clone the repository:
```bash
git clone <repository-url>
cd commute_mcp
```

2. Create a virtual environment and install dependencies:
```bash
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
uv pip install -e .
```

4. Set up your Met Office API key:
```bash
export MET_OFFICE_API_KEY="your-api-key-here"
```

## Usage

### Running as an MCP Server

Start the server using stdio transport:

```bash
python -m src.server
```

The server provides three tools:

#### 1. Get Outfit Recommendation

Analyses your journey and provides clothing recommendations:

```json
{
  "name": "get_outfit_recommendation",
  "arguments": {
    "origin": "Bristol",
    "destination": "Bath",
    "travel_mode": "walking",
    "hours_until_departure": 0
  }
}
```

**Parameters:**
- `origin` (required): Starting location (e.g., "Bristol", "London Bridge")
- `destination` (required): Destination location
- `travel_mode` (optional): "walking", "cycling", or "driving" (default: "walking")
- `hours_until_departure` (optional): Hours until you leave, 0 for now (default: 0)

#### 2. Get Weather Forecast

Get detailed hourly weather forecast for a UK location:

```json
{
  "name": "get_weather_forecast",
  "arguments": {
    "location": "Manchester",
    "hours": 12
  }
}
```

**Parameters:**
- `location` (required): Location name (e.g., "Bristol", "Edinburgh")
- `hours` (optional): Number of hours to forecast (default: 12)

#### 3. Get Travel Information

Calculate travel time and distance:

```json
{
  "name": "get_travel_info",
  "arguments": {
    "origin": "London",
    "destination": "Cambridge",
    "mode": "driving"
  }
}
```

**Parameters:**
- `origin` (required): Starting location
- `destination` (required): Destination location
- `mode` (optional): "walking", "cycling", or "driving" (default: "walking")

### Using with Claude Desktop

To use this MCP server with Claude Desktop, add it to your Claude configuration file:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`

**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "commute-mcp": {
      "command": "uv",
      "args": ["--directory", "/path/to/commute_mcp", "run", "python", "-m", "src.server"],
      "env": {
        "MET_OFFICE_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

Then restart Claude Desktop. You can now ask Claude questions like:
- "What should I wear for a walk from Bristol to Bath?"
- "What's the weather forecast for Edinburgh for the next 6 hours?"
- "How long would it take to cycle from Manchester to Salford?"

## How It Works

1. **Geocoding**: Converts location names to coordinates using OpenStreetMap's Nominatim API
2. **Routing**: Calculates travel time and distance using OSRM (Open Source Routing Machine)
3. **Weather Data**: Fetches hourly forecasts from the Met Office DataHub API
4. **Analysis**: Analyses weather conditions for your journey window
5. **Recommendations**: Generates clothing suggestions based on:
   - Temperature and "feels like" temperature
   - Precipitation probability
   - Wind speed and gusts
   - UV index
   - Travel mode and duration

## Development

### Running Tests

```bash
pytest tests/
```

### Project Structure

```
commute_mcp/
├── src/
│   ├── __init__.py
│   ├── server.py       # MCP server and tool handlers
│   ├── location.py     # Geocoding and routing
│   ├── weather.py      # Weather data and outfit recommendations
│   └── preferences.py  # User preferences management
├── tests/
│   ├── test_api.py
│   └── test_geocode.py
├── pyproject.toml
└── README.md
```

## APIs Used

- **Met Office DataHub**: Weather forecasts for UK locations
- **OSRM**: Open-source routing engine for travel calculations
- **Nominatim**: OpenStreetMap geocoding service

TDQS

A4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a distinct purpose: outfit recommendation, weather forecast, travel info, and preference storage. No overlap or confusion between them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: get_outfit_recommendation, get_weather_forecast, get_travel_info, set_user_preference, get_user_preferences. The pattern is clear and uniform.

Tool Count5/5

With 5 tools, the server is well-scoped for its purpose. Each tool contributes to the core workflow of recommending outfits based on weather and travel, plus necessary preference management.

Completeness4/5

The core functionality is covered: weather, travel, recommendation, and preference storage/retrieval. Minor gaps include no explicit update/delete for preferences, but setting a preference can overwrite, so this is not a critical dead end.

Maintenance

ActivityInactive
ResponsivenessNo issues