woocommerce-mcp
# woocommerce-mcp
A small, read-only [Model Context Protocol](https://modelcontextprotocol.io) server for **WordPress + WooCommerce**. It lets Claude (or any MCP client) answer questions about a live store — products, orders, sales, and blog posts — over the official REST APIs. No writes, no plugins to install on the store: it talks to the existing WordPress/WooCommerce REST endpoints.
Built and maintained by [WPPoland](https://wppoland.com/en/), a [senior WordPress developer](https://wppoland.com/en/wordpress-developer/) working with WordPress since 2006. If you need this wired into a real store stack, we build [WooCommerce ERP and API integrations](https://wppoland.com/en/woocommerce-erp-integration/) and [enterprise e-commerce architecture](https://wppoland.com/en/enterprise-solutions/) (headless, integrations, AI-ready data).
## Tools
| Tool | What it does | Needs WooCommerce keys |
|------|--------------|:---:|
| `list_products` | List / search products (name, sku, price, stock, permalink) | yes |
| `get_product` | Full details for one product by id | yes |
| `list_orders` | Recent orders, newest first, optional status filter | yes |
| `sales_report` | Sales totals for a period (week / month / last_month / year) | yes |
| `search_posts` | Search published blog posts (public WP REST API) | no |
Everything is **read-only**. The server never creates, edits, or deletes anything in the store.
## Install & build
From npm (package name is scoped - the unscoped `woocommerce-mcp` name is locked on the registry):
```bash
npm install -g @wppoland/woocommerce-mcp
# or: npx @wppoland/woocommerce-mcp
```
From source:
```bash
git clone https://github.com/wppoland/woocommerce-mcp.git
cd woocommerce-mcp
npm install
npm run build
```
## Configure
Set three environment variables:
| Var | Required | Example |
|-----|:---:|---------|
| `WP_URL` | yes | `https://shop.example.com` |
| `WC_CONSUMER_KEY` | for `wc_*` tools | `ck_xxx` |
| `WC_CONSUMER_SECRET` | for `wc_*` tools | `cs_xxx` |
Create the WooCommerce keys in **WooCommerce → Settings → Advanced → REST API → Add key** with **Read** permission. `search_posts` works without keys against any public WordPress site.
> The keys are sent to your own store over HTTPS as REST query auth. Use HTTPS, and give the key **Read** access only.
## Use with Claude Desktop / Claude Code
Add to your MCP client config (e.g. `claude_desktop_config.json`):
```json
{
"mcpServers": {
"woocommerce": {
"command": "node",
"args": ["/absolute/path/to/woocommerce-mcp/dist/index.js"],
"env": {
"WP_URL": "https://shop.example.com",
"WC_CONSUMER_KEY": "ck_xxx",
"WC_CONSUMER_SECRET": "cs_xxx"
}
}
}
}
```
Then ask things like *"What were last month's WooCommerce sales?"* or *"List the 5 most recent orders that are on hold."*
## Docs on wppoland.com
- [WooCommerce MCP open source (read-only): release and ops guide](https://wppoland.com/en/woocommerce-mcp-open-source-read-only/) - npm scope, registry, Glama, and how we ship updates without write tools
## Articles (off-site)
Field notes published on DEV (not duplicates of wppoland.com pages):
- [A read-only MCP server for WooCommerce: what AI agents actually need from a store](https://dev.to/wppolandcom/a-read-only-mcp-server-for-woocommerce-what-ai-agents-actually-need-from-a-store-3fk6)
- [Syncing a wholesaler's API into WooCommerce without overselling or melting the server](https://dev.to/wppolandcom/syncing-a-wholesalers-api-into-woocommerce-without-overselling-or-melting-the-server-38ao)
- [Twelve months after migrating wppoland.com from WordPress to Astro on Cloudflare Pages](https://dev.to/wppolandcom/twelve-months-after-migrating-wppolandcom-from-wordpress-to-astro-on-cloudflare-pages-11fi)
Show HN: [discussion](https://news.ycombinator.com/item?id=48815903)
## Verify
```bash
npm run check # builds, then asserts all five tools register (no network/credentials needed)
```
## Notes
- Node 18+ (uses the built-in `fetch`).
- Logs go to stderr so they never corrupt the stdio MCP protocol on stdout.
- API errors are surfaced with the store's message; credentials are never echoed.
## License
MIT © [WPPoland](https://wppoland.com/en/)
TDQS
Scored across 2 tools
The two tools serve entirely different purposes: one provides WooCommerce sales reports, the other searches WordPress blog posts. There is zero overlap in functionality, making it impossible to confuse them.
Tool names use different patterns: 'sales_report' is a noun phrase, while 'search_posts' follows a verb_noun pattern. This inconsistency makes the set feel ad hoc rather than systematically named.
With only 2 tools for a 'woocommerce-mcp' server, the count is far too low. While a minimal server could be justified, the expected scope for WooCommerce typically includes many more operations (e.g., products, orders, customers).
The tool surface is severely incomplete for WooCommerce. Key operations like managing products, orders, or customers are entirely missing, and the inclusion of a general WordPress search tool unrelated to e-commerce does not address the core domain.