Write WooCommerce Product Descriptions with AI, in Bulk
Forty products with a one-line description, short descriptions that were never filled in, titles typed in a hurry when the stock arrived: product text is the job every shop owner puts off. You can write WooCommerce product descriptions with AI without copying anything back and forth. BEAR's MCP server connects an assistant such as Claude to your shop, so the assistant reads each product itself, drafts the text, shows it to you and saves it once you agree, with every change recorded in BEAR's History. This guide covers which fields it can write, how a rewrite runs from start to finish, how to make the assistant follow your style every time, and how to undo a change.
One example from start to finish: rewrite a category's descriptions
Your candles have descriptions written by the supplier, all of them two lines long and much alike. You type:
Rewrite the descriptions of the products in the Candles category. 80 to 120 words each, friendly and plain, mention the scent and the burn time from the product data, end with one line of care advice. Show me the first two before you save anything.
- The assistant finds the products. It looks up the ID of the Candles category and asks BEAR to run a filter on it. BEAR freezes the matching products as a selection and returns the exact count. Say 14.
- It reads what is there. For each product it asks for the title, the current description and short description, the categories and the attributes such as scent or burn time. This is what the new text will be built from.
- It drafts the first two in the chat. The words come from the AI model you are talking to; BEAR does not write text, it reads the product data and stores what you approve. Read the drafts against the products. If the tone is wrong or a fact is not in the data, say so now.
- You confirm. The assistant asks to use
woobe_update_product, the tool that writes one field of one product. Fourteen descriptions are fourteen calls. - BEAR saves each one and reports back. Every call returns the old and the new text. If WooCommerce ignored a value, the answer says so and the assistant is told not to report it as done. Each change goes into History with its previous value, marked as made by an AI agent.
The numbers are illustrative. The order of events is what matters: find, read, draft, confirm, write, report.
Before you start
You need BEAR with its MCP server switched on in the plugin settings, a shop reachable over HTTPS, and an AI assistant that can connect to an MCP server: Claude in the browser, in the desktop app or in Claude Code, and other MCP clients such as Cursor. BEAR authenticates with a key sent in a request header, so writing product descriptions from ChatGPT works only where its connector lets you add that header. The connection steps are in the MCP server documentation.
Which text fields the assistant can write
The assistant uses the same fields as BEAR's editor screen, under the same keys. These are the text fields that matter for product copy:
| Field | What it is | Free version |
|---|---|---|
Title (post_title) | The product name. | Open |
Description (post_content) | The main description, stored as HTML. On a variation it is the variation's own description. | Open |
Short Desc. (post_excerpt) | The short description next to the price. Products only; a variation has none. | Paid version only |
Slug (post_name) | The part of the product URL after the shop path. | Paid version only |
Purchase note (purchase_note) | Text the customer sees after buying, in the order email and order details. Simple and variable products. | Paid version only |
In the free version a closed field is closed to the connection both ways, in bulk and one product at a time; the assistant is told to say so once and not to look for a way round. The full list per field is in the free version limitations.
Two details save surprises. A new title does not change the product's URL: WordPress keeps the slug of a published product, which is a separate field. And descriptions are HTML, so say which format you want: plain paragraphs, or HTML with a <ul> list of features and <strong> for key facts. Ordinary formatting tags are kept.
How the assistant reads your products before it writes
Good copy needs facts, and the facts are in the product data. Two tools do the reading.
Finding. The filter is BEAR's own: categories, tags, brands, attributes, price ranges, stock status, product type, dates, and text conditions on the title, description, short description, slug and SKU. A text condition can be "contains", "is exactly", "begins with", "ends with", "does not contain" or "is empty". That makes requests such as "every product with an empty short description" or "titles that contain 'NEW'" a single filter. The result is frozen as a selection with an exact count, which stays valid for 24 hours. A category does not include its subcategories by itself; if you say "Candles and everything under it", the assistant lists the child categories as well.
Reading. The assistant then reads the fields it needs, up to 200 products per call. Categories come back as names. Attribute values of global attributes come back as term numbers, so the assistant has to look up their names before writing "scent: vanilla". If a draft ever says something like "colour 31", it skipped that step: ask it to use the attribute names.
Tell the assistant which fields to use as facts, and that it must not add others. A model that is asked for 100 words about a candle and finds only a title and a scent will fill the gap with plausible material, wax type and burn time included. "Use only what is in the product data; if burn time is missing, leave it out" prevents that.
Two ways to save: product by product, or one text for many
A different text for every product
Rewrites and new descriptions are different for every product, so they are saved one field of one product at a time with woobe_update_product.
- There is no dry run for a single write. The drafts in the chat are your preview. For a large batch, ask to see a few first, then say "save the rest the same way".
- Each write answers with the text before and after, so the assistant can show you exactly what changed and still has the old text if you change your mind in the same conversation.
- Each field is its own write. A new title and a new description for one product are two calls and two History entries.
- A long job runs in rounds. The assistant can only work while it is answering you, so a large batch is written over several replies; say "continue" when it stops.
The same text for a whole selection
Some text is the same everywhere: a delivery line in the short description, a standard purchase note, a title pattern. That is a bulk operation, the same three steps as any bulk edit through BEAR. The assistant takes a selection, runs a preview that shows the current and the new value for a sample of products without writing anything, and then asks to use woobe_apply_bulk. BEAR refuses to apply it unless the assistant repeats the exact count of the selection, which is what stops an edit meant for one category from landing on the whole catalogue.
For text fields the connection has one bulk behaviour: new, which replaces the whole text. What makes it useful for copy is that BEAR fills in its placeholders per product, the same ones the editor screen uses:
{TITLE},{SKU},{ID}, and{PARENT_TITLE}or{PARENT_SKU}for variations{REGULAR_PRICE}and{SALE_PRICE}{product_cat}and{tags}, as comma-separated names{attribute:pa_color}for an attribute's values and{meta:your_meta_key}for a custom field
Set the short description of all products in Scarves to: Hand-woven {TITLE}, shipped in two working days. Colour: {attribute:pa_color}.
Two rules for placeholders. Use at most one {attribute:…} or {meta:…} per text and put no other placeholder after it; in 2.2.4 a {product_cat}, {tags} or second {attribute:…} further on wipes out both placeholders and the text between them. And the preview shows the text as typed, with the placeholders unfilled, so check the result on two or three products after the run. The editor's text functions work as well: {DO_STRING_TITLE} as the new title turns each product's existing title into Title Case. More on placeholders and functions for titles is in bulk editing WooCommerce product titles.
A bulk run writes 25 products at a time for about 20 seconds per call, then hands back how far it got; the assistant continues with the same operation key, and all portions together form one History operation.
Find-and-replace edits versus full rewrites
"Replace 'free shipping' with 'free delivery' in all descriptions" sounds like a bulk job, but the connection has no append, prepend or replace behaviour for text. The assistant can still do it: it reads every matching description, makes the change and writes each product back. That is fine for a few dozen products, and the filter "description contains 'free shipping'" keeps the work to the products that need it.
For hundreds of products, or for adding the same paragraph at the end of every description, the Bulk Edit tab on the plugin screen is the better tool. It has append, prepend and replace with a same-case or ignore-case switch, runs on the filtered products in one operation and records it in History as one operation. Bulk editing WooCommerce product descriptions walks through it.
A rule of thumb: a mechanical change to existing text belongs in the Bulk Edit tab; text that has to be written, or rewritten with judgement, belongs to the assistant.
Tell it once how you like things
Every shop has its house style: a length, a tone, words it never uses, units it always uses. Say it once, as a standing instruction:
From now on, for product descriptions: 80 to 120 words, second person, no "premium", "luxury" or "best", sizes in centimetres, last line is care advice.
The assistant saves this with woobe_set_memory as a note stored with your shop. BEAR's instructions tell every assistant to read these notes at the start of a session, so the next conversation, in the same assistant or another one connected to the shop, starts from your style without being told again. Some details:
- Notes are plain text, one short sentence per topic. HTML is stripped when a note is saved.
- They belong to the shop, not to a person: everyone who connects to the shop shares them.
- Ask "which notes do you have about my shop?" to see them, and "forget the note about descriptions" to remove one.
- Notes are background, not orders. Your request in the conversation wins over a note, and no note can make the assistant skip a preview or a count confirmation.
Quality and SEO: what to check before you save
- Check the facts. Read two or three drafts against the product pages; a wrong size or care instruction costs more in returns than a thin description ever cost in sales.
- Avoid near-identical texts. Similar products produce similar drafts. Ask the assistant to open each description differently and to lead with what makes this product different: the scent, the size, the material. Text copied from a supplier is usually on many other shops as well; rewriting it is one of the better reasons to do this job.
- Be careful with titles that already sell. A renamed product keeps its URL, but its title in search results and in customers' order history changes. Rewrite titles where they are poor, not across the board.
- Keep the roles apart. The short description sits next to the price and should be scannable; the description is where the detail goes. Ask for both with different lengths if you want both.
- Test on two products first. Save two, open them in the shop, then do the rest. Your theme decides how lists, bold text and line breaks look.
Undo: what History keeps
Every write through the connection goes through BEAR's History, but the two ways of saving end up differently there.
- A bulk operation is one entry. Say "undo that" and the assistant rolls it back with BEAR's rollback tool, restoring the previous text of every product it changed. It can also be reverted from the History tab of the plugin screen.
- Product-by-product writes are one entry per field per product. The assistant's rollback tool works on bulk operations only, so it cannot undo a batch of single writes in one step. Open the History tab, show the solo operations, narrow them with by Author or AI agent, and revert the entries you want. Within the same conversation you can also ask the assistant to write the old texts back, since it received them with each write; those are new writes, not a rollback.
- The free version keeps only the last two single edits and the last two bulk operations of each author. After a rewrite of 30 descriptions, only the last two can be reverted from History.
Before a large rewrite, keep a copy of the current texts. Ask the assistant to export them to CSV with the columns ID, title, description and short description (all four are in the column set the shop-wide key exports), and exporting through the assistant explains the file and its link. The History documentation covers the tab itself.
Free version: how much it can write
In the free version the assistant can write titles and descriptions for up to 100 products every 30 minutes, shared by the whole shop and refilled by one product every 18 seconds. Each single write counts as one, so a new title and a new description for 50 products use the whole allowance; a bulk operation counts each product once, whatever the number of fields. When a job does not fit, the assistant tells you how long to wait for the next portion. Undoing never counts. The paid version has no allowance.
Ready prompts
- "Which products have an empty short description? Show me a table."
- "Write short descriptions for those, 25 to 35 words, from the title, category and attributes only. Show me five first."
- "Rewrite the descriptions in the Candles category in my house style. Save them after I approve the first two."
- "Read the description of product 812 and tell me what is missing compared with its attributes."
- "Turn the description of every product in Lamps into two short paragraphs and a bullet list of specifications, in HTML."
- "Find titles that contain 'NEW' and remove that word from them. Show me the list of new titles first."
- "Replace 'free shipping' with 'free delivery' in every description that contains it."
- "Set the purchase note of all products in Workshops to: Your place is booked; the details follow by email a week before."
- "Write a description for each variation of the Linen Shirt that says what its colour goes well with."
- "From now on, never use the word 'luxury' in product texts."
Checklist
- MCP server on and the assistant connected (setup).
- Your style saved once as a standing note: length, tone, banned words, units.
- The filter shows the right products and the right count before anything is drafted.
- Facts come only from the product data; attribute names, not numbers.
- Two drafts approved and checked on the front end before the rest.
- A copy of the current texts exported before a large rewrite, especially on the free version.
- Mechanical edits to existing text go to the Bulk Edit tab; rewrites go to the assistant.
- After the job, spot-check a few products and the History tab.
Questions
Does BEAR write the product descriptions itself?
No. Through the MCP connection the text comes from the AI assistant you connected. BEAR gives it the product data, saves what you approve and records each change in History.
Can I write WooCommerce product descriptions with ChatGPT?
Only if your ChatGPT connector lets you send BEAR's key in a request header; BEAR has no sign-in flow for connectors. Claude, Claude Code, Cursor and other MCP clients connect with the key directly.
Can the assistant write variation descriptions?
Yes. On a variation, the Description field is the variation's own description, the text WooCommerce shows when a customer picks that variation. Variations have no short description.
Can I bulk generate product descriptions for products that have none?
Yes. Ask for the products whose description is empty; that is one filter. The assistant then drafts a text for each from the title, categories and attributes and saves them one by one after you approve the first few.
If something in your shop behaves differently from what is described here, ask on the BEAR support forum.