Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,536Letters: 14Defects: 1,322counted 4 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:7af96487669addc4202151ff6afcc117842c2827a0949a14a0b2858aa05b2901 | sha256sum