Server definition
- Hash
- sha256:7af96487669addc4202151ff6afcc117842c2827a0949a14a0b2858aa05b2901
- What it is
- What a remote MCP server returned when asked what it offers: 36 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Put a FINISHED custom print into the cart as a product. Args: print_id (must be done), product? (same set as studio_generate), size, qty?. Then the normal checkout flow applies (get_order_preview -> prepare_order).",
"inputSchema": {
"properties": {
"print_id": {
"description": "Finished print id — studio_status must report status=done.",
"type": "string"
},
"product": {
"description": "Studio product base, same set as studio_generate (default mens_oversize_tshirt).",
"type": "string"
},
"qty": {
"description": "Quantity (default 1, max 99).",
"type": "integer"
},
"size": {
"description": "Size label; must be available for the chosen product.",
"type": "string"
}
},
"required": [
"print_id",
"size"
],
"type": "object"
},
"name": "add_custom_to_cart",
"outputSchema": {
"properties": {
"checkout_url": {
"description": "Cart page URL for the human.",
"type": "string"
},
"currency": {
"type": "string"
},
"error": {
"description": "Present instead of a cart when the call failed (bad index, unavailable size, ...).",
"type": "string"
},
"items": {
"description": "Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.",
"items": {
"properties": {
"code": {
"type": "string"
},
"currency": {
"type": "string"
},
"custom": {
"description": "True when the line is a user-generated custom print.",
"type": "boolean"
},
"fabric": {
"type": "string"
},
"good_id": {
"type": "integer"
},
"price": {
"type": "number"
},
"product": {
"type": "string"
},
"qty": {
"type": "integer"
},
"size": {
"type": "string"
},
"title": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"subtotal": {
"description": "Sum of price x qty over all lines, USD.",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Add a product to the user's cart. Args: good_id (from search/get_product), size (must be one of the product's sizes), fabric? (if the product offers a choice), qty? (default 1). Returns the updated cart.",
"inputSchema": {
"properties": {
"fabric": {
"description": "Fabric label from get_product, if the product offers a choice.",
"type": "string"
},
"good_id": {
"description": "Numeric product id from search_products/get_product.",
"type": "integer"
},
"qty": {
"description": "Quantity to add (default 1, max 99).",
"type": "integer"
},
"size": {
"description": "Size label; must be one of the product's available sizes.",
"type": "string"
}
},
"required": [
"good_id",
"size"
],
"type": "object"
},
"name": "add_to_cart",
"outputSchema": {
"properties": {
"checkout_url": {
"description": "Cart page URL for the human.",
"type": "string"
},
"currency": {
"type": "string"
},
"error": {
"description": "Present instead of a cart when the call failed (bad index, unavailable size, ...).",
"type": "string"
},
"items": {
"description": "Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.",
"items": {
"properties": {
"code": {
"type": "string"
},
"currency": {
"type": "string"
},
"custom": {
"description": "True when the line is a user-generated custom print.",
"type": "boolean"
},
"fabric": {
"type": "string"
},
"good_id": {
"type": "integer"
},
"price": {
"type": "number"
},
"product": {
"type": "string"
},
"qty": {
"type": "integer"
},
"size": {
"type": "string"
},
"title": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"subtotal": {
"description": "Sum of price x qty over all lines, USD.",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Validate and apply a promo code to the cart (server-checked). Returns the new discount/shipping/total, or applied=false with a reason. Args: code.",
"inputSchema": {
"properties": {
"code": {
"description": "Promo code to validate and apply.",
"type": "string"
}
},
"required": [
"code"
],
"type": "object"
},
"name": "apply_promo",
"outputSchema": {
"properties": {
"applied": {
"type": "boolean"
},
"code": {
"description": "Normalized promo code (when applied).",
"type": "string"
},
"currency": {
"type": "string"
},
"discount": {
"type": "number"
},
"error": {
"description": "Present when the cart is empty or code is missing.",
"type": "string"
},
"reason": {
"description": "Why the code was rejected (when applied=false).",
"type": "string"
},
"shipping": {
"type": "number"
},
"subtotal": {
"type": "number"
},
"total": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Remove a cart line by its index (from view_cart). Args: index.",
"inputSchema": {
"properties": {
"index": {
"description": "Zero-based cart line index from view_cart.",
"type": "integer"
}
},
"required": [
"index"
],
"type": "object"
},
"name": "cart_remove",
"outputSchema": {
"properties": {
"checkout_url": {
"description": "Cart page URL for the human.",
"type": "string"
},
"currency": {
"type": "string"
},
"error": {
"description": "Present instead of a cart when the call failed (bad index, unavailable size, ...).",
"type": "string"
},
"items": {
"description": "Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.",
"items": {
"properties": {
"code": {
"type": "string"
},
"currency": {
"type": "string"
},
"custom": {
"description": "True when the line is a user-generated custom print.",
"type": "boolean"
},
"fabric": {
"type": "string"
},
"good_id": {
"type": "integer"
},
"price": {
"type": "number"
},
"product": {
"type": "string"
},
"qty": {
"type": "integer"
},
"size": {
"type": "string"
},
"title": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"subtotal": {
"description": "Sum of price x qty over all lines, USD.",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Change a cart line by its index (from view_cart): set qty (0 removes), or switch size/fabric. Args: index, qty?, size?, fabric?.",
"inputSchema": {
"properties": {
"fabric": {
"description": "New fabric for this line (must be available for the product).",
"type": "string"
},
"index": {
"description": "Zero-based cart line index from view_cart.",
"type": "integer"
},
"qty": {
"description": "New quantity; 0 removes the line.",
"type": "integer"
},
"size": {
"description": "New size for this line (must be available for the product).",
"type": "string"
}
},
"required": [
"index"
],
"type": "object"
},
"name": "cart_update",
"outputSchema": {
"properties": {
"checkout_url": {
"description": "Cart page URL for the human.",
"type": "string"
},
"currency": {
"type": "string"
},
"error": {
"description": "Present instead of a cart when the call failed (bad index, unavailable size, ...).",
"type": "string"
},
"items": {
"description": "Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.",
"items": {
"properties": {
"code": {
"type": "string"
},
"currency": {
"type": "string"
},
"custom": {
"description": "True when the line is a user-generated custom print.",
"type": "boolean"
},
"fabric": {
"type": "string"
},
"good_id": {
"type": "integer"
},
"price": {
"type": "number"
},
"product": {
"type": "string"
},
"qty": {
"type": "integer"
},
"size": {
"type": "string"
},
"title": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"subtotal": {
"description": "Sum of price x qty over all lines, USD.",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Get the URL where the human opens their cart to review and pay. The agent never pays — checkout is always done by the person in the browser.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "checkout_link",
"outputSchema": {
"properties": {
"items_in_cart": {
"type": "integer"
},
"note": {
"type": "string"
},
"url": {
"description": "Cart page for the human to review and pay.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Group my recolours of ONE artwork into a set (2+ of my designs). The catalog then shows one card for the set; every variant keeps its own page and link. Args: design_ids (list of my design ids), primary? (which one represents the set).",
"inputSchema": {
"properties": {
"design_ids": {
"description": "At least two of my own design ids.",
"items": {
"type": "integer"
},
"type": "array"
},
"primary": {
"description": "Which variant represents the set.",
"type": "integer"
}
},
"required": [
"design_ids"
],
"type": "object"
},
"name": "create_colorway",
"outputSchema": {
"properties": {
"colorway_id": {
"type": "integer"
},
"error": {
"type": "string"
},
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"note": {
"type": "string"
},
"ok": {
"type": "boolean"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
},
"primary": {
"type": "integer"
},
"variants": {
"items": {
"type": "integer"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Add one more of my recolours to a set of mine. Args: colorway_id, design_id.",
"inputSchema": {
"properties": {
"colorway_id": {
"type": "integer"
},
"design_id": {
"type": "integer"
}
},
"required": [
"colorway_id",
"design_id"
],
"type": "object"
},
"name": "designer_add_to_colorway",
"outputSchema": {
"properties": {
"colorway_id": {
"type": "integer"
},
"error": {
"type": "string"
},
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"note": {
"type": "string"
},
"ok": {
"type": "boolean"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
},
"variants": {
"items": {
"type": "integer"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "My colorway sets: one catalog card per set instead of one per colour. No args.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "designer_colorways",
"outputSchema": {
"properties": {
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"is_partner": {
"type": "boolean"
},
"note": {
"type": "string"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
},
"sets": {
"items": {
"properties": {
"colorway_id": {
"type": "integer"
},
"shown_as": {
"type": "string"
},
"variants": {
"items": {
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "The user's own published designs with live status (products on sale / hidden / pending). Args: limit? (default 50).",
"inputSchema": {
"properties": {
"limit": {
"description": "Max designs to return (default 50, max 200).",
"type": "integer"
}
},
"type": "object"
},
"name": "designer_designs",
"outputSchema": {
"properties": {
"designer_page": {
"type": "string"
},
"designs": {
"items": {
"properties": {
"design_id": {
"type": "integer"
},
"live_products": {
"description": "Active products with this design.",
"type": "integer"
},
"name": {
"type": "string"
},
"status": {
"description": "live | hidden | no products yet",
"type": "string"
},
"url": {
"description": "Product page (null if nothing is live).",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"is_partner": {
"type": "boolean"
},
"note": {
"type": "string"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Take one of my designs out of its set — it gets its own catalog card again. A set left with a single variant is dissolved. Args: design_id.",
"inputSchema": {
"properties": {
"design_id": {
"type": "integer"
}
},
"required": [
"design_id"
],
"type": "object"
},
"name": "designer_remove_from_colorway",
"outputSchema": {
"properties": {
"design_id": {
"type": "integer"
},
"error": {
"type": "string"
},
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"note": {
"type": "string"
},
"ok": {
"type": "boolean"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "The user's designer-program stats (if they are a designer-partner): units sold, revenue, accrued royalties, available for payout, royalty percent, their designer page URL.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "designer_stats",
"outputSchema": {
"properties": {
"accrued": {
"description": "Royalties accrued from paid orders.",
"type": "number"
},
"available_for_payout": {
"description": "Accrued royalties from delivered orders, ready for payout.",
"type": "number"
},
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"is_partner": {
"type": "boolean"
},
"landing": {
"description": "The designer's public page URL.",
"type": "string"
},
"nickname": {
"type": "string"
},
"note": {
"type": "string"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
},
"revenue": {
"type": "number"
},
"royalty_percent": {
"type": "number"
},
"units_sold": {
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "The user's Studio publications in moderation: in review / in catalog / needs changes. Args: limit?.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max submissions to return (default 20, max 100).",
"type": "integer"
}
},
"type": "object"
},
"name": "designer_submissions",
"outputSchema": {
"properties": {
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"is_partner": {
"type": "boolean"
},
"note": {
"type": "string"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
},
"submissions": {
"items": {
"properties": {
"design_name": {
"type": "string"
},
"id": {
"type": "integer"
},
"status": {
"description": "in review | in catalog | needs changes",
"type": "string"
},
"submitted_at": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Get a short-lived URL to upload an image file to us (use when the designer has no public link — otherwise pass the URL straight to submit_design). Args: filename?. PUT the raw bytes to upload_url, then pass the returned upload_id to submit_design.",
"inputSchema": {
"properties": {
"filename": {
"description": "Original file name, for readability.",
"type": "string"
}
},
"type": "object"
},
"name": "designer_upload_slot",
"outputSchema": {
"properties": {
"expires_in": {
"description": "Seconds the URL stays valid.",
"type": "integer"
},
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"is_partner": {
"type": "boolean"
},
"method": {
"type": "string"
},
"note": {
"type": "string"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
},
"upload_id": {
"type": "string"
},
"upload_url": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "What the designer has already sent in and where it stands: in review / accepted / needs changes (with the reason). Args: limit?.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max rows (default 50, max 200).",
"type": "integer"
}
},
"type": "object"
},
"name": "designer_uploads",
"outputSchema": {
"properties": {
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"is_partner": {
"type": "boolean"
},
"note": {
"type": "string"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
},
"uploads": {
"items": {
"properties": {
"batch": {
"type": "string"
},
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"reason": {
"type": "string"
},
"status": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Full order summary to show the human before ordering: line items, promo/discount, shipping, address, grand total. Prices are server-computed.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_order_preview",
"outputSchema": {
"properties": {
"currency": {
"type": "string"
},
"discount": {
"type": "number"
},
"error": {
"description": "Present when the cart is empty.",
"type": "string"
},
"issues": {
"description": "Lines that became unavailable, if any.",
"items": {
"type": "string"
},
"type": "array"
},
"items": {
"description": "Re-priced order lines.",
"items": {
"properties": {
"custom": {
"type": "boolean"
},
"price": {
"type": "number"
},
"product": {
"type": "string"
},
"qty": {
"type": "integer"
},
"size": {
"type": "string"
},
"title": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"note": {
"type": "string"
},
"promo_code": {
"type": "string"
},
"ready_to_prepare": {
"description": "True when an address is set and all lines are orderable.",
"type": "boolean"
},
"shipping": {
"properties": {
"method": {
"type": "string"
},
"price": {
"type": "number"
}
},
"type": "object"
},
"shipping_address": {
"description": "Address set via set_shipping_address (null if not set).",
"type": "object"
},
"subtotal": {
"type": "number"
},
"total": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Full details of one product by its code: available sizes, fabrics, per-variant price, and the design 'about' text. Args: code (from search_products).",
"inputSchema": {
"properties": {
"code": {
"description": "Product code from search_products results.",
"type": "string"
}
},
"required": [
"code"
],
"type": "object"
},
"name": "get_product",
"outputSchema": {
"properties": {
"about": {
"description": "Design description text (may be null).",
"type": "string"
},
"code": {
"type": "string"
},
"currency": {
"type": "string"
},
"error": {
"description": "Present when the product was not found.",
"type": "string"
},
"fabrics": {
"items": {
"type": "string"
},
"type": "array"
},
"good_id": {
"type": "integer"
},
"image": {
"type": "string"
},
"price": {
"type": "number"
},
"product": {
"type": "string"
},
"sizes": {
"items": {
"type": "string"
},
"type": "array"
},
"theme": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"variants": {
"description": "Price per size+fabric combination.",
"items": {
"properties": {
"fabric": {
"type": "string"
},
"price": {
"type": "number"
},
"size": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Return shipping addresses the user used in past orders — offer these to a returning buyer instead of asking again.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_saved_addresses",
"outputSchema": {
"properties": {
"addresses": {
"description": "Up to 5 distinct addresses from past orders, newest first.",
"items": {
"properties": {
"address": {
"type": "string"
},
"city": {
"type": "string"
},
"country": {
"type": "string"
},
"name": {
"type": "string"
},
"phone": {
"type": "string"
},
"summary": {
"description": "One-line address summary.",
"type": "string"
},
"zip": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Available shipping methods for the current cart/address, with price and ETA (free over the threshold).",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_shipping_options",
"outputSchema": {
"properties": {
"free_shipping_from": {
"description": "Subtotal (USD) at which shipping becomes free.",
"type": "number"
},
"options": {
"items": {
"properties": {
"currency": {
"type": "string"
},
"eta": {
"type": "string"
},
"id": {
"description": "Pass this to set_shipping_method.",
"type": "string"
},
"label": {
"type": "string"
},
"note": {
"type": "string"
},
"price": {
"type": "number"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Return the shopper's saved default size and fit. Call this BEFORE asking the user for a size — if a default is set, apply it automatically (add_to_cart uses it when size is omitted), and prefer products matching their fit (basic vs oversized).",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_user_prefs",
"outputSchema": {
"properties": {
"fit": {
"description": "Saved fit preference: basic | oversized, or null.",
"type": "string"
},
"size": {
"description": "Saved default size, or null.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "List active curated collections (themed landing pages) with their slugs and urls. Args: limit?.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max collections to return (default 50, max 100).",
"type": "integer"
}
},
"type": "object"
},
"name": "list_collections",
"outputSchema": {
"properties": {
"collections": {
"items": {
"properties": {
"slug": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"description": "Collection landing page.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Look up the user's recent orders (or one by number) and their fulfilment status. Args: number?, limit? (default 5).",
"inputSchema": {
"properties": {
"limit": {
"description": "Max orders to return (default 5, max 20).",
"type": "integer"
},
"number": {
"description": "Exact order number to look up; omit for the most recent orders.",
"type": "string"
}
},
"type": "object"
},
"name": "order_status",
"outputSchema": {
"properties": {
"note": {
"description": "Present when the account has no email on file.",
"type": "string"
},
"orders": {
"items": {
"properties": {
"created_at": {
"description": "ISO 8601 timestamp.",
"type": "string"
},
"currency": {
"type": "string"
},
"number": {
"type": "string"
},
"status": {
"type": "string"
},
"total": {
"type": "number"
},
"url": {
"description": "Order tracking page.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Create a draft order from the cart + address + promo and return {checkout_url, draft_id, expires_at}. The human opens checkout_url — everything is pre-filled — reviews and pays. The agent never pays. Call get_order_preview and confirm with the human first.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "prepare_order",
"outputSchema": {
"properties": {
"checkout_url": {
"description": "Pre-filled checkout link — send it to the human to review and pay.",
"type": "string"
},
"currency": {
"type": "string"
},
"draft_id": {
"description": "Draft order number.",
"type": "string"
},
"error": {
"description": "Empty cart, missing address or no orderable items.",
"type": "string"
},
"expires_at": {
"description": "ISO 8601 time when the draft expires (48 h).",
"type": "string"
},
"issues": {
"items": {
"type": "string"
},
"type": "array"
},
"note": {
"type": "string"
},
"total": {
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Remove the applied promo code from the cart.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "remove_promo",
"outputSchema": {
"properties": {
"applied": {
"description": "Always false after removal.",
"type": "boolean"
}
},
"type": "object"
}
},
{
"description": "Search the allover.art catalog (one card per design). Args: query? (free text, e.g. 'cat', 'neon koi'), theme? (canonical theme like Cats/Anime/Skulls, comma-separated for several), section? (mens|womens|kids), limit? (<=48), max_price? (USD). Returns product cards with good_id, price and url.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max cards to return (default 24, max 48).",
"type": "integer"
},
"max_price": {
"description": "Only items priced at or below this amount, USD.",
"type": "number"
},
"query": {
"description": "Free-text search, e.g. 'cat' or 'neon koi'.",
"type": "string"
},
"section": {
"description": "Catalog section: mens, womens or kids.",
"type": "string"
},
"theme": {
"description": "Canonical theme filter (Cats, Anime, Skulls, ...); comma-separate several.",
"type": "string"
}
},
"type": "object"
},
"name": "search_products",
"outputSchema": {
"properties": {
"items": {
"description": "Product cards.",
"items": {
"properties": {
"code": {
"type": "string"
},
"currency": {
"type": "string"
},
"good_id": {
"type": "integer"
},
"image": {
"type": "string"
},
"price": {
"type": "number"
},
"product": {
"type": "string"
},
"theme": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"description": "Canonical product page.",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"showing": {
"description": "Number of cards returned.",
"type": "integer"
},
"total": {
"description": "Total catalog matches for the filters.",
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "Change the quantity of a cart line by its index (from view_cart); qty=0 removes it. Args: index, qty.",
"inputSchema": {
"properties": {
"index": {
"description": "Zero-based cart line index from view_cart.",
"type": "integer"
},
"qty": {
"description": "New quantity (0 removes the line, max 99).",
"type": "integer"
}
},
"required": [
"index",
"qty"
],
"type": "object"
},
"name": "set_cart_quantity",
"outputSchema": {
"properties": {
"checkout_url": {
"description": "Cart page URL for the human.",
"type": "string"
},
"currency": {
"type": "string"
},
"error": {
"description": "Present instead of a cart when the call failed (bad index, unavailable size, ...).",
"type": "string"
},
"items": {
"description": "Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.",
"items": {
"properties": {
"code": {
"type": "string"
},
"currency": {
"type": "string"
},
"custom": {
"description": "True when the line is a user-generated custom print.",
"type": "boolean"
},
"fabric": {
"type": "string"
},
"good_id": {
"type": "integer"
},
"price": {
"type": "number"
},
"product": {
"type": "string"
},
"qty": {
"type": "integer"
},
"size": {
"type": "string"
},
"title": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"subtotal": {
"description": "Sum of price x qty over all lines, USD.",
"type": "number"
}
},
"type": "object"
}
},
{
"description": "Choose which variant of my set represents it in the catalog. Args: colorway_id, design_id.",
"inputSchema": {
"properties": {
"colorway_id": {
"type": "integer"
},
"design_id": {
"type": "integer"
}
},
"required": [
"colorway_id",
"design_id"
],
"type": "object"
},
"name": "set_colorway_primary",
"outputSchema": {
"properties": {
"colorway_id": {
"type": "integer"
},
"error": {
"type": "string"
},
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"note": {
"type": "string"
},
"ok": {
"type": "boolean"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
},
"primary": {
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "Set the shipping address for this order (validated). Args: name, country, city, address, zip?, phone.",
"inputSchema": {
"properties": {
"address": {
"description": "Street address line.",
"type": "string"
},
"city": {
"description": "Destination city.",
"type": "string"
},
"country": {
"description": "Destination country.",
"type": "string"
},
"name": {
"description": "Recipient full name.",
"type": "string"
},
"phone": {
"description": "Contact phone number for delivery.",
"type": "string"
},
"zip": {
"description": "Postal / ZIP code (optional where not used).",
"type": "string"
}
},
"required": [
"name",
"country",
"city",
"address",
"phone"
],
"type": "object"
},
"name": "set_shipping_address",
"outputSchema": {
"properties": {
"error": {
"description": "Missing fields or empty cart.",
"type": "string"
},
"ok": {
"type": "boolean"
},
"shipping": {
"description": "Saved address snapshot.",
"properties": {
"address_line": {
"type": "string"
},
"city": {
"type": "string"
},
"country": {
"type": "string"
},
"full_address": {
"type": "string"
},
"name": {
"type": "string"
},
"phone": {
"type": "string"
},
"zip": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
}
},
{
"description": "Choose a shipping method by its option_id (from get_shipping_options). Args: option_id.",
"inputSchema": {
"properties": {
"option_id": {
"description": "Shipping option id from get_shipping_options (currently 'worldwide').",
"type": "string"
}
},
"type": "object"
},
"name": "set_shipping_method",
"outputSchema": {
"properties": {
"error": {
"description": "Unknown option_id or empty cart.",
"type": "string"
},
"ok": {
"type": "boolean"
},
"shipping_method": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Save the shopper's default size and/or fit so they don't re-enter it each time. Args: size (XS…5XL), fit (basic | oversized). Pass only what the user stated.",
"inputSchema": {
"properties": {
"fit": {
"description": "Fit preference: basic or oversized.",
"type": "string"
},
"size": {
"description": "Default size: XS, S, M, L, XL, 2XL…5XL.",
"type": "string"
}
},
"type": "object"
},
"name": "set_user_prefs",
"outputSchema": {
"properties": {
"error": {
"type": "string"
},
"fit": {
"type": "string"
},
"size": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "The user's Studio credit balance. Check before studio_generate (1 credit per generation, either engine; welcome bonus 20; every bought tee adds 20).",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "studio_credits",
"outputSchema": {
"properties": {
"balance": {
"description": "Current Studio credit balance.",
"type": "number"
},
"detail": {
"type": "string"
},
"error": {
"type": "string"
},
"note": {
"type": "string"
},
"studio_account": {
"description": "False if the user has no Studio account yet (first generate auto-creates one).",
"type": "boolean"
}
},
"type": "object"
}
},
{
"description": "Generate a CUSTOM t-shirt print from a text prompt (AI, takes 2-10 min). SPENDS THE ACCOUNT OWNER'S STUDIO CREDITS: tell them the cost and their balance and get a yes BEFORE calling this — never spend silently, and never spend to 'try something' on your own initiative. Credits are earned (20 free on signup, 20 with every tee bought), so a wasted one is a real loss to them. Free exception: preserve=true prints their own image as-is and costs nothing. IMPORTANT: first call studio_options and ask the human to pick placement + product (and optionally background); do NOT silently use defaults. Args: prompt (design description), product? (one of ['kids_basic_tshirt_boy', 'kids_basic_tshirt_girl', 'kids_oversize_tshirt_boy', 'kids_oversize_tshirt_girl', 'mens_basic_tshirt', 'mens_oversize_tshirt', 'womens_basic_tshirt', 'womens_oversize_tshirt']), background? (t-shirt background, one of ['washed-beige', 'washed-black', 'washed-blue', 'washed-brown', 'washed-gray', 'washed-green', 'washed-orange', 'washed-pink', 'washed-red', 'washed-yellow', 'watercolor-beige', 'watercolor-blue', 'watercolor-sky']), placement? (print size/position, one of ['portrait_extended', 'square_center', 'chest_small']), model? (nb2 default | gpt-image-2 — both 1 credit, different styles), image_url? (https link to the user's OWN image — used as style/subject reference), preserve? (true = print the user's image exactly as-is, no AI redraw — kids' drawings, own art; FREE, no credits; requires image_url). Returns print_id — poll studio_status until done.",
"inputSchema": {
"properties": {
"background": {
"description": "T-shirt background choice (see studio_options backgrounds).",
"type": "string"
},
"image_url": {
"description": "https link to the user's OWN image, used as style/subject reference.",
"type": "string"
},
"model": {
"description": "Generation engine: nb2 (default) or gpt-image-2 — both 1 credit.",
"type": "string"
},
"placement": {
"description": "Print size/position: portrait_extended (default), square_center or chest_small.",
"type": "string"
},
"preserve": {
"description": "true = print the image exactly as-is, no AI redraw (free); requires image_url.",
"type": "boolean"
},
"product": {
"description": "Studio product base from studio_options (default mens_oversize_tshirt).",
"type": "string"
},
"prompt": {
"description": "Text description of the design to generate.",
"type": "string"
}
},
"required": [
"prompt"
],
"type": "object"
},
"name": "studio_generate",
"outputSchema": {
"properties": {
"balance_after": {
"description": "Credits left after this generation.",
"type": "number"
},
"balance_before": {
"type": "number"
},
"cost_credits": {
"description": "Credits spent on this generation.",
"type": "number"
},
"detail": {
"type": "string"
},
"error": {
"description": "e.g. not enough Studio credits, daily limit reached, invalid product.",
"type": "string"
},
"note": {
"type": "string"
},
"print_id": {
"description": "Generation id — poll studio_status with it.",
"type": "string"
},
"signup_bonus": {
"type": "number"
},
"status": {
"type": "string"
},
"studio_account_created": {
"description": "Present when a Studio account was auto-created for the user.",
"type": "boolean"
},
"tell_user": {
"description": "Say this to the account owner — what was spent from their balance and what is left.",
"type": "string"
},
"topup_url": {
"description": "Where the user can buy credits (present on 'not enough credits').",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "START HERE for any custom-print request: the menu of generation choices (print placements with plain-language descriptions, products, backgrounds, engines+costs). Present these to the human — at minimum ask which PLACEMENT and which PRODUCT they want — before calling studio_generate.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "studio_options",
"outputSchema": {
"properties": {
"backgrounds": {
"items": {
"type": "string"
},
"type": "array"
},
"models": {
"description": "Generation engines with cost notes.",
"items": {
"properties": {
"default": {
"type": "boolean"
},
"id": {
"type": "string"
},
"label": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"note": {
"type": "string"
},
"placements": {
"description": "Print size/position choices.",
"items": {
"properties": {
"description": {
"type": "string"
},
"id": {
"type": "string"
},
"label": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"products": {
"items": {
"properties": {
"id": {
"type": "string"
},
"label": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
}
},
{
"description": "Check a custom print generation. Args: print_id (from studio_generate). When done returns preview_url — show it to the human.",
"inputSchema": {
"properties": {
"print_id": {
"description": "Generation id returned by studio_generate.",
"type": "string"
}
},
"required": [
"print_id"
],
"type": "object"
},
"name": "studio_status",
"outputSchema": {
"properties": {
"design_url": {
"description": "Shareable Studio design page (when done) — the link to SHARE with the human.",
"type": "string"
},
"detail": {
"type": "string"
},
"error": {
"description": "Generation failure reason (credits are refunded).",
"type": "string"
},
"note": {
"type": "string"
},
"preview_url": {
"description": "Raw print image (when done) — embed/attach it so the human sees the print in chat.",
"type": "string"
},
"print_id": {
"type": "string"
},
"status": {
"description": "Generation state; 'done' and 'failed' are terminal.",
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Send one of the designer's own artworks for moderation. TWO inputs, same path: either artwork files — front/back accept a public image URL OR an upload_id from designer_upload_slot — or session_id of a FINISHED Studio session of theirs (generated with studio_generate; no need to download the print, we fetch it server-side). Args: name (required), front OR session_id (one of them), back?, layout? ('front_back' default, or 'r10' for a ready print-side file), note?, batch? (same string across a bulk run so the moderator sees them as one batch). Minimum 2048px on the short side. IMPORTANT for the designer: this queues the artwork for moderation — catalog listing follows production and is not instant.",
"inputSchema": {
"properties": {
"back": {
"description": "Optional second side: URL or upload_id.",
"type": "string"
},
"batch": {
"description": "Group id for a bulk upload.",
"type": "string"
},
"front": {
"description": "Image URL or upload_id. Omit when passing session_id.",
"type": "string"
},
"layout": {
"description": "'front_back' (default) or 'r10'.",
"type": "string"
},
"name": {
"description": "Design name the moderator will see.",
"type": "string"
},
"note": {
"description": "Anything the moderator should know.",
"type": "string"
},
"session_id": {
"description": "Finished Studio session of this designer (print_id from studio_generate). Alternative to front.",
"type": "string"
}
},
"required": [
"name",
"front"
],
"type": "object"
},
"name": "submit_design",
"outputSchema": {
"properties": {
"error": {
"type": "string"
},
"how_to_join": {
"description": "How to join the designer program — present when is_partner is false.",
"type": "string"
},
"is_partner": {
"type": "boolean"
},
"note": {
"type": "string"
},
"ok": {
"type": "boolean"
},
"pitch": {
"description": "Designer-program pitch to relay to the user — present when is_partner is false.",
"type": "string"
},
"status": {
"type": "string"
},
"upload_id": {
"type": "integer"
}
},
"type": "object"
}
},
{
"description": "Show the current contents of the user's cart (the same cart they see in the browser when signed in).",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "view_cart",
"outputSchema": {
"properties": {
"checkout_url": {
"description": "Cart page URL for the human.",
"type": "string"
},
"currency": {
"type": "string"
},
"error": {
"description": "Present instead of a cart when the call failed (bad index, unavailable size, ...).",
"type": "string"
},
"items": {
"description": "Cart lines in index order — this index is what set_cart_quantity/cart_update/cart_remove take.",
"items": {
"properties": {
"code": {
"type": "string"
},
"currency": {
"type": "string"
},
"custom": {
"description": "True when the line is a user-generated custom print.",
"type": "boolean"
},
"fabric": {
"type": "string"
},
"good_id": {
"type": "integer"
},
"price": {
"type": "number"
},
"product": {
"type": "string"
},
"qty": {
"type": "integer"
},
"size": {
"type": "string"
},
"title": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"subtotal": {
"description": "Sum of price x qty over all lines, USD.",
"type": "number"
}
},
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:7af96487669addc4202151ff6afcc117842c2827a0949a14a0b2858aa05b2901 | sha256sum