Printful MCP Server
MCP server for Printful API. Create print-on-demand products with your designs.
Setup
- Get API key from Printful Settings
- Create config file:
cp printful_mcp_settings.example.json printful_mcp_settings.json
- Add your API key to the config
- Install and build:
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
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 infogetCategories- List product categoriesgetPrintfiles- Get print area dimensions for a product
Files
uploadFile- Upload design from local fileuploadFileFromUrl- Upload design from URLgetFile- Get file infogetFiles- List all files in library
Sync Products (Your Listings)
getSyncProducts- List your created productsgetSyncProduct- Get product with variantscreateSyncProduct- Create new product listingupdateSyncProduct- Update productdeleteSyncProduct- Delete productgetSyncVariant- Get variant detailsupdateSyncVariant- Update variant (price, files)deleteSyncVariant- Delete variant
Mockups
createMockupTask- Generate mockup imagesgetMockupTask- Check mockup generation statusgetMockupTemplates- Get available mockup styles
Store
getStore- Get current store infogetStores- List all storeschangeStore- Switch to different store
Workflow Example
- Browse catalog:
getProducts → find product ID (e.g. 71 for Unisex Staple T-Shirt)
getProduct(71) → find variant IDs for sizes/colors you want
- Upload design:
uploadFileFromUrl({ url: "https://example.com/my-design.png" })
→ returns file ID
- 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" }]
}
]
})
- 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 keyPRINTFUL_STORE_ID- Optional store ID












