Product Catalog
Manage products, variants, and categories for your online store or any catalog-style listing. Prices in cents, category nesting, variant options, fulltext search.
Endpoints (19)
List products with optional filters. Returns products with category info. Paginated. Set include_variant_skus=true for a lightweight per-item variant_skus array (client-side SKU search indexes).
No input parameters required.
Get a single product with its variants, configurable properties (#822), and category in one response. The properties array carries the value ids used by resolve-variant.
No input parameters required.
Create a new product. Slug auto-generated from name if omitted. Price in cents (1999 = €19.99).
No input parameters required.
Update an existing product. Only send fields you want to change.
No input parameters required.
Delete a product and all its variants (CASCADE).
No input parameters required.
Search on product name, description, product SKU and variant SKUs. SKU matching is case-insensitive and ignores spaces and hyphens. Default: only active products.
No input parameters required.
Bulk import products: create new or update existing (matched by SKU). Up to 500 items per call. Each item must have sku; new products also need name + price_cents. Returns per-item results with status (created/updated/failed) and aggregate summary (by_action, by_error_type). AI clients MUST inspect result.summary — envelope.success: true does NOT mean all items succeeded; check result.failed and result.summary.by_error_type.
No input parameters required.
Bulk import variants: create new or update existing. Each item carries its own product_id (send all items with the same product_id to fill one product, or mix products in one call). Up to 500 items per call. Match key per item: sku (unique per PRODUCT, not per website) if present, otherwise the options combination (combo_key) within the product. The same sku MAY be used on variants of different products (one physical article sold standalone and inside a bundle); that is reported as a warning, never refused. Each item needs sku OR options; new variants also need price_cents. Returns per-item results with status (created/updated/failed) and aggregate summary (by_action, by_error_type, and by_warning_type when present). AI clients MUST inspect result.summary, not envelope.success alone, for item-level outcomes: check result.failed and result.warned, then results[].error and results[].warnings. Both the warned counter and by_warning_type are omitted when there is nothing to report.
No input parameters required.
List all categories with product counts. Returns tree structure by default.
No input parameters required.
Create a product category. Supports nesting via parent_id.
No input parameters required.
Update an existing category.
No input parameters required.
Delete a category. Products in this category get category_id = NULL.
No input parameters required.
Add a variant to a product. Auto-sets product type to variable. A sku must be unique within its product; the same sku on a variant of another product is allowed and not an error.
No input parameters required.
Update a product variant. Returns VARIANT_NOT_FOUND (404) when the variant does not exist in this website. Renaming a sku onto another variant of the SAME product is refused; onto a variant of a different product it is allowed.
No input parameters required.
Delete a variant. Auto-resets product type to simple if last variant.
No input parameters required.
Define or replace a product's configurable property schema (e.g. maat: [A4, A3], kleur: [zwart, RAL]). Declarative: send the full schema, the server diffs against existing rows. Returns properties and values WITH their ids — use those ids in create-variant (options) and on the storefront selector. Properties/values left out are removed (blocked if a value is still used by a variant).
No input parameters required.
Resolve a single variant (and its price) from a selected combination of property value ids. One indexed lookup on combo_key — does not fetch all variants. Returns the variant with price_cents, sku, stock_quantity. 404 if no variant matches the combination.
No input parameters required.
Progressive disclosure for the variant selector: given the value ids already chosen, returns per remaining property the value ids still reachable. Call with an empty or partial selection to drive dependent dropdowns.
No input parameters required.
Upload an image and link it to a product in one call. The product must exist — returns 404 if not found. Image is stored on the public CDN, slug is auto-generated from product slug + filename. The product images array is updated automatically (append or insert at position). Accepts base64 with optional data URI prefix (auto-stripped). Response includes the updated images array. Browser: adminCall("product-catalog", "upload-product-image", { product_id: 42, filename: "front.jpg", content: base64String }). Max 5MB per image. Allowed: jpg, jpeg, png, gif, webp, svg.
No input parameters required.
MCP Tool Names
When using this integration through an AI assistant (Claude, ChatGPT, Cursor, etc.), the endpoints are available as MCP tools:
| Endpoint | MCP Tool Name |
|---|---|
| list-products | product-catalog_list_products |
| get-product | product-catalog_get_product |
| create-product | product-catalog_create_product |
| update-product | product-catalog_update_product |
| delete-product | product-catalog_delete_product |
| search-products | product-catalog_search_products |
| bulk-upsert-products | product-catalog_bulk_upsert_products |
| bulk-upsert-variants | product-catalog_bulk_upsert_variants |
| list-categories | product-catalog_list_categories |
| create-category | product-catalog_create_category |
| update-category | product-catalog_update_category |
| delete-category | product-catalog_delete_category |
| create-variant | product-catalog_create_variant |
| update-variant | product-catalog_update_variant |
| delete-variant | product-catalog_delete_variant |
| set-product-properties | product-catalog_set_product_properties |
| resolve-variant | product-catalog_resolve_variant |
| list-variant-options | product-catalog_list_variant_options |
| upload-product-image | product-catalog_upload_product_image |
Website