WooCommerce MCP Server
Provides tools for managing products, categories, tags, orders, order notes, refunds, customers, coupons, and sales reports via the WooCommerce REST API.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WooCommerce MCP ServerShow me the top selling products this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
WooCommerce MCP Server
An MCP (Model Context Protocol) server that connects LLM agents to a WooCommerce store via its REST API (wp-json/wc/v3). It provides 40 tools covering products, product variations, categories, tags, orders, order notes, refunds, customers, coupons, and sales reports.
Setup
1. Generate WooCommerce API keys
In WordPress admin, go to WooCommerce > Settings > Advanced > REST API
Click Add key
Give it a description, select a user, and choose Read/Write permissions
Click Generate API key and copy the Consumer key and Consumer secret immediately (the secret is hidden afterwards)
Your store must use pretty permalinks (Settings > Permalinks) and should be served over HTTPS.
2. Install and build
npm install
npm run build3. Configure environment variables
Variable | Required | Description |
| Yes | Your store's base URL, e.g. |
| Yes | Consumer key from step 1 |
| Yes | Consumer secret from step 1 |
| No | Defaults to |
| No |
|
| No | Port for HTTP transport (default |
4. Run
stdio (for local MCP clients like Claude Desktop):
WOOCOMMERCE_STORE_URL=https://mystore.com \
WOOCOMMERCE_CONSUMER_KEY=ck_xxx \
WOOCOMMERCE_CONSUMER_SECRET=cs_xxx \
node dist/index.jsExample Claude Desktop config entry:
{
"mcpServers": {
"woocommerce": {
"command": "node",
"args": ["/absolute/path/to/woocommerce-mcp-server/dist/index.js"],
"env": {
"WOOCOMMERCE_STORE_URL": "https://mystore.com",
"WOOCOMMERCE_CONSUMER_KEY": "ck_xxx",
"WOOCOMMERCE_CONSUMER_SECRET": "cs_xxx"
}
}
}
}Streamable HTTP (for remote/multi-client use):
TRANSPORT=http PORT=3000 \
WOOCOMMERCE_STORE_URL=https://mystore.com \
WOOCOMMERCE_CONSUMER_KEY=ck_xxx \
WOOCOMMERCE_CONSUMER_SECRET=cs_xxx \
node dist/index.jsThe server listens at http://localhost:3000/mcp.
Related MCP server: MCP WooCommerce
Tools
All tools are prefixed woocommerce_ and use snake_case. Every list/get tool accepts a response_format parameter (markdown default, or json for structured data), and list tools support page/per_page pagination with a consistent envelope (total, count, has_more, next_page).
Products
woocommerce_list_products- search/filter products (status, type, category, tag, stock, price, sale)woocommerce_get_product- full product detailwoocommerce_create_product/woocommerce_update_product/woocommerce_delete_productwoocommerce_list_product_variations/woocommerce_get_product_variationwoocommerce_create_product_variation/woocommerce_update_product_variation/woocommerce_delete_product_variation
Categories & Tags
woocommerce_list_product_categories/_create_/_update_/_delete_product_categorywoocommerce_list_product_tags/_create_/_update_/_delete_product_tag
Orders
woocommerce_list_orders- filter by status, customer, date range, productwoocommerce_get_order- full order detail (line items, addresses, totals)woocommerce_create_order/woocommerce_update_order/woocommerce_delete_orderwoocommerce_list_order_notes/woocommerce_create_order_notewoocommerce_list_order_refunds/woocommerce_create_order_refund(destructive financial operation)
Customers
woocommerce_list_customers/woocommerce_get_customerwoocommerce_create_customer/woocommerce_update_customer/woocommerce_delete_customer
Coupons
woocommerce_list_coupons/woocommerce_get_couponwoocommerce_create_coupon/woocommerce_update_coupon/woocommerce_delete_coupon
Reports
woocommerce_get_sales_report- totals for a period or custom date rangewoocommerce_get_top_sellers_report- best-selling products for a periodwoocommerce_get_report_totals- status/count breakdown for orders, products, customers, coupons, or reviews
Design notes
Auth: HTTP Basic Auth with the consumer key/secret, as recommended for HTTPS stores. If your server can't parse Basic Auth headers (rare, usually FastCGI setups), WooCommerce also accepts
consumer_key/consumer_secretas query params - not implemented here since Basic Auth covers the vast majority of installs.Pagination: mirrors WooCommerce's own
page/per_pagemodel and echoes backX-WP-Total/X-WP-TotalPagesresponse headers.Response size: responses are capped at ~25,000 characters; list tools truncate their
itemsarray with atruncation_messagetelling the agent how to narrow its query instead of silently dropping data.Destructive actions:
delete_*andcreate_order_refundtools are annotateddestructiveHint: true. Deletes default to WooCommerce's trash behavior where supported (force=false); refunds are irreversible and the tool description calls this out explicitly.Line-item edits on existing orders are intentionally out of scope for
woocommerce_update_orderto avoid an agent accidentally corrupting totals/stock counts; usewoocommerce_create_orderfor new orders andwoocommerce_create_order_refundfor post-hoc adjustments.
Development
npm run dev # tsx watch mode
npm run build # compile TypeScript to dist/
npm run clean # remove dist/Test with the MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.jsAvailable Tools
40 toolswoocommerce_create_couponCreate WooCommerce CouponA
Create a new discount coupon.
Args:
code (string, required): the code customers enter at checkout
discount_type: 'percent'|'fixed_cart'|'fixed_product' (default: fixed_cart)
amount (string, required): numeric string
description, date_expires (YYYY-MM-DD), individual_use, usage_limit, usage_limit_per_user, free_shipping, minimum_amount, maximum_amount, product_ids, excluded_product_ids, email_restrictions (all optional)
response_format ('markdown'|'json'): default 'markdown'
Returns: The newly created coupon object with its assigned ID.
Examples:
Use when: "create a 20% off coupon called SUMMER20 that expires end of August" -> code="SUMMER20", discount_type="percent", amount="20", date_expires="2026-08-31"
Error Handling:
Returns "Error: Bad request (400)" if the coupon code already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Coupon code customers will enter at checkout, e.g. 'SUMMER20' | |
| amount | Yes | Discount amount as numeric string (percent value or currency amount depending on discount_type) | |
| description | No | ||
| product_ids | No | Restrict coupon to these product IDs | |
| usage_limit | No | Max total number of times this coupon can be used | |
| date_expires | No | Expiry date in YYYY-MM-DD format; omit for no expiry | |
| discount_type | No | 'percent', 'fixed_cart', or 'fixed_product' (default: fixed_cart) | fixed_cart |
| free_shipping | No | If true, grants free shipping when applied | |
| individual_use | No | If true, this coupon cannot be combined with other coupons | |
| maximum_amount | No | Maximum cart subtotal allowed, numeric string | |
| minimum_amount | No | Minimum cart subtotal required, numeric string | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
| email_restrictions | No | Restrict usage to these customer email addresses | |
| excluded_product_ids | No | Exclude these product IDs from the coupon | |
| usage_limit_per_user | No | Max times a single customer can use this coupon |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate write, non-idempotent, safe operation. Description adds return format, error handling, and creation behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points, sections (Args, Returns, Examples, Error Handling), and front-loaded with the main action. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 15 parameters and no output schema, the description covers creation details, error handling, and an example. It doesn't detail the returned object, but the context is adequate for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 93% schema coverage, the description adds value by providing an example, summarizing defaults, and explaining the response_format parameter beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new discount coupon', matching the title and specifying the resource. It distinguishes itself from sibling tools like woocommerce_update_coupon and woocommerce_delete_coupon.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit example with 'Use when' and error handling for duplicate codes. It lacks explicit when-not-to-use guidance, but the example and context make usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_create_customerCreate WooCommerce CustomerA
Create a new registered customer account.
Args:
email (string, required): must be unique
first_name / last_name (string, optional)
username / password (string, optional): auto-generated if omitted
billing / shipping (object, optional): address fields
response_format ('markdown'|'json'): default 'markdown'
Returns: The newly created customer object with its assigned ID.
Error Handling:
Returns "Error: Bad request (400)" if the email or username is already registered.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Customer email address, must be unique | ||
| billing | No | ||
| password | No | Login password; a random one is generated if omitted | |
| shipping | No | ||
| username | No | Login username; generated from email if omitted | |
| last_name | No | ||
| first_name | No | ||
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations by stating that it returns a newly created customer object with an assigned ID and details error responses. Annotations already indicate a mutating action, so the description enhances understanding without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with separate sections for Args, Returns, and Error Handling, making it easy to parse. It is front-loaded with the primary purpose but contains some repetitive details from the schema. Slightly verbose, but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (8 parameters, nested objects) and no output schema, the description explains the return value and error conditions adequately. However, it lacks details on the complete structure of the returned customer object beyond the ID, and does not cover all edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly lists all parameters and adds meaning for those not fully explained in the schema (e.g., billing/shipping as address fields, response_format options). With 50% schema coverage, the description compensates well, though it could detail nested object structures further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new registered customer account' using specific verb 'Create' and resource 'customer account'. It distinctively differs from sibling tools like 'woocommerce_update_customer' or 'woocommerce_list_customers'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (creating a new customer) and includes error handling for duplicate email/username. However, it does not explicitly state when not to use it (e.g., for updates) or compare to siblings, though it's implicitly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_create_orderCreate WooCommerce OrderA
Create a new order with one or more line items. WooCommerce will calculate totals, tax, and stock reduction (for statuses that trigger it) automatically.
Args:
status: order status (default: pending)
customer_id (number, optional): omit for a guest order
payment_method / payment_method_title (string, optional)
set_paid (boolean, optional): mark as paid immediately
billing / shipping (object, optional): address fields
line_items (array, required): [{product_id, variation_id?, quantity}]
customer_note (string, optional)
response_format ('markdown'|'json'): default 'markdown'
Returns: The newly created order object with its assigned ID and calculated totals.
Examples:
Use when: "create an order for 2x product 55 for customer 10" -> customer_id=10, line_items=[{product_id:55, quantity:2}]
Error Handling:
Returns "Error: Bad request (400)" if a product_id/variation_id doesn't exist or is out of stock with backorders disabled.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Initial order status (default: pending) | pending |
| billing | No | ||
| set_paid | No | If true, mark the order as paid immediately | |
| shipping | No | ||
| line_items | Yes | Products to include on the order | |
| customer_id | No | Existing customer ID to attach this order to (omit for a guest order) | |
| customer_note | No | Note left by/for the customer | |
| payment_method | No | Payment method ID, e.g. 'bacs', 'cod', 'stripe' | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
| payment_method_title | No | Human-readable payment method label |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: automatic totals/tax/stock reduction, error responses for invalid products or stock issues, and the effect of `set_paid`. Annotations declare readOnlyHint=false, which aligns with mutation, and the description elaborates on side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an 'Args' section and examples. It is front-loaded with the main purpose. However, it includes a full parameter list that partially duplicates the schema, making it somewhat verbose. Still, it is clear and efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (10 parameters, nested objects, no output schema), the description covers creation behavior, return format (order object with ID and totals), error handling, and example usage. It is sufficiently complete for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema description coverage, the baseline is 3. The description adds value by clarifying the `customer_id` parameter ('omit for a guest order'), the structure of `line_items`, and the `response_format` options. It also explains the `set_paid` boolean effect, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new order with one or more line items,' which is a specific verb-resource combination. It distinguishes from sibling tools like update, delete, get orders, and other WooCommerce tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context with examples and error handling scenarios (e.g., missing product, out of stock). It explains automatic calculations and stock reduction. However, it does not explicitly exclude situations where other tools might be preferred, such as using update_order for modifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_create_order_noteCreate WooCommerce Order NoteA
Add a note to an order. Customer-visible notes trigger an email to the customer; internal notes are only visible in the admin.
Args:
order_id (number, required)
note (string, required)
customer_note (boolean, default false): true = customer-visible (emails customer), false = internal only
response_format ('markdown'|'json'): default 'markdown'
Returns: The newly created note object.
Examples:
Use when: "let the customer know order 100 has shipped" -> order_id=100, note="Your order has shipped!", customer_note=true
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | Note content | |
| order_id | Yes | The numeric WooCommerce order ID | |
| customer_note | No | If true, the note is visible to the customer (e.g. shipped notifications). Default: false (private/internal note) | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set readOnlyHint=false and destructiveHint=false, which aligns with the description of adding a note (non-destructive write). The description adds value by disclosing that customer-visible notes trigger an email, which is a behavioral side effect not evident from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: an initial summary, an Args list, Returns, and an Example. Every sentence adds necessary information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description states 'Returns: The newly created note object', which is sufficient. It covers the two note types, parameter defaults, and provides an example. Minor omission: no mention of error conditions or prerequisites (e.g., order must exist).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all 4 parameters (100% coverage). The description enhances this by clarifying that customer_note=true emails the customer and that response_format defaults to 'markdown'. The example also demonstrates parameter usage, adding practical meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Add a note to an order' and distinguishes customer-visible from internal notes. Sibling tools like woocommerce_list_order_notes and woocommerce_create_order_refund have different purposes, so the tool is easily distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete usage example ('let the customer know order 100 has shipped') and explains the customer_note parameter effect. However, it does not explicitly state when not to use this tool vs. alternatives like updating the order or sending a custom email.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_create_order_refundCreate WooCommerce Order RefundADestructive
Issue a refund against an order, either as a flat amount or itemized by line item. This is a DESTRUCTIVE, hard-to-reverse financial operation - confirm details with the user before calling.
Args:
order_id (number, required)
amount (string, optional): flat refund amount; required if line_items is omitted
reason (string, optional)
line_items (array, optional): [{id, quantity?, refund_total?}] for itemized refunds
api_refund (boolean, default true): attempt gateway refund vs. record-only
response_format ('markdown'|'json'): default 'markdown'
Returns: The created refund object.
Examples:
Use when: "refund $15 of order 100 for a damaged item" -> order_id=100, amount="15.00", reason="Damaged item"
Error Handling:
Returns "Error: Bad request (400)" if the amount exceeds the order total or the gateway rejects the refund.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | Amount to refund as a numeric string, e.g. '10.00'. If omitted with no line_items, refunds the full order total. | |
| reason | No | Reason for the refund, shown in admin and possibly to the customer | |
| order_id | Yes | The numeric WooCommerce order ID to refund | |
| api_refund | No | If true (default) and the payment gateway supports it, attempts to refund via the gateway API; set false to only record the refund in WooCommerce | |
| line_items | No | Specific line items to refund; omit to do a simple amount-based refund | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide destructiveHint=true, readOnlyHint=false, idempotentHint=false, openWorldHint=true. The description reinforces this with 'DESTRUCTIVE, hard-to-reverse financial operation' and adds the important behavioral guideline to confirm with the user. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: first sentence states purpose, followed by a critical warning, then a clear listing of arguments with types, return value, an example, and error handling. Every sentence adds value, and it is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's financial nature and multiple parameters, the description covers purpose, parameters (with types and relations), return type, example usage, and error handling. No output schema exists, but the return is described. Annotations cover safety. Complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all parameters have schema descriptions). The description adds value by clarifying the mutual dependency between 'amount' and 'line_items' (amount required if line_items omitted) and includes an example mapping natural language to parameters. This goes beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Issue a refund against an order, either as a flat amount or itemized by line item.' The verb 'issue a refund' is specific and the resource is 'order'. It distinguishes from sibling tools that deal with orders (create, update, delete, list) and other entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns that this is a destructive, hard-to-reverse financial operation and advises confirming details with the user before calling. It provides an example scenario. It does not explicitly list alternatives, but among siblings, only 'woocommerce_list_order_refunds' exists for refunds, so usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_create_productCreate WooCommerce ProductA
Create a new product in the WooCommerce catalog.
Args:
name (string, required): Product name
type ('simple'|'grouped'|'external'|'variable'): default 'simple'
status ('draft'|'pending'|'private'|'publish'): default 'publish'
description / short_description (string, optional): HTML allowed
sku (string, optional): must be unique store-wide
regular_price / sale_price (string, optional): numeric strings
manage_stock (boolean), stock_quantity (number), stock_status (string)
category_ids / tag_ids (number[]): assign existing taxonomy terms
image_urls (string[]): externally hosted image URLs, WooCommerce will import them
weight (string, optional)
response_format ('markdown'|'json'): default 'markdown'
Returns: The newly created product object with its assigned ID.
Examples:
Use when: "add a new t-shirt product priced at $25" -> name="T-Shirt", regular_price="25.00"
Don't use when: creating a variation of an existing variable product (use woocommerce_create_product_variation)
Error Handling:
Returns "Error: Bad request (400)" if sku is already in use by another product.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | Stock keeping unit, must be unique in the store | |
| name | Yes | Product name | |
| type | No | Product type (default: simple) | simple |
| status | No | Product status (default: publish) | publish |
| weight | No | Weight as numeric string, in the store's configured weight unit | |
| tag_ids | No | Tag IDs to assign to the product | |
| image_urls | No | Image URLs to attach to the product, in display order | |
| sale_price | No | Sale price as numeric string, e.g. '19.99' | |
| description | No | Full product description (HTML allowed) | |
| category_ids | No | Category IDs to assign to the product | |
| manage_stock | No | Whether to track stock quantity for this product | |
| stock_status | No | Stock status | |
| regular_price | No | Regular price as numeric string, e.g. '29.99' | |
| stock_quantity | No | Stock quantity (only used if manage_stock is true) | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
| short_description | No | Short product description (HTML allowed) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide minimal info (readOnlyHint=false, etc.), but the description adds significant behavioral details: image URLs are imported, response can be markdown or JSON, SKU uniqueness enforcement, and error handling. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (Args, Returns, Examples, Error Handling). However, the Args list is lengthy and largely repeats schema information, which could be more concise. Still, it is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 16 parameters, the description covers return value, error scenarios, and usage examples. It provides sufficient context for an AI agent to correctly select and invoke the tool, including differentiation from sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value beyond schema by providing examples, default values, constraints (e.g., 'must be unique store-wide' for SKU, 'numeric strings' for prices), and error handling context. The Args section summarizes parameters effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new product in the WooCommerce catalog' with a list of parameters and examples. It distinguishes from sibling tools like woocommerce_create_product_variation by explicitly stating not to use for creating variations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes explicit examples of when to use ('add a new t-shirt product') and when not to use ('creating a variation... use woocommerce_create_product_variation'). Also covers error handling for duplicate SKU, guiding proper invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_create_product_categoryCreate Product CategoryA
Create a new product category.
Args:
name (string, required)
description (string, optional)
parent (number, optional): parent category ID
response_format ('markdown'|'json'): default 'markdown'
Returns: The newly created category object with its assigned ID.
Error Handling:
Returns "Error: Bad request (400)" if a category with this name/slug already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Category name | |
| parent | No | Parent category ID, for nested categories | |
| description | No | ||
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses error handling (400 on duplicate category) and states that it returns the newly created object with an ID. Annotations indicate this is a write operation with potential side effects (openWorldHint=true), and the description does not contradict them. However, it does not detail any other side effects or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a single line for purpose, a bullet-like listing of arguments, and a brief error handling note. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (creating a category with 4 parameters, 1 required), the description covers the main behavior, return value, and error condition. It could mention prerequisites (e.g., authentication) or more on side effects, but overall it is sufficiently complete for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes 3 of 4 parameters (name, parent, response_format). The tool description adds minimal extra meaning (e.g., for parent and response_format, it echoes the schema). The 'description' parameter is left without elaboration in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Create a new product category' which is a specific verb+resource combination. The tool name and title also clearly indicate the action of creating a product category in WooCommerce. This effectively distinguishes it from sibling tools like update or delete categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus alternatives (e.g., updating or deleting categories). The error handling hint about duplicate names implies a precondition, but there is no direct statement about when creation is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_create_product_tagCreate Product TagA
Create a new product tag.
Args:
name (string, required)
description (string, optional)
response_format ('markdown'|'json'): default 'markdown'
Returns: The newly created tag object with its assigned ID.
Error Handling:
Returns "Error: Bad request (400)" if a tag with this name/slug already exists.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Tag name | |
| description | No | ||
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (which indicate non-readonly, non-destructive), the description adds the error handling condition that a 400 error occurs if a tag with the same name exists. This provides useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured with clear sections for Args, Returns, and Error Handling. Every sentence serves a purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with 3 parameters and no output schema, the description fully covers the purpose, parameters, return value, and error handling. It is self-contained and informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description repeats the parameter names and types from the schema but adds little additional meaning. The schema already covers name and response_format descriptions; the description adds a note but not deeper semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Create a new product tag.' It uses a specific verb and resource, and distinguishes itself from sibling tools like woocommerce_list_product_tags and woocommerce_update_product_tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly guide on when to use this tool versus alternatives. It implies its use for creating tags but offers no when-not-to-use advice or comparisons with other tag-relevant tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_create_product_variationCreate WooCommerce Product VariationA
Create a new variation for an existing variable product. The parent product must already have variation-enabled attributes defined (e.g. Size, Color).
Args:
product_id (number, required): parent variable product ID
attributes (array, required): [{name, option}] matching the parent's variation attributes
sku, regular_price, sale_price, manage_stock, stock_quantity, stock_status (optional)
response_format ('markdown'|'json'): default 'markdown'
Returns: The newly created variation object.
Examples:
Use when: "add a Large/Blue variation at $30" -> attributes=[{name:"Size",option:"Large"},{name:"Color",option:"Blue"}], regular_price="30.00"
Error Handling:
Returns "Error: Bad request (400)" if the attribute name/option doesn't match the parent product's defined attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | ||
| attributes | Yes | The attribute/option combination that defines this variation | |
| product_id | Yes | The parent variable product's numeric ID | |
| sale_price | No | Sale price as numeric string | |
| manage_stock | No | ||
| stock_status | No | ||
| regular_price | No | Regular price as numeric string | |
| stock_quantity | No | ||
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate write operation and non-idempotency. The description adds the prerequisite about parent attributes and specific error handling for attribute mismatches, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured with sections for args, returns, examples, and error handling. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity and lack of output schema, the description covers the main purpose, prerequisites, and error cases. It could mention potential duplicate creation, but overall it is sufficient for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 56% schema coverage, the description compensates by listing all optional parameters and providing a clear example of the required 'attributes' array. It explains the structure but could detail more default behaviors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new variation for an existing variable product, using specific verbs and resource. It distinguishes itself from sibling tools like update or delete variations through its verb and prerequisite of parent product attributes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete 'Use when' example and clarifies the prerequisite of having variation-enabled attributes. It lacks explicit when-not instructions but the example and context sufficiently guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_delete_couponDelete WooCommerce CouponADestructiveIdempotent
Delete a coupon. By default this moves it to the trash (recoverable); set force=true to permanently delete it.
Args:
coupon_id (number, required)
force (boolean, default false)
Returns: Confirmation with the deleted coupon's id and code.
Error Handling:
Returns "Error: Resource not found (404)" if coupon_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | If true, permanently delete instead of moving to trash (default: false) | |
| coupon_id | Yes | The numeric WooCommerce coupon ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation claims idempotentHint=true, but the description's error handling shows that deleting a non-existent coupon returns a 404 error, meaning the tool is not idempotent. This contradiction causes a score of 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (5 sentences) and well-structured with sections for purpose, args, returns, and error handling. No fluff, though could be slightly more front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool, the description covers purpose, behavior (trash vs permanent), and error handling. It lacks mention of authorization or prerequisites, but these are likely assumed in the WooCommerce context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description restates the parameters and their effects, but adds no new meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'delete' and the resource 'coupon', and distinguishes this tool from sibling delete tools for other entities (e.g., product, order). It also adds nuance about trash vs permanent deletion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use force=true vs default, and provides error handling for invalid coupon_id. While it doesn't explicitly mention alternatives, the sibling context makes it clear that this is the only delete coupon tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_delete_customerDelete WooCommerce CustomerADestructiveIdempotent
Permanently delete a customer account. Customers don't support trash; this cannot be undone. Existing orders remain but become unlinked from the account.
Args:
customer_id (number, required)
reassign (number, optional): user ID to reassign content to
Returns: Confirmation of deletion.
Error Handling:
Returns "Error: Resource not found (404)" if customer_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| reassign | No | Optional user ID to reassign this customer's posts/content to | |
| customer_id | Yes | The numeric WooCommerce customer ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true and idempotentHint=true, but the description adds critical context: customers don't support trash, deletion is permanent, and existing orders become unlinked. Error handling is also described (404 if not found). This goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for purpose, args, returns, and error handling. It is concise but includes some redundancy (Args list mirrors schema). It earns its place without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers irreversibility, effect on orders, error handling, and parameters. There is no output schema, so the mention of 'Confirmation of deletion' is helpful but vague. Overall, it provides sufficient context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions for both parameters (customer_id and reassign). The description lists these in the 'Args' section but does not add significant new meaning. The reassign parameter's purpose is already clear from the schema. Thus, baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool permanently deletes a customer account, with the verb 'delete' and resource 'customer account'. It also highlights that the action cannot be undone, effectively distinguishing it from other sibling tools like 'woocommerce_delete_product' or 'woocommerce_delete_coupon'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a strong warning about the permanent nature and the effect on existing orders (they remain unlinked). However, it does not explicitly state when to use this tool versus alternatives (e.g., disabling a customer). The guidance is clear but could be more comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_delete_orderDelete WooCommerce OrderADestructiveIdempotent
Delete an order. By default this moves the order to the trash (recoverable); set force=true to permanently delete it.
Args:
order_id (number, required)
force (boolean, default false)
Returns: Confirmation with the deleted order's id, number, and status.
Error Handling:
Returns "Error: Resource not found (404)" if order_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | If true, permanently delete instead of moving to trash (default: false) | |
| order_id | Yes | The numeric WooCommerce order ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Disclosures go beyond annotations: annotations give destructiveHint=true and idempotentHint=true; description adds that default is recoverable trash, force=true is permanent, and includes error responses. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, front-loaded with the main action, and uses clear structure with a bullet-like list for parameters. Every sentence adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description includes return values (id, number, status) and error handling. All relevant context for a delete operation is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds value by explaining the impact of force parameter (trash vs permanent) and error handling context, which is not in schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete an order' and distinguishes between moving to trash (default, recoverable) and permanent deletion with force=true. It is specific to orders and differentiates from sibling tools like update_order or create_order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the default behavior (trash) and the alternative (force=true), providing clear when-to-use guidance. It also includes error handling for missing orders. Could mention when to use this versus other order-related tools, but not essential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_delete_productDelete WooCommerce ProductADestructiveIdempotent
Delete a product. By default this moves the product to the trash (recoverable); set force=true to permanently delete it.
Args:
product_id (number, required)
force (boolean): permanently delete if true (default: false, moves to trash)
Returns: Confirmation with the deleted product's id, name, and status.
Error Handling:
Returns "Error: Resource not found (404)" if product_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | If true, permanently delete instead of moving to trash (default: false) | |
| product_id | Yes | The numeric WooCommerce product ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds that default move-to-trash is recoverable, and error handling for missing product is provided. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise and well-structured with sections for Args, Returns, and Error Handling. Front-loaded with the key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without output schema, the description explains the return (confirmation of id, name, status) and covers error handling. All necessary context is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with full parameter descriptions. The description adds behavioral meaning to force (permanent vs trash) and clarifies product_id requirement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes a product, explains default trash behavior vs permanent deletion, and is distinct from sibling tools for tags, categories, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Describes when to use (deleting a product) and covers the force parameter for permanent deletion. Does not explicitly exclude alternatives but context is clear from sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_delete_product_categoryDelete Product CategoryADestructiveIdempotent
Permanently delete a product category. Products assigned to it are not deleted, just unassigned.
Args:
id (number, required)
force (boolean, default true): required to be true, terms do not support trash
Returns: Confirmation of deletion.
Error Handling:
Returns "Error: Resource not found (404)" if the ID doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The category's numeric ID | |
| force | No | Terms don't support trash; deletion is permanent (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint, idempotentHint), the description adds that deletion is permanent, force must be true, and products are unassigned. It also documents the expected 404 error response, providing clear behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with sections for Args, Returns, and Error Handling. Every sentence adds useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 parameters, no output schema), the description covers purpose, parameters, side effects, and error handling completely. No missing information is evident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds meaning by explaining the force parameter's necessity (terms don't support trash) and confirming permanent deletion, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool permanently deletes a product category and distinguishes it by clarifying that products are unassigned, not deleted. This differentiates from product deletion tools among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for permanent deletion but does not explicitly specify when to use this tool versus alternatives like updating the category. No direct exclusion criteria or alternative suggestions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_delete_product_tagDelete Product TagADestructiveIdempotent
Permanently delete a product tag. Products assigned to it are not deleted, just unassigned.
Args:
id (number, required)
force (boolean, default true): required to be true, terms do not support trash
Returns: Confirmation of deletion.
Error Handling:
Returns "Error: Resource not found (404)" if the ID doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The tag's numeric ID | |
| force | No | Terms don't support trash; deletion is permanent (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior, but the description adds that deletion is permanent, force must be true, and includes error handling (404). This goes beyond annotations by specifying conditions and outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, using clear sections for args, returns, and error handling. Every sentence provides value, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deletion tool with no output schema, the description covers the key behavioral aspects: permanent deletion, product unassignment, force requirement, and error response. It is sufficiently complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The description repeats schema info for 'force' and adds minimal extra context ('required to be true'). It does not add significant meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it permanently deletes a product tag, and explicitly clarifies that associated products are not deleted. This provides a specific verb and resource, distinguishing it from sibling delete tools like woocommerce_delete_product.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions that products are unassigned, implying safe deletion, but does not explicitly state when to use this tool versus alternatives like updating a tag or deleting other resources. No direct when-not-to-use guidance is provided, but the context of unassignment offers some usage insight.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_delete_product_variationDelete WooCommerce Product VariationADestructiveIdempotent
Permanently delete a product variation.
Args:
product_id, variation_id (number, required)
force (boolean, default true): variations do not support trash, so deletion is always permanent
Returns: Confirmation of deletion.
Error Handling:
Returns "Error: Resource not found (404)" if the IDs don't match an existing variation.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Variations don't support trash; deletion is permanent (default: true) | |
| product_id | Yes | ||
| variation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and the description reinforces this by stating deletion is permanent and that variations do not support trash. It also describes error responses, adding context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with a clear purpose line followed by structured sections for args, returns, and error handling. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and annotations, the description covers all necessary aspects: action, parameters, permanence, return confirmation, and error handling. No output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides clear explanations for all three parameters, including the default/behavior of 'force', which the schema only partially covers. This compensates for the low schema description coverage (33%).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Permanently delete a product variation,' which clearly identifies the action (delete) and resource (product variation). It distinguishes this tool from sibling delete tools like woocommerce_delete_product or woocommerce_delete_product_tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool vs alternatives (e.g., when to delete a variation vs a product). The description only explains that deletion is permanent and how errors are handled.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_get_couponGet WooCommerce CouponARead-onlyIdempotent
Retrieve full details for a single coupon, including restrictions (min/max spend, product/category restrictions, email restrictions).
Args:
coupon_id (number, required)
response_format ('markdown'|'json'): default 'markdown'
Returns: Full coupon object.
Error Handling:
Returns "Error: Resource not found (404)" if coupon_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| coupon_id | Yes | The numeric WooCommerce coupon ID | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds value by specifying the error response format and the response_format options, providing additional behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with clear sections (Args, Returns, Error Handling). It front-loads the main purpose and uses minimal text to convey essential information. Every sentence serves a purpose without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description states 'Returns: Full coupon object' and lists included restrictions. It also covers error handling. While it could list more details (e.g., usage counts), it is adequate for a single-resource retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already fully describes both parameters. The description merely restates parameter names and options without adding new semantic meaning. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves full details for a single coupon, including specific restrictions. This distinguishes it from sibling tools like woocommerce_list_coupons (list) and woocommerce_create_coupon (create). The verb 'Retrieve' and resource 'single coupon' are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives (e.g., list vs get, or when to use markdown vs json). It only mentions error handling for non-existent IDs. Usage context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_get_customerGet WooCommerce CustomerARead-onlyIdempotent
Retrieve full details for a single customer, including billing/shipping addresses, order count, and lifetime spend.
Args:
customer_id (number, required)
response_format ('markdown'|'json'): default 'markdown'
Returns: Full customer object.
Error Handling:
Returns "Error: Resource not found (404)" if customer_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes | The numeric WooCommerce customer ID | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds useful context: the return of a full customer object and explicit error handling for missing customer IDs. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear structure: a one-sentence purpose, followed by Args, Returns, and Error Handling sections. Every sentence adds value, with no unnecessary repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, read-only, no output schema), the description covers purpose, parameters, return type, included fields, and error behavior. It sufficiently equips an agent to invoke the tool correctly, though more detail on the return object structure could be provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the schema (100% coverage). The description merely restates the parameter names and types without adding new semantic information beyond what the schema provides. Thus, it meets the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve full details for a single customer', specifying the action (retrieve) and the target (single customer). It lists specific data returned (billing/shipping addresses, order count, lifetime spend), distinguishing it from sibling tools like list, create, update, and delete customers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the purpose implies use for retrieving a specific customer's full details, the description does not explicitly state when to use this tool versus alternatives (e.g., woocommerce_list_customers for browsing multiple customers). No direct when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_get_orderGet WooCommerce OrderARead-onlyIdempotent
Retrieve full details for a single order, including line items, billing/shipping addresses, payment info, shipping/fee/coupon lines, and totals.
Args:
order_id (number, required)
response_format ('markdown'|'json'): default 'markdown'
Returns: Full order object.
Error Handling:
Returns "Error: Resource not found (404)" if order_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | The numeric WooCommerce order ID | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive. Description adds value by detailing the return (full order object) and error handling behavior (specific 404 message). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with clearly separated sections for purpose, arguments, returns, and error handling. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple retrieval with 2 parameters and no output schema, the description fully covers what the tool does, its parameters, return content, and error handling. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes both parameters with 100% coverage (order_id as integer, response_format as enum with default). Description reiterates response_format default and mentions markdown/json but adds no new semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Retrieve full details for a single order' and lists included fields (line items, addresses, payment, etc.). This distinguishes it from sibling list_orders, which returns a list, not full details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies use for retrieving a single order's full details. It does not explicitly contrast with list_orders, but the purpose is clear. Error handling for 404 adds practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_get_productGet WooCommerce ProductARead-onlyIdempotent
Retrieve full details for a single product by ID, including description, pricing, stock, images, categories, tags, attributes, and (for variable products) the list of variation IDs.
Args:
product_id (number): The product's numeric ID
response_format ('markdown'|'json'): default 'markdown'
Returns: Full product object.
Error Handling:
Returns "Error: Resource not found (404)" if the product ID doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | The numeric WooCommerce product ID | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, covering safety. The description adds value by specifying error handling (returns 404 on not found) and mentioning the return format, providing behavioral details beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise with two paragraphs and bullet-style Args. It front-loads the main purpose and includes all essential information without any filler, making every sentence valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking an output schema, the description lists the fields returned (description, pricing, stock, etc.) and covers error handling. Given the tool's simplicity (single product retrieval), the description is complete enough for an agent to understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully describes both parameters. The description paraphrases product_id and response_format, but also adds the note that the function returns a 'Full product object,' which is not in the schema, adding meaningful context beyond the structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Retrieve full details for a single product by ID' and lists the specific fields included, clearly distinguishing it from sibling tools like 'woocommerce_list_products' which lists multiple products and 'woocommerce_get_product_variation' for variations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this tool is for retrieving a single product by ID. While it does not explicitly say when not to use it or mention alternatives, the context of sibling tools makes the usage context evident. It is adequate but could be improved with explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_get_product_variationGet WooCommerce Product VariationARead-onlyIdempotent
Retrieve full details for a single product variation.
Args:
product_id (number, required): parent product ID
variation_id (number, required): variation ID
response_format ('markdown'|'json'): default 'markdown'
Returns: Full variation object including attributes, pricing, and stock.
Error Handling:
Returns "Error: Resource not found (404)" if either ID is wrong or the variation doesn't belong to that product.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | The parent variable product's numeric ID | |
| variation_id | Yes | The variation's numeric ID | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true, idempotentHint: true, destructiveHint: false, so the description's burden is low. It adds error handling details (specific HTTP 404 message) and return format info, which provide useful behavioral context without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with an 'Args:' section, a 'Returns:' line, and an 'Error Handling:' section. It is fairly concise and front-loaded with the main purpose. Minor redundancy (e.g., listing parameters that are already in schema) but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately explains return values ('Full variation object including attributes, pricing, and stock') and error behavior. It covers enough for a read-only tool, though the return format is not fully detailed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes all parameters. The description restates them but adds the 'parent product ID' and 'variation ID' labels, and specifies the default value for response_format. This adds marginal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve full details for a single product variation,' using a specific verb and resource. It distinguishes from sibling tools like 'woocommerce_list_product_variations' (list vs. single) and 'woocommerce_get_product' (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a single variation by requiring both product_id and variation_id. It does not explicitly compare with alternatives or state when not to use, but the context from sibling tools makes the purpose clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_get_report_totalsGet WooCommerce Report TotalsARead-onlyIdempotent
Get a breakdown of total counts by status for a resource (e.g. how many orders are in each status, or total product/customer/coupon/review counts).
Args:
resource: 'orders'|'products'|'customers'|'coupons'|'reviews'
response_format ('markdown'|'json'): default 'markdown'
Returns: list of {slug, name, total} entries, e.g. for orders: pending/processing/completed/etc counts.
Examples:
Use when: "how many orders are currently pending vs completed" -> resource="orders"
| Name | Required | Description | Default |
|---|---|---|---|
| resource | Yes | Which resource to get status/total breakdown for | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, openWorld, idempotent, and non-destructive behavior. The description adds context about the return structure (list of {slug, name, total}) and the effect of the response_format parameter. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with clear separation of purpose, parameters, return structure, and example. It is front-loaded with the main action and resource types. No unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, full schema coverage, and no output schema, the description provides sufficient context: it explains each parameter, the output format, and gives an example. It is complete for its complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%. The description adds value by clarifying the default for response_format and providing an example that demonstrates the parameter usage and output structure. This goes beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: getting a breakdown of total counts by status for a resource. It specifies the five valid resources (orders, products, customers, coupons, reviews) and gives an example. This distinguishes it from sibling reporting tools like woocommerce_get_sales_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example of when to use the tool ('how many orders are currently pending vs completed') and explains the resource and response_format parameters. However, it does not explicitly state when not to use it or compare it to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_get_sales_reportGet WooCommerce Sales ReportARead-onlyIdempotent
Retrieve aggregate sales totals (revenue, orders, items, tax, shipping, discounts, refunds) for a period or custom date range.
Args:
period: 'week'|'month'|'last_month'|'year' (optional; omit if using date_min/date_max)
date_min / date_max (string, optional): YYYY-MM-DD custom range, overrides 'period'
response_format ('markdown'|'json'): default 'markdown'
Returns: Sales totals summary. If neither period nor date range is given, WooCommerce defaults to the current week.
Examples:
Use when: "what were our sales last month" -> period="last_month"
Use when: "sales between June 1 and June 30" -> date_min="2026-06-01", date_max="2026-06-30"
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Predefined period: 'week', 'month', 'last_month', 'year'. Overridden by date_min/date_max if provided. | |
| date_max | No | End date (YYYY-MM-DD), for a custom range | |
| date_min | No | Start date (YYYY-MM-DD), for a custom range | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds context about the default period (current week) but does not disclose other behavioral traits like rate limits or exact return structure. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an args list and examples, front-loading the purpose. It is reasonably concise, though the first sentence could be streamlined. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description mentions 'Sales totals summary' but does not enumerate fields. However, for a simple reporting tool with good annotations and parameter documentation, this is adequate. The description covers when to use and parameter interplay.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning beyond the schema by explaining that date_min/date_max override period, specifying the default response_format, and providing usage examples. This justifies a score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves aggregate sales totals (revenue, orders, items, tax, shipping, discounts, refunds) for a period or custom date range. This distinguishes it from sibling tools like woocommerce_get_top_sellers_report and woocommerce_get_report_totals, which focus on different metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use period versus date_min/date_max, with examples. It explains the default behavior when no parameters are given. However, it does not explicitly mention when to use alternative tools, such as using woocommerce_get_top_sellers_report for top sellers, which would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_get_top_sellers_reportGet WooCommerce Top Sellers ReportARead-onlyIdempotent
Retrieve the best-selling products (by quantity sold) for a period or custom date range.
Args:
period: 'week'|'month'|'last_month'|'year' (optional; omit if using date_min/date_max)
date_min / date_max (string, optional): YYYY-MM-DD custom range, overrides 'period'
response_format ('markdown'|'json'): default 'markdown'
Returns: list of products with product_id, title, and quantity sold, ordered by quantity descending. Defaults to the current week if no period/range given.
Examples:
Use when: "what were our best selling products this year" -> period="year"
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Predefined period: 'week', 'month', 'last_month', 'year'. Overridden by date_min/date_max if provided. | |
| date_max | No | End date (YYYY-MM-DD), for a custom range | |
| date_min | No | Start date (YYYY-MM-DD), for a custom range | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the return format (list of products with id, title, quantity), ordering (descending by quantity), and default behavior (current week). This provides useful context beyond the annotations, though annotations already cover safety and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections (Args, Returns, Examples) and uses concise language. Every sentence adds value without redundancy. It is front-loaded with the core purpose and provides details efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the absence of an output schema, the description covers all necessary aspects: return structure (product_id, title, quantity), ordering, default behavior, and parameter relationships. It provides enough information for an AI agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining the mutual exclusivity of 'period' and 'date_min/date_max' ('overrides period'), specifying defaults (current week when no period/range given), and providing example usage. This goes beyond the schema's simple descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Retrieve') and resource ('best-selling products') and specifies the scope ('by quantity sold for a period or custom date range'). It distinguishes itself from sibling tools like woocommerce_list_products (which lists all products) and woocommerce_get_sales_report (which provides overall sales figures).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete examples for when to use the tool (e.g., 'What were our best selling products this year?') and explains parameter mutual exclusivity between 'period' and 'date_min/date_max'. It does not explicitly mention when not to use it or compare with alternatives like woocommerce_list_products, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_list_couponsList WooCommerce CouponsARead-onlyIdempotent
Search and list discount coupons defined in the store.
Args:
search (string, optional): match against coupon code
code (string, optional): exact code match
orderby / order: sorting (default date/desc)
page / per_page: pagination (default page=1, per_page=20, max 100)
response_format ('markdown'|'json'): default 'markdown'
Returns: paginated list of coupons with code, amount, discount type, usage count/limit, and expiry.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Filter by exact coupon code | |
| page | No | Page number to retrieve, 1-based (default: 1) | |
| order | No | Sort direction (default: desc) | desc |
| search | No | Search term to match against coupon code | |
| orderby | No | Sort field (default: date) | date |
| per_page | No | Number of results per page, 1-100 (default: 20) | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral context like default pagination (max 100 per page), optional filters, and return format details, but does not mention error handling or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear 'Args:' section listing parameters and their defaults. Every sentence adds value; no redundant or wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers search, pagination, sorting, and output formats. It explains return fields (code, amount, discount type, usage count/limit, expiry) without an output schema, which is adequate for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions. The description adds value by clarifying that 'search' matches against coupon code and 'code' is an exact match, and reiterates default values for sorting and pagination.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Search and list discount coupons defined in the store' with a specific verb and resource, distinguishing it from sibling tools like woocommerce_get_coupon (single) and create/update/delete operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing/searching coupons with filters, pagination, and sorting, but does not explicitly provide when-not-to-use or compare with alternatives like woocommerce_get_coupon.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_list_customersList WooCommerce CustomersARead-onlyIdempotent
Search and list registered customers (does not include guest checkout customers, who aren't stored as customer records).
Args:
search (string, optional): match against name/email/username
email (string, optional): exact match
role (string, optional): WordPress role filter
orderby / order: sorting (default name/asc)
page / per_page: pagination (default page=1, per_page=20, max 100)
response_format ('markdown'|'json'): default 'markdown'
Returns: paginated list of customers with id, email, name, order count, and total spent.
Examples:
Use when: "find the customer with email jane@example.com" -> email="jane@example.com"
Don't use when: looking up who placed a guest order (check the order's billing details instead)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to retrieve, 1-based (default: 1) | |
| role | No | Filter by WordPress user role, e.g. 'customer', 'subscriber' | |
| No | Filter by exact email address | ||
| order | No | Sort direction (default: asc) | asc |
| search | No | Search term to match against name/email/username | |
| orderby | No | Sort field (default: name) | name |
| per_page | No | Number of results per page, 1-100 (default: 20) | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. Description adds important nuance that guest checkout customers are excluded, and details pagination/sorting defaults, enhancing understanding beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with Args, Returns, Examples sections. Every sentence adds value; no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, description details return fields (id, email, name, order count, total spent) and covers all parameters with pagination limits, fully informing usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds usage examples (e.g., email='jane@example.com') and organizes parameters with clear explanations, providing extra context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search and list registered customers' with a specific exclusion of guest checkout customers, distinguishing it from other tools like 'woocommerce_get_customer'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit examples of when to use (e.g., find customer by email) and when not to use (guest order lookup with pointer to billing details), offering clear alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_list_order_notesList WooCommerce Order NotesARead-onlyIdempotent
List the internal/customer notes attached to an order (e.g. fulfillment updates, payment gateway logs).
Args:
order_id (number, required)
type: 'any'|'customer'|'internal' (default: any)
response_format ('markdown'|'json'): default 'markdown'
Returns: list of notes with id, author, date, content, and whether it's customer-visible.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by note type (default: any) | any |
| order_id | Yes | The numeric WooCommerce order ID | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the behavior is transparent. The description adds that the tool returns a list of notes with specific fields, which is consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the purpose, and includes a clear Args list and return description. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations and complete schema, the description fully covers the tool's behavior. It specifies the return fields despite the lack of an output schema, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The description adds clarity by explaining the response_format options (markdown for human-readable, json for machine-readable) and the type parameter's default value, enhancing understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists notes attached to an order (internal/customer), with examples like fulfillment updates and payment logs. It is distinct from sibling tools like create_order_note or list_orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context on when to use (listing notes for an order) with examples, but does not explicitly state when not to use or contrast with alternatives like create_order_note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_list_order_refundsList WooCommerce Order RefundsARead-onlyIdempotent
List refunds issued against an order.
Args:
order_id (number, required)
page / per_page: pagination (default page=1, per_page=20, max 100)
response_format ('markdown'|'json'): default 'markdown'
Returns: list of refunds with id, amount, reason, and refunded line items.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to retrieve, 1-based (default: 1) | |
| order_id | Yes | The numeric WooCommerce order ID | |
| per_page | No | Number of results per page, 1-100 (default: 20) | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description confirms the read-only nature and adds return fields, but does not elaborate on other behavioral traits like rate limits or side effects beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a single sentence for purpose and a compact parameter listing. It is front-loaded and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the description specifies returned fields (id, amount, reason, refunded line items), which is sufficient for a list tool. More detail on pagination behavior or error conditions would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description repeats parameter defaults and options, adding marginal value beyond the schema (e.g., grouping the parameters). It does not introduce new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List refunds issued against an order.' The verb 'list' and resource 'refunds' with context 'issued against an order' is specific and distinguishes from sibling tools like create_order_refund or list_orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description focuses on parameters but does not explicitly state when to use this tool compared to alternatives like get_order or create_order_refund. Usage context is implied but not detailed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_list_ordersList WooCommerce OrdersARead-onlyIdempotent
Search and list store orders, with filters for status, customer, date range, and product.
Args:
status: 'any'|'pending'|'processing'|'on-hold'|'completed'|'cancelled'|'refunded'|'failed'|'trash' (default: any)
customer (number, optional): customer ID
search (string, optional)
after / before (string, optional): ISO8601 dates bounding date_created
product (number, optional): only orders containing this product ID
orderby / order: sorting (default date/desc)
page / per_page: pagination (default page=1, per_page=20, max 100)
response_format ('markdown'|'json'): default 'markdown'
Returns: paginated list of orders with id, number, status, total, currency, customer, and line item count.
Examples:
Use when: "show me pending orders from this week" -> status="pending", after="2026-06-29T00:00:00"
Use when: "how many orders has customer 15 placed" -> customer=15
Don't use when: you need full line-item and address detail for one order (use woocommerce_get_order)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to retrieve, 1-based (default: 1) | |
| after | No | ISO8601 date - only orders created after this date | |
| order | No | Sort direction (default: desc) | desc |
| before | No | ISO8601 date - only orders created before this date | |
| search | No | Search term (matches order number, billing details, etc.) | |
| status | No | Filter by order status (default: any) | any |
| orderby | No | Sort field (default: date) | date |
| product | No | Filter to orders that contain this product ID | |
| customer | No | Filter to orders from a specific customer ID | |
| per_page | No | Number of results per page, 1-100 (default: 20) | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context beyond annotations: pagination details (default per_page=20, max 100), response format options, and what fields are returned. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an introductory sentence, parameter list, return info, and examples. It is not excessively verbose, though it could be slightly tighter. Still, every sentence adds value and is front-loaded with the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, no required, and no output schema, the description covers all parameters, explains return fields (id, number, status, total, currency, customer, line item count), and notes pagination limits. This is sufficient for an agent to understand the tool's behavior and output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra value by listing all parameters with defaults, providing usage examples (e.g., status, after, customer), and clarifying the search parameter matches billing details. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Search and list store orders' with specific filters. It distinguishes from the sibling tool 'woocommerce_get_order' by noting when not to use it for full detail, and from other list tools by focusing on orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases with examples ('show me pending orders from this week') and explicitly tells when not to use this tool ('Don't use when: you need full line-item and address detail for one order (use woocommerce_get_order)'). This gives clear guidance on when to use vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_list_product_categoriesList Product CategorysARead-onlyIdempotent
List product categorys defined in the store.
Args:
search (string, optional): match against name
parent (number, optional): filter to children of a given category ID
orderby / order: sorting (default name/asc)
page / per_page: pagination (default page=1, per_page=20, max 100)
response_format ('markdown'|'json'): default 'markdown'
Returns: paginated list of categorys with id, name, slug, and product count.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to retrieve, 1-based (default: 1) | |
| order | No | Sort direction (default: asc) | asc |
| parent | No | Filter to children of this parent category ID | |
| search | No | Search term to match against Category name | |
| orderby | No | Field to sort by (default: name) | name |
| per_page | No | Number of results per page, 1-100 (default: 20) | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true, destructiveHint false, idempotentHint true. Description adds useful behavioral details: returns paginated list with specific fields (id, name, slug, product count), default pagination, and max per_page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a bullet-like structure that clearly presents parameters and return values. Every sentence contributes meaning without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and the presence of annotations, the description is complete. It explains all parameters, return format, and default values. No output schema exists but the return description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds value by explaining parameter purposes (search matches name, parent filters children, etc.) in a clear, organized list, going beyond the schema's descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists product categories, which is a specific verb+resource. It distinguishes from sibling tools that create, update, or delete categories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use vs alternatives guidance. However, the purpose is self-evident, and there is no direct alternative like a 'get' for categories. The absence of usage context lowers the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_list_productsList WooCommerce ProductsARead-onlyIdempotent
Search and list products in the WooCommerce store catalog.
Supports filtering by search term, SKU, status, type, category, tag, stock status, sale status, and price range. Does NOT return product variations for variable products - use woocommerce_list_product_variations for those.
Args:
search (string, optional): Match against name/SKU/description
sku (string, optional): Exact SKU match
status ('any'|'draft'|'pending'|'private'|'publish'): default 'any'
type ('simple'|'grouped'|'external'|'variable'): optional
category (string, optional): category ID(s), comma-separated
tag (string, optional): tag ID(s), comma-separated
stock_status ('instock'|'outofstock'|'onbackorder'): optional
featured (boolean, optional)
on_sale (boolean, optional)
min_price / max_price (string, optional): numeric string bounds
orderby / order: sorting controls
page / per_page: pagination (default page=1, per_page=20, max 100)
response_format ('markdown'|'json'): default 'markdown'
Returns: paginated list of products with id, name, sku, type, status, pricing, stock, and categories.
Examples:
Use when: "find all out of stock products" -> stock_status="outofstock"
Use when: "show products under $20 on sale" -> on_sale=true, max_price="20.00"
Don't use when: you need details of one known product ID (use woocommerce_get_product)
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | Filter by an exact SKU | |
| tag | No | Filter by tag ID (comma-separated for multiple) | |
| page | No | Page number to retrieve, 1-based (default: 1) | |
| type | No | Filter by product type | |
| order | No | Sort direction (default: desc) | desc |
| search | No | Search term to match against product name/SKU/description | |
| status | No | Filter by product status (default: any) | any |
| on_sale | No | Filter to only products currently on sale | |
| orderby | No | Field to sort results by (default: date) | date |
| category | No | Filter by category ID (comma-separated for multiple) | |
| featured | No | Filter to only featured (true) or non-featured (false) products | |
| per_page | No | Number of results per page, 1-100 (default: 20) | |
| max_price | No | Maximum price filter (numeric string, e.g. '99.99') | |
| min_price | No | Minimum price filter (numeric string, e.g. '10.00') | |
| stock_status | No | Filter by stock status | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds value by detailing output structure (paginated list with specific fields), response_format options, and limitations (no variations coverage). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into sections: overview, exclusion note, parameter list with inline explanations, return value summary, and usage examples. It is concise yet comprehensive, with no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 16 parameters, 100% schema coverage, and no output schema, the description fully compensates by explaining return structure, providing examples, and referencing sibling tools. It is complete and actionable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant meaning by grouping parameters, providing explanation of how each is used in context (e.g., 'Match against name/SKU/description' for search), and including practical examples that clarify parameter combinations (e.g., on_sale and max_price).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches and lists products in the WooCommerce store catalog. It distinguishes itself by noting it does not return variations, directing users to woocommerce_list_product_variations for that purpose, and differentiates from woocommerce_get_product for single product retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided, including when to use (e.g., 'find all out of stock products'), when not to use (e.g., needing details of a known product ID), and alternative tools to use instead (woocommerce_get_product, woocommerce_list_product_variations).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_list_product_tagsList Product TagsARead-onlyIdempotent
List product tags defined in the store.
Args:
search (string, optional): match against name
orderby / order: sorting (default name/asc)
page / per_page: pagination (default page=1, per_page=20, max 100)
response_format ('markdown'|'json'): default 'markdown'
Returns: paginated list of tags with id, name, slug, and product count.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to retrieve, 1-based (default: 1) | |
| order | No | Sort direction (default: asc) | asc |
| search | No | Search term to match against Tag name | |
| orderby | No | Field to sort by (default: name) | name |
| per_page | No | Number of results per page, 1-100 (default: 20) | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate safe, read-only behavior. Description adds useful context: returns paginated list with id, name, slug, product count, and default response format. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: one sentence for purpose, bullet points for parameters. No fluff. Information is well-structured and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no output schema, the description fully specifies the return value (paginated list with specific fields) and all parameters are documented. Complete for its purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100% coverage). Description adds meaning: 'match against name' for search, defaults for sorting and pagination, and response_format options.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists product tags, which is distinct from sibling tools like create/delete tags. Uses specific verb 'List' and resource 'product tags'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like woocommerce_list_product_categories or woocommerce_list_products. No mention of scenarios or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_list_product_variationsList WooCommerce Product VariationsARead-onlyIdempotent
List all variations of a variable product (e.g. a T-shirt with Size/Color variations).
Args:
product_id (number, required): the parent variable product's ID
page / per_page: pagination (default page=1, per_page=20, max 100)
response_format ('markdown'|'json'): default 'markdown'
Returns: paginated list of variations with id, sku, price, stock, and attribute options.
Error Handling:
Returns an empty list if the product exists but isn't of type 'variable' or has no variations.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to retrieve, 1-based (default: 1) | |
| per_page | No | Number of results per page, 1-100 (default: 20) | |
| product_id | Yes | The parent variable product's numeric ID | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds valuable behavioral details: return format options, pagination limits (max 100), default values, and error handling behavior. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with clear sections (Args, Returns, Error Handling). It is front-loaded with the core purpose. No redundant or excessive text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and rich annotations, the description covers purpose, parameters, return fields (id, sku, price, stock, attribute options), pagination, and error handling. It provides sufficient context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds minimal extra nuance (e.g., max 100 for per_page, default page=1) but largely repeats schema info. It does not provide deeper semantics beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists all variations of a variable product, with a concrete example (T-shirt with Size/Color). It distinguishes itself from sibling tools like woocommerce_get_product_variation (single) and woocommerce_list_products (list products).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes pagination defaults and error handling (returns empty list if product not variable), which provides context for when the tool works or returns nothing. However, it does not explicitly contrast with alternatives like get_product_variation for single variations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_update_couponUpdate WooCommerce CouponAIdempotent
Update fields on an existing coupon. Only supplied fields are changed.
Args:
coupon_id (number, required)
Any subset of: code, discount_type, amount, description, date_expires, usage_limit, usage_limit_per_user, free_shipping, minimum_amount, maximum_amount
response_format ('markdown'|'json'): default 'markdown'
Returns: The updated coupon object.
Examples:
Use when: "extend coupon 12's expiry to end of year" -> coupon_id=12, date_expires="2026-12-31"
Error Handling:
Returns "Error: Resource not found (404)" if coupon_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| amount | No | ||
| coupon_id | Yes | The numeric WooCommerce coupon ID to update | |
| description | No | ||
| usage_limit | No | ||
| date_expires | No | YYYY-MM-DD | |
| discount_type | No | ||
| free_shipping | No | ||
| maximum_amount | No | ||
| minimum_amount | No | ||
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
| usage_limit_per_user | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses mutation ('Update'), partial update ('Only supplied fields are changed'), and error handling (404). Annotations already indicate idempotent and non-destructive. The description adds value by specifying behavior beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise but includes a redundant Args list that largely duplicates the schema. Every sentence adds some value, but the structure could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters and no output schema, the description covers mutation, partial updates, and error handling. However, it omits details about the return value structure and does not address edge cases like invalid field values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (2 of 12 params have descriptions). The description lists parameter names but adds little semantic detail beyond the schema. The example connects coupon_id and date_expires, but overall does not compensate for low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update fields on an existing coupon') and specifies the resource ('coupon') and scope ('existing'). It distinguishes from sibling tools like create and delete by emphasizing update on an existing entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an example and error handling notes, giving some usage context. However, it lacks explicit guidance on when not to use this tool (e.g., when to use create_coupon instead) or mention of prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_update_customerUpdate WooCommerce CustomerAIdempotent
Update fields on an existing customer. Only supplied fields are changed.
Args:
customer_id (number, required)
Any subset of: email, first_name, last_name, billing, shipping
response_format ('markdown'|'json'): default 'markdown'
Returns: The updated customer object.
Error Handling:
Returns "Error: Resource not found (404)" if customer_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| billing | No | ||
| shipping | No | ||
| last_name | No | ||
| first_name | No | ||
| customer_id | Yes | The numeric WooCommerce customer ID to update | |
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context about partial updates and error handling (404 for missing customer), complementing annotations that indicate idempotency and non-destructiveness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with four sentences covering purpose, args, returns, and error handling, front-loaded with the key point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the main aspects for a simple CRUD update, but could improve by detailing nested parameters and validation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given low schema coverage (29%), the description lists the parameters and default response_format but lacks details on nested billing/shipping structures, providing partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates an existing customer and that only supplied fields are changed, distinguishing it from create, delete, and get tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for partial updates but does not explicitly state when to use this tool over creating or deleting, or provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_update_orderUpdate WooCommerce OrderAIdempotent
Update an existing order's status, addresses, or notes. To change line items, use the WooCommerce admin UI or pass a full 'line_items' array via a direct API call - this tool intentionally keeps line-item edits out of scope to avoid accidental stock/total recalculation mistakes.
Args:
order_id (number, required)
status (string, optional): e.g. 'processing', 'completed', 'cancelled', 'refunded'
customer_note, billing, shipping, set_paid (optional)
response_format ('markdown'|'json'): default 'markdown'
Returns: The updated order object.
Examples:
Use when: "mark order 100 as completed" -> order_id=100, status="completed"
Error Handling:
Returns "Error: Resource not found (404)" if order_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | New order status | |
| billing | No | ||
| order_id | Yes | The numeric WooCommerce order ID to update | |
| set_paid | No | ||
| shipping | No | ||
| customer_note | No | ||
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotent and non-destructive; description adds context about avoiding accidental stock/total recalculation by omitting line-item edits, and includes error handling example. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Reasonably concise with clear sections (Args, Examples, Error Handling). First sentence is effective. Minor redundancy with schema listing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema; return value is vaguely described as 'the updated order object'. Could elaborate on billing/shipping structure or status enum meanings, but error handling is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With low schema coverage (43%), the description lists key parameters but provides limited additional semantics beyond the schema. For example, billing/shipping are mentioned but not detailed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates order status, addresses, or notes, and explicitly excludes line-item edits, distinguishing it from other order-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides when-to-use example ('mark order 100 as completed') and when-not-to-use guidance (line-item edits with alternative approach), though it doesn't explicitly contrast with all sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_update_productUpdate WooCommerce ProductAIdempotent
Update fields on an existing product. Only the fields you provide are changed; all other fields are left untouched.
Args:
product_id (number, required)
Any subset of: name, status, description, short_description, sku, regular_price, sale_price, manage_stock, stock_quantity, stock_status, category_ids, tag_ids, weight
response_format ('markdown'|'json'): default 'markdown'
Returns: The updated product object.
Examples:
Use when: "mark product 42 as out of stock" -> product_id=42, stock_status="outofstock"
Use when: "put product 42 on sale for $15" -> product_id=42, sale_price="15.00"
Error Handling:
Returns "Error: Resource not found (404)" if product_id doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | ||
| name | No | ||
| status | No | ||
| weight | No | ||
| tag_ids | No | Replaces the product's tag assignments | |
| product_id | Yes | The numeric WooCommerce product ID to update | |
| sale_price | No | ||
| description | No | ||
| category_ids | No | Replaces the product's category assignments | |
| manage_stock | No | ||
| stock_status | No | ||
| regular_price | No | ||
| stock_quantity | No | ||
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
| short_description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false) and not destructive. The description adds crucial context: partial update behavior, return format (markdown or json), and error handling (404 for missing product). This goes beyond annotations to inform the agent of expected outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections: purpose, args, returns, examples, error handling. Every sentence adds value, and there is no redundant information. It is concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (15 parameters, 1 required) and absence of output schema, the description covers key aspects: partial update, error handling, and return object. It could mention that tag_ids and category_ids replace existing assignments (though schema notes this), but overall it is sufficiently complete for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 27%, so the description should compensate. It lists all parameters but provides no detailed semantics (e.g., valid values for status, how category_ids/tag_ids behave). The examples clarify a couple of parameters but leave most undocumented. Baseline is lower due to low coverage, and the description adds marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update fields on an existing product', which distinguishes it from create, delete, and other product operations. It also specifies that only provided fields are changed, leaving others untouched.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Examples illustrate common use cases like marking out of stock or setting sale price, clearly implying when to use this tool. However, it does not explicitly state when not to use it (e.g., for creating a product), though that is implied by the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_update_product_categoryUpdate Product CategoryAIdempotent
Update fields on an existing product category.
Args:
id (number, required)
Any subset of: name, description, parent
response_format ('markdown'|'json'): default 'markdown'
Returns: The updated category object.
Error Handling:
Returns "Error: Resource not found (404)" if the ID doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The category's numeric ID | |
| name | No | ||
| parent | No | ||
| description | No | ||
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate mutation and idempotency. Description adds that it returns the updated category object and lists error handling for 404, providing behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and well-structured with sections for args, returns, and error handling, containing no superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple update tool with 5 parameters and no output schema, the description covers purpose, parameters, return, and error handling adequately. It could mention additional constraints but is generally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 40%, the description lists all parameters (id required, name/description/parent optional, response_format with default), compensating for missing schema descriptions and clarifying usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Update fields on an existing product category', using a specific verb and resource, and distinguishes it from sibling tools like create and delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It is clear the tool is for updating an existing category, with implicit differentiation from create/delete siblings. Error handling guidance for non-existent IDs is provided, but no explicit when-to-use vs alternatives is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_update_product_tagUpdate Product TagAIdempotent
Update fields on an existing product tag.
Args:
id (number, required)
Any subset of: name, description
response_format ('markdown'|'json'): default 'markdown'
Returns: The updated tag object.
Error Handling:
Returns "Error: Resource not found (404)" if the ID doesn't exist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The tag's numeric ID | |
| name | No | ||
| description | No | ||
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations: it specifies error handling (404 for missing ID), response_format options, and return type. Annotations already indicate idempotent and non-destructive, which are consistent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for purpose, a bullet list of args, and error handling. No wasted words, and essential information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the purpose, parameters, error handling, and return type. Annotations fill in idempotence and safety. No missing critical information for an update endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 50% schema coverage, the description compensates by listing updateable fields (name, description) and clarifying id is required. It also explains response_format defaults. However, it doesn't add meaning for name or description beyond listing them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update fields on an existing product tag,' which is a specific verb and resource. It distinguishes itself from sibling tools like create, delete, or list product tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for updating existing tags via the word 'update,' but does not explicitly contrast with create or delete operations. The context is clear enough, but lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
woocommerce_update_product_variationUpdate WooCommerce Product VariationAIdempotent
Update fields on an existing product variation (pricing, stock, SKU). Only supplied fields are changed.
Args:
product_id, variation_id (number, required)
Any subset of: sku, regular_price, sale_price, manage_stock, stock_quantity, stock_status
response_format ('markdown'|'json'): default 'markdown'
Returns: The updated variation object.
Error Handling:
Returns "Error: Resource not found (404)" if the IDs don't match an existing variation.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | ||
| product_id | Yes | ||
| sale_price | No | ||
| manage_stock | No | ||
| stock_status | No | ||
| variation_id | Yes | ||
| regular_price | No | ||
| stock_quantity | No | ||
| response_format | No | Output format: 'markdown' for human-readable text or 'json' for machine-readable structured data | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false, idempotentHint=true, destructiveHint=false. The description adds error handling details (404 on not found), return value ('Returns: The updated variation object'), and confirms idempotency by stating only supplied fields change. This provides behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an intro, Args list, Returns, and Error Handling sections. It is concise and front-loaded with the purpose. Minor improvement could be more bullet-point style for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 9 parameters, 2 required, no output schema, and annotations, the description covers the essential aspects: required IDs, updatable fields, output format, and error handling. It provides sufficient context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 11%, but the description lists the parameters (product_id, variation_id, sku, regular_price, sale_price, manage_stock, stock_quantity, stock_status, response_format) and groups them as 'pricing, stock, SKU.' It mentions response_format default and error handling. While not exhaustive, it adds meaning beyond the sparse schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates fields on an existing product variation, focusing on pricing, stock, and SKU. It uses the verb 'update' and specifies the resource, making it distinct from sibling tools like create, get, delete, and list variations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for modifying existing variations through 'Update fields on an existing product variation' and 'Only supplied fields are changed.' However, it lacks explicit when-to-use or when-not-to-use guidance and does not mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
40 tool updates
v1.0.0- First observed
woocommerce_create_coupon - First observed
woocommerce_create_customer - First observed
woocommerce_create_order - First observed
woocommerce_create_order_note - First observed
woocommerce_create_order_refund - First observed
woocommerce_create_product - First observed
woocommerce_create_product_category - First observed
woocommerce_create_product_tag - First observed
woocommerce_create_product_variation - First observed
woocommerce_delete_coupon - First observed
woocommerce_delete_customer - First observed
woocommerce_delete_order - First observed
woocommerce_delete_product - First observed
woocommerce_delete_product_category - First observed
woocommerce_delete_product_tag - First observed
woocommerce_delete_product_variation - First observed
woocommerce_get_coupon - First observed
woocommerce_get_customer - First observed
woocommerce_get_order - First observed
woocommerce_get_product - First observed
woocommerce_get_product_variation - First observed
woocommerce_get_report_totals - First observed
woocommerce_get_sales_report - First observed
woocommerce_get_top_sellers_report - First observed
woocommerce_list_coupons - First observed
woocommerce_list_customers - First observed
woocommerce_list_order_notes - First observed
woocommerce_list_order_refunds - First observed
woocommerce_list_orders - First observed
woocommerce_list_product_categories - First observed
woocommerce_list_product_tags - First observed
woocommerce_list_product_variations - First observed
woocommerce_list_products - First observed
woocommerce_update_coupon - First observed
woocommerce_update_customer - First observed
woocommerce_update_order - First observed
woocommerce_update_product - First observed
woocommerce_update_product_category - First observed
woocommerce_update_product_tag - First observed
woocommerce_update_product_variation
TDQS
Each tool targets a distinct resource and action. Products, variations, categories, tags, orders, notes, refunds, customers, coupons, and reports are all clearly separated with no overlapping functionality.
All tool names follow a consistent 'woocommerce_verb_noun' pattern (e.g., list_products, create_product, delete_coupon). The verb is always imperative and naming is uniform.
40 tools is slightly high but justified by WooCommerce's broad domain covering products, orders, customers, coupons, and reports. The count is appropriate for the complexity, though could be trimmed slightly.
Full CRUD lifecycle for all major entities (products, variations, categories, tags, orders, customers, coupons) plus order notes, refunds, and basic reports. Missing reviews and advanced reports, but core workflows are well covered.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Unified MCP server for 70+ eCommerce platforms: products, orders, customers, and more.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceWooCommerce MCP Server enables interaction with WooCommerce stores through the WordPress REST API. It provides comprehensive tools for managing all aspects of products, orders, customers, shipping, taxes, discounts, and store configuration using JSON-RPC 2.0 protocol.102MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server and Telegram bot that enables natural language management of WooCommerce stores, including products, orders, customers, and sales reports. It supports multiple LLM providers, voice commands via Whisper transcription, and deployment on Cloudflare Workers.17MIT
- AlicenseBqualityDmaintenanceA production-grade MCP server for the WooCommerce REST API, enabling AI assistants to manage products, orders, customers, and store settings.341MIT
- AlicenseAqualityCmaintenanceMCP server for managing WooCommerce stores through AI assistants like Claude. Provides 101 tools covering products, orders, customers, coupons, shipping, taxes, webhooks, settings, reports, and more.1001392MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jacques-Murray/woocommerce-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server