wc_get_products: list products
Lists products in the catalogue.
Arguments
| Argument | Default | Meaning |
|---|---|---|
status |
publish |
Product status |
page |
1 | Page number |
per_page |
20 | Products per page, clamped to 1–100 |
Permissions
mcp:read and woocommerce:catalog:read, plus manage_woocommerce or edit_products.
What it returns
items only — no total. Each product carries id, type, name, slug, status, sku, price, regular_price, sale_price and permalink.
Listings omit the description, categories and attributes; those come from wc_get_product.
Since there is no total, use wc_get_store_stats to size the catalogue before assuming a listing is complete.
Read the three price fields together
Every item carries all three, and reading them together tells you the product's actual commercial state:
regular_priceset,sale_priceempty — normal price applies.- both set — the product is on sale, and
priceequalssale_price. pricediffering fromregular_price— something is discounting it.
That is the fastest way to audit which products are currently on offer, and it is worth doing before any bulk price change. A percentage increase applied to a catalogue where a third of products are on sale behaves differently on those.
type decides what else applies
simple products carry their own price and stock. variable products delegate both to their variations — a variable product's price is derived from its children, and writing a price on the parent does not control what customers pay.
Check type before planning any price work. See wc_get_product_variations.
No filtering beyond status
There is no category filter, no search, no price range and no ordering argument. The listing returns products in WooCommerce's default order for the status you asked for.
To work on a specific set — the products in one category, say — you will need their IDs from the WooCommerce admin or from a content-side query, then read them individually.
That is a real constraint on bulk work through MCP: assembling the target set is often harder than changing it.
Drafts and other statuses
The default is publish. Pass status to see drafts or private products — useful when checking work in progress, and a reminder that a catalogue audit against the default misses anything unpublished.
Using it well
List the published products with their IDs, SKUs and all three price fields, then stop.
List the draft products.
Before a price job:
List the products and tell me which currently have a sale price.
Common problems
| Symptom | Cause |
|---|---|
| WooCommerce tools missing entirely | WooCommerce is not active on this site |
pom_ai_mcp_wc_forbidden |
The acting user lacks manage_woocommerce and edit_products |
| Fewer products than the shop has | per_page caps at 100 and there is no total |
| Drafts missing | Default status is publish |
| A variable product's price looks wrong | It is derived from variations |