Key takeaways
  • 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 yes and 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_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 rest_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/users included, while the plugin's Readme states at :273 and :355 that 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:

bash
wp option update woocommerce_feature_mcp_integration_enabled yes

Then 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:

bash
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@latest

What 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.

i
Who this is for: store owners and developers about to point Claude, an in-store chat widget or an internal agent at a live WooCommerce shop, who need to know which of the two servers to run and what each one can actually reach before they hand it a credential.

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 integrationMCP for WooCommerce (iOSDevSK)
Who ships itWooCommerce / Automattic, in coreiOSDevSK, community WordPress plugin, GPL-2.0
StatusDeveloper preview; the endpoint is documented as deprecated in favour of the shared WordPress MCP adapterRelease v1.2.2, last commit 2026-04-22
WritesYes — product create/update/delete, order create/updateNone. Every registered tool is a read
SurfaceNine built-in abilities: product and order CRUD36 tools: catalogue search, taxonomy, attributes, reviews, shipping, taxes, gateways, system status, WordPress posts and pages
AuthWooCommerce REST API key in X-MCP-API-Key, scoped read / write / read_writeJWT issued in WP Admin; effective scope is the manage_woocommerce capability
RequirementsWooCommerce 10.7 (10.3+) and WordPress 6.9+Any WordPress install that can run the plugin
PII postureDocumented warning: order and customer operations may expose names, addresses and payment detailsREADME 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.)

ToolWhat it doesRead / write
wc_products_search, wc_get_product, wc_get_product_variations, wc_get_product_variationProduct lookup and variation detailRead
wc_intelligent_search, wc_analyze_search_intent, wc_analyze_search_intent_helper, wc_get_product_detailedNatural-language product search, intent parsing and the detailed product viewRead
wc_get_products_by_brand, wc_get_products_by_category, wc_get_products_by_attributes, wc_get_products_filteredFaceted catalogue queriesRead
wc_get_categories, wc_get_tagsTaxonomy listingRead
wc_get_product_attributes, wc_get_product_attribute, wc_get_attribute_termsAttribute definitions and their termsRead
wc_get_product_reviews, wc_get_product_reviewProduct review retrievalRead
wc_get_shipping_zones, wc_get_shipping_zone, wc_get_shipping_methods, wc_get_shipping_locationsShipping configurationRead
wc_get_payment_gateways, wc_get_payment_gatewayEnabled payment gatewaysRead
wc_get_tax_classes, wc_get_tax_ratesTax classes and ratesRead
wc_get_system_status, wc_get_system_toolsStore environment and diagnosticsRead
wordpress_posts_list, wordpress_posts_get, wordpress_pages_list, wordpress_pages_getWordPress content, outside WooCommerceRead
list_api_functions, get_function_details, run_api_functionEnumerate the site's REST routes and execute one of them by nameDeclared 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 of run_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_function forwarding any registered GET route, /wp/v2/users included, behind nothing but is_user_logged_in().
  • Ten active tokens per userMAX_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 a latest dist-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.
AM
Alex Mashkovtsev
Founder · Eng Lead at INSO

Alex leads engineering at INSO, an AI-native product & commerce studio. He's shipped custom Shopify apps, checkout redesigns, and theme architecture for brands across the US and EU.