Browse the CustomCat catalog, your products and designs; check shipping; create and cancel orders.
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.
WRITE: cancel (delete) an order by YOUR order id. CustomCat can only cancel an order that has not gone into production; one already printed or shipped is refused. Needs the Write API key. Confirm with the user first. DELETE /order/{order_id}.
Your order id, exactly as sent when the order was placed.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
WRITE: cancel (delete) an order by YOUR order id. CustomCat can only cancel an order that has not gone into production; one already printed or shipped is refused. Needs the Write API key. Confirm with the user first. DELETE /order/{order_id}.
| Argument | Type | Description |
|---|---|---|
| order_id* | string | Your order id, exactly as sent when the order was placed. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Your order id, exactly as sent when the order was placed."
}
}
}WRITE: place an order for CustomCat to print and ship. This CHARGES the payment method on file in your CustomCat account (product cost + shipping; a front+back print adds $5 per line item) unless sandbox=true, which only validates the order. A real order (sandbox=false) also needs confirm=true, set only after the user confirmed it. The order id is yours and must be new (a duplicate is rejected). Needs the Write API key. Check stock with customcat_get_catalog_sku and the method name with customcat_list_shipping_methods first, and confirm the details with the user before calling. POST /order/{order_id}.
| Argument | Type | Description |
|---|---|---|
| items* | array | Line items: either {sku, quantity} for products made in CustomCat, or {catalog_sku, design_url, quantity} for your own artwork. |
| confirm | boolean | Required (true) for a real order (sandbox=false): set it only after the user has confirmed the items, address, shipping method and that their CustomCat payment method will be charged. |
| sandbox* | boolean | true = test order, nothing is charged or produced; false = a real, paid order. |
| order_id* | string | Your unique order id (for example 101-102938). |
| shipping_zip* | string | |
| shipping_city* | string | |
| shipping_email* | string | Customer email (required by CustomCat). |
| shipping_phone* | string | |
| shipping_state* | string | State/province code, e.g. MI. |
| shipping_method* | string | Method name from customcat_list_shipping_methods, e.g. Economy. |
One catalog product by numeric id with its colors, sizes and SKUs. GET /catalog/{catalog_product_id}.
| Argument | Type | Description |
|---|---|---|
| catalog_product_id* | integer | Catalog product id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"catalog_product_id"
],
"properties": {
"catalog_product_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Catalog product id.",
"exclusiveMinimum": 0
}
}
}One catalog SKU with its price and stock status. Use it before ordering: a SKU that is out of stock, discontinued or invalid makes the order fail. GET /catalog/sku/{catalog_sku_id}.
| Argument | Type | Description |
|---|---|---|
| catalog_sku_id* | integer | Catalog SKU id (numeric), e.g. 39515. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"catalog_sku_id"
],
"properties": {
"catalog_sku_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Catalog SKU id (numeric), e.g. 39515.",
"exclusiveMinimum": 0
}
}
}Status of an order by YOUR order id: order status (Pending, Verified, Shipped), per-item production status, shipments with tracking ids, totals and the ship-to address. Set sandbox=true to look up a sandbox test order. GET /order/status/{order_id}.
| Argument | Type | Description |
|---|---|---|
| sandbox | boolean | Look up a sandbox (test) order. |
| order_id* | string | Your order id, exactly as sent when the order was placed. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id"
],
"properties": {
"sandbox": {
"type": "boolean",
"description": "Look up a sandbox (test) order."
},
"order_id": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Your order id, exactly as sent when the order was placed."
}
}
}One of your CustomCat products by id (e.g. 22-2580581): variants, SKUs, cost, price, options, designs. GET /product/{product_id}.
| Argument | Type | Description |
|---|---|---|
| product_id* | string | CustomCat product id, e.g. 22-2580581. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "CustomCat product id, e.g. 22-2580581."
}
}
}Calculate the shipping cost of one shipping method for a destination and a list of catalog SKUs with quantities. Read-only quote: it places nothing. POST /shipping/{shipping_id} (shipping_id from customcat_list_shipping_methods).
| Argument | Type | Description |
|---|---|---|
| items* | array | Catalog SKUs and quantities being shipped. |
| state | string | Destination state/province. |
| shipping_id* | integer | Shipping method id from customcat_list_shipping_methods. |
| country_code | string | Destination 2-letter ISO country code (default US). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"shipping_id",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"catalog_sku",
"quantity"
],
"properties": {
"quantity": {
"type": "integer",
"maximum": 10000,
"description": "Quantity shipped.",
"exclusiveMinimum": 0
},
"catalog_sku": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Catalog SKU."
}
}
},
"maxItems": 100,
"minItems": 1,
"description": "Catalog SKUs and quantities being shipped."
},
"state": {
"type": "string",
"maxLength": 60,
"description": "Destination state/province."
},
"shipping_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Shipping method id from customcat_list_shipping_methods.",
"exclusiveMinimum": 0
},
"country_code": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Destination 2-letter ISO country code (default US)."
}
}
}Browse the full CustomCat catalog of printable blank products (the items you can order with your own artwork). Filter by category and subcategory from customcat_list_catalog_categories. The reply carries the total in `total`. GET /catalog.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| limit | integer | Results per page, 1-250 (default 25). |
| category | string | Catalog category (CustomCat's default is Digisoft). |
| subcategory | string | Subcategory name, e.g. T-Shirts. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"limit": {
"type": "integer",
"maximum": 250,
"description": "Results per page, 1-250 (default 25).",
"exclusiveMinimum": 0
},
"category": {
"enum": [
"Digisoft",
"Sublimation"
],
"type": "string",
"description": "Catalog category (CustomCat's default is Digisoft)."
},
"subcategory": {
"type": "string",
"maxLength": 100,
"description": "Subcategory name, e.g. T-Shirts."
}
}
}The CustomCat catalog categories (Digisoft, Sublimation) and their subcategories (e.g. T-Shirts, Sweatshirts, Bags), to narrow customcat_list_catalog. GET /catalogcategory.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List the designs uploaded to your CustomCat account: id, name, tags, image URLs, default product and last-updated time. GET /design.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| limit | integer | Results per page, 1-250 (default 25). |
| since_id | integer | Only designs created after this design id. |
| updated_since | string | Only designs created or updated since this date. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"limit": {
"type": "integer",
"maximum": 250,
"description": "Results per page, 1-250 (default 25).",
"exclusiveMinimum": 0
},
"since_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Only designs created after this design id."
},
"updated_since": {
"type": "string",
"maxLength": 60,
"description": "Only designs created or updated since this date."
}
}
}List the products you set up in CustomCat (a design on one or more catalog items) with variants, SKUs, cost, price, stock flag and design images. Use the variant SKUs when placing an order for these products. GET /product.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| limit | integer | Results per page, 1-250 (default 25). |
| since_id | string | Only products created after this product id. |
| updated_since | string | Only products created or updated since this date (as CustomCat expects, e.g. 2026-10-01). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"limit": {
"type": "integer",
"maximum": 250,
"description": "Results per page, 1-250 (default 25).",
"exclusiveMinimum": 0
},
"since_id": {
"type": "string",
"maxLength": 100,
"description": "Only products created after this product id."
},
"updated_since": {
"type": "string",
"maxLength": 60,
"description": "Only products created or updated since this date (as CustomCat expects, e.g. 2026-10-01)."
}
}
}The shipping methods CustomCat offers for a destination country (ids and names). The method name is required when placing an order. GET /shipping.
| Argument | Type | Description |
|---|---|---|
| country_code | string | 2-letter ISO country code, e.g. US, GB (default: United States). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"country_code": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "2-letter ISO country code, e.g. US, GB (default: United States)."
}
}
}| shipping_country* |
| string |
| 2-letter ISO country code, e.g. US. |
| shipping_address1* | string |
| shipping_address2 | string |
| shipping_last_name* | string |
| shipping_first_name* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id",
"sandbox",
"shipping_first_name",
"shipping_last_name",
"shipping_email",
"shipping_phone",
"shipping_address1",
"shipping_city",
"shipping_state",
"shipping_zip",
"shipping_country",
"shipping_method",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"quantity"
],
"properties": {
"sku": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "SKU of a product made in CustomCat (from customcat_list_products, e.g. 22-115-4774-254). Use this OR catalog_sku + design_url."
},
"quantity": {
"type": "integer",
"maximum": 10000,
"description": "How many of this item.",
"exclusiveMinimum": 0
},
"preset_id": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Optional design placement preset (2 full front, 3 full back, 4 default centre chest, 1 left chest wide, 10 left chest tall, 9 default back). Omit for exact artboard placement."
},
"design_url": {
"type": "string",
"maxLength": 2000,
"description": "Fully qualified https URL of the front design (needed with catalog_sku; leave out for a back-only print)."
},
"mockup_url": {
"type": "string",
"maxLength": 2000,
"description": "Optional mockup of the front, used in QA."
},
"catalog_sku": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Catalog SKU (from customcat_list_catalog or customcat_get_catalog_sku) when you bring your own artwork."
},
"line_item_id": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Your own id for this line item."
},
"preset_back_id": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Optional placement preset for the back design."
},
"design_url_back": {
"type": "string",
"maxLength": 2000,
"description": "Optional https URL of the back design. A front+back print adds a $5 fee per line item."
},
"mockup_url_back": {
"type": "string",
"maxLength": 2000,
"description": "Optional mockup of the back, used in QA."
},
"use_embedded_dpi": {
"type": "boolean",
"description": "Use the DPI embedded in the image instead of the default 300."
}
}
},
"maxItems": 100,
"minItems": 1,
"description": "Line items: either {sku, quantity} for products made in CustomCat, or {catalog_sku, design_url, quantity} for your own artwork."
},
"confirm": {
"type": "boolean",
"description": "Required (true) for a real order (sandbox=false): set it only after the user has confirmed the items, address, shipping method and that their CustomCat payment method will be charged."
},
"sandbox": {
"type": "boolean",
"description": "true = test order, nothing is charged or produced; false = a real, paid order."
},
"order_id": {
"type": "string",
"pattern": "^[A-Za-z0-9._-]+$",
"maxLength": 100,
"minLength": 1,
"description": "Your unique order id (for example 101-102938)."
},
"shipping_zip": {
"type": "string",
"maxLength": 20,
"minLength": 1
},
"shipping_city": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"shipping_email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 200,
"description": "Customer email (required by CustomCat)."
},
"shipping_phone": {
"type": "string",
"maxLength": 40,
"minLength": 1
},
"shipping_state": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "State/province code, e.g. MI."
},
"shipping_method": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Method name from customcat_list_shipping_methods, e.g. Economy."
},
"shipping_country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "2-letter ISO country code, e.g. US."
},
"shipping_address1": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"shipping_address2": {
"type": "string",
"maxLength": 200
},
"shipping_last_name": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"shipping_first_name": {
"type": "string",
"maxLength": 100,
"minLength": 1
}
}
}