DriveBC MCP Server
# DriveBC MCP Server
An MCP (Model Context Protocol) server that provides AI assistants with access to real-time BC highway conditions, road closures, and weather alerts via the Open511-DriveBC API.
## Features
- **Highway Conditions**: Get current conditions for specific BC highways
- **Regional Overview**: View all events within a BC region
- **Road Closures**: List active closures and restrictions
- **Weather Alerts**: Access weather-related incidents and warnings
- **Smart Caching**: 5-minute cache to reduce API load while keeping data fresh
- **Type-Safe**: Full TypeScript implementation with proper types
## Installation
```bash
npm install
npm run build
```
## Usage
### Running the Server
```bash
npm start
```
The server runs on stdio transport and is designed to be used with MCP-compatible AI clients like Claude Desktop.
### Development Mode
```bash
npm run dev
```
## Configuration
### Claude Desktop
Add the following to your Claude Desktop configuration file:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Linux**: `~/.config/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"drivebc": {
"command": "node",
"args": ["/path/to/drivebc_mcp/build/index.js"]
}
}
}
```
After adding the configuration, restart Claude Desktop.
### LM Studio
LM Studio supports MCP as of version 0.3.17. Add the following to your LM Studio MCP configuration:
**macOS/Linux**: `~/.lmstudio/mcp.json`
**Windows**: `%USERPROFILE%/.lmstudio/mcp.json`
```json
{
"mcpServers": {
"drivebc": {
"command": "node",
"args": ["/path/to/drivebc_mcp/build/index.js"]
}
}
}
```
After adding the configuration, restart LM Studio.
## Available Tools
### 1. get_highway_conditions
Get current conditions, incidents, and closures for a specific BC highway.
**Parameters:**
- `highway` (required): Highway number or name (e.g., "Highway 1", "99", "1")
- `severity` (optional): Filter by severity level (MINOR, MODERATE, MAJOR, UNKNOWN)
- `includeScheduled` (optional): Include scheduled construction (default: true)
**Example:**
```
Check Highway 1 conditions
```
### 2. get_regional_conditions
Get road conditions and events for a specific BC region.
**Parameters:**
- `region` (required): BC region name (Lower Mainland, Vancouver Island, Thompson Okanagan, Kootenay Rockies, Cariboo, Northern BC)
- `eventType` (optional): Filter by event type (CONSTRUCTION, INCIDENT, WEATHER_CONDITION, ROAD_CONDITION, SPECIAL_EVENT)
- `limit` (optional): Maximum events to return (default: 50, max: 500)
**Example:**
```
Show road conditions in the Lower Mainland
```
### 3. get_road_closures
List all current road closures and major restrictions.
**Parameters:**
- `region` (optional): Filter by BC region
- `highway` (optional): Filter by specific highway
- `severityMinimum` (optional): Minimum severity to include (MINOR, MODERATE, MAJOR; default: MODERATE)
**Example:**
```
Are there any road closures on Highway 1?
```
### 4. get_weather_alerts
Get active weather alerts and road condition warnings.
**Parameters:**
- `region` (optional): Filter by BC region
- `alertType` (optional): Type of alert (WEATHER_CONDITION, ROAD_CONDITION, INCIDENT)
- `severityMinimum` (optional): Minimum severity level (default: MINOR)
**Example:**
```
Show weather alerts for Northern BC
```
## Data Source
This server uses the [Open511-DriveBC API](https://api.open511.gov.bc.ca) which provides:
- Real-time road events and incidents
- Road closures and construction updates
- Weather conditions and alerts
- Travel advisories
The API is public and requires no authentication.
## Caching
The server implements a 5-minute cache to:
- Reduce load on the DriveBC API
- Improve response times
- Maintain reasonably fresh data
Cache hits and misses are logged to stderr for monitoring.
## Project Structure
```
drivebc_mcp/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── tools/
│ │ ├── highway-conditions.ts # Highway-specific queries
│ │ ├── regional-conditions.ts # Regional overview
│ │ ├── road-closures.ts # Closures and restrictions
│ │ └── weather-alerts.ts # Weather and incidents
│ ├── api/
│ │ ├── client.ts # API client with caching
│ │ ├── types.ts # TypeScript type definitions
│ │ └── constants.ts # BC regions and highways
│ ├── cache/
│ │ └── manager.ts # Cache implementation
│ └── utils/
│ └── formatters.ts # Response formatting
├── package.json
├── tsconfig.json
└── README.md
```
## Development
### Type Checking
```bash
npm run type-check
```
### Building
```bash
npm run build
```
## BC Regions
The server supports the following BC regions:
- Lower Mainland
- Vancouver Island
- Thompson Okanagan
- Kootenay Rockies
- Cariboo
- Northern BC
## License
MIT
TDQS
Scored across 4 tools
The tools are mostly distinct, with each focusing on a specific aspect of road conditions: highway-specific, regional, closures, and weather alerts. However, there is some overlap between get_highway_conditions and get_road_closures, as both could include closure information, which might cause minor confusion for an agent. The descriptions help clarify the distinctions, but the boundaries are not perfectly clear.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., get_highway_conditions, get_regional_conditions). This predictability makes it easy for an agent to understand and use the tools without confusion, as there are no deviations in naming conventions.
With 4 tools, the server is well-scoped for providing road condition information in BC. Each tool serves a distinct purpose, and the count is appropriate for the domain, avoiding both overcomplication and undercoverage. This aligns with typical MCP server tool counts for focused services.
The tool surface covers key aspects of road conditions, including specific highways, regions, closures, and weather alerts, which supports planning and monitoring. A minor gap exists in not having tools for historical data or predictive analytics, but agents can work around this with the provided tools for current conditions. Overall, it offers good coverage for the stated purpose.