MCP Uber Server
An MCP (Model Context Protocol) server for booking Uber rides through AI assistants.
Features
- OAuth 2.0 authentication with Uber
- Get price estimates for rides
- Request Uber rides
- Check ride status
- Cancel rides
Installation
Using npm (global installation)
npm install -g mcp-uber
Using npx (no installation required)
npx mcp-uber
Setup
Step 1: Create an Uber Developer Account
- Go to Uber Developer Dashboard
- Click "Sign in" and either:
- Use an existing Uber rider/driver account
- Create a new account specifically for development
๐ก Tip: For organizations, create an email alias (e.g., [email protected]) instead of using a personal account for easier ownership transfer.
Step 2: Create a New App
- In the Developer Dashboard, click "Create App" (top right corner)
- Fill in the required information:
- App Name: Your application name
- Description: Brief description of what your app does
- Click "Create"
Step 3: Get Your API Credentials
- Navigate to your app in the dashboard
- Go to the Auth tab
- You'll find:
- Client ID: Public identifier for your app
- Client Secret: Private key (keep this secure!)
- Server Token: For server-side requests
Step 4: Configure OAuth Settings
- In the Auth tab, add your redirect URI:
- For local testing:
http://localhost:3000/callback
- For production: Your actual callback URL
- For local testing:
- Select required scopes:
profile
- User's basic profile informationrequest
- Request rides on user's behalfride_request
- View and manage active ride requests
โ ๏ธ Note: The request
scope is privileged and requires Uber approval for production use. During development, your account can use it without approval.
Step 5: Set Up Environment Variables
Create environment variables with your credentials (see Configuration section below)
Usage with Claude Desktop
Using npm (global installation)
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json
):
{
"mcpServers": {
"uber": {
"command": "mcp-uber",
"env": {
"UBER_CLIENT_ID": "your_client_id",
"UBER_CLIENT_SECRET": "your_client_secret",
"UBER_REDIRECT_URI": "http://localhost:3000/callback",
"UBER_ENVIRONMENT": "sandbox"
}
}
}
}
Using npx
Add to your Claude Desktop configuration:
{
"mcpServers": {
"uber": {
"command": "npx",
"args": ["mcp-uber"],
"env": {
"UBER_CLIENT_ID": "your_client_id",
"UBER_CLIENT_SECRET": "your_client_secret",
"UBER_REDIRECT_URI": "http://localhost:3000/callback",
"UBER_ENVIRONMENT": "sandbox"
}
}
}
}
Available Tools
- uber_get_auth_url - Get OAuth authorization URL
- uber_set_access_token - Set user's access token
- uber_get_price_estimates - Get price estimates for a ride
- uber_request_ride - Request an Uber ride
- uber_get_ride_status - Check ride request status
- uber_cancel_ride - Cancel a ride request
OAuth Flow
- Use
uber_get_auth_url
to get the authorization URL - User visits the URL and authorizes your app
- After callback, exchange the code for an access token
- Use
uber_set_access_token
to store the token - Now you can make API calls
Configuration
Environment Variables
The MCP server requires the following environment variables:
UBER_CLIENT_ID
: Your Uber app client IDUBER_CLIENT_SECRET
: Your Uber app client secretUBER_REDIRECT_URI
: OAuth callback URL (default:http://localhost:3000/callback
)UBER_ENVIRONMENT
: Eithersandbox
orproduction
(default:sandbox
)
Testing Your Integration
Use sandbox mode for testing:
- Set
UBER_ENVIRONMENT=sandbox
in your environment - Sandbox mode simulates ride requests without real drivers
- Perfect for development and testing
- Set
Test the OAuth flow:
- Use the
uber_get_auth_url
tool to get an authorization URL - Visit the URL and authorize your app
- After authorization, Uber will redirect to your callback URL with a code
- Exchange the code for an access token (you'll need to set up your own callback handler)
- Use
uber_set_access_token
to store the token in the MCP server
- Use the
Setting up a callback handler:
- For testing, you can use a simple Express server (see
examples/oauth-server.js
in the GitHub repo) - For production, implement a secure callback handler in your application
- The callback URL must match exactly what's configured in your Uber app
- For testing, you can use a simple Express server (see
Important Notes
Sandbox vs Production
Sandbox Mode (default):
- Simulated rides and drivers
- No real charges
- Perfect for testing
- Limited to your developer account
Production Mode:
- Real rides and charges
- Requires Uber approval for privileged scopes
- Must pass Uber's review process
Security Best Practices
- Never commit credentials: Keep your Client Secret secure
- Use environment variables: Don't hardcode credentials
- Implement proper token storage: The current in-memory storage is for demo only
- Validate redirect URIs: Ensure your callback URLs are properly configured
API Limitations
- Rate limits apply (check Uber's documentation)
- Privileged scopes require approval for production use
- Sandbox mode has some limitations compared to production
Troubleshooting
- "Invalid scope" error: Your app needs approval for privileged scopes in production
- "Invalid redirect URI": Make sure your redirect URI exactly matches what's configured in the Uber dashboard
- "Unauthorized" errors: Check that your access token is valid and not expired