Koskamo

MyDesigns MCP

The MyDesigns MCP server allows AI agents to interact with the MyDesigns print-on-demand platform. It enables users to generate designs using Dream AI, create products from profiles, publish items to marketplaces like Etsy and Shopify, manage orders, and open branded stores directly through natural language commands in AI assistants like Claude, ChatGPT, and Cursor.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

MyDesigns MCP logo, by MyDesigns IncVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by MyDesigns Inc
You need:You sign in with MyDesigns the first time your AI needs your account.Free to connect on every plan.Custom MCP servers can only be added on ChatGPT on the web, and not on every ChatGPT plan.
MCP endpoint (Streamable HTTP)
https://mcp.mydesigns.io/mcp
Vendor documentation

What its tools do

34 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

34 of 34 have a description · 34 of 34 declare behavior hints · 31 of 31 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to mydesigns.io ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Generate designs and products using AI tools
  • Publish products to external marketplaces
  • Manage orders and track sales
  • Open and customize a branded store

Source and maintenance

Vendor evidenceRegistry 1.0.1

Protocol and capabilities

Server
MyDesigns 1.0.0.0
MCP protocol negotiated in check
2025-11-25
Tools
34 advertised
Resources
4 advertised
Resource templates
0 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {},
  "logging": {},
  "resources": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

MyDesigns is a print-on-demand platform. Sellers turn designs into products (t-shirts, mugs and more) that print partners make and ship, and sell them in their own MyDesigns stores. To make products: find a product profile with list_profiles (a profile sets the products, colors, sizes, prices and mockups); then call create_products for one product or several; then check them with get_product_status until they are READY, and tell the seller; then, when the seller wants, publish_products puts them into one of their stores. When the seller has not said which product they want, or nothing fits, ask them; never pick a profile or a store for them. A seller can make only what a profile they can use has, their own or a public one: before offering a product, search list_profiles for it in both; when neither has it, say plainly that it cannot be made, and never suggest making a profile: profiles are not made here. list_product_types searches the blank products a design can be printed on. create_designs is the app's Dream AI: use it when the seller asks for Dream AI or the dreamer, wants designs only, or wants to see them before choosing products. It makes designs without products; make products from them later with create_products and their designIds, never their prompts again. When the seller does not like some designs, delete_designs moves them to the trash; the designs card also lets the seller delete one themselves. Design ideas come from your own research by default. deep_search_designs is heavy research into what really sells on Amazon: offer it when the seller wants that, and start it only after they agree to its credit cost. New designs go in the seller's first design folder; to keep a niche or a store's designs together, make a folder with create_folder (or find one with list_folders) and pass its id as folderId. list_designs finds the seller's designs, and move_designs files them in another folder. When the seller has their own images, upload_designs opens a card they upload them in; use the designIds it gives, never a prompt that copies their image. Products do not need a store: a seller can make them first and publish them later, by the productIds list_products gives. When the seller has no store, or wants another, create_store opens one; agree its name and web link with them first. list_products lists the seller's products, newest first, and where each one is: in a store, or not in one yet. For any question about their products, use it without a store first. Stores: list_stores, create_store, update_store (also the About page: about text, contact details and social links), update_seller_info for who sells there, which the store's legal pages show (fill it only with what the seller says, never guessed), create_store_images to make the logo, banners and favicon, upload_store_image when the seller has their own (images made elsewhere in this chat cannot be put on a store), and get_store_stats for a store's sales. A store can also use domains the seller owns: list_store_domains, add_store_domain (give the seller the DNS record it returns, word for word), check_store_domain, set_store_main_domain and remove_store_domain. Domains are not bought here. list_orders lists the seller's orders and get_order shows one in full. get_account tells who is signed in, their plan and their AI credits. Each new design costs about 1.5 of the seller's AI credits; reusing an existing design costs none. Ids come from the tools: never guess one. Talking to the seller: use plain words. Never show tool names, ids they did not ask for, or billing internals such as plan codes, the billing source or coupons. Before a design the seller did not clearly ask for (a redo, a second version, a vague "make it pop"), say it costs credits and ask first. Offer only what these tools do: editing, unpublishing or deleting products, prices, setting up a new payout account, payouts, refunds and deleting a store are done in the MyDesigns app, so say that instead of offering them. Products already in a store cannot be published again. Call products by what they are (a Softstyle tee, a mug), not "profile". You cannot message the seller on your own, so never promise to tell them when something is ready: say how long it usually takes and that they can ask again. Never suggest a design that copies a brand, logo, character or known slogan, or looks close to one.

Tools

34 advertised

get_store_stats — Get store stats
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get a store's real performance over the last N days: orders, items sold, revenue, profit and fees in USD, visits, and its top products, each compared with the N days before. Fees are everything the sales cost the seller: making and shipping the products plus marketplace fees, so call them costs, not fees alone. Top products are ranked by net sales, then by page views; only products with tracked page views are listed, so one that sold without a tracked view is missing from the list. The numbers come from daily rollups, so today's activity can be missing.

get_store_stats input schema
{
  "type": "object",
  "required": [
    "storeId"
  ],
  "properties": {
    "days": {
      "type": "integer",
      "default": 30,
      "description": "How many days back to look, e.g. 7, 30 or 90."
    },
    "storeId": {
      "type": "integer",
      "description": "The store id from list_stores."
    }
  }
}
get_store_stats annotations
{
  "title": "Get store stats",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_store_domains — List store domains
Advertised by the server during the last successful anonymous check.
Advertised read-only

List a store's own domains (like shop.example.com): whether each is live, which one is the main link buyers land on, and for each one not live yet the DNS record the seller must add where they bought the domain. A store has up to 3 domains.

list_store_domains input schema
{
  "type": "object",
  "required": [
    "storeId"
  ],
  "properties": {
    "storeId": {
      "type": "integer",
      "description": "The store id from list_stores."
    }
  }
}
list_store_domains annotations
{
  "title": "List store domains",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
add_store_domain — Add store domain
Advertised by the server during the last successful anonymous check.
Open-world

Connect a domain the seller already owns to a store; it does not buy one. A root domain (example.com) also adds its www version. Needs a paid plan. The result lists the store's domains with the DNS record to add for each: give the seller those exact values to add where they bought the domain. A domain usually goes live a few minutes to a few hours after the record is added; check it then with check_store_domain.

add_store_domain input schema
{
  "type": "object",
  "required": [
    "storeId",
    "hostname"
  ],
  "properties": {
    "storeId": {
      "type": "integer",
      "description": "The store id from list_stores."
    },
    "hostname": {
      "type": "string",
      "description": "The domain alone, e.g. shop.example.com or example.com: no https:// and no path."
    }
  }
}
add_store_domain annotations
{
  "title": "Add store domain",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
check_store_domain — Check store domain
Advertised by the server during the last successful anonymous check.
Open-world

Check again whether a domain is live, after the seller added its DNS record. While it is not live, the result repeats the record to add and any problem found with it.

check_store_domain input schema
{
  "type": "object",
  "required": [
    "domainId"
  ],
  "properties": {
    "domainId": {
      "type": "string",
      "format": "uuid",
      "description": "The domain id from list_store_domains."
    }
  }
}
check_store_domain annotations
{
  "title": "Check store domain",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
set_store_main_domain — Set store main domain
Advertised by the server during the last successful anonymous check.

Choose the store's main link: one of its domains, or with no domainId its own MyDesigns link. Its other links send buyers to the main one. Choose a domain only once it is live.

set_store_main_domain input schema
{
  "type": "object",
  "required": [
    "storeId"
  ],
  "properties": {
    "storeId": {
      "type": "integer",
      "description": "The store id from list_stores."
    },
    "domainId": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "default": null,
      "description": "The domain id from list_store_domains; leave it out to make the store's MyDesigns link main."
    }
  }
}
set_store_main_domain annotations
{
  "title": "Set store main domain",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
remove_store_domain — Remove store domain
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Disconnect a domain from its store; the seller keeps owning it. If it was the main link, the store's MyDesigns link takes over. Ask the seller before removing one.

remove_store_domain input schema
{
  "type": "object",
  "required": [
    "domainId"
  ],
  "properties": {
    "domainId": {
      "type": "string",
      "format": "uuid",
      "description": "The domain id from list_store_domains."
    }
  }
}
remove_store_domain annotations
{
  "title": "Remove store domain",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
upload_store_image — Upload store images
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Open a card where the seller uploads their own images for one of their stores: the logo, the banner across the top of the home page, a separate banner for phones, or the favicon (the small icon in the browser tab). Use it when the seller already has the image: you cannot take an image from the chat. The card resizes each file and puts it on the store straight away, in place of the one there; it is not saved in the seller's designs. Free. Nothing comes back to you: when the seller says they are done, the images are on the store.

upload_store_image input schema
{
  "type": "object",
  "required": [
    "storeId"
  ],
  "properties": {
    "images": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": [
          "string",
          "null"
        ]
      },
      "default": null,
      "description": "The images the seller wants to upload, any of: logo, banner, mobile_banner, favicon. Leave it out for the logo and the banner."
    },
    "storeId": {
      "type": "integer",
      "description": "The store id from list_stores."
    }
  }
}
upload_store_image output schema
{
  "type": "object",
  "required": [
    "storeId",
    "storeName",
    "slots",
    "maxFileBytes",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "slots": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "image",
          "label",
          "hint"
        ],
        "properties": {
          "hint": {
            "type": "string"
          },
          "image": {
            "type": "string"
          },
          "label": {
            "type": "string"
          }
        }
      }
    },
    "storeId": {
      "type": "integer"
    },
    "storeName": {
      "type": "string"
    },
    "maxFileBytes": {
      "type": "integer"
    }
  }
}
upload_store_image annotations
{
  "title": "Upload store images",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
save_store_image — Save store image
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Puts one file from the store image upload card on the store. The card calls this.

save_store_image input schema
{
  "type": "object",
  "required": [
    "storeId",
    "image",
    "name",
    "base64"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The file's name."
    },
    "image": {
      "type": "string",
      "description": "Which image: logo, banner, mobile_banner or favicon."
    },
    "base64": {
      "type": "string",
      "description": "The file, base64."
    },
    "storeId": {
      "type": "integer",
      "description": "The store id upload_store_image answered with."
    }
  }
}
save_store_image output schema
{
  "type": "object",
  "required": [
    "image",
    "width",
    "height",
    "shapeNote"
  ],
  "properties": {
    "image": {
      "type": "string"
    },
    "width": {
      "type": [
        "integer",
        "null"
      ]
    },
    "height": {
      "type": [
        "integer",
        "null"
      ]
    },
    "shapeNote": {
      "type": [
        "string",
        "null"
      ]
    }
  }
}
save_store_image annotations
{
  "title": "Save store image",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
list_stores — List stores
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the signed-in seller's MyDesigns stores with their public link, whether they can take orders yet (payouts connected), how many more stores the plan allows, and each store's about and contact details and seller info, with the seller info still missing. payoutAccounts are the seller's payout accounts, with the stores already on each, that a store can be put on with create_store or update_store.

list_stores input schema
{
  "type": "object",
  "properties": {}
}
list_stores annotations
{
  "title": "List stores",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_store — Create store
Advertised by the server during the last successful anonymous check.
Open-world

Open a new MyDesigns store for the seller. It is live at its link right away but empty: put products in it with publish_products. It can take orders only once it is on a payout account. Check list_stores first: the plan limits how many stores a seller can have, and when the seller has a payout account that is ready, ask whether to use it for this store, naming it by the stores already on it, and on their yes pass it as payoutAccountId; with none ready, the seller sets up payouts in the MyDesigns app. Before calling, tell the seller the name and the web link you will use and wait for their yes: the link cannot be changed later.

create_store input schema
{
  "type": "object",
  "required": [
    "name",
    "description",
    "slug"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "Store name buyers see."
    },
    "slug": {
      "type": "string",
      "description": "The store's web link name, not a postal address: lowercase letters, digits and hyphens, e.g. funny-dog-tees, so the link becomes https://funny-dog-tees.mdstore.io. Make it from the store name when the seller gives no other. It cannot be changed later. If it is taken or reserved, suggest another."
    },
    "description": {
      "type": "string",
      "description": "Short description of what the store sells."
    },
    "payoutAccountId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "The id of one of the seller's payout accounts from list_stores to put the store on, so it can take orders. Only one that is ready; ask the seller first."
    }
  }
}
create_store annotations
{
  "title": "Create store",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
update_store — Update store
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Change a store's name, description, accent color, banner text, the logo's size and whether the store name shows next to it in the header, or its About page: the about text, the contact email, phone and address, and links to its social media. Only the values given change; everything else stays as it is; images are made with create_store_images or uploaded with upload_store_image, and the seller info is changed with update_seller_info. To remove a value or an image and go back to the store's default, name it in clear. payoutAccountId puts the store on one of the seller's payout accounts from list_stores: ask the seller first, naming the account by the stores already on it.

update_store input schema
{
  "type": "object",
  "required": [
    "storeId"
  ],
  "properties": {
    "name": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "New store name."
    },
    "clear": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": [
          "string",
          "null"
        ]
      },
      "default": null,
      "description": "Fields to remove, any of: accentColor, bannerHeadline, bannerSubtitle, aboutText, contactEmail, contactPhone, contactAddress, socialLinks (all of them) or one link by its name (instagram, tiktok, facebook, x, youtube, linkedin, pinterest, threads), logo, banner, mobileBanner, favicon."
    },
    "storeId": {
      "type": "integer",
      "description": "The store id from list_stores."
    },
    "logoSize": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "How big the logo is in the store's header: small, medium (the default), large or extra_large."
    },
    "aboutText": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Text for the store's About section."
    },
    "accentColor": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Accent color as a hex code, e.g. #1E88E5."
    },
    "description": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "New store description."
    },
    "socialLinks": {
      "type": [
        "object",
        "null"
      ],
      "default": null,
      "properties": {
        "x": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "tiktok": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "threads": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "youtube": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "facebook": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "linkedin": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "instagram": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "pinterest": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        }
      },
      "description": "Links to the store's social media pages, shown on the About page, each a full link such as https://instagram.com/yourstore. Only the links given change."
    },
    "contactEmail": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Email buyers can write to, shown on the About page."
    },
    "contactPhone": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Phone number shown on the About page."
    },
    "bannerHeadline": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Big headline on the home page banner."
    },
    "bannerSubtitle": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Smaller line under the banner headline."
    },
    "contactAddress": {
      "type": [
        "object",
        "null"
      ],
      "default": null,
      "properties": {
        "city": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "state": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "street": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "country": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        },
        "postalCode": {
          "type": [
            "string",
            "null"
          ],
          "default": null
        }
      },
      "description": "Postal address shown on the About page. Only the parts given change."
    },
    "payoutAccountId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "The id of one of the seller's payout accounts from list_stores to put the store on, so it can take orders. Only one that is ready; ask the seller first."
    },
    "showStoreNameInHeader": {
      "type": [
        "boolean",
        "null"
      ],
      "default": null,
      "description": "Whether the store name shows in the header next to the logo; turn it off when the logo already has the name in it. A store with no logo always shows its name."
    }
  }
}
update_store annotations
{
  "title": "Update store",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
update_seller_info — Update seller info
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Change the seller info of one of the seller's stores: who sells there (a person or a business), their legal address and how to reach them. The store's legal pages show it, so fill it only with what the seller tells you: never guess or make up a name, address or VAT number. Only the values given change, but the store keeps seller info only when it is complete, as the app does: when list_stores shows some missing, ask the seller for all of it first, then make one call.

update_seller_info input schema
{
  "type": "object",
  "required": [
    "storeId"
  ],
  "properties": {
    "clear": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": [
          "string",
          "null"
        ]
      },
      "default": null,
      "description": "Fields to remove, any of: dbaName, addressLine2, addressState, phone, vatId, registrationNumber."
    },
    "phone": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Phone number."
    },
    "vatId": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "VAT number, e.g. DE123456789."
    },
    "dbaName": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "The name a business trades under, when it is not its legal name."
    },
    "storeId": {
      "type": "integer",
      "description": "The store id from list_stores."
    },
    "legalName": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "The person's full legal name, or the business's legal name."
    },
    "addressZip": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "ZIP or postal code."
    },
    "legalEmail": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Email for legal notices, shown on the legal pages."
    },
    "sellerType": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "individual when a person sells in their own name, business when a company does. Needed the first time; ask the seller."
    },
    "addressCity": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "City."
    },
    "addressLine1": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Street and number."
    },
    "addressLine2": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Second address line: suite, floor or unit."
    },
    "addressState": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "State or province, e.g. IL; needed in the United States and Canada."
    },
    "addressCountry": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Two-letter country code, e.g. US or DE."
    },
    "registrationNumber": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "A business's company registration number, e.g. HRB 12345."
    }
  }
}
update_seller_info annotations
{
  "title": "Update seller info",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
create_store_images — Create store images
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Make images for one of the seller's stores with Dream AI and put them on it: the logo, the banner across the top of the home page, a separate banner for phones, and the favicon (the small icon in the browser tab). MyDesigns picks the model, shape and size each image needs and puts it on the store straight away, in place of the one there; the images are not saved in the seller's designs. A favicon given no prompt is made from the logo in the same call, at no extra cost. It costs AI credits: 1.5 for a logo or a favicon, 3 for a banner or a phone banner. Before calling, tell the seller the cost and which of their current images it replaces, and wait for their yes. When they do not like one image, call again with only that one. Images made elsewhere in this chat cannot be put on the store. Make one call at a time for a store, never several at once. For the seller's own image, use upload_store_image; to take an image off, use update_store. An image with an error in the result was not set: tell the seller.

create_store_images input schema
{
  "type": "object",
  "required": [
    "storeId",
    "images"
  ],
  "properties": {
    "images": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "image"
        ],
        "properties": {
          "image": {
            "type": "string",
            "description": "Which image: logo, banner, mobile_banner or favicon."
          },
          "prompt": {
            "type": [
              "string",
              "null"
            ],
            "default": null,
            "description": "What to make, written as an image prompt: subject, style and colours. A banner or phone banner shows what the store sells, with one clear subject and no fine detail; the store's headline is written over its middle in white, so keep the middle calm and dark enough for white text, and put no words in it. A logo is a simple mark that still reads small, since a favicon is often made from it; a favicon is one bold shape or a single letter, no words. Leave it out only for a favicon made from the logo. If the seller has not said what they want, ask them first."
          }
        }
      },
      "description": "The images to make, each at most once."
    },
    "storeId": {
      "type": "integer",
      "description": "The store id from list_stores."
    }
  }
}
create_store_images annotations
{
  "title": "Create store images",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
deep_search_designs — Deep search designs
Advertised by the server during the last successful anonymous check.
Open-world

Deep search, the app's Scout AI: MyDesigns researches what really sells for one or more niches on Amazon right now and makes designs from each, each with a title, description and tags. It is heavy research that takes a few minutes, so do your own research and use create_products by default; offer deep search only when the seller wants to know what sells or wants ideas from real sales data, tell them it uses up to 1.5 AI credits per design, and start it only after they agree. Needs a Pro plan or higher; one deep search runs at a time, so put every search term in one call, one per line: they run as one job, like the Scout AI page. Then check it with get_deep_search_results and the jobId returned here, show the seller the designs, and make products from the ones they pick with create_products and their designIds.

deep_search_designs input schema
{
  "type": "object",
  "required": [
    "niche",
    "count"
  ],
  "properties": {
    "count": {
      "type": "integer",
      "description": "How many designs to make for each search term, 1 to 10."
    },
    "niche": {
      "type": "string",
      "description": "The search terms, in the seller's words, one per line and up to 20, e.g. \"funny nurse\" or \"funny nurse\\nfishing dad\"."
    },
    "folderId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "The folder id from list_folders that the designs go in. Leave it out for the seller's first folder."
    },
    "productType": {
      "type": "string",
      "default": "standard_tshirt",
      "description": "The kind of product the designs are for: standard_tshirt (default), premium_tshirt, pullover_hoodie, crewneck_sweatshirt, long_sleeve, tank_top, mug, tumbler, tote_bag, throw_pillow, paper_poster, canvas_wall_art, iphone_case, ornament, and more."
    },
    "instructions": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "The seller's own instructions for how every design looks, in their words, as on the Scout AI page, e.g. \"light colored text and elements, so they stand out on black shirts\". Leave it out when the seller gave none."
    }
  }
}
deep_search_designs annotations
{
  "title": "Deep search designs",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_deep_search_results — Get deep search results
Advertised by the server during the last successful anonymous check.
Advertised read-only

The designs a deep_search_designs run has made, by its jobId. RUNNING: still researching or designing, which usually takes a few minutes; the designs so far are listed; check again later, not over and over. DONE: all made. A card shows the seller each design's image and title, so do not put the images in your reply. The titles are long, search-friendly ones: shorten them for create_products if the seller wants. A design on trademarkHold has text a trademark check flagged; tell the seller before they sell it. Problems say why a niche found nothing or a design was skipped. NOT_FOUND: no deep search by that id for this seller.

get_deep_search_results input schema
{
  "type": "object",
  "required": [
    "jobId"
  ],
  "properties": {
    "jobId": {
      "type": "string",
      "format": "uuid",
      "description": "The jobId deep_search_designs returned."
    }
  }
}
get_deep_search_results output schema
{
  "type": "object",
  "required": [
    "jobGuid",
    "status",
    "designs",
    "problems"
  ],
  "properties": {
    "status": {
      "enum": [
        "NOT_FOUND",
        "RUNNING",
        "DONE"
      ],
      "type": "string"
    },
    "designs": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "designId",
          "imageUrl",
          "title",
          "description",
          "tags",
          "trademarkHold"
        ],
        "properties": {
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "title": {
            "type": [
              "string",
              "null"
            ]
          },
          "designId": {
            "type": "integer"
          },
          "imageUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "trademarkHold": {
            "type": "boolean"
          }
        }
      }
    },
    "jobGuid": {
      "type": "string",
      "format": "uuid"
    },
    "problems": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "niche",
          "reason"
        ],
        "properties": {
          "niche": {
            "type": [
              "string",
              "null"
            ]
          },
          "reason": {
            "type": "string"
          }
        }
      }
    }
  }
}
get_deep_search_results annotations
{
  "title": "Get deep search results",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_products — Create products
Advertised by the server during the last successful anonymous check.
Open-world

Create 1 to 10 print-on-demand products for the seller, one per design: generate each design from a prompt with AI (or use an existing design), then make them into products with one of the seller's product profiles, which sets the products, colors, sizes, prices and mockups. Find the profile with list_profiles first: when the seller named a product (a tee, a Gildan 5000, a mug), search for it and use a profile only if it clearly fits. When the seller named no product, or nothing fits, show them a few profiles and ask which to use; never pick one for them. Plan exactly as many products as the seller asked for, each with its own design idea, and count them before calling; for more than 10, call again with the rest. The designs are generated together, about 1.5 AI credits each (a reused designId costs none), and take up to a minute or two. Before new designs the seller did not clearly ask for (redos, more versions, a vague "make them pop"), tell them they cost credits and wait for a yes. A design that could not be made is listed with the reason and the others still go ahead. The products are saved together in the seller's MyDesigns products, not put in any store; they are not drafts. They are then made in the background over a few minutes: check them with get_product_status and the one jobId returned here, and tell the seller when they are ready. Show the seller the design images.

create_products input schema
{
  "type": "object",
  "required": [
    "profileId",
    "products"
  ],
  "properties": {
    "folderId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "The folder id from list_folders that new designs go in. Leave it out for the seller's first folder. A reused designId stays where it is."
    },
    "products": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title",
          "description"
        ],
        "properties": {
          "tags": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "default": null,
            "description": "Up to 13 search tags, each a short phrase."
          },
          "title": {
            "type": "string",
            "description": "The product title buyers see, written for the design and the products in the profile. When the design has text, use its words exactly as in the prompt, spelled the same."
          },
          "prompt": {
            "type": [
              "string",
              "null"
            ],
            "default": null,
            "description": "What the design shows, written as an image prompt: subject, style, colours and any exact text to print in quotes. Describe the artwork only, not the product it goes on. Give this or designId, not both. If the seller has not said what they want, ask them first."
          },
          "designId": {
            "type": [
              "integer",
              "null"
            ],
            "default": null,
            "description": "An existing design id to use instead of generating one, at no credit cost: from an earlier create call, deep search or list_products."
          },
          "description": {
            "type": "string",
            "description": "The product description buyers see, a few sentences."
          },
          "transparentBackground": {
            "type": "boolean",
            "default": true,
            "description": "For a new design: false only when the seller wants it to have its own background, like a poster or a full-print mug. Leave it true for prints on apparel and most products."
          }
        }
      },
      "description": "The products to make, 1 to 10, each from its own design."
    },
    "profileId": {
      "type": "integer",
      "description": "The profile id from list_profiles, one the seller asked for or chose. Never guess one. When more than one profile fits what they asked for (two t-shirts, say), ask which before calling, even when they asked to publish right away: picking one makes the wrong product, and their answer then makes a second."
    }
  }
}
create_products output schema
{
  "type": "object",
  "required": [
    "productGroupId",
    "jobId",
    "variantCountPerProduct",
    "products",
    "failedDesigns",
    "status"
  ],
  "properties": {
    "jobId": {
      "type": "string",
      "format": "uuid"
    },
    "status": {
      "type": "string"
    },
    "products": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "designId",
          "designImageUrl",
          "title"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "designId": {
            "type": "integer"
          },
          "designImageUrl": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "failedDesigns": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title",
          "prompt",
          "error"
        ],
        "properties": {
          "error": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "prompt": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "productGroupId": {
      "type": "integer"
    },
    "variantCountPerProduct": {
      "type": "integer"
    }
  }
}
create_products annotations
{
  "title": "Create products",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
publish_products — Publish products
Advertised by the server during the last successful anonymous check.
Open-world

Put products into one of the seller's MyDesigns stores, where buyers can see and order them. Give either the jobId a create_products call returned, once get_product_status says READY (or FAILED, which publishes the ones that were made), or the productIds of products from list_products that are not in a store yet, e.g. ones made in an earlier chat. Products already in a store cannot be published again. Ask the seller which store when they have more than one; never pick one for them. The products then go into the store in the background over a few minutes: check with get_product_status and the jobIds returned here, and tell the seller when they are live.

publish_products input schema
{
  "type": "object",
  "required": [
    "storeId"
  ],
  "properties": {
    "jobId": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "default": null,
      "description": "The jobId create_products returned. Give this or productIds."
    },
    "storeId": {
      "type": "integer",
      "description": "The store id from list_stores."
    },
    "productIds": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "integer"
      },
      "default": null,
      "description": "Product ids from list_products, of products not in a store yet. Products made at different times go in one set at a time, each with its own jobId. Give this or jobId."
    }
  }
}
publish_products annotations
{
  "title": "Publish products",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_product_status — Get product status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Check whether products started with create_products are made yet, or products sent with publish_products are in the store yet, by the jobId each call returned. CREATING: still being made or published, which usually takes a few minutes; check again later, not over and over. READY: all made (or all in the store). FAILED: done, but some or all were not made; the failed list gives each one's designId and the reason, and the design is kept, so it can be tried again with that designId. NOT_FOUND: no such product job for this seller, or one started only seconds ago.

get_product_status input schema
{
  "type": "object",
  "required": [
    "jobIds"
  ],
  "properties": {
    "jobIds": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uuid"
      },
      "description": "The jobId of each create_products call to check, up to 25."
    }
  }
}
get_product_status annotations
{
  "title": "Get product status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
product_creation_progress — Product creation progress
Advertised by the server during the last successful anonymous check.
Advertised read-only

How far a product job has got. The product card calls this while it is open.

product_creation_progress input schema
{
  "type": "object",
  "required": [
    "jobId"
  ],
  "properties": {
    "jobId": {
      "type": "string",
      "format": "uuid",
      "description": "The jobId create_products returned."
    }
  }
}
product_creation_progress output schema
{
  "type": "object",
  "required": [
    "jobId",
    "status",
    "total",
    "ready",
    "readyDesignIds",
    "failed"
  ],
  "properties": {
    "jobId": {
      "type": "string",
      "format": "uuid"
    },
    "ready": {
      "type": "integer"
    },
    "total": {
      "type": "integer"
    },
    "failed": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "designId",
          "error"
        ],
        "properties": {
          "error": {
            "type": "string"
          },
          "designId": {
            "type": [
              "integer",
              "null"
            ]
          }
        }
      }
    },
    "status": {
      "type": "string"
    },
    "readyDesignIds": {
      "type": "array",
      "items": {
        "type": "integer"
      }
    }
  }
}
product_creation_progress annotations
{
  "title": "Product creation progress",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_products — List products
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the seller's products, newest first, 24 per page: title, the blanks it is made on, when it was made, where it is (the store or shop it is in, or none when it is not in a store yet), price range, public link, status, how many items have been ordered, and the designId it is made from, which create_products can reuse at no credit cost. Leave storeId out to see every product, for questions like "did my last products go live" or "what is not in a store yet".

list_products input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer",
      "default": 1,
      "description": "Page number, starting at 1."
    },
    "search": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Words to search for in the product title."
    },
    "inStore": {
      "type": [
        "boolean",
        "null"
      ],
      "default": null,
      "description": "true: only products in a store or shop. false: only products not in one yet."
    },
    "storeId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Only this store's products: a store id from list_stores. Leave it out for every product."
    }
  }
}
list_products annotations
{
  "title": "List products",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_product_types — List product types
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the MyDesigns print-on-demand catalog: the blank products a design can be printed on (t-shirts, mugs, ...), with brand, product code, price range, number of variants and the print partners that make it. 24 per page. This is the catalog, not what the seller can make today: a product is made only from a profile, so use list_profiles for that.

list_product_types input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer",
      "default": 1,
      "description": "Page number, starting at 1."
    },
    "search": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Words to search for, e.g. 'gildan 5000', 'hoodie' or 'mug'. Leave empty to browse."
    }
  }
}
list_product_types annotations
{
  "title": "List product types",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_orders — List orders
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the seller's orders, newest first, 16 per page: order id, date, status, which shop or store it came from, the buyer's name, the total in USD and the items. Use it for the seller's latest orders or to find an order's id; get_order gives one order in full.

list_orders input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer",
      "default": 1,
      "description": "Page number, from 1."
    },
    "storeId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "Only this store's orders: a store id from list_stores. Leave it out for every shop."
    }
  }
}
list_orders annotations
{
  "title": "List orders",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_order — Get order
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one MyDesigns order by its id: the seller and their shop, the payment method, the billing address, every print partner with its own fulfillment status, created date and tracking, and every line with its partner, SKUs, print areas and manufacturing cost. One order can hold several fulfillments at the same partner, so a partner name is not unique. An admin token reaches any order; any other token reaches only that seller's own orders. userId, userEmail, providerCode and isPrintify are for support staff: when talking to the seller, name the marketplace in words (MyDesigns Store, Etsy) and leave those out.

get_order input schema
{
  "type": "object",
  "required": [
    "orderId"
  ],
  "properties": {
    "orderId": {
      "type": "integer",
      "description": "The MyDesigns order id, the number shown on the order page."
    }
  }
}
get_order annotations
{
  "title": "Get order",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_profiles — List product profiles
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the product profiles a product can be made from. A profile is a saved set of products (t-shirt, mug, ...) with their print partner, colors, sizes, prices and mockups, so a design becomes a product without choosing each of those. Shows the seller's own profiles, or MyDesigns' public ones. Each has its products with colors, sizes and price range. These are the only products the seller can make: when neither their own nor the public profiles have one, it cannot be made. 24 per page.

list_profiles input schema
{
  "type": "object",
  "properties": {
    "page": {
      "type": "integer",
      "default": 1,
      "description": "Page number, starting at 1."
    },
    "search": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Words to search for in the profile name or its products' names and kinds, e.g. 't-shirt', 'mug' or 'gildan'."
    },
    "publicProfiles": {
      "type": "boolean",
      "default": false,
      "description": "True for MyDesigns' public profiles, false for the seller's own. Look at the seller's own first; use the public ones when they have none or none fits."
    }
  }
}
list_profiles annotations
{
  "title": "List product profiles",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_account — Get account
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the signed-in MyDesigns account: its id, name, email, subscription plan code (TIER_0 is the free plan) and the subscription that plan comes from: where it is billed (STRIPE, SHOPIFY, PKS, or NONE for the free plan), the plan type (STARTER, PRO, PRO_PLUS), the plan name, status, frequency (MONTHLY, YEARLY, LIFETIME), list price, when it renews or ends, any coupon, and for Stripe the amount the last invoice actually charged after discounts. Fields a billing source does not have are null. aiCredits is how many AI credits the seller has left; new designs spend them.

get_account input schema
{
  "type": "object",
  "properties": {}
}
get_account annotations
{
  "title": "Get account",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
delete_design_from_card — Delete design from card
Advertised by the server during the last successful anonymous check.
Advertised destructive

Move one design to the seller's trash. The designs card calls this when the seller deletes a design from it.

delete_design_from_card input schema
{
  "type": "object",
  "required": [
    "designId"
  ],
  "properties": {
    "designId": {
      "type": "integer",
      "description": "The design's id, from the card."
    }
  }
}
delete_design_from_card annotations
{
  "title": "Delete design from card",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
list_designs — List designs
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the seller's designs with their folder, title, tags and picture, folder by folder in the order list_folders gives, about 50 at a time. Give folderId for one folder, and search to find designs by title, tags or file name. When nextCursor is set there are more: call again with it and the same folderId and search. A cursor counts designs by place, so after moving or deleting designs it would skip some: start again without it.

list_designs input schema
{
  "type": "object",
  "properties": {
    "cursor": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "The nextCursor of the call before, for the next designs."
    },
    "search": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "Words to look for in the title, tags or file name."
    },
    "folderId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "The folder id from list_folders; leave it out for all folders."
    }
  }
}
list_designs annotations
{
  "title": "List designs",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
move_designs — Move designs
Advertised by the server during the last successful anonymous check.

Move designs into another of the seller's folders, by the ids list_designs gives, up to 100 at a time. Before moving more than a few, show the seller which go where and wait for their yes. Each folder is set up with its own image slots and fields, and designs move only between folders set up the same way; the result says which could not move and why. Those the seller moves in the MyDesigns app, where they choose where each image and field goes.

move_designs input schema
{
  "type": "object",
  "required": [
    "designIds",
    "folderId"
  ],
  "properties": {
    "folderId": {
      "type": "integer",
      "description": "The folder id from list_folders to move them into."
    },
    "designIds": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "description": "The design ids from list_designs, up to 100."
    }
  }
}
move_designs annotations
{
  "title": "Move designs",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_designs — Create designs (Dream AI)
Advertised by the server during the last successful anonymous check.
Open-world

Create designs, the app's Dream AI: make 1 to 10 designs for the seller with AI, one per prompt, and save them in their MyDesigns designs. No product is made. When the seller asks for Dream AI or the dreamer, or to dream designs, use this tool. Use it too when the seller wants designs only, or wants to see the designs before choosing products; when they want products, create_products makes the designs and the products in one call. Plan exactly as many designs as the seller asked for, each with its own idea; for more than 10, call again with the rest. The designs are generated together, about 1.5 AI credits each on the default model (other models cost more or less), and take up to a minute or two. Before designs the seller did not clearly ask for (redos, more versions, a vague "make them pop"), tell them they cost credits and wait for a yes. A design that could not be made is listed with the reason and the others are still made. A card shows the seller the designs, so do not put the images in your reply. To make products from them later, give create_products their designIds, never their prompts again: a prompt makes a new design and costs credits again.

create_designs input schema
{
  "type": "object",
  "required": [
    "designs"
  ],
  "properties": {
    "model": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "The AI model for all the designs. Leave it out for GPT Image 2.6 Sunburst; use another only when the seller asks for it. gpt-image-2.6-sunburst, gpt-image-2.6-flare, gpt-image-2.5-sunburst, gpt-image-2.5-flare, gpt-image-2, gpt-image-1.5, gpt-image-1-mini (GPT Image); google/nano-banana-2.1, google/nano-banana-2-lite, nano-banana-2, nano-banana-pro, nano-banana (Nano Banana); V_4_5_MEDIUM, V_4, V_3, V_3_TURBO (Ideogram); recraft/v4, recraft-v3 (Recraft); blackforestlabs/flux-3/text-to-image, flux-2-flex, flux-2-max, flux-2/flash, flux-2/turbo (FLUX); seedream/v5/pro, seedream/v5/lite, seedream/v4.5 (Seedream). Only the GPT Image models except gpt-image-2, and Ideogram V_3 and V_3_TURBO, can make a transparent background; any other makes it with its own background."
    },
    "designs": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "title",
          "prompt"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "A short name for the design, a few words: it is the design's name in MyDesigns and is shown to the seller under its image."
          },
          "prompt": {
            "type": "string",
            "description": "What the design shows, written as an image prompt: subject, style, colours and any exact text to print in quotes. Describe the artwork only, not the product it goes on. If the seller has not said what they want, ask them first."
          },
          "transparentBackground": {
            "type": [
              "boolean",
              "null"
            ],
            "default": null,
            "description": "false only when the seller wants the design to have its own background, like a poster or a full-print mug. Leave it out for prints on apparel and most products: the background is then transparent when the model can make it so."
          }
        }
      },
      "description": "The designs to make, 1 to 10."
    },
    "folderId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "The folder id from list_folders that the designs go in. Leave it out for the seller's first folder."
    },
    "aspectRatio": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "description": "The shape of all the designs as width:height, e.g. \"1:1\" (default), \"2:3\", \"3:4\", \"16:9\". Each model has its own sizes, so the closest one it has is used."
    }
  }
}
create_designs output schema
{
  "type": "object",
  "required": [
    "designs",
    "problems",
    "status"
  ],
  "properties": {
    "status": {
      "type": "string"
    },
    "designs": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "designId",
          "imageUrl",
          "title"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "designId": {
            "type": "integer"
          },
          "imageUrl": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "problems": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "reason"
        ],
        "properties": {
          "reason": {
            "type": "string"
          }
        }
      }
    }
  }
}
create_designs annotations
{
  "title": "Create designs (Dream AI)",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
delete_designs — Delete designs
Advertised by the server during the last successful anonymous check.
Advertised destructive

Move designs the seller does not want to their MyDesigns trash, by the designIds create_designs, deep search or an upload gave. Use it only when the seller asked to delete them; when it is not clear which ones they mean, ask. They can restore them from the trash in the MyDesigns app for a while. The AI credits the designs cost are not given back. Never use a deleted designId again, for create_products or anything else.

delete_designs input schema
{
  "type": "object",
  "required": [
    "designIds"
  ],
  "properties": {
    "designIds": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "description": "The designIds to delete, up to 50."
    }
  }
}
delete_designs annotations
{
  "title": "Delete designs",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
upload_designs — Upload designs
Advertised by the server during the last successful anonymous check.

Open a card where the seller uploads their own images (PNG or JPEG, up to 20 MB each) as designs. Use it when the seller wants products from art they already have: you cannot take an image from the chat, and never write a prompt to recreate one. The card saves the files and then gives you their designIds, which create_products takes instead of a prompt, at no credit cost. Uploading costs nothing.

upload_designs input schema
{
  "type": "object",
  "properties": {
    "folderId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "The folder id from list_folders to save the designs in. Leave it out for the seller's first folder."
    }
  }
}
upload_designs output schema
{
  "type": "object",
  "required": [
    "folderId",
    "folderName",
    "maxFileBytes",
    "note"
  ],
  "properties": {
    "note": {
      "type": "string"
    },
    "folderId": {
      "type": "integer"
    },
    "folderName": {
      "type": "string"
    },
    "maxFileBytes": {
      "type": "integer"
    }
  }
}
upload_designs annotations
{
  "title": "Upload designs",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
save_uploaded_design — Save uploaded design
Advertised by the server during the last successful anonymous check.

Saves one file from the upload card as a design. The card calls this.

save_uploaded_design input schema
{
  "type": "object",
  "required": [
    "folderId",
    "name",
    "base64"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The file's name."
    },
    "base64": {
      "type": "string",
      "description": "The file, base64."
    },
    "folderId": {
      "type": "integer",
      "description": "The folder id upload_designs answered with."
    }
  }
}
save_uploaded_design output schema
{
  "type": "object",
  "required": [
    "designId",
    "name"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "designId": {
      "type": "integer"
    }
  }
}
save_uploaded_design annotations
{
  "title": "Save uploaded design",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
list_folders — List folders
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the seller's design folders with how many designs each holds. parentId is the folder it sits in, null for a top-level one. New designs go in the first top-level folder unless create_products, create_designs or deep_search_designs is given a folderId.

list_folders input schema
{
  "type": "object",
  "properties": {}
}
list_folders annotations
{
  "title": "List folders",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
create_folder — Create folder
Advertised by the server during the last successful anonymous check.

Make a design folder, at the top level or inside another folder. Names must differ from the other folders in the same place; check list_folders first to reuse one that already exists. Then pass its id as folderId to create_products, create_designs or deep_search_designs.

create_folder input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "The folder name, e.g. the niche or the store it is for."
    },
    "parentId": {
      "type": [
        "integer",
        "null"
      ],
      "default": null,
      "description": "The folder id from list_folders to put it inside; leave it out for a top-level folder."
    }
  }
}
create_folder annotations
{
  "title": "Create folder",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

4 advertised

product_creation — Making your products

Advertised by the server during the last successful anonymous check.

The card shown while a seller's products are being made.

product_creation URI
ui://mydesigns/product-creation.html

MIME type: text/html;profile=mcp-app

design_upload — Upload your designs

Advertised by the server during the last successful anonymous check.

The card a seller uploads their own images in.

design_upload URI
ui://mydesigns/design-upload.html

MIME type: text/html;profile=mcp-app

deep_search_results — Designs

Advertised by the server during the last successful anonymous check.

The card that shows the designs a deep search or create_designs made.

deep_search_results URI
ui://mydesigns/deep-search-results.html

MIME type: text/html;profile=mcp-app

store_image_upload — Upload your store images

Advertised by the server during the last successful anonymous check.

The card a seller uploads their own logo, banners and favicon in.

store_image_upload URI
ui://mydesigns/store-image-upload.html

MIME type: text/html;profile=mcp-app

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
672 ms
95th percentile latency
672 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 672 ms · metadata changed · 34 tool(s), 4 resource(s), 0 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http mydesigns-mcp https://mcp.mydesigns.io/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add mydesigns-mcp --url https://mcp.mydesigns.io/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable mydesigns-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "mydesigns-mcp": {
      "url": "https://mcp.mydesigns.io/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "mydesigns-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.mydesigns.io/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start mydesigns-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "mydesigns-mcp": {
      "type": "http",
      "url": "https://mcp.mydesigns.io/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http mydesigns-mcp https://mcp.mydesigns.io/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.mydesigns.io/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "mydesigns-mcp": {
      "serverUrl": "https://mcp.mydesigns.io/mcp"
    }
  }
}

Let your agent find its tools

Find servers like MyDesigns MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run MyDesigns MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing