Skip to main content
Glama
wheelstransit

wheels-router-mcp

Official
README.md
# Wheels Router MCP Server

Built with [MatthewDailey/mcp-starter](https://github.com/MatthewDailey/mcp-starter/)

A [Model Context Protocol](https://modelcontextprotocol.io) server for Hong Kong public transit routing. Provides tools to search locations and plan trips using the [Wheels Router API](https://engine.justusewheels.com).

## Features

- **Location Search**: Find places in Hong Kong using OpenStreetMap Nominatim
- **Trip Planning**: Get public transit routes with MTR, bus, ferry, and walking directions

## Installation

### With npm

```bash
npm install -g wheels-router-mcp
```

#### Claude Desktop

Add to your config (`~/Library/Application Support/Claude/claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "wheels-router": {
      "command": "wheels-router-mcp"
    }
  }
}
```

#### OpenCode

Add to your OpenCode config:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "wheels-router": {
      "type": "local",
      "command": ["npx", "-y", "wheels-router-mcp"],
      "enabled": true
    }
  }
}
```

### From Source

1. Clone and build:

```bash
git clone https://github.com/wheelstransit/wheels-router-mcp
cd wheels-router-mcp
npm install
npm run build
```

2. Add to your preferred tool's config:

**Claude Desktop:**

```json
{
  "mcpServers": {
    "wheels-router": {
      "command": "node",
      "args": ["/absolute/path/to/wheels-router-mcp/dist/index.cjs"]
    }
  }
}
```

**OpenCode:**

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "wheels-router": {
      "type": "local",
      "command": ["node", "/absolute/path/to/wheels-router-mcp/dist/index.cjs"],
      "enabled": true
    }
  }
}
```

3. Restart your application

## Available Tools

### `search_location`

Search for places in Hong Kong.

**Parameters:**
- `query` (string, required): Place name (e.g., "Yau Tong MTR Exit A2")
- `limit` (number, optional): Max results (1-10, default: 5)

**Example:**
```
Find "Tsim Sha Tsui"
```

### `plan_trip`

Plan a public transit trip in Hong Kong.

**Parameters:**
- `origin` (string, required): Starting point as `lat,lon` or `stop:ID`
- `destination` (string, required): Destination as `lat,lon` or `stop:ID`
- `depart_at` (string, optional): ISO 8601 departure time
- `arrive_by` (string, optional): ISO 8601 arrival deadline
- `modes` (string, optional): Comma-separated modes (e.g., `mtr,bus,ferry`)
- `max_results` (number, optional): Max route plans (1-5)

**Example:**
```
Plan a trip from 22.3193,114.2644 to 22.2783,114.1747
```

## Development

Run with Inspector for testing:

```bash
npm run dev
```

This starts both the file watcher and MCP Inspector.

## License

See [LICENSE](LICENSE)

TDQS

B3/5.0

Scored across 3 tools

Disambiguation4/5

plan_trip and search_location have clear, non-overlapping purposes, and hello_tool is obviously set apart. However, hello_tool is a vague stub that doesn't fit the travel domain, so there is a slight coherence cost.

Naming Consistency4/5

plan_trip and search_location both follow a verb_noun snake_case pattern. hello_tool breaks the pattern with a greeting-style verb, but since only one of three tools deviates, the naming is mostly consistent.

Tool Count3/5

Three tools is borderline for a transit router, and only two are actually useful. hello_tool is filler, which makes the effective functional surface feel thin for the stated purpose.

Completeness4/5

The core workflow is covered: search_location for origin/destination lookup and plan_trip for routing. Minor gaps exist, such as route/fare rule inspection or provider metadata, but agents can complete basic trip planning without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues