Nordstrom MCP Server
# @striderlabs/mcp-nordstrom
Model Context Protocol (MCP) connector for [Nordstrom](https://www.nordstrom.com) retail. Browse products, manage your shopping bag, wishlist, and orders through any MCP-compatible AI client.
## Features
| Tool | Description | Auth Required |
|---|---|---|
| `search_products` | Search merchandise by keyword, category, or brand | No |
| `get_product` | Get full product details, sizes, and images | No |
| `add_to_bag` | Add an item to your shopping bag | Yes |
| `get_bag` | View shopping bag contents and totals | Yes |
| `remove_from_bag` | Remove an item from bag | Yes |
| `get_wishlist` | View saved/favorited items | Yes |
| `add_to_wishlist` | Save an item to your wishlist | Yes |
| `check_inventory` | Check store availability near a ZIP code | No |
| `get_orders` | View order history | Yes |
| `track_order` | Track a shipment | Yes |
## Installation
```bash
npm install @striderlabs/mcp-nordstrom
```
## Authentication
Authenticated tools (bag, wishlist, orders) require Nordstrom account credentials. Set them as environment variables:
```bash
export NORDSTROM_EMAIL="you@example.com"
export NORDSTROM_PASSWORD="yourpassword"
```
Alternatively, save credentials to `~/.nordstrom-mcp/credentials.json`:
```json
{
"email": "you@example.com",
"password": "yourpassword"
}
```
The file is stored with `600` permissions (owner read/write only).
## Usage with Claude Desktop
Add to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"nordstrom": {
"command": "npx",
"args": ["-y", "@striderlabs/mcp-nordstrom"],
"env": {
"NORDSTROM_EMAIL": "you@example.com",
"NORDSTROM_PASSWORD": "yourpassword"
}
}
}
}
```
## Tool Reference
### `search_products`
```json
{
"query": "black ankle boots",
"category": "women",
"brand": "Sam Edelman"
}
```
### `get_product`
```json
{
"product_id": "7654321"
}
```
`product_id` can be a Nordstrom numeric style ID or a full product URL.
### `add_to_bag`
```json
{
"product_id": "7654321",
"sku_id": "sku-9876",
"quantity": 1
}
```
### `get_bag`
No parameters required.
### `remove_from_bag`
```json
{
"item_id": "bag-item-id-from-get_bag"
}
```
### `get_wishlist`
No parameters required.
### `add_to_wishlist`
```json
{
"product_id": "7654321"
}
```
### `check_inventory`
```json
{
"product_id": "7654321",
"size": "M",
"zip": "98101"
}
```
### `get_orders`
```json
{
"limit": 5
}
```
### `track_order`
```json
{
"order_number": "12345678"
}
```
## Development
```bash
# Install dependencies
npm install
# Build
npm run build
# Run in dev mode
npm run dev
# Pack for distribution
npm pack
```
## Notes
- Uses [Playwright](https://playwright.dev) for browser automation against nordstrom.com.
- Stealth mode enabled to reduce bot detection.
- Some actions (add to bag, wishlist) may be blocked if Nordstrom adds additional CAPTCHA challenges.
- This connector is for personal use only; respect Nordstrom's Terms of Service.
TDQS
Scored across 10 tools
Each tool has a clearly distinct purpose targeting specific e-commerce functions: shopping bag management (add, get, remove), wishlist management (add, get), product operations (search, get details), inventory checking, order history, and order tracking. No ambiguity exists between tools as they cover non-overlapping workflows.
All tools follow a consistent verb_noun pattern using snake_case: add_to_bag, get_product, search_products, etc. The naming convention is perfectly uniform throughout the set, making it predictable and easy to understand.
With 10 tools, the server is well-scoped for an e-commerce domain, covering core operations like product discovery, shopping cart management, wishlisting, inventory checks, and order tracking. Each tool earns its place without redundancy or bloat.
The toolset provides complete coverage for the Nordstrom shopping domain: full CRUD for the shopping bag (add, get, remove), wishlist management (add, get), product search and details, inventory checks, order history, and order tracking. No obvious gaps exist for typical user workflows.