Skip to main content

MCP Tool Reference

The tools the MCP server exposes: 13 commerce/analytics reads (all readOnlyHint: true) and the builder suite — 18 tools for reading, editing, and previewing the storefront. Builder writes only ever stage drafts; nothing a tool does reaches shoppers without a human publishing.

Every tool declares a JSON Schema your client can validate against, and every schema is closed (additionalProperties: false) — unrecognised arguments are rejected with invalid_arguments rather than ignored.

At a glance

ToolRequired scopeWhat it answers
get_shop_infoSTORE_SETTINGS · READStore name, currency, language, status
get_store_metricsANALYTICS · READRevenue, orders, AOV, refunds, conversion for a period
get_today_snapshotANALYTICS · READToday's sales and live visitor count
get_top_productsANALYTICS · READBest sellers by revenue or units
get_top_customersCUSTOMERS · READHighest-spending customers
get_low_stock_productsPRODUCTS · READWhat's running out
search_productsPRODUCTS · READFind a product by name, SKU, vendor, or type
get_productPRODUCTS · READFull detail for one product
list_categoriesCATEGORIES · READCategories and how many products each holds
get_review_summaryREVIEWS · READRating average, breakdown, pending moderation
list_recent_ordersORDERS · READOrders for a period
get_orderORDERS · READOne order by number, with line items

Builder tools

Every builder tool requires the THEME scope — READ for the read/preview tools, plus WRITE for the staging writes.

ToolKindWhat it does
builder_list_pagesreadPages of the storefront: names, slugs, types, visibility
builder_get_pagereadOne page's full component tree, SEO, and layout settings — healed to what merchants actually see
builder_list_draftsreadOpen drafts and whether each holds unpublished changes
builder_create_draftwriteA fresh named draft to stage work on
builder_update_pagewriteReplace a page's component tree on a draft (validated against the catalog; restore point first)
builder_create_page / builder_delete_pagewriteCustom pages, on a draft
builder_get_theme / builder_update_themeread / writeTheme settings groups, global navbar/footer — updates stage on a draft
builder_upload_assetwriteUpload an image for use in sections
builder_get_componentsreadThe component catalog: types, descriptions, tags, nesting rules — filterable
builder_get_componentreadOne component's full contract: default props and every editable setting
builder_get_component_examplesreadProven example trees + tree-authoring rules + the design-replication playbook
builder_list_liquid_componentsreadThe store's Custom Liquid definitions
builder_get_liquid_examplesreadReference Liquid definitions + the authoring rules
builder_upsert_liquid_componentwriteCreate/replace a Custom Liquid definition, on a draft
builder_preview_pagereadScreenshot a page (live or draft) at desktop/tablet/mobile — returned as an image
builder_capture_referencereadCapture a reference design from a URL: screenshots + measured fonts, palette, section bands
builder_compare_previewreadDiff a draft render against a captured reference: mismatch score + visual diff image

The component catalog is also exposed as MCP resources (taketheme://builder/components and taketheme://builder/components/{type}) for clients that read resources; the tools serve the same data for clients that don't.

Preview availability

The three preview tools need the deployment's headless-browser service. Where it isn't enabled they answer PREVIEW_UNAVAILABLE — every other tool is unaffected.

A tool whose scope your key doesn't carry still appears in tools/list; calling it returns a permission_denied tool error.

Date periods

Tools that report on a time window share the same three arguments. Relative windows are resolved server-side in UTC — assistants are unreliable at date arithmetic, so prefer a named period over computing dates yourself.

ArgumentTypeDescription
periodenumThe window to report on
startDatestringYYYY-MM-DD. Required only when period is custom
endDatestringYYYY-MM-DD. Required only when period is custom

Accepted period values: today, yesterday, last_7_days, last_30_days, last_90_days, this_week, last_week, this_month, last_month, this_year, custom.

Weeks start on Monday. Day boundaries are UTC, matching the dashboard's KPI boundaries — so chat answers and dashboard figures agree.

Every response echoes the resolved window as a human-readable period label ("the last 7 days", "2026-06-01 to 2026-06-30") so the assistant can state which window it actually used.


get_shop_info

Basic facts about the store — worth calling once at the start of a session so money figures get quoted in the right currency.

Scope: STORE_SETTINGS · READ · Arguments: none

Returns

FieldDescription
storeNameStore name
currencyCurrency the store sells in
languagePrimary language
statusAccount status (live, readonly, suspended, …)
openedAtWhen the store was created

get_store_metrics

Headline sales and order metrics for a period, optionally against the previous equivalent period.

Scope: ANALYTICS · READ

Arguments

ArgumentTypeDefaultDescription
period, startDate, endDatelast_30_daysSee Date periods
compareToPreviousbooleanfalseAlso return the previous equivalent period and the change

Returns

FieldDescription
periodResolved window label
currencyCurrency all money figures are in
startDate / endDateResolved window as ISO timestamps
metricsThe metric object below
previousPeriodSame shape, present when compareToPrevious is true
changePeriod-over-period change

metrics contains: total_sales, total_orders, aov, unique_customers, total_items_sold, cancelled_orders, refunded_orders, refund_rate, fulfilled_orders, conversion_rate, repeated_customer_rate, cod_orders, prepaid_orders.

Metrics that could not be computed are omitted and named in _degraded.unavailableFields — see Partially available data.


get_today_snapshot

What's happening right now, rather than over a historical window.

Scope: ANALYTICS · READ · Arguments: none

Returns

FieldDescription
periodAlways "today (UTC)"
currencyStore currency
metricstotal_sales, total_orders, unique_customers for today
activeVisitorsVisitors currently on the storefront, or null if unavailable

get_top_products

Best-selling products for a period. Ranks by sales — for what's running out of stock use get_low_stock_products.

Scope: ANALYTICS · READ

Arguments

ArgumentTypeDefaultDescription
period, startDate, endDatelast_30_daysSee Date periods
sortByrevenue | quantityrevenueRevenue answers "what makes the most money"; quantity answers "what moves the most"
limitinteger 1–5010How many products to rank

Returns: period, rankedBy, currency, and products[] with productId, title, revenue, unitsSold, orders.


get_top_customers

Highest-spending customers, with lifetime spend and order count.

Scope: CUSTOMERS · READ

Arguments

ArgumentTypeDefaultDescription
limitinteger 1–5010How many customers to return

Returns: customers[] with customerId, name, email, phone, totalSpent, ordersCount, lastOrderDate.


get_low_stock_products

Products at or below a stock threshold, lowest first.

Products with inventory tracking disabled, or with overselling allowed, are excluded — their stock count isn't meaningful. For products with variants, stock is the sum across variants.

Scope: PRODUCTS · READ

Arguments

ArgumentTypeDefaultDescription
thresholdinteger 0–10005Report products with this many units or fewer
limitinteger 1–10020How many products to return
includeOutOfStockbooleantrueInclude products already at zero

Returns: threshold, products[], and isEmptytrue meaning "nothing is running low", not "the lookup failed".


search_products

Find products by title, SKU, vendor, or product type. Use this first when a product is referred to by name and you need its id.

Scope: PRODUCTS · READ

Arguments

ArgumentTypeDefaultDescription
querystring 1–200 (required)Part of a title, a SKU, a vendor, or a product type
limitinteger 1–5010How many matches to return

Returns: query, matchCount, isEmpty, and products[] with productId, title, sku, price, discountPrice, quantity, status, vendor.


get_product

Full detail for one product, by id or SKU. Pass at least one of the two — with neither, the tool returns found: false and a message telling you to search first.

Scope: PRODUCTS · READ

Arguments

ArgumentTypeDescription
productIdstringProduct id, as returned by search_products. Preferred
skustringProduct SKU. SKUs are unique within a store

Returns

found, plus a product object when found:

FieldDescription
productId, title, skuIdentity
price, discountPricePricing
status, vendor, productTypeClassification
categoriesCategory names
stocktotal, tracked, oversellAllowed, lastRestockedAt
variantstitle, sku, price, quantity per variant
rating, reviewCountReview summary for the product

list_categories

Product categories with how many products each holds.

Scope: CATEGORIES · READ

Arguments

ArgumentTypeDefaultDescription
limitinteger 1–20050How many categories to return

Returns: categories[] with categoryId, name, productCount, subcategoryCount, plus isEmpty.


get_review_summary

The store-wide review picture.

Scope: REVIEWS · READ · Arguments: none

Returns

FieldDescription
totalReviewsTotal review count
averageRatingAverage rating to 2 decimal places, or null
ratingBreakdownCount per star rating
byStatusCount per moderation status
pendingModerationReviews awaiting approval

list_recent_orders

Orders for a period, newest first. Returns individual orders — for aggregate revenue use get_store_metrics.

Deleted and draft orders are excluded. Reads come from the canonical order records, so an order placed seconds ago is already visible.

Scope: ORDERS · READ

Arguments

ArgumentTypeDefaultDescription
period, startDate, endDatelast_7_daysSee Date periods
statusenumallOne of pending, confirmed, processing, shipped, delivered, cancelled, returned
limitinteger 1–10020How many orders to return

Returns: period, totalMatching (all orders matching the filter), returned (how many are in this response), and orders[] with orderId, orderNumber, status, total, currency, paymentMethod, itemCount, placedAt, tags.


get_order

One order in full, by order number.

The number is accepted with or without a leading #, and a tracking number works too.

Scope: ORDERS · READ

Arguments

ArgumentTypeDescription
orderNumberstring 1–64 (required)The order number as it appears in the dashboard, or a tracking number

Returns

found, plus an order object when found:

FieldDescription
orderId, orderNumber, status, placedAtIdentity and state
itemCount, note, tagsOrder context
paymenttotal, subtotal, shipping, discount, currency, method, status
items[]name, quantity, unitPrice, variant

A number that doesn't match returns found: false rather than an error — check the number and try again.

Buyer data

Order tools deliberately omit customer contact details, addresses, IPs, and risk scores. Use the REST API when an integration genuinely needs them.