doordash-mcp
Enables AI agents to search for restaurants and stores, browse menus, manage shopping carts, and place orders programmatically through the DoorDash platform.
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 find sushi nearby and show me the menu for the highest-rated restaurant"
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
An MCP server that lets AI agents order food, groceries, and more through DoorDash. Search restaurants, browse menus, build carts, and place orders — all programmatically.
Built with CycleTLS, the Model Context Protocol SDK, and DoorDash's internal GraphQL API. No browser, Chromium, or Puppeteer/Playwright required.
Setup
git clone https://github.com/ashah360/doordash-mcp.git
cd doordash-mcp
npm install
npm run buildCreate a .env file (see .env.example):
DOORDASH_EMAIL=your@email.com
DOORDASH_PASSWORD=your-passwordCursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"doordash": {
"command": "node",
"args": ["/path/to/doordash-mcp/dist/index.js"],
"env": {
"DOORDASH_EMAIL": "your@email.com",
"DOORDASH_PASSWORD": "your-password"
}
}
}
}Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"doordash": {
"command": "node",
"args": ["/path/to/doordash-mcp/dist/index.js"],
"env": {
"DOORDASH_EMAIL": "your@email.com",
"DOORDASH_PASSWORD": "your-password"
}
}
}
}HTTP transport
Set the PORT environment variable to start an HTTP server instead of stdio:
PORT=3000 node dist/index.jsThe MCP endpoint will be available at http://localhost:3000/mcp.
Related MCP server: DoorDash MCP Server
Tools
21 tools covering the full DoorDash lifecycle:
Discovery
Tool | Description |
| Search restaurants and stores by name, cuisine, or food type |
| Get a restaurant's full menu with items, prices, and option flags |
| Search items within grocery/convenience/alcohol stores |
| Get customization options for menu items (sides, extras, sizes) |
Cart
Tool | Description |
| Add items to cart with nested customization options |
| View all active carts with items and subtotals |
| Update item quantity or remove items |
| Delete a cart |
Checkout
Tool | Description |
| Preview fees, delivery time, and total |
| Place an order (charges the account) |
| Check payment and delivery status |
Group Orders
Tool | Description |
| Create a group order and get a share link |
| View each person's items and finalization status |
Account
Tool | Description |
| Automated login with email + password |
| Enter MFA verification code |
| View order history |
| List saved delivery addresses |
| Set active delivery address |
| Add a new delivery address |
| List saved payment methods |
| Add a payment card (tokenized via Stripe) |
How it works
DoorDash doesn't have a public consumer API. This project reverse-engineers their internal GraphQL API — the same one doordash.com uses in the browser.
The hard part is Cloudflare. DoorDash sits behind Cloudflare's bot detection, which fingerprints TLS handshakes (JA3). A normal fetch() from Node.js gets blocked instantly because its TLS fingerprint doesn't look like a real browser.
CycleTLS solves this by establishing TLS connections with a Chrome-like JA3 fingerprint at the network level. No browser needed — just a spoofed handshake. Combined with a matching User-Agent header, requests look indistinguishable from a real Chrome session to Cloudflare.
GraphQL queries were captured from real DoorDash browser sessions and are stored as .graphql files in queries/.
Authentication
Login is fully automated — no manual browser step required.
The server calls DoorDash's identity endpoint with your email and password
If MFA is required, it prompts for a verification code via
doordash_verifySession cookies are persisted to
~/.doordash-mcp/session.jsonSubsequent starts restore the session from disk — no re-login needed until cookies expire
Architecture
src/
├── index.ts # MCP server bootstrap (stdio + HTTP transports)
├── tools/
│ └── index.ts # 21 tool registrations
├── api/
│ ├── graphql.ts # GraphQL client + query loader
│ ├── search.ts # Restaurant/store search
│ ├── menu.ts # Menus + item options
│ ├── cart.ts # Cart management
│ ├── checkout.ts # Checkout + order placement
│ ├── orders.ts # Order history + status
│ ├── group.ts # Group orders
│ └── account.ts # Addresses, payment methods, Stripe tokenization
├── auth/
│ └── login.ts # Login + MFA flow
├── client/
│ ├── http.ts # CycleTLS HTTP client (JA3 spoofing)
│ ├── cookies.ts # Cookie jar with domain matching + expiry
│ └── session.ts # Session persistence to disk
└── logging/
└── traffic.ts # Request/response logging with redaction
queries/
└── *.graphql # Captured GraphQL queriesKnown limitations
Real money:
doordash_place_ordercharges your account. There is no sandbox.Cart quantity updates: DoorDash's
updateCartItemV2mutation is broken server-side. The tool works around it via remove + re-add.Scheduled orders: Only ASAP delivery is supported.
Address geocoding:
doordash_add_addressrequires lat/lng coordinates.VCC cards: Virtual credit cards are blocked by DoorDash's fraud detection.
License
MIT
Available Tools
22 toolsdoordash_add_addressC
Add a delivery address.
Inputs: street (required), city (required), state (required), zip_code (required), +3 more.
doordash_add_cardC
Add a payment card to DoorDash.
Inputs: card_number (required), exp_month (required), exp_year (required), cvc (required).
doordash_addressesB
List saved delivery addresses
Inputs: no named parameters.
doordash_add_to_cartB
Add an item to your DoorDash cart. For restaurants, pass item_name. For convenience stores, pass item_id directly.
Inputs: store_id (required), item_name (required), item_id, quantity, +4 more.
doordash_cartA
View your current DoorDash cart contents and totals
Inputs: no named parameters.
doordash_checkoutA
Preview checkout details (fees, total). Does NOT place the order.
Inputs: cart_id.
doordash_convenience_searchC
Search for items within a convenience store (grocery, alcohol, pharmacy, etc.).
Inputs: store_id (required), query (required).
doordash_create_group_orderC
Create a group order at a restaurant. Returns a share link.
Inputs: store_id (required).
doordash_delete_cartC
Delete a cart.
Inputs: cart_id (required).
doordash_group_order_statusB
View a group order's items broken down by person.
Inputs: cart_id (required).
doordash_item_optionsA
Get customization options for a menu item (sides, extras, modifications).
Inputs: store_id (required), item_id (required).
doordash_join_group_orderA
Join a group order as a guest on behalf of another user. Creates a guest session that can be used with doordash_add_to_cart.
Inputs: cart_id (required), store_id (required), first_name (required), last_name (required), +1 more.
doordash_loginA
Log into DoorDash. Reads credentials from ~/.doordash-mcp/config.json. Returns success or requests MFA code.
Inputs: no named parameters.
doordash_modify_cartB
Modify cart: change item quantity or remove items.
Inputs: cart_id (required), item_id (required), action (required), quantity, +2 more.
doordash_ordersB
Get recent DoorDash order history
Inputs: limit.
doordash_order_statusC
Check the status of a DoorDash order
Inputs: order_id (required).
doordash_payment_methodsB
List saved payment methods
Inputs: no named parameters.
doordash_place_orderA
Place a DoorDash order. THIS WILL CHARGE YOUR CARD.
Inputs: cart_id (required), tip_cents, payment_card_id, store_id.
doordash_searchB
Search for restaurants on DoorDash by name, cuisine, or food type
Inputs: query (required).
doordash_set_addressC
Set the active delivery address.
Inputs: address_id (required).
doordash_verifyC
Complete DoorDash login with a verification code.
Inputs: code (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 22 tools
Most tools have distinct purposes, but cart operations present minor risk: doordash_modify_cart can remove individual items while doordash_delete_cart clears the entire cart, which could confuse agents. Group order tools and search variants are well-differentiated by their descriptions.
Significant inconsistency in naming patterns: roughly half use verb_noun (add_to_cart, place_order, set_address) while others use noun-only or noun_noun (cart, addresses, menu, payment_methods, group_order_status). The prefix is consistent, but internal structure varies widely between verb-first and noun-first conventions.
With 22 tools, this falls into the 'heavy' category (16-25 range). While it comprehensively covers the delivery lifecycle including group orders and convenience stores, the surface area is large enough that agents may struggle to select the optimal tool chain without careful reading.
Covers the full ordering lifecycle well: authentication with MFA, address/payment management, browsing (restaurants and convenience), cart operations, group orders, and order placement/status. Minor gaps exist (no cancel_order, delete_address, or delete_payment_method), but core workflows are fully supported.
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
AI food ordering across Canada — 17,000+ restaurants, 89 cities, real UberEats + DoorDash.
Search live store shelves, verify delivery windows, and run instant AI agent checkouts.
Manage Shipday orders, drivers, driver earnings, reports from your AI assistants.
Related MCP Servers
- 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
- 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
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to autonomously order food from Grubhub, including searching restaurants, browsing menus, managing cart, placing orders, and tracking delivery.57 npm1MIT
- AlicenseAqualityDmaintenanceAI agents can order DoorDash food delivery: search restaurants, browse menus, add items to cart, place orders, and track delivery in real-time.997 npm9MIT