Skip to main content
Glama

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 only
  • DASHPILOT_API_URL — the DashPilot Cloud service. Defaults to the hosted instance (https://dashpilot6de8ccea-dashpilot.functions.fnc.fr-par.scw.cloud); point it at http://localhost:8790 to 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) or manual. 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_connection reports 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 set manual to 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 (accept_quote, dispatch_delivery, batch_dispatch)

Live tracking, ops board, account, settings, diagnostics sync (sync_diagnostics)

Tip changes and cancels (update_delivery, cancel_delivery)

Planning an event and showing you the full plan

Scheduling it (schedule_delivery, schedule_batch) — scheduling moves no money now but commits a future dispatch your poller will execute with your key

Uploading diagnostics (generate_support_bundle) — the receipt itemizes the sections sent (section names and total size, not field contents)

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, or dispatch_delivery to quote+accept in one step

  • "Schedule the catering run for 6:30pm" — schedule_delivery, then dispatch_due_deliveries fires 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

check_drive_connection

Verify your local Drive key (side-effect-free)

DoorDash Drive

get_delivery_quote

Delivery fee, tax, ETA — nothing moves yet

DoorDash Drive

accept_quote

Accept a quote — dispatches a real Dasher

DoorDash Drive

dispatch_delivery

Quote + accept in one step

DoorDash Drive

schedule_delivery

Deferred dispatch — stores the unsigned payload only

DashPilot Cloud

schedule_batch

Schedule a whole event (up to 50, staggered window)

DashPilot Cloud

dispatch_due_deliveries

Poll the due queue, sign locally (60s JWT), dispatch

Drive + DashPilot Cloud

track_delivery

Live status, Dasher info, ETA, tracking URL

DoorDash Drive

update_delivery

Tip / instructions / contact phone

DoorDash Drive

cancel_delivery

Cancel (Drive cancellation rules apply)

DoorDash Drive

batch_dispatch

Up to 25 deliveries in one call

DoorDash Drive

list_deliveries

Operations board + scheduled queue

DashPilot Cloud

get_account

Business, dispatch count, member since

DashPilot Cloud

get_dispatch_settings

Feature flags and dispatch settings

DashPilot Cloud

generate_support_bundle

Diagnostics bundle for a support ticket

DashPilot Cloud

sync_diagnostics

Routine connectivity sync — part of the session handshake

DashPilot Cloud

delete_install

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) and DASHPILOT_DRIVE_BASE_URL (DoorDash). Both must be https:// outside loopback; redirects are never followed.

  • Your Drive access key is read from your project .env file (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_deliveries from 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-mcp

MCP Registry

mcp-name: io.github.dashpilot-labs/dashpilot-mcp

Available Tools

17 tools
accept_quoteA
Destructive

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_dispatchA
Destructive

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_deliveryA
Destructive

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_connectionA
Read-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_installA
Destructive

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_deliveryA
Destructive

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_deliveriesA
Destructive

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_accountB
Read-only

Your DashPilot account: business, dispatch count, member since.

Inputs: no named parameters.

get_delivery_quoteA
Read-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_settingsB
Read-only

Current dispatch settings and feature flags from DashPilot Cloud (feature flags, default tip, Drive environment).

Inputs: no named parameters.

list_deliveriesB
Read-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_batchA
Destructive

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_deliveryA
Destructive

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_deliveryB
Read-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_deliveryA
Destructive

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

    A3.8/5.0

    Scored across 17 tools

    Disambiguation4/5

    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.

    Naming Consistency4/5

    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.

    Tool Count4/5

    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.

    Completeness4/5

    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

    ActivitySlowing
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Enables 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.
      7
      16 npm
      2
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Enables 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.
      22
      16 npm
      4
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables 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