UK Weather & Travel Outfit Recommender MCP Server
# 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
Scored across 5 tools
Each tool has a distinct purpose: outfit recommendation, weather forecast, travel info, and preference storage. No overlap or confusion between them.
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.
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.
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.