order-for-pickup

mcdonalds.order.online/order-for-pickup-il0zeo · updated May 21, 2026

MDX-style export adds YAML metadata + attribution linking explainx.ai and this canonical listing URL.

$browse install mcdonalds.order.online/order-for-pickup-il0zeo
0 commentsdiscussion
summary

Build a McDonald's pickup order on mcdonalds.order.online (DoorDash Storefront): switch to Pickup fulfillment, pick a store by address, add menu items, and stop at the checkout review page for user-authorized submission. Read-only by default — never clicks Place Order.

skill.md
name
order-for-pickup
title
McDonald's Order for Pickup
description
>- Build a McDonald's pickup order on mcdonalds.order.online (DoorDash Storefront): switch to Pickup fulfillment, pick a store by address, add menu items, and stop at the checkout review page for user-authorized submission. Read-only by default — never clicks Place Order.
website
mcdonalds.order.online
category
food-ordering
tags
- food - pickup - mcdonalds - doordash-storefront - cloudflare-turnstile - read-only
source
'browserbase: agent-runtime 2026-05-18'
updated
'2026-05-18'
recommended_method
browser
alternative_methods
- method: api rationale: >- Not viable. The storefront's `/graphql` endpoint is Cloudflare-walled — GET returns 403 (Attention Required), and POST requires the `__cf_bm` + session cookie that only a real, JS-executing browser warm-up produces. The internal `consumer-client-api-gateway-api-lb.service.prod.ddsd./graphql` endpoint referenced in the SSR config is a private service-mesh address, not reachable from the public internet. Don't waste iterations on a cookieless API path. - method: url-param rationale: >- Partial — the storefront accepts equivalent URL shapes (`/store/{id}`, `/store/mcdonalds-{id}`, `/business/-5579/store/{id}`) for direct store navigation, and locale prefixes (`/en-CA`, `/en-GB`, `/en-AU`, `/en-NZ`, `/es`, `/fr-CA`) for regional catalogs. But there's no URL-level shortcut for picking the Pickup fulfillment mode or for pre-filling a cart — those still require live DOM interaction.
verified
true
proxies
true

McDonald's Order for Pickup (mcdonalds.order.online)

Purpose

Build a pickup order on McDonald's DoorDash-powered storefront at mcdonalds.order.online: find a nearby McDonald's, switch fulfillment from Delivery to Pickup, add items to cart, and reach the checkout review page. Read-only by default — stop at the checkout review screen and surface the prepared order for human confirmation. Submitting an order is a separate, authorization-gated step.

This is a McDonald's-branded white-label of DoorDash Storefront (the same Next.js app that powers *.order.online for thousands of merchants). The same patterns apply — but McDonald's has Cloudflare Turnstile bot protection turned up, so cookieless API shortcuts are dead ends.

When to Use

  • "Order me a Big Mac meal for pickup at the nearest McDonald's, I'll confirm before you submit."
  • An agent building a McDonald's pickup cart for the user to review and submit themselves.
  • Comparing pickup wait-time ETAs across nearby McDonald's locations before deciding which to order from.
  • Pre-staging a cart so a returning user with a saved payment method just hits "Place order".
  • Not for: comparing McDonald's menu prices across stores at scale (use mcdonalds.com/restaurant-locator or the McDonald's app API instead — much cheaper signal); browsing the McDonald's app's MyMcDonald's rewards (this site doesn't surface them); placing a delivery order (use order-delivery or DoorDash Marketplace).

Workflow

The only viable path is a browser session — the /graphql endpoint is Cloudflare-walled (see Gotchas). Below is the verified browser flow.

1. Create a Verified + residential-proxy session

SID=$(browse cloud sessions create --keep-alive --verified --proxies | jq -r '.id')
export BROWSE_SESSION="$SID"

Both --verified (Verified browsers) and --proxies (residential IP) are mandatory. A bare session gets a Cloudflare 403 challenge page on the first navigation, or on any /graphql POST during cart/menu interactions.

2. Open the brand landing page

browse open "https://mcdonalds.order.online/" --remote --session "$SID"
browse wait load --remote --session "$SID"
browse wait timeout 2500 --remote --session "$SID"   # let Turnstile resolve

The bare https://mcdonalds.order.online/ returns 302 Location: /business/-5579 — McDonald's brand ID on DoorDash is the negative integer -5579. After the redirect, the page renders with data-testid="BusinessLandingPageV3" and shows a single input with placeholder="Delivery address" plus a Delivery/Pickup segmented control near the page header.

For country-specific catalogs use the explicit locale prefix: /en-US/business/-5579, /en-CA/business/-5579, /en-GB/business/-5579, /en-AU/business/-5579, /en-NZ/business/-5579, /es/business/-5579, /es-US/business/-5579, /fr/business/-5579, /fr-CA/business/-5579. Default (no prefix) is US English.

3. Flip the Delivery/Pickup toggle to Pickup — BEFORE entering an address

Default fulfillment on every cold session is Delivery. The toggle lives in the header/hero region of the page; on smaller viewports it's inside the address modal that opens when the input is focused.

browse snapshot --remote --session "$SID"
# In the snapshot, find the ref for the "Pickup" tab/toggle (usually a `tab` or `radio` role).
browse click @<pickup-ref> --remote --session "$SID"
browse wait timeout 1000 --remote --session "$SID"

Verify the toggle is now in the selected state before continuing. If you skip this and enter an address with Delivery still active, the result list will contain delivery-eligible stores (the union is usually similar but not identical) and the fulfillment carries through to checkout.

4. Enter an address and pick the first suggestion

browse click @<address-input-ref> --remote --session "$SID"
browse type "<street, city, state>" --remote --session "$SID"
browse wait timeout 1500 --remote --session "$SID"
browse snapshot --remote --session "$SID"
browse click @<first-suggestion-ref> --remote --session "$SID"
browse wait load --remote --session "$SID"

The placeholder text reads "Delivery address" even when Pickup is selected — trust the toggle, not the label. The dropdown is a Google Places autocomplete; do not press Enter (that submits a raw string and shows an error). Click a suggestion or use Down Arrow + Enter.

5. Pick a store from the result list

Each store card renders with the address, distance, hours, open/closed state, and a pickup ETA range ("Ready in 8-13 min"). Cards link to one of three equivalent URL shapes:

  • /store/{storeId} — shortest, recommended
  • /store/mcdonalds-{storeId}
  • /business/-5579/store/{storeId}

All three resolve to the same menu page. Store IDs are positive integers (e.g. 687040). Click the card for the store you want.

6. Browse the menu and add items

The menu page renders categories as horizontally-scrolling sections: Breakfast, Burgers, McNuggets & Meals, Chicken Sandwiches, Sides, Beverages, McCafé, Happy Meals, Desserts, etc. Categories shown vary by store (regional menu).

browse snapshot --remote --session "$SID"
browse click @<item-ref> --remote --session "$SID"
# Item-detail modal opens (LAYER-MANAGER-MODAL). Customize size/options.
browse click @<add-to-order-ref> --remote --session "$SID"

Each "Add to order" fires a /graphql mutation that updates the cart on the server. The header cart badge increments. Wait ~500ms between adds to let the optimistic update settle.

7. Re-verify Pickup is still selected before opening the cart

Several user actions reset fulfillment to Delivery silently:

  • Navigating from one store to a different store
  • Re-entering an address from inside a store page
  • Closing and reopening the address modal

After your last "Add to order" but before opening the cart, scroll to the header and confirm the fulfillment indicator still says Pickup.

8. Open the cart sheet and capture review state

browse click @<cart-icon-ref> --remote --session "$SID"
browse wait timeout 1500 --remote --session "$SID"
browse snapshot --remote --session "$SID"

The cart is a right-side sheet with data-testid="LAYER-MANAGER-SHEET". It contains:

  • Header: "Pickup at {store address}" + scheduled time ("ASAP" by default)
  • Line items with name, qty, customization summary, unit price
  • Subtotal, fees (usually $0 for pickup), taxes
  • "Go to checkout" CTA

Capture this state now. Note that the URL stays at /store/{id} while the sheet is open — the cart is not a separate route.

9. Advance to checkout review and STOP

browse click @<go-to-checkout-ref> --remote --session "$SID"
browse wait load --remote --session "$SID"

URL becomes https://mcdonalds.order.online/checkout. The review page shows the same line items + totals from the cart, the pickup store address, the pickup time, a payment-method selector, and a prominent "Place order" button.

DO NOT click "Place order" unless the user has explicitly authorized submission and a payment instrument is already on file. The button submits an immediate, non-refundable charge.

Emit the captured order shape (see Expected Output below) and release the session:

browse cloud sessions update "$SID" --status REQUEST_RELEASE

Site-Specific Gotchas

  • Cloudflare Turnstile is active on every page. Testids turnstile/overlay, turnstile/banner, turnstile/widget are present in the SSR HTML. --verified --proxies is mandatory; a bare session gets the Cloudflare interstitial. The widget can briefly cover the page on first load — wait timeout 2500 after wait load is required before snapshotting.
  • /graphql is unreachable from outside a browser session — confirmed dead. GET https://mcdonalds.order.online/graphql returns Cloudflare 403 (Attention Required) even with --proxies. POST requires the __cf_bm cookie + a session cookie that only a real, JS-executing browser warm-up produces. Don't waste iterations trying to skip the browser. Internally the storefront talks to consumer-client-api-gateway-api-lb.service.prod.ddsd. via clientApiUri:"/graphql" and serverApiUri:"http://consumer-client-api-gateway-api-lb.service.prod.ddsd./graphql", but those are private endpoints — they are not reachable from the public internet.
  • Brand ID is -5579 (negative). McDonald's lives at /business/-5579. Negative-integer IDs are DoorDash's convention for brand groups (positive integers are individual stores). /business/5579 and /business/mcdonalds both 404.
  • Default fulfillment is Delivery on every cold session. The Pickup/Delivery toggle MUST be flipped explicitly, even when the user task says "order for pickup". Verify the toggle state in the header BEFORE adding any items — switching after items are in the cart works but is slower and sometimes drops items if the cart is mid-mutation.
  • Address input placeholder reads "Delivery address" even in Pickup mode. The label is hard-coded; only the result list changes. Trust the toggle state, not the placeholder.
  • Fulfillment can silently reset to Delivery during navigation. After every store-to-store nav, address re-entry, or address-modal close+reopen, re-verify the toggle. The header indicator is the source of truth.
  • Store URLs have three equivalent shapes. /store/{id}, /store/mcdonalds-{id}, and /business/-5579/store/{id} all resolve to the same menu page. Prefer /store/{id}.
  • Store pages are >1MB of HTML. The browse cloud fetch API caps response bodies at 1MB — store/menu pages cannot be inspected via Fetch. Use a real browser session.
  • Locale prefix routes to the regional catalog. /en-CA/business/-5579 returns Canadian stores, /en-GB/business/-5579 returns UK stores, /en-AU///en-NZ/ for ANZ. If the user's task is country-specific (e.g. "McSpicy in India" — wrong site, but checking GB works), use the explicit prefix; otherwise default (no prefix) gives US English.
  • order.online/store/mcdonalds-{id} is a DIFFERENT product. That's the DoorDash Marketplace surface — a guest-checkout flow on DoorDash's main consumer app, not Storefront. It requires/encourages a DoorDash account, has different cart state, charges DoorDash service fees, and isn't a McDonald's-branded checkout. Don't mix the two; if the user asked for the McDonald's pickup flow, stay on mcdonalds.order.online.
  • The cart is a side-sheet, not a separate URL. data-testid="LAYER-MANAGER-SHEET". The URL stays at /store/{id} while the cart is open. The checkout review (/checkout) IS a separate URL.
  • Item availability varies per store. Regional menus differ — the Big Mac is everywhere, but a Chicken Big Mac, Spicy McCrispy, McRib, or seasonal item may be absent. If the user requested an item that's not in the store's category list, surface the item_unavailable_at_store outcome (see Expected Output) rather than substituting silently.
  • READ-ONLY by default. The boundary is the "Place order" button on /checkout. Stop there. A submitted order is an immediate, non-refundable transaction.

Expected Output

Four distinct outcome shapes. Each captures the state at the boundary the skill stopped at.

// 1. Cart prepared, review page reached, awaiting user authorization to submit
{
  "success": true,
  "store": {
    "id": "687040",
    "name": "McDonald's 10555 Parallel Parkway",
    "address": "10555 Parallel Pkwy, Kansas City, KS 66109",
    "url": "https://mcdonalds.order.online/store/687040"
  },
  "fulfillment": {
    "type": "pickup",
    "eta_minutes": 8,
    "eta_window": "Ready in 8-13 min",
    "scheduled_time": "ASAP"
  },
  "items": [
    {
      "name": "Big Mac Meal",
      "qty": 1,
      "options": ["Medium", "Coke", "Medium Fries"],
      "unit_price_cents": 1099,
      "line_total_cents": 1099
    },
    {
      "name": "10 pc McNuggets",
      "qty": 1,
      "options": ["Sweet & Sour sauce"],
      "unit_price_cents": 599,
      "line_total_cents": 599
    }
  ],
  "totals": {
    "subtotal_cents": 1698,
    "fees_cents": 0,
    "tax_cents": 153,
    "total_cents": 1851,
    "currency": "USD"
  },
  "checkout_url": "https://mcdonalds.order.online/checkout",
  "stopped_at": "checkout_review",
  "next_action_required": "user_authorize_submission"
}

// 2. No pickup-eligible stores near the supplied address
{
  "success": false,
  "reason": "no_pickup_stores",
  "address_used": "1600 Pennsylvania Ave NW, Washington, DC",
  "search_radius_miles": 5
}

// 3. Item the user asked for is not on the selected store's menu
{
  "success": false,
  "reason": "item_unavailable_at_store",
  "store_id": "687040",
  "requested_items": ["Chicken Big Mac"],
  "unavailable_items": ["Chicken Big Mac"],
  "available_alternatives": ["Big Mac", "McCrispy", "McDouble"]
}

// 4. Cloudflare/Turnstile wall hit and not solved within timeout
{
  "success": false,
  "reason": "anti_bot_wall",
  "detail": "cloudflare_turnstile_unsolved",
  "remediation": "Re-run with `browse cloud sessions create --verified --proxies` on a fresh session. A warm/reused session that has previously navigated the storefront in the past ~30min is more likely to pass."
}
how to use order-for-pickup

How to use order-for-pickup on Cursor

AI-first code editor with Composer

1

Prerequisites

Before installing skills in Cursor, ensure your development environment meets these requirements:

  • Cursor installed and configured on your development machine
  • Node.js version 16.0+ with npm package manager (verify with node --version)
  • Active project directory or workspace where you want to add order-for-pickup
2

Execute installation command

Execute the skills CLI command in your project's root directory to begin installation:

$browse install mcdonalds.order.online/order-for-pickup-il0zeo

The skills CLI fetches order-for-pickup from GitHub repository mcdonalds.order.online/order-for-pickup-il0zeo and configures it for Cursor.

3

Select Cursor when prompted

The CLI will show a list of available agents. Use arrow keys to navigate and space to select Cursor:

◆ Which agents do you want to install to?
│ ── Universal (.agents/skills) ── always included ────
│ • Amp
│ • Antigravity
│ • Cline
│ • Codex
│ ●Cursor(selected)
│ • Cursor
│ • Windsurf
4

Verify installation

Confirm successful installation by checking the skill directory location:

.cursor/skills/order-for-pickup

Reload or restart Cursor to activate order-for-pickup. Access the skill through slash commands (e.g., /order-for-pickup) or your agent's skill management interface.

Security & Verification Notice

We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.

Skills execute code in your development environment. Always verify the publisher's identity, review recent commits, and test in isolated environments before production deployment.

List & Monetize Your Skill

Submit your Claude Code skill and start earning

GET_STARTED →

Use Cases

Task Automation & Efficiency

Automate repetitive workflows and reduce manual effort

Example

Generate reports, summarize documents, draft communications

Save 3-5 hours per week on routine tasks

Knowledge Enhancement

Learn new skills, understand complex topics, get expert guidance

Example

Explain concepts, provide examples, suggest learning resources

Accelerate learning and skill development by 2x

Quality Improvement

Enhance output quality through reviews, suggestions, and refinements

Example

Review drafts, suggest improvements, catch errors

Improve work quality by 30-40% with less effort

Implementation Guide

Prerequisites

  • Claude Desktop or compatible AI client with skill support
  • Clear understanding of task or problem to solve
  • Willingness to iterate and refine outputs

Time Estimate

15-45 minutes depending on use case complexity

Installation Steps

  1. 1.Install skill using provided installation command
  2. 2.Test with simple use case relevant to your work
  3. 3.Evaluate output quality and relevance
  4. 4.Iterate on prompts to improve results
  5. 5.Integrate into regular workflow if valuable

Common Pitfalls

  • Expecting perfect results without iteration
  • Not providing enough context in prompts
  • Using skill for tasks outside its intended scope
  • Accepting outputs without review and validation

Best Practices

✓ Do

  • +Start with clear, specific prompts
  • +Provide relevant context and constraints
  • +Review and refine all outputs before using
  • +Iterate to improve output quality
  • +Document successful prompt patterns

✗ Don't

  • Don't use without understanding skill limitations
  • Don't skip validation of outputs
  • Don't share sensitive information in prompts
  • Don't expect skill to replace human judgment

💡 Pro Tips

  • Be specific about desired format and style
  • Ask for multiple options to choose from
  • Request explanations to understand reasoning
  • Combine AI efficiency with human expertise

When to Use This

✓ Use When

Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.

✗ Avoid When

Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.

Learning Path

  1. 1Familiarize yourself with skill capabilities and limitations
  2. 2Start with low-risk, non-critical tasks
  3. 3Progress to more complex and valuable use cases
  4. 4Build expertise through regular use and experimentation

Discussion

Product Hunt–style comments (not star reviews)
  • No comments yet — start the thread.
general reviews

Ratings

4.731 reviews
  • Sofia Sharma· Dec 24, 2024

    Solid pick for teams standardizing on skills: order-for-pickup is focused, and the summary matches what you get after install.

  • Mei Zhang· Sep 21, 2024

    We added order-for-pickup from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Yash Thakker· Sep 13, 2024

    We added order-for-pickup from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Diya Liu· Sep 1, 2024

    order-for-pickup fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Evelyn White· Aug 20, 2024

    We added order-for-pickup from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.

  • Mei Harris· Aug 12, 2024

    order-for-pickup fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Dhruvi Jain· Aug 4, 2024

    order-for-pickup fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Oshnikdeep· Jul 23, 2024

    Registry listing for order-for-pickup matched our evaluation — installs cleanly and behaves as described in the markdown.

  • Ishan Choi· Jul 19, 2024

    order-for-pickup fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.

  • Noah Smith· Jul 11, 2024

    order-for-pickup reduced setup friction for our internal harness; good balance of opinion and flexibility.

showing 1-10 of 31

1 / 4