Skip to content
MCP · rentadriver-mcp

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.

check_coverageget_quotecreate_deliverytrack_deliveryget_proof_of_deliveryconfirm_delivery

Discovery

Free and unauthenticated. Use these first to check feasibility and show the human a price.

check_coverageCheck coverageno key

Tells 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 key

Launch 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 key

Prices 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 key

Lists, 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 key

Prices 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 key

Live 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 key

Enabled countries, separate currency balances and available markets.

Inputs
none
Returns
workspaces[], markets[]
enable_country_workspaceEnable a countryAPI key

Create 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 key

Creates 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 key

Confirms 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 key

Current 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 key

Creates 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 key

Agent-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 key

Caps 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 key

Lists 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 key

Issues 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 key

Permanently 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 key

Books 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 key

Shortcut 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 key

Submits 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 key

Holds 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 key

Full 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 key

Pages 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 key

Generate 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 key

Compact 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 key

Every 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 key

Changes 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 key

Cancels 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 key

Books 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 key

Sends 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 key

The 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 key

Signed 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 key

Confirms 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 key

Freezes 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 key

Adds 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 key

1–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 key

Registers 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 key

Active webhooks on the account.

Inputs
none
Returns
webhooks[]
delete_webhookDelete a webhookAPI key

Deactivates a webhook. Queued deliveries to it stop.

Inputs
webhook_id
Returns
ok
list_shopify_ordersList Shopify ordersAPI key

Orders 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 key

Book 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 key

Orders 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 key

Book 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://spec

The full REST OpenAPI document, for agents that want to call endpoints directly.

prompt: plan_delivery

Walks 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/mcp

Env: 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.

Remote serverOAuth 2.1 + PKCE

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/mcp
  1. Add the server

    Open your client’s MCP or connector settings and add the server URL above. In Claude, choose Settings → Connectors → Add custom connector.

  2. 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.

  3. 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
GEThttps://mcp.rentadriver.ai/.well-known/oauth-protected-resource
Authorization discovery
GEThttps://api.rentadriver.ai/.well-known/oauth-authorization-server
Register client
POSThttps://api.rentadriver.ai/oauth/register
Authorize
GEThttps://rentadriver.ai/oauth/authorize
Exchange / refresh token
POSThttps://api.rentadriver.ai/oauth/token
Revoke token
POSThttps://api.rentadriver.ai/oauth/revoke
Connected apps
GET / DELETEhttps://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.

Support