Tools, resources, and prompts¶
The server has 47 tools. Operators can hide any of them with allow and deny lists; see Configuration.
The tool explorer on Hugging Face lists every tool, prompt, and resource with the exact input schemas the server reports over tools/list, and builds the tools/call request for any arguments you enter.
Every tool accepts an optional store argument with a store id from woocommerce_list_stores. Without it, the default store is used. Results are JSON text. Errors come back as tool errors with a code, a message, and, for WooCommerce errors, the HTTP status.
List tools accept page (from 1) and perPage (1 to 100) and return items with page, perPage, total, and totalPages when the store reports them. Dates are ISO-8601 (2026-10-01T00:00:00). Money values are strings or numbers without a currency symbol.
Read tools¶
| Tool | Main arguments |
|---|---|
woocommerce_list_stores |
none |
woocommerce_list_products |
search, status, type, sku, category, tag, stockStatus, featured, onSale, minPrice, maxPrice, after, before, orderBy, order |
woocommerce_search_products |
query plus the list filters |
woocommerce_get_product |
id |
woocommerce_list_orders |
search, status, customer, product, after, before, orderBy, order |
woocommerce_get_order |
id |
woocommerce_list_refunds |
orderId |
woocommerce_get_refund |
orderId, refundId |
woocommerce_list_order_notes |
orderId, type (any, customer, internal) |
woocommerce_get_order_tracking |
orderId |
woocommerce_list_customers |
search, email, role, orderBy, order, redactPii |
woocommerce_get_customer |
id, redactPii |
woocommerce_customer_orders |
customerId, maxOrders, recent, redactPii |
woocommerce_customer_segments |
after, before, statuses, vipShare, atRiskDays, membersPerSegment, maxOrders, redactPii |
woocommerce_get_stock |
productId, variationId |
woocommerce_list_coupons |
search, code, after, before, orderBy, order |
woocommerce_get_coupon |
id |
woocommerce_coupon_performance |
after, before, statuses, code, maxOrders |
woocommerce_list_webhooks |
status |
woocommerce_get_webhook |
id |
woocommerce_list_webhook_events |
topic (such as order.*), sinceId, limit, includePayload |
woocommerce_list_shipping_zones |
includeMethods, includeLocations |
woocommerce_list_shipping_methods |
none |
woocommerce_list_tax_rates |
taxClass |
woocommerce_list_tax_classes |
none |
woocommerce_get_store_summary |
period (week, month, last_month, year) or dateMin and dateMax |
woocommerce_sales_analytics |
after, before, statuses, groupBy (day, week, month), top, maxOrders |
woocommerce_low_stock_report |
threshold, includeOutOfStock, includeVariations, maxProducts, maxVariations |
Sales analytics¶
woocommerce_sales_analytics reads orders in the range (by default processing and completed) and returns:
orders,itemsSold,grossSales,discounts,shipping,tax,refunds,netSales, andaverageOrderValueseries: orders and total per day, week (starting Monday), or month, in UTCbyStatus,paymentMethods, andtopProducts(by revenue)
Amounts are added in fixed point, so totals do not drift. Up to maxOrders orders (default 1000, maximum 5000) are read; when there are more, truncated is true. Use a shorter range or raise maxOrders.
Low stock report¶
woocommerce_low_stock_report scans published products (up to maxProducts, default 500) and returns those that track stock at or below threshold (default 5), plus out-of-stock items, sorted by quantity.
Variable products are handled in two ways:
- When the parent product manages stock for all variations, the parent is checked like a simple product.
- Otherwise each variation is read and checked on its own (up to
maxVariations, default 2000). Variation items havetype: "variation", their ownid, theparentId, and a name such asTee - S.
Pass includeVariations: false to skip the variation requests on large catalogs. The result reports scanned, variationsScanned, and truncated.
Customers and segments¶
woocommerce_customer_orders reads one customer's orders and returns the order count, total spent and average order value (processing and completed orders only), first and last order dates, and the most recent orders.
woocommerce_customer_segments reads orders in a date range and groups the people who placed them:
| Segment | Rule |
|---|---|
vip |
Top vipShare percent by spend (default 10, at least one customer) |
repeat |
Two or more orders |
oneTime |
Exactly one order |
atRisk |
Repeat customers whose last order is more than atRiskDays (default 60) before the end of the range |
guests |
Orders without an account, grouped by billing email |
Each segment returns customers, spent, and up to membersPerSegment members. Only orders inside the range are counted. Pass redactPii: true to mask names, emails, and phones; see Privacy.
Coupon performance¶
woocommerce_coupon_performance reads the coupon lines of orders in a range and returns, per code, the number of orders, the discount given, and the revenue of those orders. Codes are compared without regard to case.
Write tools¶
| Tool | Main arguments |
|---|---|
woocommerce_create_product |
name and product fields |
woocommerce_update_product |
id and product fields |
woocommerce_bulk_update_products |
updates: up to 100 of { id, regularPrice, salePrice, stockQuantity, stockStatus, manageStock, status } |
woocommerce_bulk_adjust_prices |
productIds, mode (percent, fixed), change, target (regular, sale), decimals |
woocommerce_update_order_status |
id, status |
woocommerce_add_order_note |
orderId, note, customerNote |
woocommerce_delete_order_note |
orderId, noteId |
woocommerce_fulfill_order |
orderId, carrier, trackingNumber, trackingUrl, shippedAt, markCompleted, notifyCustomer |
woocommerce_create_refund |
orderId, amount or lineItems, reason, apiRefund, restockItems |
woocommerce_update_stock |
productId, variationId, stockQuantity, manageStock, stockStatus |
woocommerce_update_customer |
id, email, firstName, lastName, billing, shipping |
woocommerce_create_coupon |
code, amount, discountType, dateExpires, limits and restrictions |
woocommerce_update_coupon |
id and the coupon fields to change; null clears dateExpires or a limit |
woocommerce_delete_coupon |
id, force |
woocommerce_schedule_sale |
productIds, discountPercent, startsAt, endsAt, decimals |
woocommerce_end_sale |
productIds |
woocommerce_create_webhook |
name, topic, deliveryUrl, status |
woocommerce_update_webhook |
id, name, status, deliveryUrl, rotateSecret |
woocommerce_delete_webhook |
id |
Product fields are name, type, status, regularPrice, salePrice, sale dates, description, shortDescription, sku, manageStock, stockQuantity, stockStatus, catalogVisibility, featured, virtual, downloadable, weight, dimensions, categories, tags, images, and externalUrl.
Notes:
- Refunds.
apiRefunddefaults tofalse, which records the refund in WooCommerce without contacting the payment gateway. Set it totrueto send money back through the gateway.lineItems[].idis the order line item id, not the product id. - Bulk price changes. Prices are rounded half away from zero to
decimalsplaces (default 2). Variable and grouped products, products without a regular price, changes that would make a price zero or negative, and sale prices that would not be below the regular price are skipped and listed inskipped.target: "sale"sets the sale price from the regular price, for examplemode: "percent", change: -20for a 20% sale. - Batch results. Bulk tools return
updatedanderrors; one failed product does not stop the others. - Sales.
woocommerce_schedule_salesets the sale price todiscountPercentoff the regular price, with optional start and end dates, in one batch request. Variable and grouped products and products without a regular price are skipped.woocommerce_end_saleclears the sale price and both dates. - Fulfillment. See Fulfillment and tracking.
- Webhooks. New webhooks are signed with the store's configured webhook secret, which never appears in arguments, results, previews, or the audit log. See Webhooks.
Fulfillment and tracking¶
woocommerce_fulfill_order records a shipment, sets the order to completed (unless markCompleted: false), and adds a customer-visible note with the carrier, tracking number, and link (unless notifyCustomer: false). shippedAt defaults to today in UTC.
Where the shipment is stored depends on WOOCOMMERCE_TRACKING_MODE:
| Mode | Storage |
|---|---|
meta (default) |
The woocommerce_mcp_tracking order meta field holds a list of shipments. Works on any store. |
shipment-tracking |
The Shipment Tracking extension's REST API (wc-shipment-tracking/v3), so tracking also shows in its emails and the My Account page. |
woocommerce_get_order_tracking reads the shipments back in the same mode.
Fulfillment makes up to three requests. The confirmation preview shows the first one (the order update, or the tracking entry in shipment-tracking mode); the status change and the customer note follow when you confirm.
Previews and confirmation¶
Each write tool also accepts:
dryRun: true: always return a preview and send nothingconfirm: true: apply the change
When confirmation is required (the default), a call without confirm: true returns:
{
"status": "confirmation_required",
"store": "default",
"message": "The change was NOT applied. Review the request below with the user, then call this tool again with the same arguments and confirm: true.",
"request": {
"method": "PUT",
"path": "/products/42",
"query": {},
"body": { "regular_price": "24.00" }
}
}
A dry run returns "status": "dry_run" with the same request. If the tool would not write anything, the status is no_change. Previews may read from the store, for example to compute new prices, but never write. Because the confirmed call runs again, a bulk price change is computed from the prices at that moment.
A write to a read-only store fails with read_only. Over authenticated HTTP, a token without the woocommerce:write scope fails with insufficient_scope.
Resources¶
| URI | Content |
|---|---|
woocommerce://stores |
Configured stores, the default store, and whether each is read-only |
woocommerce://stores/{store}/products/{id} |
One product |
woocommerce://stores/{store}/orders/{id} |
One order |
woocommerce://stores/{store}/events |
The 50 most recent webhook deliveries, without payloads |
woocommerce://stores/{store}/events/{id} |
One webhook delivery with its payload |
The {store} variable supports completion. Resources are JSON. For stores with redactPii, order and event resources are masked too.
Prompts¶
| Prompt | Arguments | Purpose |
|---|---|---|
sales_briefing |
period (day, week, month, quarter), store |
Short briefing with trends, top products, and follow-ups |
restock_plan |
threshold, days, store |
Restock list from current stock and recent sales |
order_triage |
status (pending, processing, on-hold), store |
Review open orders and propose actions without changing them |
price_change_review |
change, store |
Plan a price change, preview it, and wait for approval |