

You decide what each AI app may do: untick anything on the consent screen, then approve.
Your WooCommerce store, inside the AI you already use: Claude, ChatGPT, Copilot and other MCP apps, or a chat in wp-admin on Claude, GPT, Gemini, Grok, Mistral, DeepSeek or a local model. Ask what sold last week, find low stock, draft better product texts or look up an order. Each app gets only the areas you tick, and anything risky waits for your Approve.
Home page and documentation: counterhand.app.
Your store gets one MCP endpoint at https://yourstore.com/mcp, and apps connect through a browser consent flow (OAuth 2.1), never a copied key.
Every area is its own switch on the Access screen, with Can read and Can change as separate switches. A fresh install exposes Products, Orders and Reports, read-only — everything else is off until you turn it on, and upgrading never widens what your store exposes.
Tools delegate to WooCommerce’s own REST controllers, so validation, stock handling and HPOS compatibility behave exactly like the standard API. Their input schemas are read from those controllers at runtime rather than copied into this plugin, so a WooCommerce update that adds a field surfaces it automatically, and one that removes a field cannot leave a tool advertising it.
Each tool offers the ten or so fields that matter, which keeps assistants accurate; describe_woocommerce_fields reveals the rest when one is needed.
Visibility is decided by WooCommerce too: before a tool is offered, this plugin runs WooCommerce’s own permission check for that endpoint. A shop manager therefore sees a different set of tools from an administrator, without this plugin keeping a list of who may do what.
Off until you switch each on: WPML, Germanized and Germanized Pro, Contact Form 7, Flamingo, Advanced Custom Fields, Shipment Tracking, Cost of Goods, URL Coupons, and abilities from Yoast SEO, Rank Math, WPForms and others. An assistant can preview most catalog changes, and undo them for 30 days. The FAQ has the details.
Chat inside wp-admin, on the AI model WordPress manages under Settings Connectors (WordPress 7.0 and later), or with your own key on Claude, ChatGPT, Gemini, Grok, Mistral, DeepSeek, any model on OpenRouter, or a local Ollama model. Any other OpenAI-compatible endpoint works too. It uses the same tools an outside app would, and a change that is not easily undone waits for your Approve button.
Connect the AI apps you already use. Paste one URL into Claude, ChatGPT, Claude Code or any other MCP client, or add the store to Cursor and VS Code in one click. No token to create, no local proxy, no Node.js.
WooCommerce registers a handful of product and order abilities, which the separate MCP adapter plugin can offer to AI clients, signed in with an application password. Counterhand adds what a self-hosted store still lacks: OAuth 2.1 browser consent instead of copied keys, the whole WooCommerce and WordPress surface (coupons, customers, reports, shipping, tax, settings, posts and pages), permissions chosen per app with one-click revocation, confirmation-gated risky writes, an activity log, undo, and the in-admin chat. The two can run side by side.
Counterhand is free for every store, with no paid tier and no locked features. Development and support are funded by GitHub Sponsors. The source is on GitHub — issues and pull requests are welcome.
The plugin contacts no server of its own, collects no usage data and phones no telemetry home. It makes no outbound request until you ask it to — see the “External services” section below for exactly which services can be contacted, what is sent and when. Nothing is sent to the author of this plugin, ever.
This plugin does not depend on any service of its own. It never contacts the plugin author, and it sends no analytics or telemetry anywhere. Every outbound request below happens only as a direct result of something you do in wp-admin, and most stores will only ever use one of them.
Three features send store data to the AI model you choose on the Chat screen: the chat, Rewrites and the AI summary in the weekly report. They are the only features that transmit store data to a third party, and none of them sends anything until you choose a model. If you never choose one, no request is ever made to any of these services.
On WordPress 7.0 and later the AI model can be the one WordPress itself manages under Settings Connectors, so this plugin never handles the API key and the provider is whichever one you configured in WordPress. Otherwise you choose a provider on the Chat screen and supply your own API key.
What is sent, and when: only when an administrator sends a chat message (and on each follow-up step of answering it) the plugin transmits, to the provider you chose: your message text, the earlier messages in that chat conversation, the list of enabled tool definitions (tool names, descriptions and argument schemas), and the results of any tool the model calls to answer you. Those tool results contain your store’s data — for example product, order, customer or report records the model looked up in order to answer. A short system instruction accompanies the request, authenticated with your own API key (or, on WordPress 7.0 and later, by WordPress’s connector, so this plugin never sees the key).
Rewrites: only when an administrator or shop manager starts a rewrite job, the plugin sends each chosen product’s name, current description or short description and the person’s instructions to the model, one product at a time, in the background through WooCommerce’s Action Scheduler. Nothing else about the store is sent, and nothing is sent after the job ends.
Weekly report summary: only for a person who asked for the weekly report, and only while a model is chosen, the plugin sends the store’s name and the figures for last week and the week before (sales totals, best sellers by name and quantity, the number of orders waiting) to the model every Monday morning to write a short summary. No customer data is included. Without a model the report goes out without a summary and nothing is sent.
There is one other, smaller request: when you save an API key on the Chat screen, the plugin sends a single “ping” message to the provider to check the key works before storing it, so a wrong key is reported immediately. That check contains no store data.
The provider you select determines the destination:
https://api.anthropic.com. Terms of service, privacy policy.https://api.openai.com. Terms of use, privacy policy.https://generativelanguage.googleapis.com. Terms of service, privacy policy.https://api.x.ai. Terms of service, privacy policy.https://api.mistral.ai. Terms of service, privacy policy.https://api.deepseek.com. Terms of service, privacy policy.https://openrouter.ai, which passes the request on to the company behind the model you name. Terms of service, privacy policy.http://localhost:11434 by default). No data leaves your machine and no account or key is needed.Choosing Ollama or a self-hosted custom endpoint means the chat sends no store data to any third party.
When an AI assistant connects to your store, it identifies itself with a Client ID Metadata Document (CIMD) — a URL it publishes, as required by the MCP authorization specification. To show you on the consent screen which app is actually asking for access, the plugin fetches that URL once and caches the result.
What is sent, and when: an ordinary HTTP GET to the URL the connecting app supplied, at the moment someone starts a connection. It carries no store data, no personal data and no credentials — only the request itself. The URL must be HTTPS, and the request goes through WordPress’s own safe HTTP function, so private-network and loopback addresses are refused. The destination is not fixed: it is whichever app you are connecting (for example https://claude.ai/... for Claude or https://chatgpt.com/... for ChatGPT), so the applicable terms are those of the AI app you chose to connect. If the document cannot be fetched or does not match, the connection is refused.
On WordPress 7.0 and later, the Chat screen can install the official “AI Provider for Anthropic”, “AI Provider for OpenAI” or “AI Provider for Google” plugin for you. This happens only when an administrator with permission to install plugins clicks the matching button. WordPress then fetches the plugin from the WordPress.org plugin directory the same way Plugins Add New does, subject to the WordPress.org privacy policy. No store data is sent; the API key for the provider is entered afterwards on WordPress’s own Settings Connectors screen.
The “Connect apps” screen reports whether your MCP endpoint is actually reachable and advertising OAuth discovery. To find out, the plugin requests your own site’s URLs (/mcp and /.well-known/oauth-protected-resource) over HTTP.
This is not a third-party service: the request goes to your own domain and no data leaves your server’s control. It runs only while an administrator is viewing that screen.
That screen also shows documentation links for Claude, ChatGPT, Cursor and VS Code, and “add to editor” buttons. These are ordinary links and buttons in your browser — the plugin makes no request to those sites, and nothing is sent unless you click through.