Skip to main content
Glama
README.md
# Shopify MCP Server

Open-source Model Context Protocol (MCP) server for Shopify Admin API. Works with Claude Code, Cursor, OpenClaw, and any MCP-compatible client.

## Why This Exists

- **Composio** = commercial, paid, complex
- **Shopify's Storefront MCP** = Hydrogen-only, limited scope  
- **This** = open-source, self-hosted, Admin API coverage

## Features

- 🔍 **Product Search** — Find products by title, handle, or tags
- 📦 **Product Management** — Get, update products and variants
- 📋 **Order Queries** — View orders and line items
- 🏷️ **Metafield Operations** — Read and write metafields on products, collections, customers
- 🎨 **Theme Asset Editing** — Read and edit Liquid, CSS, JS files directly
- 👥 **Customer Management** — Customer queries (coming soon)

## Installation

```bash
# Clone and setup
git clone https://github.com/karangoyal/shopify-mcp-server.git
cd shopify-mcp-server
npm install

# Configure
cp .env.example .env
# Edit .env with your Shopify credentials

# Build
npm run build
```

## Usage with Claude Code

Add to your Claude Code settings:

```json
{
  "mcpServers": {
    "shopify": {
      "command": "node",
      "args": ["/path/to/shopify-mcp-server/dist/index.js"],
      "env": {
        "SHOPIFY_SHOP": "your-store.myshopify.com",
        "SHOPIFY_ACCESS_TOKEN": "your_token_here"
      }
    }
  }
}
```

## Available Tools

### search_products
Search for products by query string.

```json
{
  "query": "t-shirt",
  "limit": 10
}
```

### get_product
Get detailed product information.

```json
{
  "id": "gid://shopify/Product/123456"
}
```

### update_product
Update product details.

```json
{
  "id": "gid://shopify/Product/123456",
  "title": "New Title",
  "tags": ["new", "featured"],
  "status": "ACTIVE"
}
```

### get_orders
Get recent orders.

```json
{
  "status": "open",
  "limit": 10
}
```

### get_metafields
Get metafields for a product or shop.

```json
{
  "ownerType": "PRODUCT",
  "ownerId": "gid://shopify/Product/123456",
  "namespace": "custom"
}
```

### update_metafield
Create or update a metafield.

```json
{
  "ownerType": "PRODUCT",
  "ownerId": "gid://shopify/Product/123456",
  "namespace": "custom",
  "key": "warranty",
  "value": "2 years",
  "type": "single_line_text_field"
}
```

### get_themes
List all themes in the store.

```json
{}
```

### get_theme_asset
Read a theme file (Liquid, CSS, JS).

```json
{
  "themeId": "gid://shopify/Theme/123456789",
  "filename": "sections/header.liquid"
}
```

### update_theme_asset
Edit a theme file directly.

```json
{
  "themeId": "gid://shopify/Theme/123456789",
  "filename": "assets/custom.css",
  "content": "/* Your CSS here */"
}
```

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `SHOPIFY_SHOP` | Yes | Store domain (e.g., mystore.myshopify.com) |
| `SHOPIFY_ACCESS_TOKEN` | Yes | Admin API access token |
| `SHOPIFY_API_VERSION` | No | API version (default: 2024-01) |

## Getting a Shopify Access Token

1. Go to your Shopify Admin → Settings → Apps and sales channels
2. Click "Develop apps" → Create an app
3. Configure Admin API scopes (read_products, write_products, read_orders, etc.)
4. Install the app to your store
5. Copy the Admin API access token

## Roadmap

- [x] Product search and retrieval
- [x] Product updates
- [x] Order queries
- [x] Metafield read/write
- [x] Theme asset editing
- [ ] Customer management
- [ ] Collection operations
- [ ] Bulk operations
- [ ] Webhook support

## License

MIT — See LICENSE file

## Contributing

PRs welcome. This is an open-source alternative to commercial MCP offerings.

---

Built by [Karan Goyal](https://karangoyal.cc) | Open-source Shopify tooling