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 "Install 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-mcpfind 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.
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ashah360/doordash-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server