43 tools, one delivery cycle
Every tool maps to a REST endpoint and returns JSON with a next_action. Discovery tools need no key. Money is in integer cents. Errors come back as text with the error code and a hint about which tool to call next.
Discovery
Free and unauthenticated. Use these first to check feasibility and show the human a price.
check_coverageCheck coverageno keyTells you whether an address or a lat/lng pair is inside a RentADriver service area, which city it maps to, and the nearest area with distance if it isn't covered.
- Inputs
- address (string) or lat + lng (numbers)
- Returns
- covered, area {slug, name, currency, timezone}, nearest_area, resolved address
list_service_areasList service areasno keyLaunch cities with country, currency, timezone, centre, radius, launch phase and the minimum price. Use it to explain coverage or pick a city before quoting.
- Inputs
- none
- Returns
- service_areas[]
get_quoteGet a delivery quoteno keyPrices a delivery from one pickup to one or more drop-offs. Geocodes addresses, routes the trip, applies size, urgency, vehicle and live surge. Returns a quote_id valid for 15 minutes plus the full breakdown and ETAs, so the agent can show the human the price before spending anything.
- Inputs
- pickup (stop), dropoffs[] (1–8 stops), items[] (description, size_class S/M/L/XL, category), urgency asap|today|scheduled, scheduled_at, vehicle_class
- Returns
- quote {id, client_price_cents, driver_pay_cents, currency, eta_pickup_min, eta_dropoff_min, breakdown, expires_at, resolved stops}
list_intercity_lanesNearby-city routesno keyLists, for every launch city, the neighbouring launch cities it delivers to the same day: up to 160 km by road (London → Reading, Leeds → Sheffield, San Francisco → San Jose and more), with road distance, drive time and a same-day sample price for a size M parcel by car.
- Inputs
- none
- Returns
- lanes[] {slug, from, to, currency, distance_km, duration_min, transit_min, sample_price_cents}, pricing (max_km, return_factor, service day, cancellation percentage)
get_intercity_quoteSame-day city-to-city quoteno keyPrices a same-day delivery to a neighbouring city with one dedicated driver. The pickup must be in a launch city and the last drop-off inside, or within 20 km of, another launch city in the same country at most 160 km away by road. Priced on the origin city's local rate card plus an allowance for the drive back; longer trips are declined as too_far. Returns the quote_id with the pickup and arrival times.
- Inputs
- pickup (stop), dropoffs[] (1–3 stops), items[], scheduled_at, vehicle_class car|suv|van|truck
- Returns
- quote {id, service_kind: intercity, intercity {lane_slug, speed: same_day, departure_at, arrival_by, transit_min}, client_price_cents, breakdown.intercity {return_km, return_cents}}
get_platform_statsPlatform statsno keyLive counts: drivers signed up, on shift now, service areas, deliveries, agents connected, founding-driver signups. Useful for status pages or sanity checks.
- Inputs
- none
- Returns
- stats
Account
Self-serve signup, balance, deposits and keys. Everything here needs an API key except signup.
list_country_workspacesCountry workspacesAPI keyEnabled countries, separate currency balances and available markets.
- Inputs
- none
- Returns
- workspaces[], markets[]
enable_country_workspaceEnable a countryAPI keyCreate a zero-balance country workspace. Admin role required; no conversion.
- Inputs
- country_code, spending_cap_per_delivery_cents?, daily_cap_cents?
- Returns
- workspace
signupCreate account and API keyno keyCreates an organisation for an agent, app or business and returns an API key exactly once. Store the key as RENTADRIVER_API_KEY and restart the MCP server.
- Inputs
- name, email, country_code US|GB|AU|CA (default US), kind agent|app|business, agent_framework (optional)
- Returns
- organization_id, api_key (shown once), wallet_balance_cents
check_account_statusAccount statusAPI keyConfirms the configured key works and returns the account name, plan, wallet balance, spending caps and which capabilities are enabled (card deposits, x402). Without a key it reports what still works (quotes).
- Inputs
- none
- Returns
- account, capabilities
get_wallet_balanceWallet balanceAPI keyCurrent balance in cents with the last 50 ledger entries (deposits, holds, releases, captures, tips, refunds).
- Inputs
- none
- Returns
- wallet {balance_cents, currency, ledger[]}
create_wallet_depositDeposit by cardAPI keyCreates a Stripe Checkout session for a card deposit and returns the URL a human must open to pay. The wallet is credited when payment completes.
- Inputs
- workspace_id?, amount_cents (≥ 500)
- Returns
- checkout_url, session_id, expires_at
create_x402_depositDeposit USDC via x402API keyAgent-native funding without a card. Returns x402 v2 payment requirements for USDC on Base; sign them with an x402 client and retry the REST endpoint with the payment header to credit the wallet. Returns not-enrolled while the account is outside early access.
- Inputs
- workspace_id?, amount_cents (≥ 100)
- Returns
- payment_required, endpoint, requirements or credited_cents
set_spending_controlsSpending controlsAPI keyCaps what the account can spend per delivery and per rolling 24 hours. The API refuses any create_delivery above the cap. Pass null to clear a cap.
- Inputs
- workspace_id?, spending_cap_per_delivery_cents, daily_cap_cents
- Returns
- controls
list_api_keysList API keysAPI keyLists the account's keys with prefix, name, last use and revocation state. Full keys are never returned.
- Inputs
- none
- Returns
- keys[]
create_api_keyCreate API keyAPI keyIssues an additional key (max 10 active) for another agent or environment. The key is shown once.
- Inputs
- name (optional)
- Returns
- key, prefix, id
revoke_api_keyRevoke API keyAPI keyPermanently deactivates a key. You cannot revoke the key you are calling with.
- Inputs
- key_id
- Returns
- revoked
Deliveries
Create, fund, read and manage deliveries. All mutating tools are idempotent when you pass idempotency_key.
create_deliveryCreate a deliveryAPI keyBooks a delivery from a quote_id or directly from pickup and drop-offs. With fund=true (default) the price is held from the wallet and dispatch starts immediately. dryRun=true validates, prices and checks caps and funds without creating anything. Prohibited items are refused. Returns the delivery with next_action.
- Inputs
- workspace_id?, dispatch_timeout_hours? (0.25–72), quote_id or pickup + dropoffs[], items[], urgency, scheduled_at, vehicle_class, instructions, contingency {if_no_answer, if_closed, max_wait_minutes}, external_ref, idempotency_key, webhook_url, metadata, fund, dryRun
- Returns
- delivery {id, short_code, status, next_action, price_cents, stops[], tracking_url}
create_store_pickupStore pickup and deliveryAPI keyShortcut for the most common agent job: a driver collects a prepaid order from a store using the order reference and delivers it with a photo and the recipient's name. Sets sensible proof and instructions for you.
- Inputs
- store_address, order_reference, store_phone, dropoff_address, recipient_name, recipient_phone, item_description, size_class, instructions, dryRun
- Returns
- delivery
create_batchCreate several deliveriesAPI keySubmits up to 25 create_delivery payloads in one call and returns a per-item result, so one bad address does not fail the batch.
- Inputs
- deliveries[] (create_delivery payloads)
- Returns
- results[] {ok, delivery | error}
fund_deliveryFund a deliveryAPI keyHolds the price from the wallet for a delivery created with fund=false, or retries funding after a deposit. Moves the delivery to dispatching (or funded if scheduled).
- Inputs
- delivery_id
- Returns
- status, delivery
get_deliveryGet a deliveryAPI keyFull delivery record by id or short code: status, next_action, stops with statuses, driver summary and live position while active, ETAs, proof summary, timestamps.
- Inputs
- delivery_id (uuid or RD-XXXXXXX)
- Returns
- delivery
list_deliveriesList deliveriesAPI keyPages through the account's deliveries, newest first. Filter by status ('active' or a comma list) and creation time.
- Inputs
- status, since (ISO), limit, offset
- Returns
- deliveries[], total
create_recipient_codeCreate a private recipient codeAPI keyGenerate or replace a six-digit handover code for a stop requiring OTP proof. Share it privately with the recipient, never the driver. Expires after seven days and locks after five failed attempts.
- Inputs
- delivery_id, stop_id (UUIDs)
- Returns
- code, expires_in_hours, message
track_deliveryTrack a deliveryAPI keyCompact live view for polling: status, next_action, ETAs, driver first name and position, per-stop progress, last event and the SSE stream URL. Poll every 30–60 seconds while active.
- Inputs
- delivery_id
- Returns
- tracking
get_delivery_eventsDelivery timelineAPI keyEvery event on the delivery in order: created, funded, dispatching, offers_sent, assigned, each driver step, delivered, confirmed, paid, plus messages and location pings.
- Inputs
- delivery_id
- Returns
- events[]
update_deliveryUpdate a deliveryAPI keyChanges instructions, contingency rules, the drop-off contact or the window while the job is in progress. The driver is notified.
- Inputs
- delivery_id, instructions, contingency, dropoff_contact {contact_name, contact_phone}, window_end, metadata
- Returns
- delivery
cancel_deliveryCancel a deliveryAPI keyCancels and releases the hold. Free before a driver is assigned; after assignment and before pickup, a cancellation fee is charged. Not possible after pickup: use create_return instead.
- Inputs
- delivery_id, reason
- Returns
- delivery
create_returnCreate a return legAPI keyBooks the reverse trip of a completed delivery: the driver collects from the last drop-off and brings the item back to the original pickup, with proof at both ends.
- Inputs
- delivery_id
- Returns
- delivery (the return)
Driver communication
Messages go to the assigned driver's app and are answered in the same thread.
send_message_to_driverMessage the driverAPI keySends a message to the assigned driver as a push notification and in-app thread. Only works once a driver is assigned.
- Inputs
- delivery_id, body (≤ 2000 chars)
- Returns
- message id
get_delivery_messagesRead messagesAPI keyThe full message thread between your account and the driver for one delivery, oldest first.
- Inputs
- delivery_id
- Returns
- messages[]
Proof and settlement
Verify the outcome, then release or dispute the payment.
get_proof_of_deliveryProof of deliveryAPI keySigned photo URLs (valid one hour), signature image, recipient name, OTP result, coordinates and timestamps for the delivery and each stop.
- Inputs
- delivery_id
- Returns
- proof, stops[]
confirm_deliveryConfirm deliveryAPI keyConfirms a delivered job, captures the held funds and releases the driver's pay. If you never call it, the delivery auto-confirms 24 hours after delivery.
- Inputs
- delivery_id
- Returns
- delivery (status paid)
open_disputeOpen a disputeAPI keyFreezes the funds and asks a human to review the proof. Available on delivered, confirmed, failed and returned deliveries within 48 hours. Optional evidence URLs.
- Inputs
- delivery_id, reason, evidence[] (urls)
- Returns
- dispute_id, status
tip_driverTip the driverAPI keyAdds a tip from the wallet after delivery. 100% goes to the driver.
- Inputs
- delivery_id, amount_cents (50–50000), idempotency_key (reuse for retries)
- Returns
- tip_cents
rate_driverRate the driverAPI key1–5 stars with an optional comment. Ratings feed dispatch priority and driver tiers.
- Inputs
- delivery_id, stars, comment
- Returns
- ok
Webhooks
Prefer webhooks or the SSE stream over polling for long-running agents.
register_webhookRegister a webhookAPI keyRegisters a URL for delivery.* events (or a subset). Returns the HMAC signing secret once; every POST carries X-RentADriver-Signature with a timestamp.
- Inputs
- url, events[] (default delivery.*)
- Returns
- webhook, secret
list_webhooksList webhooksAPI keyActive webhooks on the account.
- Inputs
- none
- Returns
- webhooks[]
delete_webhookDelete a webhookAPI keyDeactivates a webhook. Queued deliveries to it stop.
- Inputs
- webhook_id
- Returns
- ok
list_shopify_ordersList Shopify ordersAPI keyOrders the RentADriver app for Shopify has seen on the shops connected to this account, with the booking status (booked / skipped / needs_funds / failed) and the linked delivery. Requires the app to be installed on the store.
- Inputs
- shop_id (optional), status (optional), limit
- Returns
- orders[] {id, name, shop, status, delivery_id, created_at}
book_shopify_orderBook a Shopify orderAPI keyBook a same-day delivery for a Shopify order by its name (e.g. #1042) or id. Pickup is the store location, drop-off the order's shipping address, items from the line items. force=true ignores the shop's radius and size limits; on success the order is fulfilled with the tracking link.
- Inputs
- order (name or id), shop_id (optional), force (optional), dryRun (optional)
- Returns
- delivery {id, short_code, status, tracking_url, price}
list_store_ordersList store ordersAPI keyOrders the RentADriver connector has seen on the WooCommerce, BigCommerce, Wix Stores or Squarespace stores connected to this account, with the booking status (booked / skipped / needs_funds / failed) and the linked delivery. Requires the store to be connected from rentadriver.ai/integrations/<platform>.
- Inputs
- platform woocommerce|bigcommerce|wix|squarespace, status (optional), limit
- Returns
- orders[] {id, order_number, store, status, delivery, created_at}
book_store_orderBook a store orderAPI keyBook a same-day delivery for a WooCommerce, BigCommerce, Wix Stores or Squarespace order by its number (e.g. #1042) or id. Pickup is the store location, drop-off the order's shipping address, items from the line items. Fetches the order from the platform if the connector has not seen it; force=true ignores the store's radius and size limits. On success the order is marked shipped / fulfilled with the tracking link at pickup.
- Inputs
- platform, order (number or id), store (optional), force (optional)
- Returns
- order {order_number, status}, delivery {id, short_code, status, tracking_url, price_cents}, next_action
Resources and prompts
delivery://{id}A delivery by id or short code as JSON, for clients that prefer resources over tool calls.
coverage://{area}Coverage details for one service area; the list shows every launch city.
openapi://specThe full REST OpenAPI document, for agents that want to call endpoints directly.
prompt: plan_deliveryWalks the agent through coverage, quote, create, track and confirm for one delivery. Arguments: pickup, dropoff, item, deadline.
Setup
One command per client. The first run opens a browser sign-in (OAuth) or creates an account; quotes and coverage work before that.
claude mcp add rentadriver -- npx -y rentadriver-mcp
# hosted server instead (sign in with OAuth when asked):
claude mcp add --transport http rentadriver https://mcp.rentadriver.ai/mcpEnv: RENTADRIVER_API_KEY (overrides the stored sign-in), RENTADRIVER_API_URL (default https://api.rentadriver.ai). Sandbox keys (rd_test_) run against simulated drivers. Key-based local config: { "mcpServers": { "rentadriver": { "command": "npx", "args": ["-y", "rentadriver-mcp"], "env": { "RENTADRIVER_API_KEY": "rd_live_YOUR_KEY" } } } }
Interactive cards (MCP App)
In hosts that support MCP Apps, get_delivery renders a live tracker card (status, stops, driver and ETA, proof photos, a Refresh button and the tracking link) and get_quote renders a quote card (price, ETA, breakdown, cheaper time slots). The cards are read-only: booking, funding and cancelling stay in the conversation, so nothing is charged from a click. Other hosts get the same data as JSON.
Connect with OAuth
Add RentADriver to your MCP client, approve access in your browser, and start booking. Your client manages the connection token.
https://mcp.rentadriver.ai/mcpAdd the server
Open your client’s MCP or connector settings and add the server URL above. In Claude, choose Settings → Connectors → Add custom connector.
Approve access
Follow the browser sign-in to RentADriver. Sign in with Google or an email/SMS code — or create your account right there — review the requested permissions, then choose Allow. No account yet? A sandbox account with simulated drivers works too.
Start delivering
Return to your client to quote, book and track deliveries. Disconnect the app whenever you need to revoke its access.
Access you approve
Read quotes, deliveries, tracking, proof and balance. Book using your wallet, cancel, confirm and manage webhooks.
Account controls stay with you
Connected apps cannot add funds, create API keys or change team settings.
Building your own client? Protocol and endpoints
The host discovers the authorization server from the 401 challenge and registers dynamically. Use redirect_uris (HTTPS, loopback HTTP or a custom scheme), code_challenge_method=S256, and exchange the code with client_id + code_verifier. Public clients need no secret.
- Resource discovery
- GET
https://mcp.rentadriver.ai/.well-known/oauth-protected-resource - Authorization discovery
- GET
https://api.rentadriver.ai/.well-known/oauth-authorization-server - Register client
- POST
https://api.rentadriver.ai/oauth/register - Authorize
- GET
https://rentadriver.ai/oauth/authorize - Exchange / refresh token
- POST
https://api.rentadriver.ai/oauth/token - Revoke token
- POST
https://api.rentadriver.ai/oauth/revoke - Connected apps
- GET / DELETE
https://api.rentadriver.ai/v1/oauth/connections
Organization-scoped read and write tokens expire after 1 hour and refresh for 30 days. Server-side agents can also use an x-api-key header on the MCP server URL.