update_product
update_product MCP tool: rename a product of an e-commerce project, change the brand that makes it or its product category, or dismiss its merge suggestion. Inputs, response shape, error codes, JSON example.
Updated 2026-10-08
update_product corrects one product of an e-commerce project: its name, the brand that makes it, its product category, or the merge suggestion the AI attached to it.
The product keeps its raw names (aliases), so its whole history stays attached whatever you change.
When to use
Use it when a row of list_products is right but badly labeled: a range name to tidy ("GUM Trav-Ler Brossettes" into "Trav-Ler"), a product attributed to the wrong brand, a product sorted in the wrong category, or a mergeIntoId pointing at a product that is not a duplicate.
Changing the brand is a human decision the AI respects: the product's raw names are locked, and the automatic grouping of duplicates no longer moves them. The same goes for the category: the AI sorts products after each scan, but never overwrites a category set here.
Input
| Field | Type | Default | Description |
|---|---|---|---|
projectId |
string (CUID) | required | Project of the product. |
productId |
string (CUID) | required | Product id from list_products. |
name |
string (1-200) | - | New name of the product. |
competitorId |
string (CUID) or null |
- | Brand that makes the product: a competitor id, or null for the project's own brand. |
category |
string (max 60) or null |
- | Product category ("Brossettes interdentaires"), unit of get_product_share_of_voice. null clears it and lets the AI sort the product again. |
dismissMergeSuggestion |
boolean | - | true clears mergeIntoId: the product is not a duplicate. |
Set at least one of name, competitorId, category or dismissMergeSuggestion.
Response
{ "success": true, "productId": "clpr1..." }
Errors:
{ "success": false, "error": "product_exists" }
product_not_found: unknown id or another project.brand_not_found: thecompetitorIdis not a competitor of the project, or it was rejected.invalid_name: the name holds nothing but the brand and variant attributes (sizes, colors, packs).product_exists: the brand already has a product with the same name once variants are set aside. Merge the two withmerge_productsinstead.
Tips and patterns
- Name products after the range, not a variant: "Trav-Ler", not "Trav-Ler 0,9 mm Orange". Variants are folded into the range anyway.
- A
mergeIntoIdthat is right? Usemerge_products. Wrong?dismissMergeSuggestion: true. - To move a product to your own brand, pass
competitorId: null. - Reuse a category exactly as
list_productsreturns it incategory. A new spelling creates a separate category in the share of voice.
Related tools
list_products: every product of the projectmerge_products: merge duplicatessplit_product: move raw names to a new productbulk_update_product_status: confirm or reject products