MCP App Store
by KeenEthics

Overview

Connect ChatGPT to your Nuvemshop store and manage your business using natural language. Search, create, and edit products and categories, check orders, customers, coupons, promotions, shipping methods, and payment options — all from a single conversation. Perfect for store owners who want to run their e-commerce without leaving the chat.

Tools

assign_categories

ChatGPT
Assign one or more categories to one or more products in the store catalog. When to use: assigning known category IDs to known product IDs, for any number of products and categories in a single call — this is the dedicated path for category assignment. When NOT to use: names are not accepted, only numeric IDs. Category names must be resolved to category IDs with list_categories, and product names to product IDs, before calling this tool. It also only adds assignments — it cannot remove a category from a product. Constraints: assigning a product to a subcategory also automatically assigns it to that subcategory's parent category. Re-assigning an already-assigned category is idempotent — no error, no duplicate. Example: assign_categories(product_ids=[101, 102], category_ids=[7]).

bulk_delete_products

ChatGPT
Delete multiple products from the store catalog in a single operation. When to use: removing 2 or more known product IDs in a single operation. When NOT to use: this is a permanent, irreversible deletion of every id passed, and it does not resolve names — ids must be known and confirmed beforehand. Returns per-product results: which were deleted and which failed. Constraints: maximum 20 product IDs per request; product IDs must come from a prior search_products or list_products call, never guessed. Example: bulk_delete_products(product_ids=[101, 102, 103]).

create_category

ChatGPT
Create a new category in the store catalog. When to use: adding a new root or subcategory to the catalog's category hierarchy. When NOT to use: to rename, reparent, or reorder an existing category — no tool supports these operations today; changes like that must be made in the admin UI's Categories section. This tool only creates. The 'name' field is required and must be an object with language codes as keys (e.g. {"es": "Hot Sale 2026"} or {"pt": "Roupas"}). At minimum the store's primary language must be provided. Optional fields: - parent_id: integer ID of the parent category; omit or pass null to create a root category. - visible: whether the category appears in the storefront menu (defaults to true). Example call: name={"es": "Camperas Invierno 2026"}, parent_id=null, visible=true Constraints: - Never invent a parent_id — resolve any mentioned parent category name to its ID with list_categories first. - list_categories is also the way to check for an existing sibling with the same name under the intended parent before creating a duplicate. - Whether the category should be a root category or a subcategory is not inferable from a bare category name — it must be resolved before calling. When visible=true (the default), the category appears immediately in the storefront navigation.

create_coupon

ChatGPT
Create a new discount coupon — a code customers apply at checkout. When to use: setting up a percentage, absolute, or free-shipping coupon code. When NOT to use: a coupon always requires the customer to enter its code at checkout. This tool cannot create a discount that applies automatically. Constraints: - code must be unique and alphanumeric. - value is required for 'percentage' and 'absolute' types; omit it for 'shipping'/'trigger' types. - categories and products restrictions are mutually exclusive — never combine them in one call. - only_cheapest_shipping only has an effect for 'shipping' type coupons. - products must be product IDs, not variant IDs — a product can have multiple variants, each with its own distinct ID; passing variant IDs is rejected as invalid. - The coupon is created active: this tool takes no valid parameter, so an inactive coupon cannot be created in one step — it must be deactivated afterwards by a separate update. The coupon is immediately active and usable by customers at checkout upon creation. Example: create_coupon(code="SUMMER2026", type="percentage", value=20).

create_product

ChatGPT
Create a new product in the store catalog. When to use: the merchant wants a brand-new catalog entry, with or without variants, images, or SEO fields filled in at creation time. When NOT to use: this tool only creates. It cannot modify an existing product, and it takes no product_id — calling it for a product that already exists adds a second, duplicate entry rather than updating the original. The 'name' field is required and must be an object with language codes as keys (e.g. {"es": "Camiseta", "pt": "Camiseta"}). At minimum the store's primary language must be provided. Optional fields: - description: localized descriptions (same format as name) - published: whether the product is visible in the store (default false) - free_shipping: whether the product qualifies for free shipping - requires_shipping: whether the product is physical (true) or digital (false) - brand: brand name - seo_title: localized SEO title object (up to 70 chars per locale) - seo_description: localized SEO description object (up to 320 chars per locale) - tags: list of tags (e.g. ["electronics", "featured"]) - categories: list of category IDs (use list_categories to discover them) - attributes: list of up to 3 variant attribute names as localized objects (e.g. [{"es": "Color"}, {"es": "Talla"}]) - video_url: HTTPS URL to a product video - variants: list of variant objects with price, stock, sku, weight, dimensions, etc. - images: list of image objects with 'src' (URL) and optional 'position' Each variant can have: price, promotional_price, cost, weight, width, height, depth, stock, stock_management, sku, barcode, mpn, visible, position, image_id, and values. All variant fields are optional. Price is a decimal string (e.g. "29.99"); omit it (or pass null) to create the variant without a price — the storefront will render those as "Consultar". Stock accepts either a non-negative integer or "" for infinite stock. IMPORTANT — Variants and attributes: When providing multiple variants you MUST also provide 'attributes' at the product level to define the variant axes (e.g. [{"es": "Talla"}]). Each variant MUST include 'values' with a unique combination that matches the attributes list in length and order. The API rejects variants whose values are repeated or missing when attributes are defined. Example with variants: attributes: [{"es": "Talla"}] variants: [ {"price": "29.99", "stock": 10, "values": [{"es": "S"}]}, {"price": "29.99", "stock": 5, "values": [{"es": "M"}]} ] Example with two attribute axes: attributes: [{"es": "Color"}, {"es": "Talla"}] variants: [ {"price": "39.99", "stock": 3, "values": [{"es": "Rojo"}, {"es": "S"}]}, {"price": "39.99", "stock": 7, "values": [{"es": "Rojo"}, {"es": "M"}]}, {"price": "39.99", "stock": 5, "values": [{"es": "Azul"}, {"es": "S"}]} ] If no variants are provided, a single default variant is created. If published=true, the product becomes immediately visible to buyers on the live storefront.

create_promotion

ChatGPT
Create a new promotion — a discount applied automatically to qualifying purchases, with no customer-entered code. When to use: percentage discounts, buy-X-pay-Y deals, or progressive discounts that should apply automatically, scoped to all products, specific products, or specific categories. When NOT to use: a promotion always applies automatically to qualifying purchases. This tool cannot create a code-based discount, and it accepts no coupon code. Constraints: - promotion_type and scope_type are always required. - When scope_type is 'products' or 'categories', scope_value is required and must contain IDs matching that scope_type (product IDs or category IDs, not a mix); these IDs must already be resolved — this tool does not resolve product/category names to IDs. - For a BuyXPayY promotion_type, both buy and pay are required. - For a '%off' promotion_type, discount_value is required (e.g. 20 for 20% off). - Omitting begin_date/end_date makes the promotion always active; dates make it time-limited. The promotion is immediately active and automatically applied to qualifying purchases upon creation. Example: create_promotion(promotion_type="%off", scope_type="products", scope_value=[101, 102], discount_value=15).

delete_category

ChatGPT
Delete a category from the store catalog by its ID. When to use: removing exactly one category, once its numeric ID is known (e.g. resolved via list_categories). When NOT to use: to rename or reparent a category — this tool only deletes; no tool supports renaming or moving a category. To remove more than one category, call this tool once per category — there is no bulk variant. Resolving the target: - Merchants talk about categories by name, never by ID. Call list_categories first to resolve the name to an ID; never ask the merchant for the ID. - If multiple categories share the same name, disambiguate with the merchant before calling. Cascade behavior (from the catalog backend): - All subcategories of the deleted category are deleted RECURSIVELY. - Products assigned to the deleted category (or to any deleted subcategory) LOSE those category assignments, but the products themselves are NOT deleted. Safety: - When the target has subcategories or products assigned, CONFIRM with the merchant before calling.

delete_coupon

ChatGPT
Permanently delete a coupon by its code. After deletion, the code can no longer be used by customers at checkout. When to use: the coupon should be permanently removed, not just paused. When NOT to use: this deletion is permanent and cannot be undone. It is not a way to pause a coupon — a coupon that may be needed again should be deactivated instead, which is a separate update that keeps the record. Example: delete_coupon(code="WINTER2025").

delete_product

ChatGPT
Delete a single product from the store catalog by its ID. When to use: removing exactly one product, once its numeric id is known (e.g. from a prior search_products or list_products call). When NOT to use: this tool deletes exactly one product per call and takes a single product_id, so it is not the way to remove a batch. Never guess a product_id; it must come from a prior search or list result, never from the merchant's own claim of an ID. Returns errors if the product could not be found or deleted.

delete_promotion

ChatGPT
Permanently delete a promotion by its ID. After deletion it is no longer active and will not apply to any purchases. When to use: the promotion should be permanently removed, not just paused. When NOT to use: this deletion is permanent and cannot be undone. It is not a way to pause a promotion — one that may be needed again should be deactivated instead, which is a separate update that keeps the record. Example: delete_promotion(promotion_id=12345).

get_coupon_details

ChatGPT
Get full details of one coupon by its code — discount type, value, usage statistics, restrictions, and date range. When to use: the coupon code is already known (e.g. "is VERANO2026 still active?", "what are BIENVENIDO's conditions?"). When NOT to use: this requires the exact, complete coupon code. It performs no partial matching and takes no filters, so it cannot search or browse. Example: get_coupon_details(code="SUPERCOUPON15").

get_cube_schema

ChatGPT
Retrieve schema information (available measures, dimensions, segments) for one or more Cube.js cubes. When to use: always call this before running any data query against a cube whose schema you have not already fetched this session — measure, dimension, and segment names are cube-specific, and querying with an unverified name produces a validation error rather than a helpful result. If you don't know the exact cube name, call list_cubes first. When NOT to use: this tool executes no data query and returns no rows or aggregates — it only describes what is queryable on the named cubes. Returns a simplified schema containing: - measures: Aggregations available (count, sum, avg, etc.) - dimensions: Fields to group by or filter on - segments: Pre-defined filters that can be applied Each member includes its name and description to help you understand what data is available and how to construct valid queries.

get_free_shipping_promotions

ChatGPT
Get free shipping promotions with their shipping conditions, minimum purchase requirements, applicable categories, and shipping methods. When to use: the request is specifically about free shipping — e.g. checking minimum purchase thresholds or which categories qualify. When NOT to use: this returns free-shipping promotions only. Percentage, absolute, and buy-X-pay-Y promotions are not included, so it is not a view of every active promotion. Returns up to 20 free shipping promotions.

get_payment_methods

ChatGPT
Retrieve available payment methods for the store — either the store's general configuration, or the methods specific to one cart. When to use: called without cart_id, for the store's general payment methods; called with cart_id and cart_hash together, for the methods applicable to that specific cart. When NOT to use: method_type filtering only applies when cart_id is NOT provided — passing both has no effect on the cart-scoped result. Constraints: cart_id requires cart_hash to also be provided — passing one without the other raises a validation error. cart_hash must be the exact 40-character hexadecimal SHA1 hash returned when the cart was created or retrieved; a malformed hash is rejected before the cart lookup happens. Parameters: - cart_id: ID of the cart (requires cart_hash when provided) - cart_hash: Hash of the cart for validation (required when cart_id is provided) - method_type: Filter by specific payment method type - language: Language for payment method names - billing_country: Billing country to filter available methods IMPORTANT: When getting payment methods for a cart, both cart_id and cart_hash are required.

get_promotions

ChatGPT
Get all active promotions in the store — product-specific, category-specific, and store-wide, including free shipping ones. When to use: a general overview of every active promotion, regardless of type. When NOT to use: this is an unfiltered overview. It takes no parameters, so it cannot narrow results to specific products, and it does not expand free-shipping conditions (minimum purchase, applicable categories, shipping methods) — those details are not in this response. Returns up to 50 promotions in a simple, organized format.

get_promotions_by_products

ChatGPT
Get promotions applicable to a specific set of products (either promotions scoped directly to those products, or general store-wide promotions). When to use: the caller already knows which products it cares about — e.g. items in a cart, or a product being viewed — and wants only the promotions relevant to them. When NOT to use: this requires product_ids — it cannot return the store's promotions in general, and it does not resolve product names to ids. Constraints: limit has no default and must always be passed explicitly (1-20).

get_shipping_methods

ChatGPT
Get shipping methods and options for a store — either the store's general configuration, or real shipping costs/delivery estimates for a specific cart. When to use: called with no parameters, for the general list of shipping methods and pickup points configured in the store; called with cart_id, cart_hash, and zipcode together, for calculated shipping costs and delivery estimates for that cart's contents to a specific destination. When NOT to use: zipcode alone, without cart_id and cart_hash, is not a supported combination and raises a validation error — this tool only calculates real shipping costs in the context of a specific cart. Constraints: cart_id requires both cart_hash and zipcode to be provided together — providing cart_id without either of the other two raises a validation error. cart_hash alone, without cart_id, is not validated or used — it is silently ignored and the call falls back to the general shipping-methods response, so always pass cart_id together with cart_hash. cart_hash must be the exact hash returned when the cart was created or retrieved, in the 40-character hexadecimal SHA1 format; a malformed hash is rejected before the cart lookup happens. Parameters: - cart_id: ID of the cart (requires cart_hash and zipcode) - cart_hash: Hash of the cart for validation (required when cart_id is provided) - zipcode: Destination postal code (required when cart_id is provided) - country_code: Country code for international shipping (optional, defaults to store country) IMPORTANT: When calculating shipping for a cart, you MUST ask the user for their zipcode if not provided. Do not assume or invent zipcodes.

list_categories

ChatGPT
List all categories in the store catalog with their hierarchy (subcategories). When to use: discovering the category tree, and resolving a category name to its numeric ID — merchants refer to categories by name, never by ID, so any category id needed elsewhere is resolved here first. When NOT to use: this tool returns categories only. It lists no products and accepts no product filters, so it cannot tell you which products belong to a category. Returns every category with its parent/child hierarchy in one call — there is no pagination or filtering.

list_coupons

ChatGPT
List and search discount coupons — promotional codes customers apply at checkout, as opposed to promotions, which apply automatically with no code. When to use: browsing or searching coupons by code, validity, activation status, discount type, or shipping applicability. When NOT to use: this returns coupons only — automatically-applied promotions, which need no code, are a separate concept and never appear here. It also returns a paginated summary per coupon rather than one coupon's full detail. Returns coupons with their codes, discount information, and any applicable conditions or restrictions, paginated (default 50 per page, max 100).

list_cubes

ChatGPT
List the Cube.js cubes available for analytical queries. When to use: you do not know the exact name of the cube to pass to get_cube_schema, or you need to check which cubes exist. When NOT to use: this returns no measures, dimensions, segments, or data — only cube names and short metadata. Call get_cube_schema for the members of a cube, and query_stats for data. Returns every available cube, sorted by name, each with: - name: The exact cube name to pass to get_cube_schema - title: Human-readable title

list_customers

ChatGPT
Tool to retrieve customers from the store. Use cases: - Search customers by name, email, or identification - View recent customers by filtering with created_at_min/max - Browse customers with pagination Returns customers with: - Contact info: name, email, phone, cpf_cnpj (identification) - Addresses: default_address and all shipping addresses with country codes (AR, BR, etc.) - Billing info: billing address details if available - Metadata: total_spent (in store currency), accepts_marketing - Order history: last_order_number (use with list_orders order_number filter)

list_orders

ChatGPT
Tool to retrieve a list of orders for the store, with optional filters. When to use: the merchant asks about existing orders — showing all orders, searching for a specific order, or narrowing results by status, fulfillment status, payment status, customer, product, shipping option, date range, or unit count. Returns order number, status, line items, and total amount for each matching order. When NOT to use: this tool returns orders only. It does not return a customer's contact info, addresses, or lifetime order history on their own, and it does not enumerate the store's shipping methods — shipping_options filters by method/option codes that must already be known, it cannot list the valid values. Filter priority when multiple identifying filters are given: order_number takes priority over customer_email, which takes priority over customer_name, which takes priority over total. Only one of these four should be used per call; combine the others (status, dates, units, products_filter, shipping_options) freely. Constraints: order_number, when provided, must be >= 100. customer_email, when provided, must be a syntactically valid email address. page, limit, min_units, and max_units, when provided, must all be >= 1. An invalid value in any of these raises a validation error instead of running the search — do not retry with the same value; ask the merchant for a corrected one. Example: find open orders shipped with a specific carrier method — list_orders(status=["open"], shipping_options=[{"methods": ["api_1459801"]}]).

list_products

ChatGPT
List and filter products from the store catalog using structured attribute filters — not free-text search. When to use: filtering by stock availability, price range, category, published status, brand, or free shipping (e.g. "products with no stock", "unpublished products", "products under $5000"). When NOT to use: this tool performs no text matching at all. A free-text query or product name (e.g. "blue t-shirt", "do you have Casio watches?") cannot be passed here — every filter below matches an exact attribute value, never a name fragment. Constraints: page defaults to 1, page_size defaults to 20 and is capped at 50. When collecting product IDs to feed a later bulk operation, pass fields_needed=["id"] — including "variants" or "description" multiplies response size 10-100x and can exhaust a caller's context budget for no benefit when only IDs are needed. Example: list_products(max_stock=0, fields_needed=["id"]) to find every out-of-stock product's ID for a bulk operation.

query_stats

ChatGPT
Execute analytical queries against store data using the Cube.js query format. When to use: retrieving aggregated metrics (counts, sums, averages) grouped by dimensions, filtered, and/or broken down over time. When NOT to use: this returns rows inline and produces no file or download link. Before calling it, fetch the schema of any cube whose schema you have not already retrieved this session — measure, dimension, and segment names are cube-specific and not guessable. Query structure: - measures: Aggregations to calculate (e.g., "Orders.count", "Orders.totalAmount") - dimensions: Fields to group by (e.g., "Orders.status", "Orders.city") - filters: Conditions to filter data - time_dimensions: Time-based grouping and date ranges - segments: Pre-defined data segments to apply - order: Sort specification - limit/offset: Pagination controls Example measures: count, sum, avg, min, max Example filter operators: equals, notEquals, contains, gt, gte, lt, lte, set, notSet Example granularities: second, minute, hour, day, week, month, quarter, year Constraints: limit is capped at 35 (default 35), so this tool cannot return a larger result set in one call. On the OrdersSummary cube, sales/revenue measures (gmv, avgTicket) must always be paired with the completedSales segment — a paidAt-set filter alone is not equivalent, since it still counts fully-refunded orders as sales. Order-count measures (distinctOrders, count) are a separate, unfiltered mode and should not be combined with completedSales or payment-status filters. reasoning is required on every call and must justify the query, name the specific measures/dimensions chosen, and confirm the call is not a duplicate of a prior query this turn. Returns query results as a list of data rows with the requested measures and dimensions.

search_products

ChatGPT
Tool to search for products in the store catalog. Uses regular and semantic search to find products matching the query. Try with different synonyms and different queries for broader results.

update_category_visibility

ChatGPT
Show or hide a category in the storefront menu. When to use: toggling whether a category appears in storefront navigation. When NOT to use: this only flips the visible/hidden toggle — it never edits a category's name, parent, or any other field. There is no third "soft-hidden" state. Resolving the target: - Merchants say "hide the Clothing category", never a numeric ID. Call list_categories first to resolve the name to an ID; disambiguate with the merchant if multiple matches exist. Semantics: - Hiding is a "hide from navigation" toggle, not a deletion. URLs still work. Cascade behavior (from the catalog backend): - Hiding a category ALSO hides all its subcategories recursively. - Showing a category ALSO shows all its subcategories. - A child cannot be shown while its parent is hidden; if asked to show a child first, point out that the parent must be shown too. Constraint: - This tool only exposes the visible/hidden toggle; it never writes the soft-hidden state. Changes take effect immediately in the live storefront navigation.

update_coupon

ChatGPT
Update an existing coupon, identified by its current code. When to use: changing a coupon's value, dates, restrictions, or active status (set valid=false to deactivate, true to reactivate) — including deactivating a coupon straight after creating it, which is the only way to end up with an inactive coupon. When NOT to use: this updates a coupon in place and never removes it. Setting valid=false deactivates it reversibly; it stays in the store's coupon list. Constraints: only the provided fields are updated; omitted fields remain unchanged. products must be product IDs, not variant IDs — a product can have several variants, each with its own distinct ID, and variant IDs are rejected. Example: update_coupon(code="SUMMER2026", valid=False) to deactivate.

update_product

ChatGPT
Tool to update an existing product in the store catalog, including its variants and images. Requires the product_id of the product to update. Only the fields provided will be modified; omitted fields remain unchanged. Warning: if 'categories' is sent as an empty list, the product will lose all its categories. Updatable product fields: - name, description, published, free_shipping, requires_shipping, brand - seo_title, seo_description, tags, categories, attributes, video_url Variant management (via 'variants' list): - Create: omit 'id', provide 'price' (required) and 'values' matching product attributes. - Update: provide 'id' plus fields to change. - Delete: provide 'id' and 'delete: true'. Image management (via 'images' list): - Each image requires 'src' (URL). Always include 'alt' together with 'src'. If published is changed to true, the product becomes immediately visible to buyers on the live storefront.

update_promotion

ChatGPT
Update an existing promotion, identified by its promotion_id. When to use: changing a promotion's discount value, scope, dates, or active status (published=false to deactivate, true to reactivate). When NOT to use: this updates a promotion in place and never removes it. Setting published=false deactivates it reversibly; the promotion itself remains. Constraints: - Updating discount_value requires promotion_type to also be provided in the same call — the backend needs both to apply the value correctly. - Providing begin_date/end_date sets date limits; omitting them on a promotion that previously had dates clears those dates rather than leaving them unchanged. - scope_value, when provided, must match scope_type (product IDs or category IDs, already resolved — this tool does not resolve names to IDs). Changes take effect immediately on qualifying purchases. Example: update_promotion(promotion_id=4321, published=False) to deactivate.

update_stock_and_price

ChatGPT
Bulk update stock levels and/or prices for product variants. When to use: changing price, stock, or both for one or more variants — this is the only tool that writes stock or price on an existing product. When NOT to use: for promotional_price, cost, sku, barcode, or mpn — these fields are not supported by this tool and either cause a validation error or are silently ignored; there is currently no tool that edits them on an existing product. Each update targets a specific variant by product_id and variant_id. Constraints: maximum 50 variant updates per request. Variant IDs are required — use search_products or list_products first to discover them; product IDs alone are not enough. Each update must include price and/or stock — never send price: null or stock: null (a null-only update is a validation error). Price and stock changes are immediately visible to buyers on the live storefront. Example: update_stock_and_price(updates=[{'product_id': 42, 'variant_id': 1001, 'price': '29.99', 'stock': 10}]).

update_visibility

ChatGPT
Publish or unpublish one or more products in the store catalog. When to use: making one or more known product IDs visible or hidden on the storefront in a single call. When NOT to use: this tool only toggles the published flag. It writes no other product field — not price, stock, name, or anything else — and it takes no per-product values, only one published value for the whole batch. Set published=true to make products visible, or false to hide them. Constraints: maximum 20 product IDs per request; product IDs must come from a prior search_products or list_products call. Changes take effect immediately on the live storefront, directly affecting what buyers can see and purchase. Example: update_visibility(product_ids=[101, 102], published=False).

assign_categories

Claude

bulk_delete_products

Claude

create_category

Claude

create_coupon

Claude

create_product

Claude

create_promotion

Claude

delete_category

Claude

delete_coupon

Claude

delete_product

Claude

delete_promotion

Claude

get_coupon_details

Claude

get_free_shipping_promotions

Claude

get_payment_methods

Claude

get_promotions

Claude

get_promotions_by_products

Claude

get_shipping_methods

Claude

list_categories

Claude

list_coupons

Claude

list_customers

Claude

list_orders

Claude

list_products

Claude

search_products

Claude

update_category_visibility

Claude

update_coupon

Claude

update_product

Claude

update_promotion

Claude

update_stock_and_price

Claude

update_visibility

Claude

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

Similar Apps