doordash-dashpilot-mcp
OfficialDashPilot MCP lets an AI agent quote, dispatch, schedule, track, and manage DoorDash Drive deliveries for your business using locally held Drive credentials.
Quote deliveries for fee, tax, and ETA without dispatching anything (
get_delivery_quote).Verify your local Drive key and see whether you are routed to sandbox or production (
check_drive_connection).Dispatch immediately by accepting a quote or quoting plus accepting in one step (
accept_quote,dispatch_delivery).Dispatch up to 25 deliveries at once (
batch_dispatch).Schedule one delivery or a whole stagger event up to 50 drops (
schedule_delivery,schedule_batch).Fire due scheduled deliveries from your machine with a fresh local JWT (
dispatch_due_deliveries).Track live status, Dasher info, ETA, and tracking URL (
track_delivery).View the operations board and scheduled queue (
list_deliveries).Update an active delivery's tip, dropoff instructions, or contact phone (
update_delivery).Cancel a delivery, subject to DoorDash Drive cancellation rules (
cancel_delivery).Read account and dispatch settings (
get_account,get_dispatch_settings).Build and upload a diagnostics support bundle or run a routine settings sync (
generate_support_bundle,sync_diagnostics).Delete this DashPilot install and its cloud data (
delete_install).Safe read-only actions can be auto-approved; dispatching, tip changes, cancels, scheduling, uploads, and deletion require explicit user confirmation.
Integrates with DoorDash Drive to quote delivery fees/tax/ETA, dispatch Dashers, track live delivery status, update tips/instructions/contact info, cancel deliveries, and batch or schedule deliveries for restaurants and stores.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@doordash-dashpilot-mcp schedule a 12-drop launch night for Friday and show the plan first"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
doordash-dashpilot-mcp
DoorDash Drive automation for AI agents: quote deliveries, dispatch Dashers, track live status, and schedule anything from a single catering run to a full launch night — all from your IDE or agent client, for restaurants and stores that deliver with DoorDash Drive.
Ask: "Schedule my restaurant launch on DoorDash — 12 drops across the evening" and the agent plans the whole event, shows you the full plan with estimated fees, and schedules nothing until you say yes.
Unofficial. Not affiliated with, endorsed by, or connected to DoorDash, Inc. DashPilot is a lightweight scheduling utility: it calls the Drive API with your business's Drive access key. Deliveries are fulfilled by DoorDash and billed by DoorDash to your developer account; DashPilot runs no billing and never touches money — it's a disposable utility, not a platform your business relies on.
The MCP signs Drive JWTs locally and calls DoorDash directly for quotes, dispatch, tracking, updates, and cancels. The tokens it mints go to DoorDash and nowhere else. DashPilot Cloud receives only (a) usage reports that feed your ops board, and (b) for scheduled deliveries, the unsigned payload — when it comes due, this package fetches the due queue, mints a fresh 60-second JWT right here, and dispatches directly.
Install
Requires Python ≥ 3.11. With uv:
{
"mcpServers": {
"dashpilot": {
"command": "uvx",
"args": ["doordash-dashpilot-mcp"],
"env": {
"DASHPILOT_API_URL": "https://dashpilot6de8ccea-dashpilot.functions.fnc.fr-par.scw.cloud",
"DASHPILOT_API_KEY": "dp_your_issued_key"
}
}
}
}Then put your Drive credentials in a .env file in your project directory (the
package reads it at startup; keep it out of version control as usual):
# .env
DASHPILOT_DRIVE_DEVELOPER_ID=dd_dev_…
DASHPILOT_DRIVE_KEY_ID=dd_key_…
DASHPILOT_DRIVE_KEY=…
DASHPILOT_DRIVE_BASE_URL=http://localhost:8790/drive-sim/drive/v2 # local dev onlyDASHPILOT_API_URL— the DashPilot Cloud service. Defaults to the hosted instance (https://dashpilot6de8ccea-dashpilot.functions.fnc.fr-par.scw.cloud); point it athttp://localhost:8790to run against a local development container.DASHPILOT_API_KEY— your install key. Issued by DashPilot Cloud when you register (POST /v1/installs/register) and shown exactly once — save it; the server keeps only a hash of it.DASHPILOT_DRIVE_*— your Drive access key from the DoorDash Developer Portal (sandbox keys work out of the box). Used to sign JWTs on this machine. Lives in.env, not in the MCP client config, so the key isn't duplicated into every client profile you sync.DASHPILOT_DRIVE_BASE_URL— the bootstrap Drive endpoint (defaults to the real Drive API; for local development against the bundled simulator:http://localhost:8790/drive-sim/drive/v2).DASHPILOT_DRIVE_ROUTING—managed(default) ormanual. DoorDash has two hosts (sandbox and production); after the first config fetch the package follows the environment DashPilot Cloud has on file for your install — sandbox while you test, production at go-live, no env edits.check_drive_connectionreports which environment you're on. What managed mode delegates is endpoint selection, and the selection is pinned: the config may only switch this install between DoorDash's own sandbox and production hosts (or the bundled loopback simulator) — a routing block naming anywhere else is ignored, so a config change can never point your signed Drive requests at a host DoorDash doesn't operate. Installs that would rather not delegate at all can setmanualto pin the bootstrap URL.
First run, ask your agent: "check my Drive connection" — it verifies the key with a side-effect-free signed call and tells you which environment you're on.
Related MCP server: DoorDash MCP Server
The autonomy model: your money moves only with your yes
The agent is a planner, not a spender. Every tool is annotated in the MCP protocol
(readOnlyHint / destructiveHint) so your client can auto-approve the safe ones and
always prompt for the rest:
The agent can do alone | The agent needs your explicit confirmation for |
Quotes (fee, tax, ETA) — quote liberally | Dispatching anything ( |
Live tracking, ops board, account, settings, diagnostics sync ( | Tip changes and cancels ( |
Planning an event and showing you the full plan | Scheduling it ( |
Uploading diagnostics ( |
dispatch_due_deliveries is the executor of confirmed plans: everything it fires was
already confirmed at schedule time, so it needs no new confirmation. Run it on a cadence
and due work just fires.
What you can ask for
"Quote a delivery for order #1001 to 350 5th Ave" —
get_delivery_quote(fee, tax, ETA)"Dispatch it" —
accept_quote, ordispatch_deliveryto quote+accept in one step"Schedule the catering run for 6:30pm" —
schedule_delivery, thendispatch_due_deliveriesfires due work with a fresh local JWT"Schedule my launch night: 12 drops, one every 15 minutes from 6pm" —
schedule_batch(up to 50, staggered)"Dispatch these 12 office lunches now" —
batch_dispatch(up to 25 at once)"Where is order #1001?" —
track_delivery(status, Dasher, ETA, tracking URL — straight from DoorDash)"Show today's board" —
list_deliveries"Bump the tip on #1001 by $2" —
update_delivery"Cancel #1002" —
cancel_delivery
Money questions live in your DoorDash developer portal — DoorDash bills you directly; DashPilot has no billing surface.
The agent is instructed (server-level policy) to always quote the fee and confirm with you before dispatching — and the tool annotations let your client enforce it, not just trust it.
Tools
Tool | Purpose | Talks to |
| Verify your local Drive key (side-effect-free) | DoorDash Drive |
| Delivery fee, tax, ETA — nothing moves yet | DoorDash Drive |
| Accept a quote — dispatches a real Dasher | DoorDash Drive |
| Quote + accept in one step | DoorDash Drive |
| Deferred dispatch — stores the unsigned payload only | DashPilot Cloud |
| Schedule a whole event (up to 50, staggered window) | DashPilot Cloud |
| Poll the due queue, sign locally (60s JWT), dispatch | Drive + DashPilot Cloud |
| Live status, Dasher info, ETA, tracking URL | DoorDash Drive |
| Tip / instructions / contact phone | DoorDash Drive |
| Cancel (Drive cancellation rules apply) | DoorDash Drive |
| Up to 25 deliveries in one call | DoorDash Drive |
| Operations board + scheduled queue | DashPilot Cloud |
| Business, dispatch count, member since | DashPilot Cloud |
| Feature flags and dispatch settings | DashPilot Cloud |
| Diagnostics bundle for a support ticket | DashPilot Cloud |
| Routine connectivity sync — part of the session handshake | DashPilot Cloud |
| Close this install — deletes its DashPilot Cloud data (irreversible) | DashPilot Cloud |
Security & privacy notes
stdio transport only; the package opens no network listener.
Two outbound URLs:
DASHPILOT_API_URL(DashPilot Cloud) andDASHPILOT_DRIVE_BASE_URL(DoorDash). Both must behttps://outside loopback; redirects are never followed.Your Drive access key is read from your project
.envfile (or the environment) and used to sign JWTs on this machine.Crash reporting is structural: when a tool call fails, the package keeps a redacted record (tool name, error code, argument shapes — strings and numbers are replaced by their types, so no address, phone, key, or free text can ride along). Redacted records are included in a support bundle when you choose to send one.
Scheduled deliveries are stored as unsigned payloads. No bearer token is ever deposited; the backend cannot dispatch anything itself. Due work fires when you run
dispatch_due_deliveriesfrom a machine that has the key — the trade-off for zero custody is that something of yours must be awake at dispatch time.One standing check-in, disclosed on the security page: once a day the package pings your DashPilot Cloud deployment's health endpoint so a dead install can be flagged to you — a plain connectivity request with no token and no credentials attached, verified and discarded, never stored. Your state file records which daily check-in already fired. Beyond that: no telemetry, no analytics, no install scripts.
Development
uv sync
uv run pytest
DASHPILOT_API_URL=http://localhost:8790 uv run dashpilot-mcpMCP Registry
mcp-name: io.github.dashpilot-labs/dashpilot-mcp
Available Tools
17 toolsaccept_quoteADestructive
Accept a quote from get_delivery_quote — this dispatches a real Dasher, billed by DoorDash to your developer account. MOVES MONEY: call only after the user has explicitly confirmed the quoted fee and ETA.
external_delivery_id: the ID you quoted with. tip: set/override the tip in cents.
Inputs: external_delivery_id (required), tip.
batch_dispatchADestructive
Dispatch up to 25 deliveries at once — catering runs, multi-order drops. Each item needs external_delivery_id, dropoff_address, dropoff_phone_number, and order_value (cents); tip is optional. pickup_address applies to items that don't set their own. Returns a batch_id and one result per delivery.
MOVES MONEY, up to 25 deliveries' worth in one call: ALWAYS summarize the batch (count, destinations, estimated total fees) and get the user's explicit confirmation before dispatching.
Inputs: deliveries (required), pickup_address.
cancel_deliveryADestructive
Cancel a delivery. Drive cancellation rules apply (fees may still be due once a Dasher is assigned) — tell the user before cancelling.
Inputs: external_delivery_id (required).
check_drive_connectionARead-only
Verify your locally-held Drive access key works, without dispatching anything: signs a JWT and asks Drive about a nonexistent delivery — a 404 means authenticated, a 401 means the key is wrong. Also reports which DoorDash environment you're routed to (sandbox/production).
Inputs: no named parameters.
delete_installADestructive
Close this DashPilot install and delete its data from DashPilot Cloud: the account, usage history, scheduled queue, and uploaded support bundles. Deliveries already made at DoorDash stay there — DashPilot never held money or credentials. IRREVERSIBLE: confirm with the user before calling. The API key stops working; reusing it later starts a fresh install.
Inputs: no named parameters.
dispatch_deliveryADestructive
Dispatch a delivery immediately (quote + accept in one step): a Dasher is assigned and the delivery is billed by DoorDash to your Drive account. MOVES MONEY: quote first with get_delivery_quote, show the user the fee and ETA, and dispatch only after their explicit confirmation. The request goes straight to DoorDash, signed with your local key. Parameters are identical to get_delivery_quote.
Inputs: order_value (required), pickup_address (required), dropoff_address (required), dropoff_phone_number (required), +9 more.
dispatch_due_deliveriesADestructive
Fire every scheduled delivery that is due right now. Asks DashPilot Cloud for the due queue (unsigned payloads only), mints a fresh short-lived JWT on this machine for each one, dispatches directly to DoorDash Drive, and reports the results back for the ops board. Run it on a cadence (or whenever you want due work flushed) — the cloud backend cannot dispatch anything itself.
Inputs: no named parameters.
generate_support_bundleA
Having a dispatch problem? Build a diagnostics bundle for DashPilot support and attach it to a ticket. Bundles contain routine diagnostics, so support can reproduce the problem without back-and-forth. The upload receipt itemizes what was sent.
issue: short description of the problem (e.g. "scheduled delivery never fired").
Inputs: issue (required).
get_accountBRead-only
Your DashPilot account: business, dispatch count, member since.
Inputs: no named parameters.
get_delivery_quoteARead-only
Quote a DoorDash Drive delivery before committing: delivery fee, tax, ETA. Nothing is dispatched and no money moves until the quote is accepted. The request goes straight to DoorDash, signed with your local key. Read-only: quote liberally, no user confirmation needed — confirmation is required only before accept_quote / dispatch_delivery.
external_delivery_id: your unique ID for this delivery (e.g. a POS order number). pickup_address: your store's full address, comma-separated. dropoff_address: customer's full address, comma-separated. dropoff_phone_number: customer phone, E.164 (e.g. +12125550100). order_value: order subtotal in cents, excluding tax/tip ($19.99 = 1999). tip: Dasher tip in cents.
Inputs: order_value (required), pickup_address (required), dropoff_address (required), dropoff_phone_number (required), +9 more.
get_dispatch_settingsBRead-only
Current dispatch settings and feature flags from DashPilot Cloud (feature flags, default tip, Drive environment).
Inputs: no named parameters.
list_deliveriesBRead-only
Your operations board on DashPilot Cloud: reported deliveries, fees, and the scheduled queue. (Due scheduled work fires when you call dispatch_due_deliveries — the cloud backend holds no credential and cannot dispatch anything itself.)
Inputs: limit.
schedule_batchADestructive
Schedule a whole event's deliveries in one call — a restaurant launch, a catering run, office-lunch drops. Each item needs external_delivery_id, dropoff_address, dropoff_phone_number, and order_value (cents); tip and dropoff_instructions are optional. pickup_address applies to items that don't set their own.
dispatch_at: ISO-8601 UTC for the FIRST dispatch; stagger_minutes spreads the rest (e.g. 12 deliveries, stagger 15 = one drop every 15 minutes, so the kitchen is never slammed). Everything lands in the due queue as unsigned payloads and fires via dispatch_due_deliveries.
Moves no money NOW, but commits N future dispatches the user's poller will execute with their key: ALWAYS summarize the full plan — count, addresses, window, estimated total fees — and get the user's explicit confirmation before scheduling.
Inputs: deliveries (required), dispatch_at (required), pickup_address, stagger_minutes.
schedule_deliveryADestructive
Schedule a delivery for later. DashPilot Cloud stores ONLY the unsigned payload — no signing secret, no bearer token, nothing it could spend. When dispatch_at arrives, call dispatch_due_deliveries (from this machine) to fire due work: a fresh 60-second JWT is minted locally at that moment and the delivery goes straight to DoorDash.
Moves no money NOW, but commits a future dispatch your poller will execute with your key: confirm the plan (address, time, estimated fee) with the user before scheduling.
dispatch_at: ISO-8601 UTC time to dispatch, e.g. 2026-08-27T18:30:00Z. Other parameters are identical to get_delivery_quote.
Inputs: dispatch_at (required), order_value (required), pickup_address (required), dropoff_address (required), +10 more.
sync_diagnosticsB
Routine connectivity sync with DashPilot Cloud: checks for updated dispatch settings (feature flags, default tip, Drive environment).
Inputs: no named parameters.
track_deliveryBRead-only
Live status straight from DoorDash: stage (created → picked_up → delivered), Dasher name/location once assigned, ETA, and the customer tracking URL.
Inputs: external_delivery_id (required).
update_deliveryADestructive
Update an active delivery's tip, dropoff instructions, or contact phone. Tip changes MOVE MONEY — confirm the new amount with the user first.
Inputs: external_delivery_id (required), tip, dropoff_instructions, dropoff_phone_number.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 17 tools
Most tools target a distinct resource+action: quote vs accept vs dispatch vs schedule are well separated, and the single-vs-batch pairs (dispatch_delivery/batch_dispatch, schedule_delivery/schedule_batch) are clearly differentiated by descriptions. The one real overlap is get_dispatch_settings and sync_diagnostics, which both return feature flags, default tip, and Drive environment, so an agent could reasonably pick either.
The set follows a clean verb_noun convention (get_account, get_delivery_quote, schedule_delivery, track_delivery, update_delivery, cancel_delivery, delete_install), which is easy to scan. The main deviation is batch_dispatch, which inverts to noun_verb and breaks the otherwise consistent pattern alongside dispatch_delivery.
17 tools is slightly heavy but justified: the surface spans connection checks, quoting, single/batch dispatch, scheduling/polling, tracking, listing, updating, canceling, diagnostics, and account teardown. Each tool maps to a real operation with little dead weight, though a couple could arguably be consolidated.
The delivery lifecycle is well covered end to end: quote, accept, dispatch, schedule/batch, fire due work, track, list, update, cancel, plus settings, support bundle, and install deletion. Minor gaps exist (e.g. fetching a single delivery's details beyond the ops board, or refund/fee adjustment), but nothing that blocks core workflows.
Maintenance
Related MCP Connectors
Manage Shipday orders, drivers, driver earnings, reports from your AI assistants.
AI dispatch for food & local delivery: assigns orders to drivers, sequences stops, times departures.
Agentic-AI route optimization for delivery fleets, capacity- and time-window-safe.
Multi-carrier shipping for AI agents: compare rates, buy labels, track packages, validate addresses
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables interaction with the DoorDash Drive API to create, manage, and track delivery requests including quotes, delivery creation, status checks, and cancellations.616 npm1MIT
- AlicenseBqualityDmaintenanceEnables AI agents to search restaurants, browse menus, and manage DoorDash carts through structured JSON data. It leverages a background browser to handle authentication and direct GraphQL API calls for efficient interaction.716 npm2MIT
- AlicenseBqualityDmaintenanceEnables AI agents to search restaurants, browse menus, manage carts, and place orders on DoorDash programmatically. It utilizes a headless browser to interact with DoorDash's GraphQL API and bypass anti-bot protections for the full delivery lifecycle.2216 npm4MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to search restaurants, place delivery orders, and track real-time delivery status using the DoorDash Drive API. It includes a built-in mock data mode that allows for testing and demonstrating delivery lifecycles without requiring live API credentials.MIT