AgentMade Print on Demand
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Print on demand for AI agents. No sign-up. Picture, words or logo on a tee, hoodie or tote.
| Author | io.github.alexmensak |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 2848 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"AgentMade Print on Demand": {
"url": "https://pod.agentmade.dev/mcp/pay",
"transport": "streamable-http"
}
}
}
Measured tools (9)
search_productsread-onlyUse this when the user wants their own picture, words or logo printed on a T-shirt, hoodie, sweatshirt or tote bag and delivered, as a gift or for themselves. Finds products by free text, category, colour and size. Returns product_id, image_url (a product photo, or null), colours, sizes and print placements. No account needed. Not for mugs, posters, caps, stickers or embroidery.
Parameters:
size— string — Only products available in this size, e.g. "XL".color— string — Only products available in this colour, e.g. "black".query— string — Free-text description, e.g. "heavyweight black t-shirt" or "hoodie".category— string
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_productread-onlyFull details for one product: colours with hex codes and product photos (images: url, view, style, alt; empty when none yet; ai_generated marks AI photos), sizes, variant ids, print placements with the print area in mm, placement presets (for example center_chest, left_chest, full_front, full_back), materials and artwork guidance.
Parameters:
product_id(required) — string — Product id from search_products, e.g. "tee-heavyweight".
Hints: read-only yes · destructive no · idempotent yes · open-world no
validate_artworkUpload artwork and check that it prints well on one product placement. Send exactly one of: artwork with svg (markup, best for text and logos), base64 (a PNG, JPEG or SVG file up to about 2 MB, no data: prefix) or url (a public HTTPS link to the file); file (a file object from your client); or upload_link:true when you cannot send the file in this call. Returns artwork_id and PASS/WARN/FAIL checks: print size in mm, resolution (DPI), print and safe area, transparent background, contrast with the product colour. For photos and AI images use preset center_chest. Use the artwork_id in quote.
Parameters:
product_id(required) — string — Product to print on.file— object — A file that your client gives you as a file object (for example in ChatGPT).size— string — Garment size, e.g. "XL". Print areas can differ by size; without it the smallest size is checked.color— string — Product colour, for the contrast check.preset— string — Named position inside the placement, e.g. "center_chest", "left_chest", "full_front". Defaults to the placement default.top_mm— number — Distance from the top of the print area to the top of the artwork.artwork— object — New artwork to upload: exactly one of svg, base64 or url.left_mm— number — Distance from the left edge of the print area. Default: horizontally centred.width_mm— number — Exact printed width of the visible artwork in millimetres. Height follows the aspect ratio.height_mm— number — Maximum printed height in millimetres.placement— string — Print location on the product, e.g. "front" or "back". See get_product for the list.artwork_id— string — Re-validate artwork uploaded earlier, or validate the file of an upload link.upload_link— boolean — Set true when you cannot send the file in this call. The answer gives an artwork_id and a one-time upload_url: upload with curl, or give the link to the person. Then call validate_artwork with the artwork_id.
Hints: read-only no · destructive no · idempotent no · open-world yes
create_mockupRender a preview PNG of the artwork on the product in the chosen colour and placement. style flat draws the placement; style packshot uses a product photo with the exact print at real size, or gives the flat preview with a note when no photo exists. Returns mockup_url, blank_image_url and image_prompt (an optional text prompt for an illustration of a person who wears the product; such an image is an illustration, not the exact print). Optional.
Parameters:
artwork_id(required) — stringproduct_id(required) — stringcolor(required) — string — Product colour, e.g. "black".size— stringstyle— string — flat: quick placement drawing. packshot: product photo with the exact print at real size (where a product photo exists).preset— string — Named position inside the placement, e.g. "center_chest", "left_chest", "full_front". Defaults to the placement default.top_mm— number — Distance from the top of the print area to the top of the artwork.left_mm— number — Distance from the left edge of the print area. Default: horizontally centred.width_mm— number — Exact printed width of the visible artwork in millimetres. Height follows the aspect ratio.height_mm— number — Maximum printed height in millimetres.placement— string — Print location on the product, e.g. "front" or "back". See get_product for the list.
Hints: read-only no · destructive no · idempotent yes · open-world no
quotePrice printed items delivered to one destination. Returns quote_id, the total that the payer pays (products, shipping and VAT where AgentMade collects it), what is not included, the delivery estimate and the expiry. Needs artwork_id values from validate_artwork. Charges nothing. For a destination where orders are not open, the quote is for information only.
Parameters:
items(required) — arrayship_to(required) — object — Destination. country_code is required; postal_code and state_code improve shipping accuracy.buyer— object — Only for a company purchase with an invoice. Business checkout is not open yet: the quote charges destination VAT.speed— string — Shipping speed. Only standard is offered now; express returns a note and a standard quote.purpose— string — What the order is for. Set it only if the user already said it. Do not ask for it.currency— string — ISO 4217 currency of the payer, e.g. "USD". Optional. The quote states the currency that it uses.deliver_by— string — Date by which the parcel should arrive, e.g. "2026-12-20". The quote is never refused because of it: if the estimate is later, the quote says so.preference— string — How AgentMade picks the manufacturing route: fewest_packages (default: fewest parcels, then best price among the fastest routes), cheapest, or fastest.
Hints: read-only no · destructive no · idempotent no · open-world yes
purchaseTurn a quote into an order. Needs quote_id, the full recipient address (it must match the quoted destination) and rights_attestation=true. contact_email is the payer's own email, never the gift recipient's. Returns order_id and payment.url: the order page where the person pays by card, Apple Pay or Google Pay. Nothing is printed until the payment is confirmed. Idempotent per quote_id.
Parameters:
rights_attestation(required) — boolean — Must be true: confirms the customer owns or is licensed to print all submitted artwork, and that it is not prohibited content.orders— array — Many parcels with one payment: one quote_id and one recipient per parcel. Not live yet: call purchase once per quote_id for now.quote_id— string — quote_id returned by quote, for one parcel. Set quote_id or orders, not both.recipient— object — Shipping address. Country, state and postal code must match the quote destination. Send the full address when you have it. If you cannot collect the street address, send only country_code, postal_code (and state_code for US, CA and AU): the person then enters the address on the order page before paying. Required with quote_id.gift_message— string — Short message for the packing slip of a gift. Not printed yet: the answer says so.contact_email— string — Email of the payer, for the order confirmation and the payment receipt. Not the recipient's email: for a gift, the recipient must not see the price. Optional.payment_capabilities— array — Payment methods the calling agent can use. "hosted_checkout" = a link that the person opens to pay by card, Apple Pay or Google Pay. Always supported.
Hints: read-only no · destructive no · idempotent yes · open-world yes
get_orderread-onlyCurrent order status (AWAITING_PAYMENT, PAID, SUBMITTED, IN_PRODUCTION, SHIPPED, DELIVERED or an exception state), next_step in plain language, the payment link while unpaid, shipments and a timeline.
Parameters:
order_id(required) — string — order_id returned by purchase.
Hints: read-only yes · destructive no · idempotent yes · open-world no
track_orderread-onlyCarrier, tracking number and tracking link for each shipment of an order, and the delivery estimate.
Parameters:
order_id(required) — string — order_id returned by purchase.
Hints: read-only yes · destructive no · idempotent yes · open-world no
cancel_orderdestructiveCancel an order. Unpaid: closes the payment link; nothing is charged. Paid and not yet in production: cancels and refunds in full. In production or shipped: cannot be cancelled; the error gives the reason. A second call on a cancelled order is safe.
Parameters:
order_id(required) — string — order_id returned by purchase.reason— string
Hints: read-only no · destructive yes · idempotent yes · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.