- WooCommerce ships its own MCP integration in WooCommerce core (developer preview): nine built-in abilities covering product and order CRUD, enabled with
wp option update woocommerce_feature_mcp_integration_enabled yesand served at/wp-json/woocommerce/mcp. It is write-capable, and it is where most stores should start. - iOSDevSK's MCP for WooCommerce is the read-only alternative: 36 registered tools, every one a read, enumerated from the 14 tool classes instantiated at
includes/Core/WpMcp.php:184-203— not from a vendor tools page. - That read-only posture does not hold at the boundary:
run_api_functionis registered'type' => 'read'withreadOnlyHinttrue and'permission_callback' => '__return_true'(includes/Tools/McpRestApiCrud.php:100-102,:123,:126-127), yet its handler checks only the HTTP verb andis_user_logged_in()beforerest_do_request(:141-166). - Route filtering is a denylist — two exact routes plus five substrings (
includes/Tools/McpRestApiCrud.php:174-184) — so every GET route on the WordPress install is reachable,/wp/v2/usersincluded, while the plugin's Readme states at:273and:355that no customer PII is exposed. - Public record on 2026-07-25: 15 stars, 4 forks, 2 open issues, GPL-2.0, last commit 2026-04-22 (sha 3b3db15), release v1.2.2.
If you are searching for a WooCommerce MCP server, the one to start with is WooCommerce's own: since the 10.3 beta WooCommerce has shipped a native Model Context Protocol integration in core, now a developer preview documented at developer.woocommerce.com/docs/features/mcp/, enabled with one WP-CLI line and served from your own store at /wp-json/woocommerce/mcp. It is write-capable — product create, update and delete, order create and update — which is what most people asking this question actually want. The community alternative, iOSDevSK's MCP for WooCommerce, is worth running for exactly one reason: it has no write path at all, 36 registered tools that are every one of them a read, pitched as safe to hand to a customer-facing assistant. That read-only posture is the whole case for it, and reading the plugin's source on 2026-07-25 shows the posture does not hold at the boundary: run_api_function is registered 'type' => 'read' with readOnlyHint true and 'permission_callback' => '__return_true' (includes/Tools/McpRestApiCrud.php:100-102, :123, :126-127), yet its handler checks only the HTTP verb and is_user_logged_in() before handing the request to rest_do_request — and route filtering is a denylist, not an allowlist, so every GET route on that WordPress install, /wp/v2/users included, is reachable through the server the README calls read-only with no PII.
01 What WooCommerce's own MCP integration does
WooCommerce ships its own official MCP server. It is not a plugin you install from a marketplace: it is a feature flag in WooCommerce core, built on the WordPress Abilities API (core since WordPress 6.9) and the WordPress MCP Adapter. WooCommerce's announcement post, published 2026-04-15 by Kamlesh Vidhani as part one of a three-part series, describes MCP as landing in beta in WooCommerce 10.3 and being solid enough to build on at WooCommerce 10.7 with WordPress 6.9+.
Turn it on with WP-CLI, or from WooCommerce → Settings → Advanced → Features:
wp option update woocommerce_feature_mcp_integration_enabled yesThen point a client at the store endpoint through Automattic's own proxy package — this is the documented client path in WooCommerce's docs, not a third-party bridge:
claude mcp add woocommerce_mcp --env WP_API_URL=https://yourstore.com/wp-json/woocommerce/mcp --env CUSTOM_HEADERS='{"X-MCP-API-Key": "KEY:SECRET"}' -- npx -y @automattic/mcp-wordpress-remote@latestWhat you get, per the announcement, is nine built-in abilities: woocommerce/products-list, products-get, products-create, products-update, products-delete, woocommerce/orders-list, orders-get, orders-create and orders-update. The developer docs describe the same surface as purpose-built abilities — product query, create, update and delete; order query, status update and add-note — plus REST-derived compatibility abilities exposed on the /wp-json/woocommerce/mcp endpoint, which WooCommerce's own docs already mark as deprecated in favour of the shared WordPress MCP adapter. Authentication is a WooCommerce REST API key sent as X-MCP-API-Key: ck_consumer_key:cs_consumer_secret, and the transport validates each operation against that key's read, write or read_write permission. HTTPS is required unless you set woocommerce_mcp_allow_insecure_transport for local development.
Two caveats WooCommerce states itself, and neither is small. It is a developer preview: the docs say implementation details, APIs and integration patterns may change. And the docs carry an explicit data-privacy warning — order and customer operations may expose personally identifiable information including names, email addresses, physical addresses and payment details.
02 When MCP for WooCommerce is the better pick
The two servers are not competing on the same axis, so the choice is narrow and easy to state.
| WooCommerce core MCP integration | MCP for WooCommerce (iOSDevSK) | |
|---|---|---|
| Who ships it | WooCommerce / Automattic, in core | iOSDevSK, community WordPress plugin, GPL-2.0 |
| Status | Developer preview; the endpoint is documented as deprecated in favour of the shared WordPress MCP adapter | Release v1.2.2, last commit 2026-04-22 |
| Writes | Yes — product create/update/delete, order create/update | None. Every registered tool is a read |
| Surface | Nine built-in abilities: product and order CRUD | 36 tools: catalogue search, taxonomy, attributes, reviews, shipping, taxes, gateways, system status, WordPress posts and pages |
| Auth | WooCommerce REST API key in X-MCP-API-Key, scoped read / write / read_write | JWT issued in WP Admin; effective scope is the manage_woocommerce capability |
| Requirements | WooCommerce 10.7 (10.3+) and WordPress 6.9+ | Any WordPress install that can run the plugin |
| PII posture | Documented warning: order and customer operations may expose names, addresses and payment details | README states no customer PII is exposed — see section 05 |
Run the core integration if you want an agent that can change the store, if you are already on WooCommerce 10.7 and WordPress 6.9, and if you are comfortable on a preview surface. Run MCP for WooCommerce instead in one case: you want a catalogue-facing assistant that can search, filter and describe products and store configuration and can never write anything, and you want it on an install that is not on the versions core MCP needs. Its search surface is genuinely richer than the core integration's product query — intent analysis, brand, category and attribute filters, a detailed product view — and that, plus the absence of any write path, is the entire argument for it.
03 The 36 tools MCP for WooCommerce exposes
This count comes from the source, not from a docs page: the 14 tool classes instantiated at includes/Core/WpMcp.php:184-203 register 36 tools between them. (McpWooSearchGuide, registered one method earlier, is a resource rather than a tool; a further eight Mcp*Tools classes exist in includes/Tools/ — including McpWooOrders and McpUsersTools — and are never instantiated, which is why there is no order tool and no write path.)
| Tool | What it does | Read / write |
|---|---|---|
wc_products_search, wc_get_product, wc_get_product_variations, wc_get_product_variation | Product lookup and variation detail | Read |
wc_intelligent_search, wc_analyze_search_intent, wc_analyze_search_intent_helper, wc_get_product_detailed | Natural-language product search, intent parsing and the detailed product view | Read |
wc_get_products_by_brand, wc_get_products_by_category, wc_get_products_by_attributes, wc_get_products_filtered | Faceted catalogue queries | Read |
wc_get_categories, wc_get_tags | Taxonomy listing | Read |
wc_get_product_attributes, wc_get_product_attribute, wc_get_attribute_terms | Attribute definitions and their terms | Read |
wc_get_product_reviews, wc_get_product_review | Product review retrieval | Read |
wc_get_shipping_zones, wc_get_shipping_zone, wc_get_shipping_methods, wc_get_shipping_locations | Shipping configuration | Read |
wc_get_payment_gateways, wc_get_payment_gateway | Enabled payment gateways | Read |
wc_get_tax_classes, wc_get_tax_rates | Tax classes and rates | Read |
wc_get_system_status, wc_get_system_tools | Store environment and diagnostics | Read |
wordpress_posts_list, wordpress_posts_get, wordpress_pages_list, wordpress_pages_get | WordPress content, outside WooCommerce | Read |
list_api_functions, get_function_details, run_api_function | Enumerate the site's REST routes and execute one of them by name | Declared read — see section 05 |
04 Install and auth: WordPress plugin, HTTP transport, JWT
The install topology is unusual for an MCP server: it is not a standalone process you spawn, it is a GPL-2.0 WordPress plugin your MCP client reaches over HTTP through the same Automattic proxy the core integration uses. Install the plugin, then run npx @automattic/mcp-wordpress-remote@latest with a JWT_TOKEN. Transport is http.
Auth is a JWT issued from WordPress Admin → Settings → MCP for WooCommerce → Tokens, and the effective scope is the WordPress capability manage_woocommerce. Three details from includes/Auth/JwtAuth.php that the README does not state. The token UI offers "Never expires" as an expiry option; the code at includes/Auth/JwtAuth.php:663-667 sets $expires_at = $issued_at + (100 * 365 * 24 * 60 * 60); and the response then reports expires_in: "never" at :712-713. The JWT itself carries no exp claim in that case (:694-696) — so revocation, not expiry, is the only way to retire one. Ordinary tokens are clamped to 3600–86400 seconds (:38-52), and a user may hold at most ten active tokens, the constant MAX_ACTIVE_TOKENS = 10 sitting at :66.
05 What the source shows: run_api_function forwards any GET route
The reason to run this plugin instead of WooCommerce's own server is that it cannot write. Here is where that guarantee stops.
At includes/Tools/McpRestApiCrud.php:100-102 the run_api_function tool is registered with 'type' => 'read'; :123 sets 'permission_callback' => '__return_true'; :126-127 annotates readOnlyHint true and destructiveHint false. Its description states that it "Only supports GET operations for security reasons", and its own input schema offers "/wp/v2/users/123" as an example route.
The handler at includes/Tools/McpRestApiCrud.php:141-166 then performs exactly two checks before calling rest_do_request: that the method is GET (:147), and that is_user_logged_in() (:155). Route filtering, at includes/Tools/McpRestApiCrud.php:174-184, is a denylist of two exact routes — / and /batch/v1 — plus five substrings: oembed, autosaves, revisions, jwt-auth and mcpfowo/v1/auth.
A denylist of seven patterns is not an allowlist of permitted routes. Anything else registered on that WordPress REST server is reachable — /wp/v2/users, and every GET route contributed by every other plugin on the install. The GET-only restriction holds, so this is still not a write path; what it is, is a read path far wider than the tool table implies, sitting behind an annotation that tells the model it is safe. The plugin's own Readme states at :273 that "No customer PII is exposed" and answers "Is customer/order data exposed?" with "No … No PII is exposed" at :355; run_api_function reaches /wp/v2/users.
06 Quirks, gaps and the verdict
- No write path — every registered tool is a read. No order creation, no stock updates, no price changes. If that is what you came for, run the core integration.
- JWT can be turned off — JWT authentication can be disabled in plugin settings, allowing unauthenticated read-only access. Fine for local dev; a public data leak in production, and it removes the
is_user_logged_in()check that section 05 shows is the only thing standing in front ofrun_api_function. - A read-only guarantee with a hole in it — the README and the project site say tools return permalinks and expose no customer PII. The source read above shows
run_api_functionforwarding any registered GET route,/wp/v2/usersincluded, behind nothing butis_user_logged_in(). - Ten active tokens per user —
MAX_ACTIVE_TOKENS = 10(includes/Auth/JwtAuth.php:66); at the cap, new token generation is blocked until you revoke one, so plan token rotation for a team rather than a token per agent. - A small project — public record on 2026-07-25: 15 stars, 4 forks, 2 open issues, GPL-2.0, last commit 2026-04-22 (sha
3b3db15), release v1.2.2. The npm proxy it runs through,@automattic/mcp-wordpress-remote, carries alatestdist-tag of 0.3.5.
Public record and source read on 2026-07-25. The verdict: start with WooCommerce's own MCP integration — it is official, it is write-capable, and it is the one that will keep getting attention. Choose iOSDevSK's MCP for WooCommerce only when you specifically want a catalogue-facing, no-write server on an install that core MCP's version requirements rule out — and then run it on a lean WordPress install with JWT enabled, a short expiry and a scoped token, because on a plugin-heavy site the read-only label covers a great deal more than the tool table shows.
07 Frequently asked questions
- Is there an official WooCommerce MCP server?
- Yes. WooCommerce has native MCP support in core — a developer preview built on the WordPress Abilities API, documented at developer.woocommerce.com/docs/features/mcp/ and announced on 2026-04-15. Enable it with `wp option update woocommerce_feature_mcp_integration_enabled yes` and point a client at https://yourstore.com/wp-json/woocommerce/mcp.
- Can the official integration write to my store?
- Yes. The announcement lists nine built-in abilities: product list, get, create, update and delete, plus order list, get, create and update. Each call is validated against the read / write / read_write permission on the WooCommerce REST API key you send in the X-MCP-API-Key header.
- Then why would I run MCP for WooCommerce instead?
- For one reason: it has no write path. All 36 of its registered tools are reads, and its catalogue surface — intent analysis, brand/category/attribute filters, a detailed product view, taxonomy, shipping, taxes, gateways — is richer than the core integration’s product query. It also runs on installs that do not meet core MCP’s WooCommerce 10.7 / WordPress 6.9 requirement.
- Is MCP for WooCommerce really safe to hand to a customer-facing assistant?
- On a lean WordPress install with JWT enabled, mostly — the catalogue, taxonomy, review and store-config tools are all reads. On a plugin-heavy install it is riskier, because run_api_function forwards any registered GET route to rest_do_request behind only an is_user_logged_in() check (includes/Tools/McpRestApiCrud.php:141-166), and its own schema offers /wp/v2/users/123 as an example route.
- Does a "never expires" token really never expire?
- No. includes/Auth/JwtAuth.php:663-667 sets the expiry to $issued_at + (100 * 365 * 24 * 60 * 60) and the response then reports expires_in: "never" (:712-713). The JWT carries no exp claim in that case (:694-696) — the century-out date is what the registry and the response record, so revocation is the only way to retire one.