MCP App Store
by KeenEthics
PrintGen icon

PrintGen

By Algorithmic Labs, LLC

Get New App Alerts

Overview

Turn an idea, a photo or a logo into custom apparel, refine the saved design, inspect garment previews, choose sizes and quantities, and open a Shopify checkout to pay. Check payment, production and delivery through your connected PrintGen account. Shipping is available within the United States.

Tools

design.browse

ChatGPT
Browse the buyer's saved designs and their completed product images and mockups. Empty arguments open the buyer's saved designs. An optional design_id opens one of them. Search and pagination apply to the list of designs; mockup_page pages the selected design's completed mockups. This read-only view never generates, edits or charges for anything. Selecting an item supplies it as conversation context. Presentation: This view already shows each saved design with its images. Do not repeat those designs in your reply as a list, cards or Markdown images, which produces broken duplicate previews. Refer to the view in one short sentence and add only what the user asked that the view does not show.

design.edit

ChatGPT
Change one of the buyer's designs with a plain-language instruction. Use this for every change the buyer asks for to a design PrintGen made: swapping, adding, removing, recoloring or moving something. A picture drawn with an image tool is not the saved design and cannot be printed or ordered. The edit starts from the saved design and keeps everything the instruction does not mention, so "make the text smaller, add the date" is a complete instruction. The result is a new design and the earlier one is kept. A delivered edit uses one free design credit. Poll `design.get_generation with the returned handle, then call design.get once to show the result. Args: design_id: The id of one of the buyer's designs. instruction: Only what to change, in the buyer's own words. Do not add a list of what should stay the same; it is kept automatically. variant_group_uuid: Optional new garment color, a variant_group_uuid from shop.get_product. Omit to keep the current color. image: Optional photo, logo or other image from the buyer for this change, such as a logo to add: the file they attached, or a public https link they gave. Never a made-up link. image_type: "logo" when the buyer calls the image their logo. Otherwise leave "photo". Returns: handle (string): Pass to design.get_generation. status ("pending"): message (string): How to poll for the result. Supports idempotency_key` (optional string): send the same key when retrying this exact call. Completed requests replay for 24 hours without re-executing or re-billing. Concurrent or uncertain attempts are not repeated; check existing work before starting another request.

design.generate

ChatGPT
Create a custom design for one product from the buyer's idea, photo or logo. PrintGen draws what `prompt describes for the chosen product, using the buyer's attached image when there is one, and saves it to the buyer's account. A delivered design uses one of the buyer's free design credits. No money is charged and no order is placed. Poll design.get_generation with the returned handle, then call design.get once to show the result. Args: product_uuid: A product_uuid from shop.list_products. prompt: The buyer's idea in plain language: the subject, any exact text, the style, the colors, and where it goes (front, back). With an image, say how to use it. variant_group_uuid: Optional garment color, a variant_group_uuid from shop.get_product. Omit to let PrintGen choose a color that suits the design. image: Optional photo, logo or other image from the buyer to put on the product: the file they attached, or a public https link they gave. Never a made-up link; without either, say the image cannot be passed here and that the buyer can upload it on printgen.ai. image_type: "logo" when the buyer calls the image their logo. Otherwise leave "photo". Returns: handle (string): Pass to design.get_generation. status ("pending"): message (string): How to poll for the result. Supports idempotency_key` (optional string): send the same key when retrying this exact call. Completed requests replay for 24 hours without re-executing or re-billing. Concurrent or uncertain attempts are not repeated; check existing work before starting another request.

design.get

ChatGPT
Return one of the buyer's saved designs with its previews. Args: design_id: The design's `id. Returns: id (string): title (string): url (string): The design's page on printgen.ai. Share this link rather than building one. generation_status ("pending" | "running" | "complete" | "failed"): generation_error (string): Why it failed, in words for the buyer. prompt (string): What the buyer asked for. product_uuid (string | null): The product it was made for. product_title (string | null): variant_group_uuid (string | null): Its garment color. created_at (string): product_images (object[]): The design on the product (placement, image_url`), front first. Empty when no preview is available. Image presentation: Where the host supports it, this tool displays the returned images in an inline gallery. Use that gallery to show the images; do not repeat them using Markdown image syntax (![...](...)) in your reply, which can produce broken duplicate previews. Read the finished result once per reply. A successful read already supplies the images, view labels and app URL. Reuse that result to answer; do not repeat the same read to display the gallery, confirm it rendered, or obtain the link. Each read creates another gallery. Fetch again only when new data is needed, such as another page, changed filters, or an explicit refresh. After completion, use one short sentence naming the available views, for example 'Here are the front and back views.' Adapt this to the actual views; never assume every product has front/back placements. Do not describe the artwork, palette or style unless asked. The gallery contains only images and view labels. Share the returned app URL once as a normal link in your reply, including when a preview is unavailable. Report an actual returned failure briefly; do not add generic print-review disclaimers to completed images. Do not add separate image links when the inline gallery is available. Only if the host does not render a gallery, provide labeled image links. Do not generate extra images or mockups solely to display saved artwork. If generation_status is failed, report only the public generation_error; do not describe a completed design, offer production repair advice, or retry generation automatically. Show product_images (the design on the garment). If product_images is empty, explain that the preview is unavailable and share the link; do not start preview generation to replace it. When the buyer asks to change this design, call design.edit; a picture drawn another way is not the saved design and cannot be ordered.

design.get_generation

ChatGPT
Report whether a design is ready, with its previews once it is. Args: handle: The handle returned by `design.generate or design.edit. wait_sec: 0 answers at once. A positive value waits up to that many seconds, 50 at most, for the design to finish. Returns: handle (string): status ("pending" | "running" | "complete" | "failed"): done (boolean): design_id (string | null): The design's id once it exists. progress (number | null): 0.0-1.0 when known. stage (string): product_images (object[]): The design on the product (placement, image_url`), front first. Empty until the design is ready. url (string | null): The design's page on printgen.ai. Share this link rather than building one. error (string): Why it failed, in words for the buyer. next_action (object | null): On completion, the read-only call that shows the finished design. Make it once before replying. Presentation: This is a status-only tool with no visual widget. Poll with wait_sec=50 until terminal; do not narrate each poll or render interim image links. When status is complete, call design.get once using the returned next_action arguments before your final response, including when the user asks for a link to display the finished gallery. Stop polling after completion and do not fetch the same gallery again in the same reply. If failed, explain the failure without claiming completion or retrying generation. For a long wait, give one brief factual progress update after every two consecutive wait_sec=50 polls that are still pending or running, then continue polling the same handle. Prefer a newly completed view when the returned status confirms it, for example 'The front is ready; the back is still being created.' Otherwise briefly state the returned queued or running status. Do not invent an ETA, percentage, stage or failure, repeat artwork descriptions, render interim images, or start another generation because the wait is long.

design.list

ChatGPT
List the buyer's saved designs, newest first. Args: page: 1-indexed. page_size: 1 to 100. search: Optional text to look for in the design titles. Returns: results (Design[]): Each: `id, title, url, generation_status, generation_error, prompt, product_uuid, product_title, variant_group_uuid, created_at`. total (number): page (number): page_size (number):

mockup.generate

ChatGPT
Make preview images (mockups) of a finished design on its product. Previews are free. An image that already exists is reused, not made again. Poll `mockup.get_generation with the returned handle, then call mockup.show once with the finished ids. Args: design_id: The id of one of the buyer's finished designs. views: What to make: "product" for photos of the product (front and back where it has both), "closeup" for close-ups of the print. Defaults to ["product"]. Returns: handle (string | null): Pass to mockup.get_generation. null when every requested preview already existed; show those with mockup.show. status ("pending" | "complete"): mockup_ids (string[]): The previews this call covers. message (string): How to get the result. Supports idempotency_key` (optional string): send the same key when retrying this exact call. Completed requests replay for 24 hours without re-executing or re-billing. Concurrent or uncertain attempts are not repeated; check existing work before starting another request.

mockup.get

ChatGPT
Return one of the buyer's saved previews. Args: mockup_id: A preview id from `mockup.generate or mockup.get_generation`. Returns: id (string): view (string): Which view of the product it shows. image (string | null): The image, once it is ready. status (string): created_at (string): url (string): The page on printgen.ai that shows the design's previews. Presentation: This is a data-only read; it does not display a gallery. When the user wants to see saved mockups, finish selecting their IDs, then call mockup.show once with all requested views together. Reuse these complete records rather than fetching them again. Do not substitute Markdown images or image links for the available display tool.

mockup.get_generation

ChatGPT
Report whether previews are ready. Args: handle: The handle returned by `mockup.generate. wait_sec: 0 answers at once. A positive value waits up to that many seconds, 50 at most, for the previews to finish. Returns: handle (string): status ("running" | "complete" | "failed"): done (boolean): progress (number | null): 0.0-1.0 when known. mockups (object[]): Each: id, status, image_url (null until ready) and error`. url (string | null): The page on printgen.ai that shows these previews. Share this link rather than building one. Presentation: This is a status-only tool with no visual widget. Poll with wait_sec=50 until terminal; do not narrate each poll or render interim image links. When status is complete, call mockup.show once with the IDs of the completed mockups to display the finished gallery. Stop polling after completion and do not fetch the same gallery again in the same reply. If failed, explain the failure without claiming completion or retrying generation. For a long wait, give one brief factual progress update after every two consecutive wait_sec=50 polls that are still pending or running, then continue polling the same handle. Prefer a newly completed view when the returned status confirms it, for example 'The front is ready; the back is still being created.' Otherwise briefly state the returned queued or running status. Do not invent an ETA, percentage, stage or failure, repeat artwork descriptions, render interim images, or start another generation because the wait is long.

mockup.show

ChatGPT
Display finished previews together as one image gallery. Args: mockup_ids: 1 to 20 ids of finished previews, in the order to show them. Returns: results (object[]): Each: `id, view, image, status, created_at and url`. total (number): Image presentation: Where the host supports it, this tool displays the returned images in an inline gallery. Use that gallery to show the images; do not repeat them using Markdown image syntax (![...](...)) in your reply, which can produce broken duplicate previews. Read the finished result once per reply. A successful read already supplies the images, view labels and app URL. Reuse that result to answer; do not repeat the same read to display the gallery, confirm it rendered, or obtain the link. Each read creates another gallery. Fetch again only when new data is needed, such as another page, changed filters, or an explicit refresh. After completion, use one short sentence naming the available views, for example 'Here are the front and back views.' Adapt this to the actual views; never assume every product has front/back placements. Do not describe the artwork, palette or style unless asked. The gallery contains only images and view labels. Share the returned app URL once as a normal link in your reply, including when a preview is unavailable. Report an actual returned failure briefly; do not add generic print-review disclaimers to completed images. Do not add separate image links when the inline gallery is available. Only if the host does not render a gallery, provide labeled image links. Do not generate extra images or mockups solely to display saved artwork.

ping

ChatGPT
Return the provided string back to the caller. Args: echo: Any string the caller wants echoed. Returns: echo (string): The string you passed in.

shop.create_checkout

ChatGPT
Quote an order for one of the buyer's designs and prepare its hosted checkout. Nothing is charged and no order exists until the buyer opens `checkout_url and pays there. Creates a checkout each time it is called; use shop.get_checkout to see whether an earlier one was paid before creating another. Args: design_id: A finished design the buyer made (design.get_generation returns it as design_id). items: One entry per size, each {"variant_id": ..., "quantity": ...} with a variant_id from shop.get_product for the same product the design was made on. shipping_address: Optional US address that prefills the checkout, so the buyer only has to confirm payment: first_name, last_name, address1, city, state (two letters), zip and optionally address2 and phone. Returns: checkout_id (string): Pass to shop.get_checkout. checkout_url (string): The hosted checkout the buyer opens to pay. status ("awaiting_payment"): seller (string): lines (list): Each has variant_id, size, color, quantity and unit_price_cents` as charged, design included. subtotal_cents (int): shipping_cents (int | null): Null when the checkout works it out. tax (string): Tax is added on the checkout page, from the address. currency (string): ships_to (string): address_prefilled (bool): policies_url (string): Shipping, returns and refunds.

shop.get_checkout

ChatGPT
Report whether a checkout from `shop.create_checkout has been paid. Args: checkout_id: The checkout_id shop.create_checkout returned. Returns: status (string): paid once the order is recorded; awaiting_payment while the checkout is open and unpaid; not_found when it is no longer open and no order is recorded, which is also what a payment made in the last minute looks like. order (object): Present when paid; the same fields as shop.get_order. checkout_url (string): Present when awaiting_payment`.

shop.get_order

ChatGPT
Return one of the buyer's orders with its production and delivery state. Args: order_id: An `order_id from shop.list_orders. Returns: order_id (string): status (string): stage (string): Buyer-facing production or delivery state. total (string): currency (string): created_at (string): items (list): Each has design_id, title, quantity, unit_price` and estimated ship and delivery dates when known. tracking_url (string | null): carrier (string | null): ship_to (string): City and region only.

shop.get_product

ChatGPT
Return one product's colors, sizes and prices. Args: product_uuid: A `product_uuid from shop.list_products. Returns: product_uuid (string): title (string): url (string): The product page on printgen.ai. colors (list): Each has name, hex, variant_group_uuid (pass it to design.generate to pin the garment color) and sizes, where every size carries the variant_id that shop.create_checkout takes and its price_cents` before any design surcharge. currency (string):

shop.list_orders

ChatGPT
List the buyer's paid orders, newest first. Args: limit: How many orders to return (1-50). Returns: orders (list): Each has `order_id, status, stage (the buyer-facing production or delivery state), total, currency, created_at, items and, once shipped, tracking_url`.

shop.list_products

ChatGPT
List the products a buyer can put a design on, with starting prices. Args: query: Optional words to match against the product name, brand or category, e.g. "hoodie" or "kids tee". limit: How many products to return (1-50). Returns: products (list): Each has `product_uuid (pass it to design.generate), title, category, from_price_cents, currency, colors and url`. total (int): How many products matched.

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

Similar Apps