Skip to main content
Glama

doordash-mcp

16 consumer MCP tools for account/orders, restaurants/menus, cart edits, checkout previews and ordering. Windows + Node.js 22+ + installed Chrome required. Login uses your manually launched browser; session and operation records are encrypted with Windows DPAPI.

place_order can charge a saved card. One credit-covered pickup order was confirmed placed by the user, though the tool returned an unknown outcome and automated reconciliation failed. See the agent tool contract for verification limits.

Checkout and placement accept optional apply_credits: true/false; use the same choice in both. Preview exposes provider-confirmed selection and available credits. Credits on/off previews are live-verified; settlement and fallback-card charges remain unverified. See credits behavior.

Install

Install 0.1.3 without a global install:

npx -y doordash-mcp@0.1.3 login-help

Or install globally with npm install --global doordash-mcp@0.1.3. The package contains compiled JavaScript, agent docs and the MIT license; it requires no TypeScript tooling or browser download.

Releases are published from CI: pushing a v-prefixed tag (e.g. v0.1.3) runs the publish workflow, which lints, typechecks, tests, builds and publishes to npm with provenance. See Publishing. To install from a source checkout instead:

npm ci
npm pack
npm install --global ./doordash-mcp-0.1.3.tgz

Related MCP server: DoorDash MCP Server

Connect

doordash-mcp login-help

The commands in this section assume a global or local-tarball installation; otherwise replace doordash-mcp with npx -y doordash-mcp@0.1.3. Run the printed PowerShell command yourself, then sign in/MFA in Chrome. Keep its DoorDash tab open:

doordash-mcp attach
doordash-mcp verify

Configure your MCP client:

{
  "mcpServers": {
    "doordash": {
      "command": "doordash-mcp",
      "args": ["serve"]
    }
  }
}

Ensure npm's global bin directory is on the client's PATH. Windows clients may require doordash-mcp.cmd. If a client cannot launch command shims, use node with the absolute installed path <npm root -g>/doordash-mcp/dist/cli.js and serve. From a source checkout, use <checkout>/dist/cli.js instead.

serve is the default command and writes only MCP protocol output to stdout. Session commands: status, verify, attach, disconnect, reset-profile; see login/storage. There is no HTTP server or database to configure.

redsun

Merge into ~/.config/redsun/redsun.jsonc (global) or the project's redsun.jsonc. redsun uses mcp.servers:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "servers": {
      "doordash": {
        "type": "local",
        "command": ["npx", "-y", "doordash-mcp@0.1.3", "serve"],
        "timeout": { "startup": 60000 }
      }
    }
  }
}

This downloads the pinned release as needed; no global install is required. Browser login/attach is still required. Existing encrypted state survives package upgrades. Use redsun mcp list to check connection status.

Ordering workflow

  1. Inspect existing carts, find the restaurant/item, and add the requested selections.

  2. Set pickup/delivery in Chrome after cart creation; verify isConsumerPickup through get_cart. A dedicated fulfillment setter and saved-address selection are not implemented yet.

  3. Preview with the desired tip and apply_credits choice; obtain the user's purchase authorization for those details.

  4. Call place_order once. After any result, error or timeout, check get_order_operation and list_consumer_orders. Compare purchase time, restaurant, items and fulfillment; use the exact order UUID when returned. Do not infer success merely from a similar order, or failure from missing history.

  5. If history reads fail, ask the user to check DoorDash's Orders page. Never call placement again or recreate the cart to bypass the journal. get_order_operation can read the local record without Chrome and retains known order IDs when payment polling fails.

0.1.3 includes explicit credits selection, the zero-due/zero-tip credit-covered checkout exception to the saved-card requirement, clearer one-shot recovery, and the trusted-publishing fix following the failed 0.1.2 release. Card charging, automatic recovery of an unknown order UUID and full pickup setup remain unverified or incomplete; see the tool contract.

Development / release

npm run dev starts stdio from source; npm start uses the build. npm test, npm run typecheck, npm run lint, npm run build are offline checks. Build cleans old output. npm pack rebuilds and uses an explicit package-file allowlist.

Live source-checkout smoke tests: npm run consumer:test-reads; npm run consumer:test-cart (optional -- --options) edits a small test cart and cleans up. Placement is excluded from the test allowlist. Rebuild first.

See Publishing for the tag-based release process. Nothing publishes during install/build/tests.

Tools · Architecture · Security · MIT License

Available Tools

16 tools
add_cart_itemA

Add an item to an explicit cart or the existing same-store cart; otherwise create one. Preserves other carts. Option IDs come from get_menu_item_options. Do not blindly retry on unknown outcome.

Inputs: item_id (required), store_id (required), cart_id, options, +2 more.

clear_cartA
Destructive

Delete the specified open cart and all its items. Does not cancel a submitted order.

Inputs: cart_id (required).

get_cartA
Read-onlyIdempotent

Read an open cart by cart_id, including quantities and selected options.

Inputs: cart_id (required).

get_checkout_previewA
Read-onlyIdempotent

Read current checkout pricing and selected saved payment card. Returns total_cents with explicit tip and preview_hash for place_order. Does not submit or change cart tip.

Inputs: cart_id (required), tip_cents.

get_consumer_account_statusA
Read-onlyIdempotent

Verify the connected local DoorDash account with an authenticated request. Requires saved session and manually launched CDP Chrome.

Inputs: no named parameters.

get_consumer_order_statusA
Read-onlyIdempotent

Find an order in a 20-order history page by order ID/UUID. Follow next_offset if absent. Reports history status, not courier tracking.

Inputs: order_id (required), offset.

get_menu_item_optionsB
Read-onlyIdempotent

Read item price, customization groups, min/max constraints and one nested options level.

Inputs: item_id (required), store_id (required), fulfillment_type.

get_order_operationA
Read-onlyIdempotent

Read durable placement state for a cart. If submission returned an order UUID, also query payment status. pending/unknown does not mean failed; never resubmit that cart.

Inputs: cart_id (required).

get_order_payment_statusA
Read-onlyIdempotent

Read payment status for an order owned by this account, located in a 20-order history page. Returns provider status code and paid flag; no payment secrets.

Inputs: order_id (required), offset.

get_restaurant_menuB
Read-onlyIdempotent

Read the default store menu feed, category metadata and loaded menu items. May be partial.

Inputs: store_id (required).

list_cartsA
Read-onlyIdempotent

List open carts, their cart-line IDs, menu-item IDs and subtotal. No submitted orders.

Inputs: no named parameters.

list_consumer_ordersB
Read-onlyIdempotent

Read paginated consumer order history, including cancelled orders. Status is derived from history timestamps.

Inputs: limit, offset.

place_orderA
DestructiveIdempotent

SUBMITS A REAL ORDER and may charge the selected saved card. Implemented but not live-tested. Use a fresh checkout preview, its exact hash/total and the same tip. request_id is a caller-generated UUID. One durable submission attempt per cart; unknown outcomes must be reconciled, never retried with a new ID.

Inputs: cart_id (required), tip_cents (required), request_id (required), total_cents (required), +2 more.

remove_cart_itemA
Destructive

Remove one entire cart line by cart_item_id. Use update_cart_item to reduce quantity.

Inputs: cart_id (required), cart_item_id (required).

search_restaurantsB
Read-onlyIdempotent

Restaurant autocomplete matches for the current browser delivery location. Not an exhaustive restaurant directory.

Inputs: query (required), limit.

update_cart_itemA

Set quantity and optionally instructions for a cart-line ID (not menu-item ID). Keeps its selected options. To change options, remove and re-add.

Inputs: cart_id (required), quantity (required), cart_item_id (required), special_instructions.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 16 tools

    Disambiguation4/5

    Most tools target a distinct resource+action (carts vs. menu vs. restaurants vs. checkout). The main overlap is among get_consumer_order_status, get_order_operation, and get_order_payment_status, which all concern 'order' state, but descriptions distinguish history vs. durable placement vs. payment.

    Naming Consistency5/5

    All tools use snake_case with a consistent verb_noun pattern (get_, list_, search_, add_, update_, remove_, clear_, place_). The cart-item verbs (add/update/remove_cart_item) are perfectly parallel.

    Tool Count4/5

    16 tools is slightly heavy but well-scoped for a full consumer ordering workflow covering account, menu browsing, cart lifecycle, checkout, and payment status. Each tool earns its place with little redundancy.

    Completeness4/5

    The surface covers the domain end-to-end: auth check, restaurant search, menu/options, cart CRUD, checkout preview, order placement, and payment/placement reconciliation. Minor gaps exist around order cancellation (clear_cart explicitly does not cancel submitted orders) and account/address management.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers