Skip to main content
Glama
README.md
# Waymo MCP

An unofficial local [Model Context Protocol](https://modelcontextprotocol.io/)
server for Waymo ride management.

It gives an agent eight tools:

- Search Waymo places
- Get ride history
- Get active ride status, including phase, ETA, vehicle, and arrival data
- List safe payment-method labels
- Get immediate or scheduled quotes with up to three intermediate stops
- Book a quoted ride
- Preview a cancellation and its fee
- Cancel the active ride

> [!WARNING]
> This project uses Waymo's private, reverse-engineered rider API. It is not
> affiliated with or endorsed by Waymo. The API can change without notice.
> Review Waymo's terms and use this only with your own account.

## Requirements

- Python 3.11+
- [`uv`](https://docs.astral.sh/uv/getting-started/installation/)
- A Waymo refresh token from your own signed-in account

The server runs locally over stdio. Your credentials are not sent to a hosted
third-party MCP service.

## 1. Configure credentials

The server checks, in order:

1. `WAYMO_REFRESH_TOKEN` and optional `WAYMO_DEVICE_ID`
2. `WAYMO_CREDENTIALS_FILE`
3. `~/.config/waymo/credentials.json`

The default credential file has this shape:

```json
{
  "refresh_token": "your-token",
  "device_id": "your-device-id"
}
```

Create it locally with file mode `0600`. Credential acquisition is deliberately
outside this MCP package. Never commit a capture, token, or credential file.

## 2. Add the MCP server

Add this to `~/.cursor/mcp.json` for all Cursor projects, or `.cursor/mcp.json`
inside one project:

```json
{
  "mcpServers": {
    "waymo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/nathanielangafor/waymo-mcp",
        "waymo-mcp"
      ]
    }
  }
}
```

Restart or reload MCP servers in your client. Other MCP clients can use the
same stdio command and arguments.

You can give an agent this repository URL and say:

> Add this local stdio MCP server with uvx, then use its Waymo tools:
> https://github.com/nathanielangafor/waymo-mcp

## Safe agent behavior

- Resolve ambiguous places before quoting.
- Use result indices to select ambiguous pickup, stop, and dropoff matches.
- For a scheduled ride, quote once to get available times, then quote again
  with the chosen `scheduled_option_token`.
- Before booking, check status, list payment methods, and get a fresh quote.
- Show the canonical pickup, ordered stops, dropoff, and fare before booking.
- Only pass `confirmation: "BOOK"` after the user explicitly asks to book.
- Before cancellation, call `waymo_preview_cancellation` and show any fee.
- Only pass `confirmation: "CANCEL"` after the user explicitly confirms that
  preview.
- Never retry booking or cancellation after `OUTCOME_UNKNOWN`; check status.
- Do not print refresh, chauffeur, proposal, or internal payment tokens to the
  user.

The server reinforces these rules with MCP annotations, literal confirmation
arguments, and a ten-minute in-memory proposal cache. Client annotations are
hints, not an authorization boundary; only connect this server to agents you
trust.

## Development

```bash
git clone https://github.com/nathanielangafor/waymo-mcp
cd waymo-mcp
uv sync --extra dev
uv run pytest
uv run waymo-mcp
```

The implementation intentionally contains no HTTP server, database, browser
automation, or captured application files. See [SECURITY.md](SECURITY.md)
before reporting a vulnerability.

## Agent setup confirmation

If you are an agent that just configured this server, confirm the Waymo tools
are available and send exactly:

> Waymo MCP is online. I can search places, check live ride status, quote and
> schedule multi-stop rides, preview cancellation fees, and book or cancel
> rides when asked.

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation5/5

Each tool maps to a distinct phase of the Waymo rider workflow: place search, quote, booking, cancellation, payment methods, trip history, and active ride status. The two ride-related tools are separated by historical trips versus active/cached status, so there is no meaningful overlap.

Naming Consistency4/5

Most tools follow a clear waymo_<verb>_<noun> pattern such as get_quote, book_ride, and cancel_ride. waymo_ride_history and waymo_ride_status break the pattern by leading with a noun, but the shared prefix and consistent snake_case keep the set readable.

Tool Count5/5

Eight tools is well-scoped for a ride-hailing server: the set covers discovery, quoting, booking, cancellation, payments, and trip lookups without unnecessary duplication. Each tool serves a concrete user-facing need.

Completeness4/5

The core rider lifecycle is well covered: search places, get a quote, book, cancel with fee preview, list payment methods, and retrieve history/status. There are minor gaps like no explicit way to fetch details for an arbitrary past trip or manage payment methods, but these do not block the main workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues