The description is explicit that request_ride returns a confirmation prompt and does not automatically confirm the ride, so committing is a separate deliberate act rather than a side effect. Around that, the route lives as server-side state rather than as call arguments: set_pickup and set_destination establish it, get_fare_estimate refuses without it, and status is where you read back what the server currently believes. The headless flag decides whether any of this works unattended — login says a phone-based account may require an OTP, and headless=false is the route to completing that by hand.
An Uber client driven by browser automation, with 11 tools covering session status and login, pickup and destination, fare and ride-type estimates, ride requests, live status, cancellation and history.
- Session handling with the awkward case named: status reports authentication together with the current pickup and destination if set, login authenticates with an email or phone and password and notes that a phone-based account may require an OTP — for which headless=false lets a person complete the verification — and logout clears the session and stored cookies.
- The route held as state: set_pickup and set_destination take addresses, and status reflects what the server currently thinks the trip is.
- Pricing before committing: get_fare_estimate returns estimates for the available ride types and requires pickup and destination to be set first, and get_ride_options returns the ride types with pricing and ETAs for the current route.
- Requesting with a stop in the middle: request_ride returns a confirmation prompt and does not automatically confirm the ride, and requires login with pickup and destination already set.
- After the request: get_ride_status returns the current or most recent ride, cancel_ride cancels a pending or active request behind a confirm argument, and get_ride_history returns recent rides.
An Uber account the server logs into: login takes the email or phone with the password, and a phone-based account may need an OTP completed by hand with headless=false. No credentials are configured on the server itself.
One command — npx @striderlabs/mcp-uber
