Skip to main content
Glama
README.md
# @striderlabs/mcp-drizly

A Model Context Protocol (MCP) connector for Drizly alcohol delivery. Enables AI assistants to search products, manage carts, check availability, and place orders on Drizly (drizly.com).

## Features

- **Product Search** - Search beer, wine, spirits by name, type, or brand with price and ABV filters
- **Product Details** - Get detailed info including ABV, origin, ratings, and descriptions
- **Category Browsing** - Browse by category (wine type, spirit type, etc.)
- **Availability Check** - Check if products are available for delivery to an address
- **Store Discovery** - Find available stores/retailers for a delivery address
- **Cart Management** - Add items, view cart, and update quantities
- **Order Placement** - Complete checkout and place orders
- **Order History** - View past and current orders
- **Order Tracking** - Track real-time order status and delivery estimates
- **Recommendations** - Get personalized product recommendations

## Requirements

- Node.js >= 18.0.0
- Playwright (for browser automation)

## Installation

```bash
npm install @striderlabs/mcp-drizly
```

Install Playwright browsers:

```bash
npx playwright install chromium
```

## Configuration

Add to your MCP client configuration (e.g., Claude Desktop `claude_desktop_config.json`):

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

Or if installed globally:

```json
{
  "mcpServers": {
    "drizly": {
      "command": "mcp-drizly"
    }
  }
}
```

## Available Tools

### `search_products`
Search for alcohol products by name, brand, or type.

**Parameters:**
- `query` (required) - Search query string
- `category` - Filter by category: `beer`, `wine`, `spirits`, `cider`, `hard-seltzer`
- `minPrice` / `maxPrice` - Price range filter
- `minAbv` / `maxAbv` - ABV percentage filter
- `address` - Delivery address for availability filtering

**Example:**
```json
{
  "query": "IPA beer",
  "category": "beer",
  "maxPrice": 20
}
```

### `get_product_details`
Get detailed product information.

**Parameters:**
- `productId` (required) - Product ID or URL slug from Drizly

**Example:**
```json
{
  "productId": "dogfish-head-60-minute-ipa"
}
```

### `browse_categories`
Browse products by category and subcategory.

**Parameters:**
- `category` - Main category: `beer`, `wine`, `spirits`, `cider`, `hard-seltzer`, `cocktails-mixers`
- `subcategory` - Subcategory (e.g., `IPA`, `Chardonnay`, `Bourbon`)

**Example:**
```json
{
  "category": "wine",
  "subcategory": "Chardonnay"
}
```

### `check_availability`
Check if a product is available for delivery.

**Parameters:**
- `productId` (required) - Product to check
- `address` (required) - Delivery address

**Example:**
```json
{
  "productId": "corona-extra-beer",
  "address": "123 Main St, Boston, MA 02101"
}
```

### `add_to_cart`
Add a product to the shopping cart.

**Parameters:**
- `productId` (required) - Product ID
- `name` (required) - Product name
- `quantity` (required) - Quantity (minimum 1)
- `price` (required) - Price per unit
- `imageUrl` - Optional product image URL

**Example:**
```json
{
  "productId": "corona-extra-12pk",
  "name": "Corona Extra 12-Pack",
  "quantity": 2,
  "price": 15.99
}
```

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

**Returns:** Cart items, subtotal, delivery fee, and total.

### `update_cart`
Update item quantity or remove from cart.

**Parameters:**
- `productId` (required) - Product to update
- `quantity` (required) - New quantity (0 removes item)

**Example:**
```json
{
  "productId": "corona-extra-12pk",
  "quantity": 3
}
```

### `get_stores`
Find stores available for delivery to an address.

**Parameters:**
- `address` (required) - Delivery address

**Example:**
```json
{
  "address": "456 Park Ave, New York, NY 10022"
}
```

### `place_order`
Place an order for cart items.

**Parameters:**
- `deliveryAddress` (required) - Full delivery address
- `cardLastFour` - Last 4 digits of payment card
- `savePayment` - Whether to save payment method

**Example:**
```json
{
  "deliveryAddress": "123 Main St, Apt 4B, Boston, MA 02101",
  "cardLastFour": "4242"
}
```

### `get_orders`
View all past and current orders.

### `track_order`
Track an order's current status.

**Parameters:**
- `orderId` (required) - Order ID (format: `DRZ-XXXXXXXXXX`)

**Example:**
```json
{
  "orderId": "DRZ-1234567890"
}
```

### `get_recommendations`
Get personalized product recommendations.

**Parameters:**
- `categories` - Preferred categories array
- `minPrice` / `maxPrice` - Price range for recommendations
- `previousOrders` - Previous order IDs for personalization

**Example:**
```json
{
  "categories": ["wine"],
  "maxPrice": 30
}
```

## Development

```bash
# Install dependencies
npm install

# Build TypeScript
npm run build

# Run in development mode
npm run dev
```

## Architecture

The connector uses two main components:

- **`src/index.ts`** - MCP server that defines tools and handles requests
- **`src/browser.ts`** - Browser automation layer using Playwright to interact with Drizly's website

The browser automation handles:
- Age verification gates
- Product search and navigation
- Cart management (stored in memory)
- Order simulation

## Important Notes

- **Age Verification**: Drizly requires users to be 21+. Ensure compliance with local laws.
- **Cart State**: Cart data is stored in memory and will reset when the server restarts.
- **Availability**: Product availability depends on your delivery location and connected retailers.
- **Playwright**: Browser automation requires Playwright with Chromium installed.

## License

MIT

TDQS

A3.6/5.0

Scored across 12 tools

Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. The tools cover different aspects of the shopping workflow (browsing, searching, cart management, ordering, tracking) without overlap. For example, 'add_to_cart' and 'update_cart' are complementary but distinct operations.

Naming Consistency5/5

All tools follow a consistent verb_noun naming pattern throughout (e.g., 'add_to_cart', 'browse_categories', 'get_orders'). The verbs are descriptive and appropriate for each action, with no mixing of conventions or styles.

Tool Count5/5

With 12 tools, this server is well-scoped for an e-commerce alcohol delivery platform. Each tool earns its place by covering essential functions like product discovery, cart management, ordering, and tracking, without being overly sparse or bloated.

Completeness5/5

The tool set provides complete coverage of the domain, including product browsing/searching, cart CRUD operations (add, update, get), ordering (place, track, get history), and supporting functions like availability checks and recommendations. There are no obvious gaps that would hinder agent workflows.