Product Aura MCP
An official MCP server that allows AI assistants to generate platform-ready listing and ad images for Amazon, Etsy, Shopify, TikTok Shop, and social media from a single product photo. It supports planning shots, generating images, editing via text, checking marketplace compliance, and managing products and brand kits.
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.
https://productaura.co/api/mcpWhat its tools do
34 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (10)
Can change data (24)
create_productanswer_factscreate_foldermove_productedit_productdelete_productstore_looksave_brand_kitdelete_brand_kitplan_image_setgenerate_image_setlocalize_image_setrecolour_image_setredo_imagecancel_image_setregenerate_imageedit_imagepick_image_versioncopy_image_to_setname_image_setrate_imagebuy_creditsauto_topupsend_feedback
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 productaura.co ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Generate Amazon, Etsy, or Shopify listing image sets from one photo
- Create social media ad creatives (feed and story formats)
- Edit product images using natural language instructions
- Check generated images against marketplace compliance rules
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- Product Aura 0.1.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 34 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- 1 advertised
{
"tools": {
"listChanged": true
},
"prompts": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
34 advertised
list_packs — List platform packs
Lists the platform packs (Amazon, A+, Etsy, Shopify, social ads) with their shots, credit cost per shot, the recipes per pack (shot or module lists per product type), the supported languages for text on images, and the prices: plans monthly or yearly (20% off, a year of credits up front) with their credits, brand kits and credit-pack discount, and one-time credit packs (valid 24 months). Free; no account needed.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"title": "List platform packs",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_credit_balance — Get credit balance
Returns the account e-mail and credit balance. 1 credit = one 2K image. Free.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"title": "Get credit balance",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_product — Create a product from photos or a product page
Creates a product from one or more photos (base64 JPG, PNG or WebP, up to 15 MB each; extra photos from other angles make the images more accurate) or from a product page link (Amazon, Etsy, Shopify or any shop: its photos and text are used), and analyses it: name, category, materials, colours, selling points, the closest category recipe, facts read from the label, and up to 5 missingFacts (each with a question and an example) to ask the person. Free. Returns the product id for answer_facts and plan_image_set, and analysis: when ok is false, tell the person the problem (e.g. a blurry photo) and offer better photos before planning. Example: {"product_url": "https://example.com/products/mug"}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"maxLength": 120,
"description": "Product name, if the person gave one"
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "What the person says about the product (guides the analysis)"
},
"product_url": {
"type": "string",
"maxLength": 2000,
"description": "A product page link, instead of photos"
},
"image_base64": {
"type": "string",
"minLength": 100,
"description": "The main photo, base64-encoded (a data: URL prefix is fine)"
},
"extra_images_base64": {
"type": "array",
"items": {
"type": "string",
"minLength": 100
},
"maxItems": 5,
"description": "More photos of the same product from other angles"
}
}
}{
"title": "Create a product from photos or a product page",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}answer_facts — Answer missing product facts
Saves product facts the person knows, keyed by missingFacts[].key from create_product (e.g. dimensions, pack-count, key-ingredients), or corrects a fact read from the label. Values are printed word for word on the images and reused for every later set; an empty value removes a fact. Never make values up: ask the person, or skip (images are then made without those numbers). Free. Returns the product with updated facts and missingFacts. Example: {"product_id": "…", "facts": {"dimensions": "12 × 8 × 4 in (30.5 × 20.3 × 10.2 cm)"}}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id",
"facts"
],
"properties": {
"facts": {
"type": "object",
"description": "Fact key → value exactly as the person gave it (numbers and units unchanged), up to 20",
"propertyNames": {
"type": "string",
"pattern": "^[a-z0-9-]{1,40}$"
},
"additionalProperties": {
"type": "string",
"maxLength": 1000
}
},
"product_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Answer missing product facts",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_products — List products
Lists the account’s products (newest first) with their image sets, category recipe, facts and missingFacts. Free.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"title": "List products",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_folders — List folders
Returns your folders in tree order, each with id, name, parentId and how many products it holds. Free. Use with move_product to organise products by store, platform or client.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"title": "List folders",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_folder — Create a folder
Creates a folder, optionally inside another one (parent_id from list_folders). Free. Returns the new folder with its id.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"parent_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Put the new folder inside this folder"
}
}
}{
"title": "Create a folder",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}move_product — Move a product to a folder
Puts a product (id from list_products) in a folder (id from list_folders), or takes it out of every folder when folder_id is left out. Free. Image sets stay with the product.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"folder_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Target folder; leave out for \"not in a folder\""
},
"product_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Move a product to a folder",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}edit_product — Edit what was read from a product
Changes a product’s name, kind, selling points (up to 5 short lines printed on images), facts (by key from list_products; an empty value removes one) or scene. Only the fields given change; later image sets use them. Free. Returns the product. Example: {"product_id": "…", "features": ["Set of 3", "Leak-proof lids"]}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"facts": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
},
"description": "Fact values by key; an empty value removes the fact"
},
"setting": {
"type": "string",
"maxLength": 120,
"description": "The scene for lifestyle images"
},
"category": {
"type": "string",
"maxLength": 60,
"description": "What kind of product it is, e.g. \"kitchen storage\""
},
"features": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 5,
"description": "Selling points, replacing the current ones"
},
"product_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Edit what was read from a product",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}delete_product — Delete a product
Deletes one product (id from list_products): it and its image sets leave the person’s account. Downloaded images are not affected. Free. Ask the person first. Returns the deleted id.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id"
],
"properties": {
"product_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Delete a product",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}store_look — Check or change the store look (Shopify)
Shows or changes the store look shopify-pack images are made in, so a whole catalogue matches: backdrop colour and type, accent colour, light, image shape, model notes and an optional reference photo from the person’s store. Each brand kit can have its own look (brand_kit_id); a brand without one, and a set without a brand, use the account’s look (own: false says a brand uses it). Call without fields to see it; send only the fields to change. Free. Returns the saved look. Example: {"brand_kit_id": "…", "backdrop_color": "#E8E2DA", "ratio": "4:5"}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"faces": {
"enum": [
"show",
"crop"
],
"type": "string",
"description": "show (default) or crop (never show faces)"
},
"light": {
"enum": [
"soft-studio",
"hard-flash",
"natural-daylight"
],
"type": "string",
"description": "soft-studio (default), hard-flash or natural-daylight"
},
"ratio": {
"enum": [
"auto",
"1:1",
"4:5",
"3:4",
"5:6"
],
"type": "string",
"description": "auto (default: the product type’s shape: square; 4:5 clothing, home, pet, gifts; 3:4 shoes), or 1:1, 4:5, 3:4 or 5:6 for every image"
},
"model_look": {
"type": "string",
"maxLength": 200,
"description": "How models look, e.g. \"women in their 20s, athletic\""
},
"skin_tones": {
"type": "string",
"maxLength": 200,
"description": "e.g. \"light, medium and deep\""
},
"accent_color": {
"anyOf": [
{
"type": "string",
"maxLength": 7
},
{
"type": "null"
}
],
"description": "Hex for small props and type; null for none"
},
"brand_kit_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "A brand kit from list_brand_kits; leave out for the account’s own look"
},
"backdrop_type": {
"enum": [
"seamless",
"textured",
"scene"
],
"type": "string",
"description": "seamless (default), textured or scene"
},
"backdrop_color": {
"type": "string",
"maxLength": 7,
"description": "Hex, e.g. #EDEDED (default)"
},
"remove_reference": {
"type": "boolean"
},
"reference_image_base64": {
"type": "string",
"minLength": 100,
"description": "A photo from the person’s store (JPG, PNG or WebP) to match: backdrop, light, crop"
}
}
}{
"title": "Check or change the store look (Shopify)",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}list_brand_kits — List brand kits
Lists the person’s brand kits, default first: name, website, palette (hex colours, main first), headingFont and bodyFont (Google Fonts names), voice, whether the logo is used, and links to the logo and the typeface sample image. Free. The default kit is used by every new image set unless plan_image_set names another kit or "none".
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"title": "List brand kits",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}save_brand_kit — Create, import or change a brand kit
Creates a brand kit, or changes one when brand_kit_id is given (only the fields sent change). With website and no brand_kit_id, the brand’s name, colours, fonts and logo are read from the site first; show the person what was found, including the font sample (fontSampleUrl), and save fonts_confirmed true once they say it matches. Brand kits put text in the brand’s fonts (shown to the image model as a typeface sample image) and designed elements in its colours. Free; the number of kits depends on the plan (1 without a plan, Creator 3, Pro 10, Business 50). Returns the saved kit (and, after an import, what was found). Example: {"website": "https://example.com"}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"maxLength": 60
},
"voice": {
"type": "string",
"maxLength": 200,
"description": "How the brand sounds, e.g. \"warm, playful, no jargon\""
},
"palette": {
"type": "array",
"items": {
"type": "string",
"maxLength": 7
},
"maxItems": 5,
"description": "Hex colours, main colour first, e.g. [\"#1A1A1A\", \"#E8DCC8\"]; [] removes them"
},
"website": {
"type": "string",
"maxLength": 300,
"description": "The brand’s website; on a new kit its brand is read from it"
},
"use_logo": {
"type": "boolean",
"description": "Put the logo, small, on images with a spot for it (poster, grid)"
},
"body_font": {
"anyOf": [
{
"type": "string",
"maxLength": 50
},
{
"type": "null"
}
],
"description": "Google Fonts family for small text, e.g. \"Inter\""
},
"is_default": {
"type": "boolean",
"description": "Use this kit for new image sets by default"
},
"logo_base64": {
"type": "string",
"minLength": 100,
"description": "The logo (PNG with transparency, JPG, WebP or SVG)"
},
"brand_kit_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "The kit to change; leave out to create a new one"
},
"heading_font": {
"anyOf": [
{
"type": "string",
"maxLength": 50
},
{
"type": "null"
}
],
"description": "Google Fonts family, e.g. \"Playfair Display\""
},
"fonts_confirmed": {
"type": "boolean",
"description": "The person checked the fonts and their sample: they match"
},
"font_sample_base64": {
"type": "string",
"minLength": 100,
"description": "A picture of a paragraph set in the brand’s font, for fonts not on Google Fonts"
}
}
}{
"title": "Create, import or change a brand kit",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}delete_brand_kit — Delete a brand kit
Deletes one brand kit (id from list_brand_kits). Image sets made with it keep their images. Free. Ask the person first.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"brand_kit_id"
],
"properties": {
"brand_kit_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Delete a brand kit",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}plan_image_set — Plan an image set
Creates an image set for a product and platform pack and returns its shot plan, written for this product (takes up to a minute): each shot with what it will show, why it sells and its credit cost; shots that do not fit the product (unfit says why) are left out of the default shots. Also the current balance and the pack’s missingFacts. Every pack but social follows the product’s recipe for that pack (shopify also uses the store look, see store_look; amazon-aplus takes aplus_format and aplus_text); shots listing withoutFacts are made without numbers (answer_facts first to add them), and plan.note says so. Free; nothing is generated yet. locale sets the language of text on the images. The person’s default brand kit is used unless brand_kit_id names another or "none". Example: {"product_id": "…", "pack": "amazon-aplus", "aplus_text": "fields"}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"product_id",
"pack"
],
"properties": {
"pack": {
"enum": [
"amazon",
"amazon-aplus",
"etsy",
"shopify",
"tiktok-shop",
"social",
"instagram-grid",
"storyboard"
],
"type": "string",
"description": "Platform pack: amazon, amazon-aplus, etsy, shopify, tiktok-shop (square images for every TikTok Shop region) or social; or a \"more formats\" pack: instagram-grid (9 organic posts) or storyboard (a video storyboard sheet)"
},
"locale": {
"type": "string",
"maxLength": 5,
"description": "Language of text on the images, e.g. en, de, fr, ja (default: the brand’s, else the account’s, else en)"
},
"model_age": {
"enum": [
"any",
"20s",
"30s",
"40s",
"50s+"
],
"type": "string",
"description": "Clothing: the model’s age (default any)"
},
"aplus_text": {
"enum": [
"image",
"fields"
],
"type": "string",
"description": "amazon-aplus only: image (text on the images, default) or fields (calm empty copy zones; the text comes back per image as copy, to paste into Amazon’s A+ text fields)"
},
"model_body": {
"enum": [
"any",
"slim",
"average",
"curvy",
"plus-size"
],
"type": "string",
"description": "Clothing: the model’s build (default any)"
},
"model_skin": {
"enum": [
"any",
"light",
"medium",
"deep"
],
"type": "string",
"description": "Clothing: the model’s skin tone (default any)"
},
"product_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"aplus_format": {
"enum": [
"basic",
"premium"
],
"type": "string",
"description": "amazon-aplus only: basic (970 × 600 and 970 × 300, open to every brand; default) or premium (1464 × 600 modules, only for brands Amazon approved for Premium A+)"
},
"brand_kit_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "none"
}
],
"description": "A brand kit from list_brand_kits, or \"none\"; default: the person’s default kit"
}
}
}{
"title": "Plan an image set",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}generate_image_set — Generate images
Spends credits and starts making the images of an image set (all or nothing). shots: shot keys from the plan; leave empty for the default shots. Also adds images to a finished set: pass keys from get_image_set imageSet.moreShots (kinds of images the set does not have yet). Returns at once; images take about 1–3 minutes. Then call get_image_set.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"image_set_id"
],
"properties": {
"note": {
"type": "string",
"maxLength": 300,
"description": "The person's own wish for every image of the set, e.g. \"autumn mood, warm wood and dried leaves\": it shapes the scenes, never the product, and adds no words. Free."
},
"notes": {
"type": "object",
"description": "The person's own wish per image, by shot key, e.g. {\"social-in-use\": \"a beagle eating from a red bowl\"}: it shapes the scene, props, angle or mood, never the product, and adds no words. Free.",
"propertyNames": {
"type": "string",
"maxLength": 60
},
"additionalProperties": {
"type": "string",
"maxLength": 300
}
},
"shots": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Shot keys to make; default: the plan’s default shots"
},
"rounds": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "Versions of each image to make (default 1), to pick the best with pick_image_version; the main image on white is made once. Cost multiplies."
},
"also_locales": {
"type": "array",
"items": {
"type": "string",
"maxLength": 5
},
"maxItems": 29,
"description": "More image languages, e.g. [\"de\", \"fr\"]: made automatically once these images are done, each as its own set (1 credit per image with text per language; others copied free). Check the cost with estimate_cost and locales first."
},
"image_set_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"invent_angles": {
"type": "boolean",
"description": "Make other-angle shots (back, side) even when the product has only one photo; the model then guesses those sides (default true)"
},
"translate_facts": {
"type": "boolean",
"description": "Translate the product facts printed on the images into the set’s language, numbers and units unchanged (default true; false prints them exactly as saved)"
}
}
}{
"title": "Generate images",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}localize_image_set — Translate an image set into other languages
Makes a finished image set in other languages: the same images with only the text on them translated (numbers, units and names kept), for example an amazon.com set for amazon.de and amazon.fr. Each language becomes its own image set. Images with text cost 1 credit each per language (an edit); images without text are copied free. Call with dry_run true first and tell the person the cost; then call without it (spends credits). Returns the new image set ids; follow them with get_image_set. Example: {"image_set_id": "…", "locales": ["de", "fr"], "dry_run": true}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"image_set_id",
"locales"
],
"properties": {
"dry_run": {
"type": "boolean",
"description": "Only return the cost; nothing is made or spent"
},
"locales": {
"type": "array",
"items": {
"type": "string",
"maxLength": 5
},
"maxItems": 5,
"minItems": 1,
"description": "Image languages to make, e.g. [\"de\", \"fr\"] (codes from list_packs imageLanguages)"
},
"image_set_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Translate an image set into other languages",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}recolour_image_set — Make an image set in other product colours
Makes a finished image set’s main image in other colours of the product, for colour variations and swatches (stores show one image per colour; all_images true makes every image, shot for shot): only the product’s colour changes, the scene and text stay. Each colour becomes its own image set. Images with the product cost 1 credit each per colour (an edit); images without it are copied free. A hex code or a photo of the product in that colour (photo_base64) makes the colour more exact. Call with dry_run true first and tell the person the cost; then call without it (spends credits). Returns the new image set ids; follow them with get_image_set. Example: {"image_set_id": "…", "colours": [{"name": "Navy", "hex": "#1F3A5F"}], "dry_run": true}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"image_set_id",
"colours"
],
"properties": {
"colours": {
"type": "array",
"items": {
"type": "object",
"properties": {
"hex": {
"type": "string",
"maxLength": 7,
"description": "Its hex code, e.g. \"#8A9A5B\""
},
"name": {
"type": "string",
"maxLength": 40,
"description": "The colour as the seller names it, e.g. \"Sage green\" (or send only hex)"
},
"note": {
"type": "string",
"maxLength": 300,
"description": "How the colour is applied, e.g. \"only the body; the zip stays silver\""
},
"photo_base64": {
"type": "string",
"description": "A photo of the product in this colour (JPEG/PNG/WebP)"
}
}
},
"maxItems": 5,
"minItems": 1
},
"dry_run": {
"type": "boolean",
"description": "Only return the cost; nothing is made or spent"
},
"all_images": {
"type": "boolean",
"description": "Every image of the set in each colour, not only the main image (default false)"
},
"image_set_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Make an image set in other product colours",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}estimate_cost — Estimate the credit cost
Returns what an image set would cost before anything is spent: its shots (default: the plan’s ticked ones), or with locales the cost of translating the finished set, or with colours the cost of its colour versions. Also returns the balance. Free. Tell the person the cost before generate_image_set, localize_image_set or recolour_image_set. Example: {"image_set_id": "…", "shots": ["main-white", "lifestyle"]}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"image_set_id"
],
"properties": {
"shots": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"description": "Shot keys from the plan; default: the ticked ones"
},
"colours": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"hex": {
"type": "string",
"maxLength": 7
},
"name": {
"type": "string",
"maxLength": 40,
"minLength": 1
}
}
},
"maxItems": 5,
"description": "Instead: the cost of these colour versions"
},
"locales": {
"type": "array",
"items": {
"type": "string",
"maxLength": 5
},
"maxItems": 29,
"description": "Instead: the cost of translating into these"
},
"image_set_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Estimate the credit cost",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_credit_history — Credit history
Lists the latest credit changes, newest first: images made, refunds for failed or cancelled images, credits bought or added, expiries. Free. Use it to answer "where did my credits go?".
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "How many entries (default 50)"
}
}
}{
"title": "Credit history",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}redo_image — Redo an image for free (wrong product or text)
Makes a free new version of an image whose product came out different (shape, label, colour, logo) or whose text is wrong. Limits: 3 per image and a monthly allowance per account; outside them use regenerate_image or edit_image (1 credit). Free. Returns the new image id. Ask the person what is wrong and pass it as note. Example: {"image_id": "…", "reason": "product-changed", "note": "the label says 250 ml, it should be 500 ml"}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"image_id",
"reason",
"note"
],
"properties": {
"note": {
"type": "string",
"maxLength": 300,
"minLength": 10,
"description": "What exactly is wrong, in the person’s words, e.g. \"the cap is silver, it should be gold\""
},
"reason": {
"enum": [
"product-changed",
"wrong-text"
],
"type": "string",
"description": "What is wrong"
},
"image_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Redo an image for free (wrong product or text)",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}cancel_image_set — Stop the waiting images of a set
Stops the images of an image set that are still waiting in the queue and refunds their credits in full. Images already being made finish as usual. Free. Returns how many were cancelled and the credits refunded.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"image_set_id"
],
"properties": {
"image_set_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Stop the waiting images of a set",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}get_image_set — Get image set status and images
Returns each image’s status (queued, generating, done, failed), its text check (passed, retried, differs, not-checked; checking while it runs), small previews of finished images, and download links valid for 15 minutes. Free. Call again until done is true. A shot can get one extra version by itself: a free retry when the text on the first one did not match.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"image_set_id"
],
"properties": {
"previews": {
"type": "boolean",
"description": "Include image previews (default true)"
},
"image_set_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Get image set status and images",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}check_marketplace_spec — Check an image against Amazon main image rules
Checks one image (base64) against Amazon’s published main image rules: pure white background (RGB 255, 255, 255), product fills 85% or more, whole product in frame, no border, 500–10,000 px, zoom size, file type. Free; no account needed. Returns pass, warn or fail per check with the measured value.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"image_base64"
],
"properties": {
"image_base64": {
"type": "string",
"minLength": 100,
"description": "The image file as base64 (JPEG, PNG, GIF, WebP or TIFF), up to 15 MB"
}
}
}{
"title": "Check an image against Amazon main image rules",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}check_image_set — Check images against platform rules
Checks the finished images of a set against the platform’s published image rules (Amazon main image, sizes, formats, Etsy’s 1 MB warning, Shopify limits). Free. Returns pass, warn or info lines per image and for the whole set.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"image_set_id"
],
"properties": {
"image_set_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Check images against platform rules",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}regenerate_image — Make an image again
Makes one image of a set again with the same prompt, as 1–5 new versions next to the old ones, to pick the best (pick_image_version). Each version costs the original image’s credits (usually 1). Not for the main image on white (a cut-out of the photo); use edit_image for that. Returns the new generation ids; then call get_image_set.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation_id"
],
"properties": {
"versions": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "New versions to make at once (default 1)"
},
"generation_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Image id from get_image_set"
}
}
}{
"title": "Make an image again",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}edit_image — Edit an image with a sentence
Changes one finished image with a short instruction, e.g. "warmer light, add a marble counter" or "make the headline say Leak-proof". Keeps the product and everything else the same. The result is a new version; the old one stays. Costs the same credits as one image (usually 1); explicit, hateful or misleading changes are refused at no cost. Then call get_image_set.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation_id",
"instruction"
],
"properties": {
"versions": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "Variations to make at once (default 1)"
},
"instruction": {
"type": "string",
"maxLength": 500,
"minLength": 3,
"description": "What to change, in one or two sentences"
},
"generation_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Image id from get_image_set"
}
}
}{
"title": "Edit an image with a sentence",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}pick_image_version — Pick the version of an image a set uses
Makes this version (a generation id from get_image_set) the one its set uses for that image: the ZIP, downloads, checks and translations use it. Every version stays stored. Free. Example: {"generation_id": "…"}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation_id"
],
"properties": {
"generation_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Pick the version of an image a set uses",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}copy_image_to_set — Copy an image into another set
Copies a finished image into another image set of the same product, platform and language (for example to build variant B of an A/B test), as that set’s picked version of the image. Free: the same file. Example: {"generation_id": "…", "image_set_id": "…"}
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation_id",
"image_set_id"
],
"properties": {
"image_set_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"generation_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Copy an image into another set",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}name_image_set — Name an image set
Gives an image set a name, e.g. "Variant B: warm light", for A/B tests; an empty name removes it. The set code (PA-…) stays in file names. Free.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"image_set_id",
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 80
},
"image_set_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Name an image set",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}rate_image — Rate an image
Thumbs up (1) or down (-1) on one generated image, with optional reasons: product-changed, wrong-text, not-realistic, bad-composition, wrong-style, low-quality. Helps improve the images. Free.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"generation_id",
"rating"
],
"properties": {
"rating": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": -1
}
]
},
"reasons": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 6
},
"generation_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}{
"title": "Rate an image",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}buy_credits — Get a payment link for credits
Returns a payment link for a credit pack (pack_s 50, pack_m 150, pack_l 500 credits) or a plan (creator, pro, business; month or year). The person opens it, confirms on a Product Aura page and pays in Stripe; nothing is charged by this tool. Works without an account too: then it returns a link per pack, and the page after payment shows an API key.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"pack": {
"enum": [
"pack_s",
"pack_m",
"pack_l"
],
"type": "string"
},
"plan": {
"enum": [
"creator",
"pro",
"business"
],
"type": "string"
},
"interval": {
"enum": [
"month",
"year"
],
"type": "string"
}
}
}{
"title": "Get a payment link for credits",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}auto_topup — Check or change auto top-up
Shows or changes auto top-up (off by default): when the balance falls below `threshold` credits, the card saved for auto top-up buys `pack` automatically, at most `monthly_max` times a month. Call without arguments to see the status. Turning it on without that card (or with `new_card: true`) returns a Stripe link where the person saves one and sees the agreement (nothing is charged then). Ask the person before turning it on. Free; each top-up is a normal pack purchase. While `available` is false it is paused for everyone: turning it on returns `auto_topup_paused`.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"pack": {
"enum": [
"pack_s",
"pack_m",
"pack_l"
],
"type": "string"
},
"enabled": {
"type": "boolean"
},
"new_card": {
"type": "boolean",
"description": "true: return a Stripe link to replace the saved card"
},
"threshold": {
"anyOf": [
{
"type": "number",
"const": 5
},
{
"type": "number",
"const": 10
},
{
"type": "number",
"const": 20
},
{
"type": "number",
"const": 50
},
{
"type": "number",
"const": 100
}
]
},
"monthly_max": {
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
},
{
"type": "number",
"const": 5
},
{
"type": "number",
"const": 10
}
]
}
}
}{
"title": "Check or change auto top-up",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}send_feedback — Send feedback
Sends feedback to the Product Aura team (what worked, what did not, what is missing). Free.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"message"
],
"properties": {
"message": {
"type": "string",
"maxLength": 5000,
"minLength": 1
}
}
}{
"title": "Send feedback",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}Prompts
1 advertised
make_listing_images — Make listing images for a product
Guided flow: from one product photo to a complete set of listing images for a platform.
- platform
- amazon, etsy, shopify, tiktok-shop, social or amazon-aplus
- language
- Language of text on the images, e.g. en, de
Resources
Not advertised
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.
- 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
- 859 ms
- 95th percentile latency
- 859 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 859 ms · metadata changed · 34 tool(s), 1 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http product-aura-mcp-productaura https://productaura.co/api/mcpCodex
codex mcp add product-aura-mcp-productaura --url https://productaura.co/api/mcpCursor
{
"mcpServers": {
"product-aura-mcp-productaura": {
"url": "https://productaura.co/api/mcp"
}
}
}Cline
{
"mcpServers": {
"product-aura-mcp-productaura": {
"type": "streamableHttp",
"url": "https://productaura.co/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"product-aura-mcp-productaura": {
"type": "http",
"url": "https://productaura.co/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http product-aura-mcp-productaura https://productaura.co/api/mcpClaude Desktop
https://productaura.co/api/mcpWindsurf
{
"mcpServers": {
"product-aura-mcp-productaura": {
"serverUrl": "https://productaura.co/api/mcp"
}
}
}Let your agent find its tools
Find servers like Product Aura MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other design servers
Do you run Product Aura 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.