Printify MCP
Printify MCP
An MCP server for running a print-on-demand store from an AI assistant: create products on Printify, price them from their production cost, publish them, push them to every Shopify sales channel, and render ad creative from the product mockups.
Fork of TSavo/printify-mcp, substantially extended. See Differences from upstream.
Why it exists
The Printify API alone gets you about two thirds of a working pipeline. The gaps that this fills, each found by hitting it in production:
Prices are hand-typed. Printify reports each variant's production cost, but nothing derives a price from it.
set_pricesdoes, in margin, markup or fixed mode, rounding upward so rounding never eats the target margin.Publishing reaches one channel. Printify publishes to Shopify's Online Store publication and stops. TikTok, Google & YouTube, Pinterest, Shop and POS stay unpublished until something else pushes them.
publish_to_sales_channelsdoes that.Printify guesses the product type wrong. A flask arrives typed "Mug", a candle as "Home Decor". Downstream channels map their taxonomy from that field.
set_product_categoryderives it from Shopify's own category.Ad creative is manual.
create_product_carouselandcreate_product_adsbuild vertical posts from the product's real mockups.
Install
git clone https://github.com/<you>/printify-mcp.git
cd printify-mcp
npm install
npm run build
cp .env.example .env # then fill in PRINTIFY_API_KEYRegister it with your MCP client. For Claude Code:
{
"mcpServers": {
"printify": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/printify-mcp/dist/index.js"]
}
}
}The server resolves .env from its own package directory, not the working directory, so
it works no matter where the host launches it from.
Only PRINTIFY_API_KEY is required. Shopify and Replicate credentials unlock the
sales-channel and image-generation tools respectively; without them those tools refuse
with setup instructions rather than failing obscurely.
Tools
Shops and catalog — get_printify_status, list_shops, switch_shop,
get_blueprints, get_blueprint, get_print_providers, get_variants,
get_defaults, set_default
Products — list_products, get_product, create_product, update_product,
delete_product, publish_product, unpublish_product, get_product_mockups,
upload_image
Pipeline — create_and_publish runs create → price → publish → fan out to sales
channels → fix category in one call, reporting each stage separately so a partial failure
tells you exactly how far it got.
Pricing — set_prices (margin / markup / fixed, dryRun to preview)
Sales channels (Shopify credentials) — list_sales_channels,
publish_to_sales_channels, get_channel_sales, list_channel_products
Categories (Shopify credentials) — suggest_product_category,
set_product_category, audit_product_categories
Creative — create_product_carousel (numbered 1080×1920 photo slides),
create_product_ads (three vertical video variants; needs ffmpeg on PATH)
Orders — get_orders, get_order, get_orders_by_day, get_orders_by_hour,
get_orders_by_month, get_orders_in_range
Webhooks — list_webhooks, create_webhook, delete_webhook
Images (Replicate) — generate_image, generate_and_upload_image
Docs — how_to_use with a topic (pipeline, product_creation, blueprints,
print_providers, variants, images, publishing, image_generation) returns the
reference an agent should read before guessing.
Notes worth knowing
Never publish a product twice. Publishing an already-published product creates a second channel listing and orphans the first — no Printify link, still purchasable, unfulfillable.
publish_productrefuses unlessrepublishis passed.external.idis not reliably a Shopify product ID. Immediately after publishing it can carry aprintify.mehandle. The channel tools wait until it points at the configured store; passshopifyProductIdto skip the lookup.Errors are real errors. No tool returns empty or placeholder data to paper over a failed request. A bad API key fails loudly at startup rather than quietly serving fabricated shops.
Creative is built from product photography and text — no generative model touches it, so the output carries no AI provenance metadata.
Differences from upstream
Added: order history and range queries, cost-based pricing, Shopify sales-channel
publishing, channel sales reporting, product-category correction, photo carousels and
video ads, tags/key features/sales-channel properties on create, print placement
(x/y/scale/angle plus image stacking), duplicate-title guard, and the create_and_publish
pipeline.
Fixed: list_products passed (limit, page) into a (page, limit) signature; the
products list silently returned an empty page on failure; a rejected API key produced two
fake shops and reported success; update_product forwarded camelCase variant keys the API
ignores, so price updates reported success and changed nothing; publish_product sent a
partial payload where Printify requires all seven flags.
Requirements
Node 18+. ffmpeg on PATH for create_product_ads (the carousel tool does not need it).
License
ISC, as upstream. See LICENSE — copyright TSavo, retained for the original work.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Plaaasma/printify-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server