# WooCommerce canonical abilities — operations agent

Mark **Allow** or **Deny** before you register a Gateway target. The adapter you own calls one ability id per tool. AgentCore Gateway can target an MCP URL. The shared adapter URL exposes `mcp-adapter/execute-ability`, which accepts an ability name from the caller. Do not register that URL for this agent.

MCP is a developer preview. Turn on `mcp_integration` before you expect `/wp-json/mcp/mcp-adapter-default-server` to answer. The flag does not remove the abilities from the Abilities REST API.

| Tool | Surface | Auth | Week one | Check |
| --- | --- | --- | --- | --- |
| `query_products` | `woocommerce/products-query` | Application Password for a user who can read products | Allow | `search` or `sku` is set. `per_page` is at most 10. `stock_status` is one of the store's slugs. A variation id returns `woocommerce_product_type_unsupported`. |
| `query_orders` | `woocommerce/orders-query` | Application Password for a user who can read shop orders | Allow | `id` or a status plus a date window. `include_line_items` stays false unless the question asks for the lines. Do not copy `billing_email` from a shopper sentence. |
| `mcp-adapter/discover-abilities` | Shared MCP adapter | Same password | Deny | Discovery is for a builder. This agent already names two abilities. |
| `mcp-adapter/get-ability-info` | Shared MCP adapter | Same password | Deny | Schema inspection is for a builder. |
| `mcp-adapter/execute-ability` | Shared MCP adapter | Same password | Deny | The caller supplies the ability name. `product-delete` is a legal argument. |
| `woocommerce/product-create` | Canonical ability | User who can create products | Deny | A person in the catalog. |
| `woocommerce/product-update` | Canonical ability | User who can edit products | Deny | A person in the catalog. |
| `woocommerce/product-delete` | Canonical ability | `wc_rest_check_post_permissions( 'product', 'delete', id )` | Deny | Trash unless `force` is true. If trash is disabled and `force` is omitted, the ability errors instead of hard-deleting. |
| `woocommerce/order-update-status` | Canonical ability | User who can edit orders | Deny | Rejects a no-op with `woocommerce_order_status_unchanged`. A person changes status. |
| `woocommerce/order-add-note` | Canonical ability | User who can edit orders | Deny | A note without a status change. Still a write. |
| Cart add, update, remove | Store API `wc/store/v1` cart | Cart Token or Nonce | Deny on this agent | A later shopper agent. Not this Application Password. |
| `GET /wc/store/v1/checkout` | Store API checkout | Cart Token or Nonce | Deny | Returns `order_id` and status `checkout-draft`. That is order creation. |
| `POST /wc/store/v1/checkout` | Store API checkout | Cart Token or Nonce | Deny | Accepts `payment_method` and can return `order_id` after payment. |
| REST-shaped product and order tools | Deprecated `/wp-json/woocommerce/mcp` | `X-MCP-API-Key` as `consumer_key:consumer_secret` | Deny | Deprecated. Fuller REST bodies include customer data this agent does not need. |

## Credential split

| Secret | Who | Where it lives |
| --- | --- | --- |
| Application Password | Operations reads only | AgentCore Identity or Secrets Manager. Shown once. Revoke from the user profile. |
| WordPress account password | A person | Not this agent. |
| WooCommerce REST key | Deprecated MCP endpoint, or a REST client you already run | A different secret. Not the Application Password. |
| Cart Token or Nonce | Shopper cart, if you add that agent | The shopper session. Not the operations user. |

## What the adapter must do on every operations turn

- Allow-list the tool name. An ability id the model typed is not a tool.
- On `query_products`, set `per_page` to 10 or less. Reject a call with no `search`, no `sku`, and no `id`.
- On `query_orders`, require `id` or (`status` and a date bound). Leave `include_line_items` false unless the question asks for lines.
- Speak only from the ability body. An empty `products` or `orders` array means not found.
- On HTTP 401, stop. Do not ask the model for a new Application Password.
- On a variation, surface `woocommerce_product_type_unsupported`. Do not fall through to `product-delete` or to `/wc/v3/products`.

## Explicitly not in this worksheet

WooCommerce Subscriptions, Bookings, a measured handle time, and a runnable store. Extension abilities use their own prefix. The `woocommerce/` prefix is reserved for core.
