npm package: @striderlabs/mcp-mcdonalds
Description: MCP server connector for McDonald's - browser automation with Playwright
Author: Strider Labs
Latest version: 0.1.0

# @striderlabs/mcp-mcdonalds

An MCP (Model Context Protocol) server for McDonald's — browse the menu, find nearby locations, manage a cart, place mobile orders, and check deals & rewards using Playwright browser automation.

## Features

- **Search Menu** — Search McDonald's menu items by name, category, or keyword
- **Find Restaurants** — Locate nearby McDonald's with address, hours, and distance
- **Cart Management** — Add items with customizations, view cart totals
- **Place Orders** — Submit mobile pickup orders
- **Deals** — Browse current McDonald's promotions
- **Rewards** — Check MyMcDonald's points and available offers

## Installation

```bash
npm install @striderlabs/mcp-mcdonalds
npx playwright install chromium
```

## Usage

### As an MCP server (Claude Desktop / Cursor / etc.)

Add to your MCP client config (e.g. `~/Library/Application Support/Claude/claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "mcdonalds": {
      "command": "npx",
      "args": ["-y", "@striderlabs/mcp-mcdonalds"]
    }
  }
}
```

### Run directly

```bash
npx @striderlabs/mcp-mcdonalds
```

## Tools

### `search_menu`
Search McDonald's menu items.

**Input:**
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes | Search term (e.g. `"burger"`, `"chicken"`, `"breakfast"`) |

**Example:**
```json
{ "query": "Big Mac" }
```

---

### `find_restaurant`
Find nearby McDonald's locations.

**Input:**
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `location` | string | Yes | Address, city, or ZIP code |

**Example:**
```json
{ "location": "Chicago, IL" }
```

---

### `add_to_cart`
Add a menu item to your cart.

**Input:**
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `menuItemId` | string | Yes | Item ID from `search_menu` |
| `name` | string | Yes | Display name |
| `price` | number | Yes | Price per item (USD) |
| `quantity` | number | No | Quantity (default: 1) |
| `customizations` | object | No | Key-value customization pairs |

**Example:**
```json
{
  "menuItemId": "big-mac",
  "name": "Big Mac",
  "price": 5.99,
  "quantity": 2,
  "customizations": { "Sauce": "Extra" }
}
```

---

### `view_cart`
View current cart contents and totals.

**No input required.**

---

### `place_order`
Place a mobile pickup order.

**Input:**
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `restaurantId` | string | Yes | Restaurant ID from `find_restaurant` |
| `restaurantName` | string | Yes | Restaurant name/address |
| `pickupTime` | string | No | Pickup time (default: `"ASAP"`) |
| `notes` | string | No | Special instructions |

**Example:**
```json
{
  "restaurantId": "rest_001",
  "restaurantName": "McDonald's - 123 Main St",
  "pickupTime": "12:30 PM"
}
```

> **Note:** Full order placement requires McDonald's app authentication. The server generates an order ID and summary; complete payment through the McDonald's app.

---

### `get_deals`
Get current McDonald's deals and promotions.

**No input required.**

---

### `get_rewards`
Check MyMcDonald's rewards balance and offers.

**Input:**
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `includeOffers` | boolean | No | Include available offers (default: `true`) |

---

## How It Works

The server uses [Playwright](https://playwright.dev/) to automate a headless Chromium browser, navigating `mcdonalds.com` to fetch live menu data, restaurant locations, deals, and rewards information. A static fallback dataset is used when scraping is unavailable (e.g. network issues or layout changes).

Cart state is maintained in-memory for the duration of the MCP session.

## Development

```bash
git clone https://github.com/markswendsen-code/mcp-mcdonalds
cd mcp-mcdonalds
npm install
npx playwright install chromium
npm run dev      # watch mode
npm run build    # production build
```

## License

MIT