uber_pudo_searchLABSCO SUMMARY
Two tools spend real money, and the README says so twice.
The trip request and the quick-book composite dispatch an actual driver against your actual card — confirm before either fires, and do not put them on an always-allow list. The login design is the other thing worth understanding: rather than asking you to extract a token, it drives a real browser server-side and streams it to you, which is the only approach that gets past the bot defences on Uber's login. It is unofficial and wraps endpoints that can change without notice, and in HTTP mode the cookies stay in memory only — a restart means signing in again.
What it is
An unofficial MCP server that wraps Uber's rider web API. It exposes 35 tools covering the full rider surface: quoting a ride, resolving addresses, requesting and cancelling trips, watching status until the driver arrives, reading driver chat, and browsing history, receipts and promotions. Not affiliated with Uber.
What you get
- Products with real-time fares and ETAs, plus the status probe that reports city, current trip and nearby vehicles —
uber_products_list,uber_status_get - Address handling that actually resolves: autocomplete for pickup and dropoff, a place ID resolved to coordinates and a full address, refinement within a venue such as an airport terminal, and a route between them —
uber_pudo_search,uber_pudo_resolve,uber_pudo_refine,uber_navigation_route - A trip requested, watched to completion and cancelled if needed, with cancellation fees readable beforehand —
uber_trip_request,uber_trip_status_watch,uber_cancellation_info_get,uber_trip_cancel - A one-shot composite that runs the whole booking dance internally — search, resolve, products, pre-checkout, request — for when you just want a ride from X to Y —
uber_ride_book_quick - History and money: past and upcoming activities, full trip detail, receipts with the fare breakdown, receipt email, fiscal invoice status and outstanding arrears —
uber_activities_list,uber_trip_get,uber_receipt_get,uber_receipt_send_email,uber_arrears_get - Driver chat threads found by trip and read —
uber_thread_by_tracking_get,uber_thread_get - Profile, payments and promos: saved payment methods, Uber One membership state, ranked offers and the home-screen promo banner —
uber_payment_options_list,uber_membership_attributes,uber_offers_ranked,uber_promo_pill_get
Requirements
An active Uber account and Node.js ≥ 20. Two modes. HTTP + OAuth 2.1 is the recommended one: npm install pulls Chromium through Playwright, and hitting /login/start launches a real server-side Chromium that streams Uber's own login page to a canvas in your browser — you sign in normally and the server captures the cookies. That indirection exists because the rider web is gated by PerimeterX and Arkose, which a pasted token cannot satisfy. stdio mode reuses cookies from one such login, placed in .env as UBER_COOKIE_HEADER, UBER_USER_SUB, UBER_CITY_ID and UBER_SESSION_TYPE. Uber sessions last around 24 h with no refresh endpoint, so expect to redo the login. Two tools charge your payment method and dispatch a real driver.
Setup effort
Build from source — git clone https://github.com/AriOliv/uber-mcp.git
USE CASES
Pricing a ride before you commit to one
Resolve both addresses, list the products, and read the real-time fares and ETAs without opening the app.
Booking in one instruction
Give the two addresses and let the composite tool run search, resolve, products and request — confirming first, since it dispatches a real driver.
Knowing when the driver actually arrives
Watch the trip status until it changes, instead of checking the app every thirty seconds.
Pulling receipts for an expense claim
List past activities, get the trip, and read the receipt's fare breakdown, distance and duration — or have it emailed.
Being picked up at the right terminal
Refine the pickup within the venue so the access point is the one you meant, rather than the airport's centroid.
35 tools
Listed in project docs. Your client may show a different list.
uber_pudo_resolveuber_pudo_refineuber_navigation_routeuber_status_getuber_products_listuber_pre_plus_ones_getuber_reservation_data_getuber_offers_rankeduber_pre_checkout_actions_getuber_trip_requestuber_cancellation_info_getuber_trip_canceluber_ride_book_quickuber_trip_status_watchuber_activities_listuber_activities_upcominguber_activities_pastuber_trip_getuber_receipt_getuber_receipt_send_emailuber_invoice_status_getuber_arrears_getuber_thread_by_tracking_getuber_thread_getuber_user_riders_getuber_user_currentuber_user_travel_statusuber_membership_attributesuber_navlinks_getuber_tax_forms_checkuber_payment_options_listuber_promo_pill_getuber_product_suggestions_listuber_map_hero_productsBEFORE YOU INSTALL
What to know first
Tools you get
35 tools named in the project's documentation.
Requires
- A client that can reach a remote MCP server over HTTP
- UBER_COOKIE_HEADER in your environment
- UBER_USER_SUB in your environment
- UBER_CITY_ID in your environment
- UBER_SESSION_TYPE in your environment
INSTALLATION
Connect your client
You clone and build this one yourself.
Server setup
git clone https://github.com/AriOliv/uber-mcp.git
cd uber-mcp
npm install # also installs Chromium for Playwright (~170 MB)
npm run build
echo "MCP_JWT_SECRET=$(openssl rand -hex 32)" >> .env
echo "PORT=3001" >> .env
npm run devMCP Clients
Claude Code — HTTP OAuth
claude mcp add --transport http uber http://localhost:3001/mcpCursor
{
"mcpServers": {
"uber": {
"type": "http",
"url": "http://localhost:3001/mcp"
}
}
}Codex
codex mcp add --transport http uber http://localhost:3001/mcpClaude Desktop — stdio
{
"mcpServers": {
"uber": {
"command": "node",
"args": [
"<YOUR_PATH_TO_UBER_MCP>/build/index.js"
],
"env": {
"UBER_COOKIE_HEADER": "jwt-session=...; udi-id=...; ...",
"UBER_USER_SUB": "<YOUR_UBER_USER_SUB>",
"UBER_CITY_ID": "458",
"UBER_SESSION_TYPE": "desktop_session"
}
}
}
}Claude Code — stdio
claude mcp add --transport stdio uber \
--env "UBER_COOKIE_HEADER=jwt-session=...; udi-id=...; ..." \
--env UBER_USER_SUB=<YOUR_UBER_USER_SUB> \
--env UBER_CITY_ID=458 \
--env UBER_SESSION_TYPE=desktop_session \
-- node <YOUR_PATH_TO_UBER_MCP>/build/index.js