printful-mcp-server
# Printful MCP Server
MCP server for Printful API. Create print-on-demand products with your designs.
## Setup
1. Get API key from [Printful Settings](https://www.printful.com/dashboard/settings/api)
2. Create config file:
```bash
cp printful_mcp_settings.example.json printful_mcp_settings.json
```
3. Add your API key to the config
4. Install and build:
```bash
npm install
npm run build
```
## Usage
### With Claude Desktop
Add to `claude_desktop_config.json`:
```json
{
"mcpServers": {
"printful": {
"command": "node",
"args": ["path/to/printful-mcp-server/build/index.js"]
}
}
}
```
### Test with MCP Inspector
```bash
npm run inspector
```
## Available Tools
### Catalog
- `getProducts` - Browse all printable products (shirts, mugs, etc)
- `getProduct` - Get product details with all variants (sizes, colors)
- `getProductVariant` - Get specific variant info
- `getCategories` - List product categories
- `getPrintfiles` - Get print area dimensions for a product
### Files
- `uploadFile` - Upload design from local file
- `uploadFileFromUrl` - Upload design from URL
- `getFile` - Get file info
- `getFiles` - List all files in library
### Sync Products (Your Listings)
- `getSyncProducts` - List your created products
- `getSyncProduct` - Get product with variants
- `createSyncProduct` - Create new product listing
- `updateSyncProduct` - Update product
- `deleteSyncProduct` - Delete product
- `getSyncVariant` - Get variant details
- `updateSyncVariant` - Update variant (price, files)
- `deleteSyncVariant` - Delete variant
### Mockups
- `createMockupTask` - Generate mockup images
- `getMockupTask` - Check mockup generation status
- `getMockupTemplates` - Get available mockup styles
### Store
- `getStore` - Get current store info
- `getStores` - List all stores
- `changeStore` - Switch to different store
## Workflow Example
1. Browse catalog:
```
getProducts → find product ID (e.g. 71 for Unisex Staple T-Shirt)
getProduct(71) → find variant IDs for sizes/colors you want
```
2. Upload design:
```
uploadFileFromUrl({ url: "https://example.com/my-design.png" })
→ returns file ID
```
3. Create product:
```
createSyncProduct({
name: "My Awesome Shirt",
variants: [
{
variant_id: 4012,
retail_price: "24.99",
files: [{ type: "front", url: "https://example.com/my-design.png" }]
}
]
})
```
4. Generate mockups (optional):
```
createMockupTask({
product_id: 71,
files: [{ placement: "front", image_url: "https://..." }]
})
getMockupTask({ task_key: "..." }) → get mockup image URLs
```
## Environment Variables
Alternative to config file:
- `PRINTFUL_API_KEY` - Your API key
- `PRINTFUL_STORE_ID` - Optional store ID
TDQS
Scored across 23 tools
Each tool targets a distinct resource and action. Catalog, file, sync product, mockup, and store tools are clearly separated. There is no overlap between tools like getProducts (catalog) and getSyncProducts (store products).
Tool names follow a consistent verb_noun pattern (e.g., getProducts, createSyncProduct, updateSyncVariant, deleteSyncProduct). All use camelCase with descriptive verbs, and even uploadFileFromUrl is predictable. No mixed naming conventions.
23 tools is on the higher end but appropriate for the broad scope of Printful's API: catalog browsing, file management, product lifecycle, mockups, and store management. Each tool covers a distinct function, so the count feels justified rather than excessive.
The tool set covers the core workflow: browse catalog, upload designs, create/update/delete sync products and variants, generate mockups, and manage stores. Minor gaps exist, such as no file deletion or order management tools, but the primary product creation and management lifecycle is well covered.