Enables the listing and retrieval of product details for items synced from Etsy stores using Printful's legacy sync product tools.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Printful MCP ServerList all available t-shirts that support DTG printing"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π¨ Printful MCP Server
Automate Your Print-on-Demand Business with AI
Connect Printful's powerful API to Claude, Cursor, and other AI assistants through the Model Context Protocol.
π Quick Start β’ π§ Configuration β’ π Examples β’ π Documentation
π New to Printful?
Start your print-on-demand business today β’ No upfront costs β’ 300+ products β’ Global fulfillment
β¨ Features
π― Complete API Coverage
β Full Printful API v2 support
β Smart v1 fallback for legacy features
β 17 tools across all major domains
β Real-time stock & pricing data
π‘οΈ Production Ready
β Type-safe Pydantic validation
β Robust error handling
β Rate limit management
β Dual output formats (JSON/Markdown)
π Easy Integration
β Works with Claude Desktop
β Works with Cursor IDE
β stdio + HTTP transports
β No hosting required
π€ AI Skill Included
β Cursor skill teaches AI how to use tools
β Best practices built-in
β Auto-applies workflows
β Better experience out of the box
π Bonus: This repo includes a Cursor AI skill that automatically teaches AI assistants how to use the Printful MCP effectively. Just open the project and start asking questions!
π Quick Start
Python 3.10+ (Download)
Printful API Key (Get one free)
Step 1: Clone & Install
git clone https://github.com/Purple-Horizons/printful-ph-mcp.git
cd printful-ph-mcp
pip install -e .Step 2: Set up API Key
cp .env.example .env
# Edit .env and add: PRINTFUL_API_KEY=your-key-hereStep 3: Configure Your AI Assistant
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"printful": {
"command": "python",
"args": ["-m", "printful_mcp"],
"cwd": "/path/to/printful-ph-mcp",
"env": {
"PRINTFUL_API_KEY": "your-api-key-here"
}
}
}
}Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"printful": {
"command": "python",
"args": ["-m", "printful_mcp"],
"cwd": "/path/to/printful-ph-mcp",
"env": {
"PRINTFUL_API_KEY": "your-api-key-here"
}
}
}
}β That's it! Restart your AI assistant and start using Printful tools.
π Transport Options
By default, the server uses stdio transport (required for Cursor/Claude Desktop). For HTTP clients or tools like mcporter, you can use HTTP transport.
Transport | Use Case | Command |
stdio (default) | Cursor, Claude Desktop |
|
http | HTTP clients, mcporter |
|
sse | Legacy SSE clients |
|
HTTP Transport Example:
# Start server on port 8000
python -m printful_mcp --transport http --port 8000
# Or with custom host
python -m printful_mcp --transport http --host 0.0.0.0 --port 8080Using with mcporter:
# Option 1: Use JSON args format (recommended)
mcporter call printful_mcp.printful_list_catalog_products --args '{"limit":20}'
# Option 2: Use typed values (colon for numbers)
mcporter call printful_mcp.printful_get_product product_id:71π¨ What You Can Do
ποΈ Catalog | π¦ Orders | π Shipping | πΌοΈ Mockups | π Files | πͺ Stores |
Browse 300+ products | Create & manage orders | Calculate rates | Generate mockups | Upload designs | View statistics |
Check availability | Confirm fulfillment | List countries | Check status | Get file info | Multi-store support |
Get pricing | Track orders | Delivery times | Custom placements | - | - |
π‘ Usage Examples
π― Example 1: Find the Perfect Product
# Ask your AI assistant:
"Show me all t-shirts available for DTG printing under $15"
# It will use:
printful_list_catalog_products(
types="T-SHIRT",
techniques="dtg",
limit=20,
format="markdown"
)π° Example 2: Get Pricing
# Ask your AI assistant:
"What's the price for variant 4011 in USD?"
# It will use:
printful_get_variant_prices(
variant_id=4011,
currency="USD",
format="markdown"
)π¦ Example 3: Create an Order
# Ask your AI assistant:
"Create a draft order for John Doe at 123 Main St, Los Angeles, CA 90001"
# It will use:
printful_create_order(
recipient_name="John Doe",
recipient_address1="123 Main St",
recipient_city="Los Angeles",
recipient_state_code="CA",
recipient_country_code="US",
recipient_zip="90001"
)π¨ Example 4: Generate Product Mockups
# Ask your AI assistant:
"Generate a mockup for product 71 with my design"
# It will use:
printful_create_mockup_task(
product_id=71,
variant_ids="4011,4012",
design_url="https://example.com/design.png",
placement="front"
)π¬ Want to see it in action?
πΊ Watch Demo Video β’ π Read Full Documentation β’ π¬ Join Community
π οΈ Available Tools
Tool | Description | Example Use |
| Browse 300+ products with filters | "Show me all hoodies" |
| Get detailed product info | "Tell me about product 71" |
| Get all sizes/colors | "What sizes are available?" |
| Get pricing by currency | "How much in EUR?" |
| Check stock status | "Is this in stock?" |
Tool | Description | Example Use |
| Create draft order | "Create order for John" |
| View order details | "Show me order #12345" |
| Start fulfillment | "Confirm this order" |
| List all orders | "Show my recent orders" |
Tool | Description | Example Use |
| Get shipping rates & times | "How much to ship to UK?" |
| List supported countries | "What countries do you ship to?" |
Tool | Description | Example Use |
| Generate mockup images | "Create mockup with my design" |
| Check generation status | "Is my mockup ready?" |
Tool | Description | Example Use |
| Upload design file | "Upload my logo" |
| Get file info & status | "Check file #12345" |
Tool | Description | Example Use |
| List your stores | "Show all my stores" |
| View sales & profit | "What are my sales?" |
Tool | Description | Example Use |
| List synced products | "Show my Etsy products" |
| Get sync product details | "Details on sync #123" |
π Documentation
π Quick Start Guide
Get up and running in 5 minutes
π API Token Setup
Detailed token configuration guide
π§ͺ Testing Guide
Learn how to test your integration
π API Scopes Reference
Required permissions explained
π» Examples
Real code examples
π§ Cursor Config
Ready-to-use config file
π API Version Strategy
This server uses Printful API v2 (production-ready beta) with smart v1 fallback:
π― v2 (Primary)
β Catalog & Products
β Orders & Fulfillment
β Shipping Rates
β Mockup Generation
β File Management
β Store Statistics
π v1 (Fallback)
β Sync Products
β Product Templates
β οΈ Auto-switches when needed
π Future-proof architecture
Why v2? Better pagination β’ Real-time stock β’ Enhanced orders β’ Improved security β’ Standardized formats
βοΈ Rate Limiting & Performance
π Rate Limits
120 requests / 60 seconds
Leaky bucket algorithm
Auto-retry on 429 errors
π Performance
Response times: 100-500ms
Concurrent requests: Supported
Timeout handling: Built-in
π Troubleshooting
Solution: Make sure your API key is set in .env or passed via environment variables in the MCP config.
# Check your .env file
cat .env
# Should contain:
PRINTFUL_API_KEY=your-actual-key-hereSolution: Wait for the time specified in the error message (usually 60 seconds).
Default limit: 120 requests/minute
Consider implementing request batching
Check
X-Ratelimit-Resetheader for exact reset time
Solution: Double-check the ID you're using.
For orders: You can use external IDs by prefixing with
@(e.g.,@my-order-123)For products: Verify the product/variant ID exists in the catalog
Check if the resource belongs to your store
Solution: Mockup generation typically takes 10-30 seconds.
Wait at least 30 seconds before checking status
If stuck longer than 2 minutes, check task status - it may have failed
Verify your design URL is publicly accessible
π§ͺ Testing
Choose Your Testing Method
β‘ Quick Test
Automated test suite
export PRINTFUL_API_KEY=your-key
python test_server.pyβ Tests 6 core features β±οΈ Takes 30 seconds
π Interactive Test
Web-based MCP Inspector
export PRINTFUL_API_KEY=your-key
./test-with-inspector.shπ― Test any tool visually π Opens at localhost:5173
π€ Live Test
In Claude/Cursor
Just ask:
"List Printful countries"π¬ Natural language β¨ Real integration test
π Full testing guide: See TESTING.md for comprehensive testing instructions.
ποΈ Project Structure
printful-ph-mcp/
βββ π src/
β βββ π printful_mcp/
β βββ π server.py # FastMCP server + tool registrations
β βββ π client.py # API client with auth/error handling
β βββ π tools/ # Tool implementations by domain
β β βββ ποΈ catalog.py # Product browsing (5 tools)
β β βββ π¦ orders.py # Order management (4 tools)
β β βββ π shipping.py # Shipping rates (2 tools)
β β βββ πΌοΈ mockups.py # Mockup generation (2 tools)
β β βββ π files.py # File management (2 tools)
β β βββ πͺ stores.py # Store statistics (2 tools)
β β βββ π sync.py # v1 fallback (2 tools)
β βββ π models/
β βββ π inputs.py # Pydantic input models
βββ π pyproject.toml
βββ π .env.example
βββ π README.mdπ€ Contributing
We welcome contributions! Here's how you can help:
π Report Bugs
Found an issue? Open a bug report
β¨ Request Features
Have an idea? Suggest a feature
π§ Submit PRs
Fork the repository
Create your feature branch
Commit your changes
Push and open a Pull Request
π Resources & Links
Resource | Link |
π Printful API v2 Docs | |
π Printful API v1 Docs | |
π MCP Protocol Spec | |
π FastMCP Framework | |
π¨ Purple Horizons | |
π¨βπ» Made by Gianni |
π License
MIT License - Free to use, modify, and distribute
View License β’ Purple Horizons LLC β’ 2026
π Support This Project
If this project helped you, consider:
β Star this repo on GitHub
π¦ Share it on social media
π€ Contribute to the codebase
π¨ Sign up for Printful using our affiliate link
Made with β€οΈ by
Empowering businesses through AI automation
π Ready to automate your print-on-demand business?
Get Started Now β’ View Examples β’ Read Docs
Questions? Issues? Open an issue or contact us