wc_get_product: get one product
Reads a single product in full. The call that must precede every catalogue write.
Arguments
| Argument | Required | Meaning |
|---|---|---|
id |
Yes | The product ID |
Permissions
mcp:read and woocommerce:catalog:read, plus manage_woocommerce or edit_products.
What it returns
Everything a listing returns — id, type, name, slug, status, sku, price, regular_price, sale_price, permalink — plus description, short_description, categories and attributes.
Why it matters more here than elsewhere
There is no undo for a price. WooCommerce keeps revisions of a product's post content, not of its price, stock or SKU.
So the values in this response are your recovery plan. Ask for them before every write and keep them in the conversation:
Show me the current regular price, sale price, stock and SKU for product 219. Then change the regular price to 24.90.
See Recover from a failed write.
Read price against regular_price
price is read-only and reflects what a customer actually pays. Comparing the two answers the question that matters before a price change:
- They match — no discount is active; changing
regular_pricechanges what customers pay. - They differ — a sale price is in effect, and changing
regular_pricealone will not change the customer-facing price.
That comparison takes a second and prevents the most common catalogue mistake there is.
Check type before doing anything
A variable product has no meaningful price of its own; its price range is derived from its variations. Writing prices on the parent is not an error and not effective.
For a variable product, the work happens in wc_get_product_variations and the variation write tools.
attributes shows the product's configuration
For a variable product, this is what its variations are built against. Reading it before creating variations is what prevents variations that never match a customer's selection.
For a simple product, attributes are display-only specifications.
See wc_set_product_attributes.
Descriptions are HTML
description and short_description are stored as HTML and returned as stored. Writes to them are filtered as post content, so markup is allowed and scripts are not.
If an assistant is rewriting product copy, everything in Review generated copy before publishing applies — and product claims carry more risk than most copy.
Read it back after writing
The write tools return the saved product, but reading independently also catches another plugin acting on save — dynamic pricing, currency conversion and catalogue plugins all hook product saves.
Apply the change, then read product 219 back and show me all three price fields.
Using it well
Read product 219 and show me every field.
Show me the current stock and prices for product 219 before changing anything.
Common problems
| Symptom | Cause |
|---|---|
pom_ai_mcp_wc_product_not_found |
Wrong ID, or the ID is not a product |
pom_ai_mcp_wc_forbidden |
Missing shop capability |
price differs from regular_price |
A sale price or a pricing plugin is active |
| A variable product shows an odd price | It is derived from variations |
| The description contains markup | Correct; it is HTML |