doordash-mcp
This server exposes 16 read/write MCP tools that drive a locally logged-in DoorDash consumer account through your own Chrome browser — checking your account and order history, browsing restaurants and menus, editing carts, previewing checkout, and (caveated) placing a real order.
Account & orders (read-only): verify the connected account, page through order history including cancelled orders, look up a single order's status/UUID, and read payment status (provider code + paid flag, no secrets).
Browse & menu (read-only): search restaurants at the browser's delivery location, read a store's menu feed (may be partial), and read an item's price, customization groups, min/max constraints and one nested options level.
Cart inspection (read-only): list open carts with line IDs, item IDs and subtotal; read one cart with quantities and selected options. Submitted orders are not shown.
Cart editing (write, non-financial): add items with nested option selections and special instructions, update a line's quantity/instructions, remove a line, or clear a whole cart. Option changes require remove-and-re-add.
Checkout preview (read-only): get current pricing, total_cents, tip and a preview_hash, plus the selected saved payment card; does not submit or change the cart tip.
Ordering (write, real money):
place_ordersubmits a real order and may charge the saved card; needs a fresh preview hash, exact total/tip, a caller-generated UUID request_id, and a payment_card_id.Recovery for unknown outcomes:
get_order_operationreads durable local placement state (works without Chrome), so an unknown/errored placement can be reconciled instead of retried.
Caveats worth knowing up front:
Requires Windows, Node.js 22+, and a manually launched Chrome that you log into (session/operation state encrypted with Windows DPAPI). No HTTP server or database.
place_orderis implemented but not live-tested; card charging, automatic recovery of an unknown order UUID, and full pickup setup are unverified or incomplete. One credit-covered pickup order was confirmed placed by the user despite an unknown tool result.One durable submission attempt per cart — never retry placement or recreate the cart; verify against order history, and treat
pending/unknownas not-failed.Fulfillment (pickup vs delivery) and saved-address selection are set manually in Chrome, not by a tool.
The README describes an optional
apply_creditschoice for checkout/placement, but no such parameter appears in the schema shown.
Provides tools for interacting with DoorDash consumer accounts, including viewing account/orders, browsing restaurants and menus, editing carts, previewing checkout, and placing orders that can charge a saved card.
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-mcp Order my usual chicken burrito from Chipotle"
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-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-helpOr 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.tgzRelated MCP server: DoorDash MCP Server
Connect
doordash-mcp login-helpThe 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 verifyConfigure 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
Inspect existing carts, find the restaurant/item, and add the requested selections.
Set pickup/delivery in Chrome after cart creation; verify
isConsumerPickupthroughget_cart. A dedicated fulfillment setter and saved-address selection are not implemented yet.Preview with the desired tip and
apply_creditschoice; obtain the user's purchase authorization for those details.Call
place_orderonce. After any result, error or timeout, checkget_order_operationandlist_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.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_operationcan 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 toolsadd_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_cartADestructive
Delete the specified open cart and all its items. Does not cancel a submitted order.
Inputs: cart_id (required).
get_cartARead-onlyIdempotent
Read an open cart by cart_id, including quantities and selected options.
Inputs: cart_id (required).
get_checkout_previewARead-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_statusARead-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_statusARead-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_order_operationARead-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_statusARead-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.
list_cartsARead-onlyIdempotent
List open carts, their cart-line IDs, menu-item IDs and subtotal. No submitted orders.
Inputs: no named parameters.
list_consumer_ordersBRead-onlyIdempotent
Read paginated consumer order history, including cancelled orders. Status is derived from history timestamps.
Inputs: limit, offset.
place_orderADestructiveIdempotent
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_itemADestructive
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_restaurantsBRead-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
Scored across 16 tools
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.
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.
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.
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
Related MCP Connectors
DoorDash MCP server for ChatGPT, Claude and any AI agent: search stores, read store menu, add item to cart, preview order total with fees, submit order, list past orders, get order status and reorder a past order in your own DoorDash account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to DoorDash yourself; Cotlet does not store your password and you need no DoorDash API key. About the official DoorDash API: DoorDash has no public API for ordering as a consumer (checked 27 Oct 2026). Its public APIs, Drive and Marketplace, are for merchants and delivery partners. Setup and FAQ: https://cotlet.dev/integrations/doordash-api-mcp-server
Let AI agents use your real, signed-in Chrome: tabs, clicks, forms, screenshots and video.
Let AI agents use any website you're logged in to. Sessions stay encrypted on your machine.
Search live store shelves, verify delivery windows, and run instant AI agent checkouts.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to search for products, manage shopping carts, and place grocery orders on Instacart using browser automation. It includes comprehensive tools for store discovery, product searching, and secure checkout with explicit user confirmation.1176 npm11MIT
- 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.717 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.2217 npm4MIT
- AlicenseAqualityDmaintenanceAI agents can order DoorDash food delivery: search restaurants, browse menus, add items to cart, place orders, and track delivery in real-time.9133 npm9MIT