loading…
Search for a command to run...
loading…
Connects Printful's print-on-demand API to AI assistants like Claude and Cursor to automate business operations. It enables users to browse catalogs, manage ord
Connects Printful's print-on-demand API to AI assistants like Claude and Cursor to automate business operations. It enables users to browse catalogs, manage orders, generate mockups, and calculate shipping rates through natural language.
Connect Printful's powerful API to Claude, Cursor, and other AI assistants through the Model Context Protocol.
📚 Quick Start • 🔧 Configuration • 🚀 Examples • 📖 Documentation
Made by Purple Horizons License: MIT Python 3.10+ Printful API v2
Start your print-on-demand business today • No upfront costs • 300+ products • Global fulfillment
🎯 Complete API Coverage
|
🛡️ Production Ready
|
🚀 Easy Integration
|
🤖 AI Skill Included
|
🎁 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!
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-here
Step 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.
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 | python -m printful_mcp |
| http | HTTP clients, mcporter | python -m printful_mcp --transport http |
| sse | Legacy SSE clients | python -m printful_mcp --transport sse |
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 8080
Using 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
| 🛍️ 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 | - | - |
# 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"
)
# 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"
)
# 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"
)
# 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"
)
📺 Watch Demo Video • 📖 Read Full Documentation • 💬 Join Community
| Tool | Description | Example Use |
|---|---|---|
printful_list_catalog_products |
Browse 300+ products with filters | "Show me all hoodies" |
printful_get_product |
Get detailed product info | "Tell me about product 71" |
printful_get_product_variants |
Get all sizes/colors | "What sizes are available?" |
printful_get_variant_prices |
Get pricing by currency | "How much in EUR?" |
printful_get_product_availability |
Check stock status | "Is this in stock?" |
| Tool | Description | Example Use |
|---|---|---|
printful_create_order |
Create draft order | "Create order for John" |
printful_get_order |
View order details | "Show me order #12345" |
printful_confirm_order |
Start fulfillment | "Confirm this order" |
printful_list_orders |
List all orders | "Show my recent orders" |
| Tool | Description | Example Use |
|---|---|---|
printful_calculate_shipping |
Get shipping rates & times | "How much to ship to UK?" |
printful_list_countries |
List supported countries | "What countries do you ship to?" |
| Tool | Description | Example Use |
|---|---|---|
printful_create_mockup_task |
Generate mockup images | "Create mockup with my design" |
printful_get_mockup_task |
Check generation status | "Is my mockup ready?" |
| Tool | Description | Example Use |
|---|---|---|
printful_add_file |
Upload design file | "Upload my logo" |
printful_get_file |
Get file info & status | "Check file #12345" |
| Tool | Description | Example Use |
|---|---|---|
printful_list_stores |
List your stores | "Show all my stores" |
printful_get_store_stats |
View sales & profit | "What are my sales?" |
| Tool | Description | Example Use |
|---|---|---|
printful_list_sync_products |
List synced products | "Show my Etsy products" |
printful_get_sync_product |
Get sync product details | "Details on sync #123" |
📖 Quick Start GuideGet up and running in 5 minutes |
🔑 API Token SetupDetailed token configuration guide |
🧪 Testing GuideLearn how to test your integration |
🔐 API Scopes ReferenceRequired permissions explained |
💻 ExamplesReal code examples |
🔧 Cursor ConfigReady-to-use config file |
This server uses Printful API v2 (production-ready beta) with smart v1 fallback:
🎯 v2 (Primary)
|
🔄 v1 (Fallback)
|
Why v2? Better pagination • Real-time stock • Enhanced orders • Improved security • Standardized formats
📊 Rate Limits
|
🚀 Performance
|
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-here
Solution: Wait for the time specified in the error message (usually 60 seconds).
X-Ratelimit-Reset header for exact reset timeSolution: Double-check the ID you're using.
@ (e.g., @my-order-123)Solution: Mockup generation typically takes 10-30 seconds.
⚡ Quick TestAutomated test suite
✅ Tests 6 core features ⏱️ Takes 30 seconds |
🌐 Interactive TestWeb-based MCP Inspector
🎯 Test any tool visually 🌍 Opens at localhost:5173 |
🤖 Live TestIn Claude/Cursor Just ask:
💬 Natural language ✨ Real integration test |
📖 Full testing guide: See TESTING.md for comprehensive testing instructions.
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
We welcome contributions! Here's how you can help:
🐛 Report BugsFound an issue? Open a bug report ✨ Request FeaturesHave an idea? Suggest a feature |
🔧 Submit PRs
|
| Resource | Link |
|---|---|
| 📘 Printful API v2 Docs | developers.printful.com/docs/v2-beta |
| 📗 Printful API v1 Docs | developers.printful.com/docs |
| 🔌 MCP Protocol Spec | modelcontextprotocol.io |
| 🐍 FastMCP Framework | github.com/modelcontextprotocol/python-sdk |
| 🎨 Purple Horizons | purplehorizons.io |
| 👨💻 Made by Gianni | giannidalerta.com |
MIT License - Free to use, modify, and distribute
View License • Purple Horizons LLC • 2026
⭐ 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 Purple Horizons
Empowering businesses through AI automation
Get Started Now • View Examples • Read Docs
Questions? Issues? Open an issue or contact us
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"printful-mcp-server": {
"command": "npx",
"args": []
}
}
}Web content fetching and conversion for efficient LLM usage.
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also