Custom t-shirts and apparel, printed and shipped in the US on your deadline.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Locks in the option the customer picked from get_options, and its price. Pass the option id exactly as returned. There is no way to pass a price.
The order_id returned by start_print_order.
The id of the option the customer chose, exactly as returned by get_options.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Locks in the option the customer picked from get_options, and its price. Pass the option id exactly as returned. There is no way to pass a price.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The order_id returned by start_print_order. |
| option_id* | string | The id of the option the customer chose, exactly as returned by get_options. |
{
"type": "object",
"required": [
"order_id",
"option_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "The order_id returned by start_print_order."
},
"option_id": {
"type": "string",
"description": "The id of the option the customer chose, exactly as returned by get_options."
}
}
}Lands the order on one of the alternatives describe_order offered, by id, or on the style already chosen. Use it when the customer picks one of them; a pick in their own words can still go to describe_order. Pass color when they picked a picture from preview_colors or want the style in another shade: the style lands in that shade in one call.
| Argument | Type | Description |
|---|---|---|
| color | string | The shade to land the style in, when the customer picked a picture from preview_colors or wants this style in another color. Left out, the order keeps its color. |
| order_id* | string | The order_id returned by start_print_order. |
| style_id* | string | The id of the alternative the customer chose, exactly as returned by describe_order, or the style_id of a preview_colors picture. |
{
"type": "object",
"required": [
"order_id",
"style_id"
],
"properties": {
"color": {
"type": "string",
"description": "The shade to land the style in, when the customer picked a picture from preview_colors or wants this style in another color. Left out, the order keeps its color."
},
"order_id": {
"type": "string",
"description": "The order_id returned by start_print_order."
},
"style_id": {
"type": "string",
"description": "The id of the alternative the customer chose, exactly as returned by describe_order, or the style_id of a preview_colors picture."
}
}
}Returns the payment link for a fully specified order with a chosen option. Show checkout_url to the customer as a link labeled "Pay and enter shipping": they see their artwork and total, confirm their email address with a code we send them, then pay and enter their shipping address. Nothing is ordered until they pay. Refuses, and says what is missing, if the order is not ready. When the customer is signed in, asking to pay also saves the order to their account, so it stops expiring.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The order_id returned by start_print_order. |
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "The order_id returned by start_print_order."
}
}
}Records more about what the customer wants — an answer to ask_next, a correction, or a whole paragraph — and reports what is still needed. Call it each time the customer gives a new detail. In clients that render our order card the customer sees the order so far and the question in ask_next with its choices as buttons; when several styles fit it shows them too. An answer or a pick made there arrives as a message; the question in ask_next is for the customer whether or not the card shows. Also records a decision about the order: a stop, an objection to the price or the date, or a request we do not offer. It belongs to the order's record, and the reply says what the order still needs.
| Argument | Type | Description |
|---|---|---|
| context* | string | What the customer said, in their own words. Garment, color, size, quantity, print width in inches, placement, deadline — whatever is new. Unstructured prose is fine. |
| order_id* | string | The order_id returned by start_print_order. |
{
"type": "object",
"required": [
"order_id",
"context"
],
"properties": {
"context": {
"type": "string",
"description": "What the customer said, in their own words. Garment, color, size, quantity, print width in inches, placement, deadline — whatever is new. Unstructured prose is fine."
},
"order_id": {
"type": "string",
"description": "The order_id returned by start_print_order."
}
}
}Returns priced options with lead times once the order is fully described and the artwork has passed the print check. Present them to the customer; each has an id for choose_option. In clients that render our option picker the customer can pick there, and you will see the choice as a message. Call it again whenever the customer asks to see or reconsider the options; it costs nothing. Prices come from us and cannot be passed in.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The order_id returned by start_print_order. |
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "The order_id returned by start_print_order."
}
}
}Lists the signed-in customer's orders with us, open and paid, each with its status. Needs the customer to be signed in; if they are not, your client will ask them to. Applies when the customer asks what they have with us, wants to pick up a saved order, or asks where an order is.
| Argument | Type | Description |
|---|---|---|
| include | string | Which orders to list: everything (the default), only open unpaid ones, or only paid ones. |
{
"type": "object",
"properties": {
"include": {
"enum": [
"all",
"open",
"paid"
],
"type": "string",
"description": "Which orders to list: everything (the default), only open unpaid ones, or only paid ones."
}
}
}Lands one of the choices the last reply offered beside ask_next, by field and option, exactly as shown. Use it when the customer picks one of them; an answer in their own words goes to describe_order instead.
| Argument | Type | Description |
|---|---|---|
| field* | string | The field of the choices set the customer answered, as the last reply named it. |
| option* | string | The option the customer picked, exactly as the last reply listed it. |
| order_id* | string | The order_id returned by start_print_order. |
{
"type": "object",
"required": [
"order_id",
"field",
"option"
],
"properties": {
"field": {
"enum": [
"garment_type",
"fit",
"color",
"size",
"quantity",
"placement",
"unmet"
],
"type": "string",
"description": "The field of the choices set the customer answered, as the last reply named it."
},
"option": {
"type": "string",
"description": "The option the customer picked, exactly as the last reply listed it."
},
"order_id": {
"type": "string",
"description": "The order_id returned by start_print_order."
}
}
}Shows the customer's design on the garment in other colors without changing the order: one picture per offered style per color named, up to four colors. Use it when the customer wants to compare colors or see one before deciding; `describe_order` with a new color changes the order, this compares without changing anything. In clients that render our color preview the customer can pick a picture there and their pick arrives as a message; otherwise, when they pick, call choose_style with the style_id and color.
| Argument | Type | Description |
|---|---|---|
| colors | array | The colors to show, in the customer's words, one to 4 (e.g. ["natural", "heather navy"]). Left out, we show the shades the design suits among the styles on offer. |
| order_id* | string | The order_id returned by start_print_order. |
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"colors": {
"type": "array",
"items": {
"type": "string"
},
"description": "The colors to show, in the customer's words, one to 4 (e.g. [\"natural\", \"heather navy\"]). Left out, we show the shades the design suits among the styles on offer."
},
"order_id": {
"type": "string",
"description": "The order_id returned by start_print_order."
}
}
}Picks up an order that another tool refused as expired. Applies only after that refusal, with the same order_id, when the customer wants to continue that order rather than start over: it gives the order a fresh window and fresh links and returns where things stand, so you can carry on with the call next_call names. Without a refusal there is nothing to resume; start_print_order opens a new order.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The order_id another tool refused as expired. |
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "The order_id another tool refused as expired."
}
}
}Saves the customer's order to their account so they can pick it up from any conversation; a saved order never expires. Needs the customer to be signed in: if they are not, your client will ask them to sign in or create an account with us, then call this again. Applies when a response's notes offer saving, or when the customer asks to save, to come back later, or to keep their order.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | The order_id returned by start_print_order. |
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "The order_id returned by start_print_order."
}
}
}Opens a print order. Use it when the customer wants a design printed on a garment. Call it before asking your own questions: our first reply asks for the design and the garment in words written for the customer. Pass what they have said about the order in context — a phrase or a paragraph is fine. Returns the order_id to use with every other tool, what is still needed, and the next question to ask.
| Argument | Type | Description |
|---|---|---|
| context | string | What the customer has said so far, in their own words. Unstructured prose is fine; we parse it and ask for the rest one question at a time. Leave empty to start blank. |
{
"type": "object",
"properties": {
"context": {
"type": "string",
"description": "What the customer has said so far, in their own words. Unstructured prose is fine; we parse it and ask for the rest one question at a time. Leave empty to start blank."
}
}
}Sends the design to be printed when you already hold a public https link to the original file; never ask the customer for one, they upload through the artwork_upload_url from any reply. We check whether it will print well at the requested size and answer in inches, with what to fix if anything. A design you only saw in the chat is not one you hold: never transcribe, redraw or regenerate it; give the customer the artwork_upload_url instead. Artwork can be replaced later.
| Argument | Type | Description |
|---|---|---|
| filename | string | The original file name, if known. |
| order_id* | string | The order_id returned by start_print_order. |
| image_url | string | A public https link to the image (PNG, JPEG or WebP) that you already hold; it survives a new conversation. |
| image_base64 | string | The bytes of a file dropped on our order card, sent by the card itself (PNG, JPEG or WebP, no data: prefix). Not for a file the customer put in the chat; they upload through artwork_upload_url. |
{
"type": "object",
"required": [
"order_id"
],
"properties": {
"filename": {
"type": "string",
"description": "The original file name, if known."
},
"order_id": {
"type": "string",
"description": "The order_id returned by start_print_order."
},
"image_url": {
"type": "string",
"description": "A public https link to the image (PNG, JPEG or WebP) that you already hold; it survives a new conversation."
},
"image_base64": {
"type": "string",
"description": "The bytes of a file dropped on our order card, sent by the card itself (PNG, JPEG or WebP, no data: prefix). Not for a file the customer put in the chat; they upload through artwork_upload_url."
}
}
}