278 lines
6.4 KiB
Markdown

# Shopify MCP Server
Model Context Protocol (MCP) server for Shopify Admin API integration.
## Features
- **Full Shopify Admin API Coverage**: Products, Orders, Customers, Inventory, Collections, and more
- **GraphQL Support**: Execute GraphQL Admin API queries
- **Automatic Rate Limiting**: Intelligent retry with exponential backoff
- **Type-Safe**: Comprehensive TypeScript types for all Shopify entities
- **Cursor-Based Pagination**: Automatic handling of paginated responses
- **MCP Resources**: UI-friendly resource endpoints for apps
- **Dual Transport**: Stdio (default) or HTTP/SSE modes
## Installation
```bash
npm install
npm run build
```
## Configuration
### Environment Variables
| Variable | Required | Description | Example |
|----------|----------|-------------|---------|
| `SHOPIFY_ACCESS_TOKEN` | ✅ | Admin API access token | `shpat_xxxxxxxxxxxxx` |
| `SHOPIFY_STORE` | ✅ | Store name (without .myshopify.com) | `my-store` |
| `SHOPIFY_API_VERSION` | ❌ | API version (default: 2024-01) | `2024-01` |
| `DEBUG` | ❌ | Enable debug logging | `true` |
### Getting Your Access Token
1. Go to your Shopify admin: `https://your-store.myshopify.com/admin`
2. Navigate to **Settings****Apps and sales channels****Develop apps**
3. Click **Create an app** or select an existing one
4. Go to **API credentials** tab
5. Click **Install app** (if not already installed)
6. Copy the **Admin API access token** (starts with `shpat_`)
### Required API Scopes
Grant the following scopes to your app (based on features needed):
- `read_products`, `write_products` - Product management
- `read_orders`, `write_orders` - Order management
- `read_customers`, `write_customers` - Customer management
- `read_inventory`, `write_inventory` - Inventory tracking
- `read_content`, `write_content` - Pages, blogs, themes
- `read_discounts`, `write_discounts` - Price rules and discount codes
- `read_shipping`, `write_shipping` - Shipping zones and carriers
- `read_analytics` - Analytics and reports
## Usage
### Stdio Mode (Default)
```bash
# Copy example env file
cp .env.example .env
# Edit .env with your credentials
# SHOPIFY_ACCESS_TOKEN=shpat_xxxxxxxxxxxxx
# SHOPIFY_STORE=your-store-name
# Start the server
npm start
# Or in development mode with auto-reload
npm run dev
```
### HTTP Mode
```bash
# Start with HTTP transport
npm start -- --http --port=3000
# Health check
curl http://localhost:3000/health
```
## Available Tools
The server provides the following tool categories (lazy-loaded on demand):
### Products
- Create, read, update, delete products
- Manage variants and images
- Bulk operations
### Orders
- List and search orders
- Update order status
- Create refunds
- Manage fulfillments
### Customers
- Customer CRUD operations
- Customer search
- Manage addresses
### Inventory
- Track inventory levels
- Manage locations
- Adjust stock quantities
### Collections
- Smart and custom collections
- Add/remove products from collections
### Discounts
- Create price rules
- Generate discount codes
- Manage promotions
### Fulfillments
- Create fulfillments
- Update tracking information
- Cancel fulfillments
### Shipping
- Shipping zones
- Carrier services
- Delivery profiles
### Themes
- Theme management
- Asset upload/download
### Content
- Pages
- Blogs and articles
- Redirects
### Webhooks
- Register webhooks
- Manage subscriptions
### Analytics
- Sales reports
- Product analytics
- Customer insights
## MCP Resources
Resources are available for UI applications:
- `shopify://products` - List all products
- `shopify://orders` - List all orders
- `shopify://customers` - List all customers
- `shopify://inventory` - View inventory levels
## API Client Features
### Rate Limiting
The client automatically handles Shopify's rate limits:
- Parses `X-Shopify-Shop-Api-Call-Limit` header
- Warns when approaching limit (80%+ used)
- Automatic retry with exponential backoff (1s, 2s, 4s)
### Pagination
```typescript
// Get single page
const { data, pageInfo } = await client.list('/products.json');
// Get all pages (with safety limit)
const allProducts = await client.listAll('/products.json', {}, 10);
```
### GraphQL
```typescript
const result = await client.graphql(`
query {
products(first: 10) {
edges {
node {
id
title
handle
}
}
}
}
`);
```
## Error Handling
All errors are normalized with structured responses:
```json
{
"error": "RATE_LIMIT_EXCEEDED",
"message": "Shopify API rate limit exceeded. Please retry after a delay."
}
```
Error codes:
- `TOOL_NOT_FOUND` - Requested tool doesn't exist
- `RESOURCE_READ_ERROR` - Failed to read resource
- `AUTHENTICATION_ERROR` - Invalid access token
- `RATE_LIMIT_EXCEEDED` - Too many requests
- `UNKNOWN_ERROR` - Unexpected error
## Development
```bash
# Install dependencies
npm install
# Run TypeScript compiler in watch mode
npx tsc --watch
# Run development server with auto-reload
npm run dev
# Type check only (no build)
npx tsc --noEmit
# Build for production
npm run build
```
## Architecture
```
src/
├── main.ts # Entry point, env validation, transports
├── server.ts # MCP server setup, handlers
├── clients/
│ └── shopify.ts # Shopify API client (REST + GraphQL)
├── types/
│ └── index.ts # TypeScript interfaces for Shopify entities
├── tools/ # Tool modules (created separately)
│ ├── products.ts
│ ├── orders.ts
│ ├── customers.ts
│ └── ...
└── apps/ # UI applications (created separately)
```
## Troubleshooting
### "Authentication failed"
- Verify `SHOPIFY_ACCESS_TOKEN` is correct
- Ensure the app is installed on your store
- Check that the token hasn't been revoked
### "Resource not found"
- Check that `SHOPIFY_STORE` is correct (without `.myshopify.com`)
- Verify the resource ID exists in your store
### "Rate limit exceeded"
- The client will automatically retry with backoff
- Consider implementing request batching for bulk operations
- Monitor rate limit info with `client.getRateLimitInfo()`
### TypeScript errors
- Run `npm install` to ensure all dependencies are installed
- Check that `@types/node` version matches your Node.js version
- Verify `tsconfig.json` settings
## License
MIT
## Support
For issues and questions:
- GitHub Issues: [mcpengine repository](https://github.com/BusyBee3333/mcpengine)
- Shopify API Docs: https://shopify.dev/docs/api/admin-rest