Curie Commerce
Measured conclusion: Alive, not deep-tested. L2 outcome: not_attempted.
Search, compare in 3D, and buy products from 5.6M+ Shopify stores. Free tier; Pro adds checkout.
| Author | co.curie |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Alive, not deep-tested |
| L1 liveness | alive |
| L1 latency | 2449 ms |
| Last measured | 2026-10-26 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Curie Commerce": {
"url": "https://chat.curie.app/api/mcp/global",
"transport": "streamable-http"
}
}
}
Measured tools (30)
get_recommendationsread-onlyGet product recommendations similar to a given product. Useful for 'show me more like this' requests. Returns structured product items (same shape as search_products). Recommended visualization: a horizontal scrolling React Artifact with product cards labeled "More like this" — image, uppercase brand, title, price, 3D pill. Use _meta.curie.brand.palette.brand_color for the accent color and tap-to-view as the primary action.
Parameters:
product_id(required) — string — The product UUID to base recommendations onlimit— number — Number of recommendations (default 6, max 20)shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
add_product_from_photoAdd a generated 3D model to the merchant's Shopify store as MODEL_3D media — creating the product if needed — and optionally publish it. This is the store-side 'cut-and-paste' step: pass the hosted `glb_url` of an already-generated model, OR pass just an `image_url` and (when the Curie generation engine is configured) the tool runs the photo→3D step for you. WRITE operation; works only on an installed merchant store (uses the app's offline Admin token). Defaults to a DRAFT product unless `publish: true`. Returns the new product id + the 3D-viewer surface.
Parameters:
title(required) — string — Product title for the new (or updated) listing.engine— string — Optional generation engine override (mock | trellis | hunyuan). Defaults to the server's configured engine. Only used when generating from image_url.glb_url— string — Hosted .glb URL (Curie CDN) of the generated 3D model. Shopify fetches + processes it (and derives the USDZ).publish— boolean — Publish to the Online Store (product status ACTIVE). Default false → created as DRAFT.image_url— string — Source product photo (hosted URL). If no glb_url is given, the tool runs photo→3D on the configured Curie engine; if no engine is configured it reports that generation must run first.product_id— string — Optional existing product to attach the model to; omit to create a new product.
Hints: read-only no · destructive no · idempotent no · open-world yes
get_availabilityread-onlyCheck product availability and pricing across retailers. Returns all affiliate links with current prices.
Parameters:
product_id(required) — string — The product UUIDshop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
compare_productsread-onlyCompare 2 to 6 products side-by-side. Returns a comparison matrix with each product's name, price, brand, 3D model availability, key attributes, and a cascade-aware visual hint for each row. Optional criteria narrow which features are weighted (e.g. ['waterproof', 'budget under $150']). Returns matrix data suitable for an inline comparison Artifact. Recommended visualization: a React table Artifact with product columns (image header + name + price) and attribute rows. Use winnerIndex on each row to highlight the winning cell with _meta.curie.brand.palette.accent_color. Include a footer row of criteria_scores with weighted bars.
Parameters:
product_ids(required) — array — Array of 2-6 product identifiers to compare. Accepts the SAME identifiers search_products / get_product return: Shopify Product GIDs (gid://shopify/Product/...), canonical product URLs, or Curie catalog UUIDs. For Shopify merchants, pass the GIDs exactly as they came back from search_products and also pass shop_domain so Curie resolves them against that shop's live catalog.criteria— array — Optional criteria to score products against (e.g. ['waterproof', 'budget under $150'])shop_domain— string — Optional. Target a specific Shopify store by domain (e.g. 'gymshark.com', 'skims.com', 'allbirds.myshopify.com'). Pass the SAME shop_domain you used with search_products / get_product so the GIDs in product_ids resolve against that store's real catalog. Overrides the connector's default store. Omit to use the connector's own store.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
get_brand_contextread-onlyReturns the merchant's brand palette, typography hints, voice/tone profile, signature phrases, forbidden words, and a system_prompt_block the AI client can prepend to subsequent responses so they sound like the merchant rather than generic AI output.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
get_suggested_promptsread-onlyOnboarding suggestion chips for the chat surface — the same 'What's trending?' / 'Find me a gift' / 'Compare products' chips chat.curie.app shows above its input. When called on a per-shop MCP endpoint (e.g. /api/mcp/allbirds.com), returns brand-themed prompts mentioning that merchant. When called on /api/mcp/global, returns cross-merchant discovery prompts. Lets any AI host (Claude.ai, ChatGPT, Cursor) render the same starting-suggestions Curie's own chat shows — universal experience across harnesses. Recommended visualization: a React Artifact with a chip-grid UI showing each prompt as a tappable button styled with _meta.curie.brand.palette.brand_color. Optional category groupings if more than 4 chips.
Parameters:
count— integer — Max prompts to return (1-8, default 4)category— string — Optional category filter (e.g. 'sneakers', 'skincare'). When set, prompts are narrowed to that vertical.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
initiate_checkoutBegin a GUEST checkout flow for one or more products — NO sign-in required. Pass `shop_domain` (e.g. "allbirds.com") on Curie's cross-merchant route so Curie resolves the shop, creates an UNAUTHENTICATED Shopify cart, and returns its `continue_url` — the shop's OWN Shopify-hosted guest checkout where the buyer completes payment securely (Curie never charges or stores card data). On a shop-scoped connector the storeId already names the shop, so `shop_domain` is optional. `product_ids` accept the SAME identifiers `search_catalog` / `get_product` return (Shopify Product GIDs `gid://shopify/Product/...`, product URLs, or Curie UUIDs). Returns a checkout UIResource + cascade media (3D / 360° / image) for every line item.
Parameters:
product_ids(required) — array — Array of 1-10 product identifiers to check out (Shopify Product GIDs, product URLs, or Curie UUIDs — the same IDs search_catalog / get_product return).buyer_email— string — Optional buyer email for the checkoutshop_domain— string — Shop to check out against (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the guest Shopify checkout can resolve; optional on a shop-scoped connector.shipping_address— object — Optional pre-filled shipping address {country, postal_code, ...}
Hints: read-only no · destructive no · idempotent no · open-world yes
search_catalogread-onlySearch the store catalog by name, brand, style, color, or keywords. This is the UCP/Shopify-canonical catalog-search tool (Shopify Storefront MCP's `search_catalog`, formerly `search_shop_catalog`); `search_products` is a deprecated alias of this tool. Returns matching products with images, prices, and 3D model availability. Use `max_price` / `min_price` for structured price filters — natural-language constraints like 'under $150' embedded in the query are also post-clamped server-side, but passing the structured arg is preferred (matches Shopify UCP `filters.price.min/max`). Returns structured product items suitable for inline gallery rendering. Recommended visualization: a horizontal scrolling React Artifact with product cards showing image, uppercase brand, title, price, and a small "3D" pill when has_3d_model is true. Use _meta.curie.brand.palette.brand_color for the accent color and tap-to-view as the primary action.
Parameters:
query(required) — string — Search query (e.g. 'wireless headphones', 'red running shoes')limit— number — Maximum number of results to return (default 10, max 50)max_price— number — Maximum price in USD (exclusive of cents). Curie clamps the result set so no product exceeds this price.min_price— number — Minimum price in USD (exclusive of cents).shop_domain— string — Optional. Target a specific Shopify store by domain (e.g. 'gymshark.com', 'skims.com', 'allbirds.myshopify.com'). Overrides the connector's default store, so a single connector can search ANY Shopify store's real catalog. Omit to use the connector's own store.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
lookup_catalogread-onlyBatch-retrieve full product objects by ID in ONE call. This is the UCP/Shopify-canonical batch product-lookup primitive (Shopify Catalog MCP's `lookup_catalog`) — the multi-id counterpart of `get_product`. Pass an array of product identifiers (the SAME identifiers `search_catalog` / `get_product` return: Shopify Product GIDs (gid://shopify/Product/...), canonical product URLs, or Curie catalog UUIDs) and Curie resolves them all against the shop's live catalog in one round-trip. Returns the same product-summary list `search_catalog` returns. Use it instead of N separate `get_product` calls when you already know which products you want (e.g. re-hydrating a cart, wishlist, or comparison set). Returns structured product items suitable for inline gallery rendering. Recommended visualization: a horizontal scrolling React Artifact with product cards showing image, uppercase brand, title, price, and a small "3D" pill when has_3d_model is true. Use _meta.curie.brand.palette.brand_color for the accent color and tap-to-view as the primary action.
Parameters:
product_ids(required) — array — Array of 1-50 product identifiers to retrieve. Accepts the SAME identifiers search_catalog / get_product return: Shopify Product GIDs (gid://shopify/Product/...), canonical product URLs, or Curie catalog UUIDs. For Shopify merchants, pass the GIDs exactly as they came back and also pass shop_domain so Curie resolves them against that shop's live catalog.shop_domain— string — Optional. Target a specific Shopify store by domain (e.g. 'gymshark.com', 'skims.com', 'allbirds.myshopify.com'). Pass the SAME shop_domain you used with search_catalog / get_product so the GIDs in product_ids resolve against that store's real catalog. Overrides the connector's default store. Omit to use the connector's own store.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
get_product_detailsread-onlyGet full details for a specific product by its ID. The UCP/Shopify-Storefront-MCP-canonical product-detail tool. Returns the full Shopify product payload (description, options, variants, selling_plan_groups, requires_selling_plan, selectedOrFirstAvailableVariant, total_variants, url) PLUS Curie's additions (glbUrl, usdzUrl, has3DModel, media cascade, brand voice). Returns a single structured product object suitable for an inline product-detail Artifact. Recommended visualization: a React Artifact with a hero image (or embedded `<model-viewer>` when has_3d_model is true), uppercase brand label, title, price callout, and a vertical attribute list. Use _meta.curie.brand.palette for the surface + accent colors.
Parameters:
product_id(required) — string — The Shopify product GID (gid://shopify/Product/...) or Curie UUIDshop_domain— string — Optional. Target a specific Shopify store by domain (e.g. 'gymshark.com', 'skims.com', 'allbirds.myshopify.com'). Overrides the connector's default store, so a single connector can fetch ANY Shopify store's real product detail. Omit to use the connector's own store.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
get_cartread-onlyRead a shopper's current cart by id. Returns line items, totals, discount info, and checkout URL. Passthrough to Shopify Storefront MCP's get_cart for the target shop; requires shop scope and is not available for cross-merchant queries.
Parameters:
cart_id(required) — string — The Shopify cart GID (gid://shopify/Cart/...)shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
update_cartdestructiveModify a Shopify cart — add line items, update quantities, remove lines. Pass cart_id=null to create a new cart. Returns the updated cart with checkout URL ready for in-chat completion. Passthrough to Shopify Storefront MCP's update_cart.
Parameters:
cart_id— string — Existing cart GID. Omit or pass null to create a new cart.add_items— array — New lines to add: [{product_variant_id: 'gid://shopify/ProductVariant/...', quantity: 1}, ...]shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.update_items— array — Existing lines to set quantities on: [{id: 'gid://shopify/CartLine/...', quantity: 2}, ...]. quantity:0 removes the line.remove_line_ids— array — Explicit line IDs to remove (alternative to update_items with quantity:0).
Hints: read-only no · destructive yes · idempotent no · open-world yes
create_cartCreate a new Shopify cart for the target shop, optionally pre-loaded with line items. UCP-canonical dev.ucp.shopping.cart.create_cart. Returns the new cart_id + checkout_url ready for in-chat checkout handoff. Passthrough to Shopify Storefront MCP's create_cart.
Parameters:
add_items— array — Optional initial lines: [{product_variant_id: 'gid://shopify/ProductVariant/...', quantity: 1}, ...]shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.buyer_locale— string — Optional buyer-provided locale hint (e.g. 'en-US', 'fr-CA').
Hints: read-only no · destructive no · idempotent no · open-world yes
cancel_cartdestructiveCancel an existing Shopify cart. UCP-canonical dev.ucp.shopping.cart.cancel_cart. Idempotent — re-cancelling a cancelled cart returns success. Passthrough to Shopify Storefront MCP's cancel_cart.
Parameters:
cart_id(required) — string — The Shopify cart GID to cancel.shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.
Hints: read-only no · destructive yes · idempotent yes · open-world yes
get_checkoutread-onlyRead a Shopify checkout session's current state by id. Returns status, line items, shipping address, totals, brand voice. UCP-canonical dev.ucp.shopping.checkout.get_checkout. Passthrough to Shopify Checkout MCP.
Parameters:
checkout_id(required) — string — The checkout id returned by initiate_checkout / create_checkout (UCP also accepts `id`).shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
update_checkoutdestructiveUpdate fields on a Shopify checkout session. UCP-canonical dev.ucp.shopping.checkout.update_checkout — Curie's wrapper performs a PUT-semantics-safe diff (fetches current state, merges your partial input, forwards the full payload) so omitting a field doesn't silently delete it. Set `clear_fields[]` to explicitly clear values.
Parameters:
checkout_id(required) — string — Existing checkout id.line_items— array — Optional replacement line items: [{variant_id, quantity}, ...]. Omitting preserves the current lines.buyer_email— string — Optional buyer email. Omitting preserves current.shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.clear_fields— array — Field names to explicitly clear on Shopify (e.g. ['buyer_email', 'shipping_address']). UCP-spec PUT-semantics deletes.discount_codes— array — Optional REPLACE-all discount code list. To append, fetch current via get_checkout and pass the new full list.shipping_address— object — Optional shipping address {country_code, postal_code, city, address1, address2, first_name, last_name, phone}. Omitting preserves the current address.
Hints: read-only no · destructive yes · idempotent no · open-world yes
complete_checkoutComplete (finalize payment + place order) a Shopify checkout session. UCP-canonical dev.ucp.shopping.checkout.complete_checkout. Requires a selected_instrument_id from the checkout's available payment instruments. Token-tier merchants complete in-protocol; Free-tier merchants return a continue_url for hosted-redirect handoff. Idempotency-key auto-managed.
Parameters:
checkout_id(required) — string — Checkout id to complete.selected_instrument_id(required) — string — Payment instrument id from the checkout's ucp.payment.instruments[] block (returned by get_checkout).shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.
Hints: read-only no · destructive no · idempotent yes · open-world yes
cancel_checkoutdestructiveCancel a Shopify checkout session. UCP-canonical dev.ucp.shopping.checkout.cancel_checkout. Idempotent — re-cancelling returns success. Idempotency-key auto-managed.
Parameters:
checkout_id(required) — string — Checkout id to cancel.shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.
Hints: read-only no · destructive yes · idempotent yes · open-world yes
get_orderread-onlyRead the live status of an order by id (UCP-canonical dev.ucp.shopping.order.get_order). Returns the real order body — line items, fulfillment/tracking, totals, status — when the order is visible to Curie. Visibility today is per-agent (Shopify Order MCP scope): orders placed THROUGH Curie's checkout return real data; orders placed in another session or on the storefront directly return a graceful "connect your account at chat.curie.app" state (NOT an error) because cross-session/cross-agent history requires the Customer Accounts MCP OAuth handoff (Curie slice 5 — not yet shipped). Renders the order-status surface either way.
Parameters:
order_id(required) — string — The order id returned by complete_checkout (UCP also accepts `id`).shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
search_shop_policies_and_faqsread-onlyGet facts about the shop's policies (returns, shipping, refunds, exchanges) or product FAQs. Example questions: "What's your return policy?", "Do you ship to Canada?", "How long do exchanges take?". Passthrough to Shopify Storefront MCP's search_shop_policies_and_faqs.
Parameters:
query(required) — string — Shopper question (e.g. 'What's your return policy?', 'How long does shipping take?')shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
curie_try_on_3dread-onlyReturns an MCP-UI UIResource for an inline 3D viewer for the given product (when a USDZ/GLB model exists). Hosts that support MCP Apps render the iframe-embedded model-viewer inline in chat; legacy hosts fall back to structured text + a direct USDZ URL. Differs from view_3d_model (which returns just the URL) — try_on_3d returns a renderable iframe component so the 3D is shown without the shopper leaving chat. Recommended visualization (fallback path): an HTML Artifact embedding Google's `<model-viewer>` web component on the GLB URL with `auto-rotate camera-controls ar ar-modes="webxr scene-viewer quick-look" ios-src="<USDZ>"`. Frame ≥480px tall. The Artifact is the fallback when the host doesn't honor `_meta.ui.resourceUri`.
Parameters:
product_id(required) — string — The product UUID (Curie catalog) or Shopify Product GID.shop_domain— string — Optional shop domain override. Defaults to the storeId of the MCP endpoint.
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
solve_jobread-onlyEditorial 'best for the job' answer. Given a shopper's job-to-be-done (e.g. 'shoes for flat feet', 'beach wedding outfit under $200'), returns one top pick, 2 alternatives (also-great / budget / step-up), the criteria used to rank them with weights + explainers, and product citations linking back to real product pages. Use when the shopper asks a how-do-I-choose question rather than a specific-product question. Accepts `job_description` (canonical) or `goal` / `job` / `query` (aliases) — same field, named for caller convenience. Recommended visualization: an editorial-style React Artifact card showing a small uppercase "CURIE'S PICK" badge, the problem statement, the top pick (large hero image + name + price + 1-line explainer), then 2 alternative cards in a row labeled by tier (budget / step-up / also-great), then a criteria list with weighted bars. Use _meta.curie.brand.palette for the editorial frame.
Parameters:
job_description(required) — string — The shopper's job-to-be-done in their own words (e.g. 'I need running shoes that don't hurt my flat feet for half-marathon training'). Synonyms `goal`, `job`, `query` are also accepted.goal— string — Synonym for `job_description` — same shopper job-to-be-done in their own words. Convenience alias for callers that use a shorter field name.sizes— array — Optional shopper sizes (e.g. ['M', 'L'] or ['10', '10.5'])shop_domain— string — Shop domain to act on (e.g. "allbirds.com"). Required on Curie's cross-merchant route so the per-shop cart/checkout/order/policy resolves; optional on a shop-scoped connector where the storeId already names the shop.max_price_usd— number — Optional budget cap in USDbrand_preferences— array — Optional list of brand names the shopper has signaled preference for
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
curie_wishlist_addSave a product to the caller's wishlist. Pinterest-style — the wishlist row is auto-created on first add (find-or-create on identity). Identity is resolved from the request: Authorization: Bearer <jwt> for authed users, X-Curie-Device-Id for anon (matches /api/v1/wishlist REST contract). When `product_url` is given without `product_id`/`shop_domain`, the URL is parsed into `{shop_domain, product_id}` via Curie's product-url-resolver so re-shares of the same product link dedupe. share_kind ∈ {url, text, image} discriminates the three iOS share-extension payload shapes; the same enum is used here so MCP-driven saves dedupe against iOS-shared saves of the same product.
Parameters:
share_kind(required) — string — Payload discriminator — 'url' (canonical product URL), 'text' (plain-text), 'image' (image URL).notes— string — Free-form user note about the wishlist item.source— string — Which surface emitted the save. Defaults to 'mcp_tool' for MCP-driven saves.image_url— string — Product hero image URL.product_id— string — Shopify product id or handle. If omitted and `product_url` is given, parsed from the URL.price_cents— number — Price in minor units (cents).product_url— string — Canonical product URL (myshopify.com or brand apex). When provided without product_id/shop_domain, the URL is parsed for dedupe.shop_domain— string — The merchant's shop domain (e.g. 'allbirds.myshopify.com'). If omitted and `product_url` is given, parsed from the URL.source_text— string — Plain-text payload (when share_kind = 'text').currency_code— string — ISO 4217 currency code (e.g. USD, GBP, EUR). Defaults to USD.product_title— string — Display title for the wishlist card (refreshed by a background job).source_image_url— string — Image URL payload (when share_kind = 'image').
Hints: read-only no · destructive no · idempotent no · open-world yes
curie_wishlist_getread-onlyList items on the caller's wishlist, newest-saved first. Wishlist is auto-created on first call (matches the REST GET behaviour so iOS UI always has a stable id). Identity resolved from Authorization: Bearer <jwt> or X-Curie-Device-Id header. Optional filters: `shop_domain` (only items from one shop), `limit` (cap; default 200, max 500). Returns the wishlist row + items array.
Parameters:
limit— number — Cap on the result count. Default 200, max 500.shop_domain— string — Optional filter — only items from this shop domain.wishlist_id— string — Optional explicit wishlist id. Omit to read the caller's own wishlist (resolved via identity headers).
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
curie_wishlist_removedestructiveRemove an item from the caller's wishlist by item_id. Identity resolved from Authorization: Bearer <jwt> or X-Curie-Device-Id header (the same identity that owns the wishlist this item belongs to). Idempotent — removing an already-removed item is a no-op success. Destructive: the row is hard-deleted, not soft-deleted.
Parameters:
item_id(required) — string — The wishlist_items.id of the item to remove.
Hints: read-only no · destructive yes · idempotent yes · open-world yes
curie_wishlist_move_to_cartMark a wishlist item AS moved-to-cart (sets `moved_to_cart_at = now()`). This tool does NOT directly add the item to a Shopify cart — cart wrapping is the host AI's job via the existing `update_cart` MCP tool. Use this tool to record the move intent on the wishlist row; then call `update_cart` separately with the product_id to complete the transfer. Pro-tier only (spends-money intent). Returns the marked-moved timestamp + a note instructing the host AI to follow up with update_cart.
Parameters:
item_id(required) — string — The wishlist_items.id of the item to mark as moved.cart_id— string — Optional target cart id for the follow-up update_cart call. Surfaced in the response; not persisted on the wishlist row.quantity— number — Optional quantity hint for the follow-up update_cart call. Surfaced in the response; not persisted on the wishlist row.
Hints: read-only no · destructive no · idempotent no · open-world yes
curie_cart_aggregate_addAdd a line to the caller's aggregated multi-merchant cart with UPSERT-increment semantics — re-adding the same (shop_domain, product_variant_id) increments the existing line's quantity instead of inserting a duplicate row. The cart row is auto-created on first add (find-or-create on identity). Identity is resolved from the request: Authorization: Bearer <jwt> for authed users, X-Curie-Device-Id (or the session device-id) for anon (matches /api/v1/aggregated-cart REST contract). Free / device-scoped — persists the cart anonymously like the wishlist; the actual purchase happens later at checkout.
Parameters:
shop_domain(required) — string — The merchant's shop domain (e.g. 'allbirds.myshopify.com'). Pinterest-key for the multi-merchant grouping.product_variant_id(required) — string — Shopify variant GID (gid://shopify/ProductVariant/...) or Curie catalog UUID. Dedupe key with shop_domain.quantity— integer — Quantity to add (integer 1..1000). Default 1. Re-adds INCREMENT the existing line.image_url— string — Product hero image URL.product_id— string — Optional Shopify product id or handle for the line's parent product.price_cents— integer — Price in minor units (cents), integer 0..100000000 ($1,000,000.00 ceiling). Frozen at add-time.currency_code— string — ISO 4217 currency code (e.g. USD, GBP, EUR). Defaults to USD.product_title— string — Display title for the cart line (refreshed by a background job).
Hints: read-only no · destructive no · idempotent no · open-world yes
curie_cart_aggregate_getread-onlyList the caller's aggregated multi-merchant cart, grouped by shop_domain by default. The cart is auto-created on first call so iOS/web UIs always have a stable id for the cart-icon badge (matches REST GET behaviour). Identity resolved from Authorization: Bearer <jwt> or X-Curie-Device-Id header. Optional `shop_domain` filter returns the flat lines for a single shop. Returns `{ cart_id, shops, total_cents, currency_code, line_count }` — the same envelope the REST GET emits so iOS + web render identical numbers.
Parameters:
shop_domain— string — Optional filter — only return lines from this shop (returns flat lines instead of shop-grouped envelope).
Hints: read-only yes · destructive not declared · idempotent yes · open-world yes
curie_cart_aggregate_removedestructiveRemove a single line from the caller's aggregated cart by line_id. Identity resolved from Authorization: Bearer <jwt> or X-Curie-Device-Id header (same identity that owns the parent cart). Idempotent — removing an already-removed line is a no-op success. Destructive: the row is hard-deleted, not soft-deleted.
Parameters:
line_id(required) — string — The aggregated_cart_lines.id of the line to remove.
Hints: read-only no · destructive yes · idempotent yes · open-world yes
curie_cart_aggregate_update_quantitySet the quantity on an aggregated cart line. Special case: `quantity: 0` DELETES the line (matches UI affordance 'set to 0' === 'remove'). Identity resolved from Authorization: Bearer <jwt> or X-Curie-Device-Id header (or the session device-id for anon). Free / device-scoped — like the wishlist; the actual purchase happens later at checkout. Returns the updated line, or `{ line: null }` when the line was deleted via quantity:0.
Parameters:
line_id(required) — string — The aggregated_cart_lines.id of the line to update.quantity(required) — integer — New quantity, integer 0..1000. Setting to 0 deletes the line.
Hints: read-only no · destructive no · idempotent no · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.