Agent Studio — WooCommerce Private Connector
Read-only connector to a WooCommerce store's REST API, letting agents query orders, products, inventory and customer data with filtering, search and pagination. Authenticates with a least-privilege read-only API key over HTTPS, handles host rate limits with a token bucket plus retry/backoff, and normalises raw payloads into small stable objects for agent consumption.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Agent Studio — WooCommerce Private Connectorshow me today's orders stuck on pending payment"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Agent Studio — WooCommerce Private Connector
A read-only MCP connector that lets an Agent Studio agent read orders, products, inventory and customers from a WooCommerce store.
Built for the Razorpay Forward-Deployed Engineer, Agent Studio assignment (Option 3: private connector for a merchant tool).
Try it in 10 seconds — no Docker, no credentials, no network:
pip install -r requirements.txt python demo/demo_offline.pySpins up a mock WooCommerce store in-process and drives the real connector against it: auth, filtering, pagination and a simulated
429that the client retries automatically. Captured output indocs/demo-output.md.
The problem this solves
The brief asks for a connector. The job behind the brief is to understand a merchant's workflow and move a number. So the design starts there, not at the API.
A D2C merchant's ops team spends 30–60 minutes a day manually filtering stuck payments, scanning for stockouts and digging through order history. The connector turns those questions into answers in seconds, grounded in the merchant's own live data. It is deliberately read-only first — an agent that can mutate a merchant's orders is one that can lose the merchant's money — and it ships with the metrics to prove it worked.
Full framing, the four merchant questions it unlocks, and the impact metrics:
docs/problem-and-impact.md.
Related MCP server: Shopify MCP
Architecture
flowchart LR
A["Agent Studio agent"] -->|"MCP tool call"| B["MCP server"]
B --> C["tools.py"]
C --> I["models.py (normalisers)"]
C --> D["WooCommerceClient"]
D --> E["TokenBucket (rate limiter)"]
D --> F["Retry + backoff (Retry-After)"]
D --> G["paginate() / page()"]
D -->|"Basic auth over HTTPS"| H[("WooCommerce REST API")]The MCP server is a thin adapter over a framework-agnostic core — the
connector/ package has no MCP dependency, so the same core could back a REST
service or a different agent host. Details:
docs/architecture.md.
Why WooCommerce
Self-hostable: the whole demo runs locally via Docker — no vendor account, no approval wait, and no real credentials anywhere in the repo.
Razorpay-relevant: orders, payments and inventory are exactly the merchant commerce data a Forward-Deployed Engineer works with.
A real API surface: genuine pagination, filtering, auth and host-level rate limits, so the connector exercises the hard parts honestly.
What's in the box
connector/ framework-agnostic core (no MCP dependency)
config.py env-driven config; secrets never hard-coded
errors.py typed errors (Auth/NotFound/RateLimited/Upstream)
rate_limiter.py token bucket + backoff-with-jitter
models.py normalisers (raw payload -> small, stable dicts)
woocommerce_client.py auth, retry, pagination, search primitives
tools.py agent-facing read operations
mcp_server/server.py MCP server exposing 7 tools
docs/ auth, tool spec, capabilities, limitations,
architecture, problem+impact, webhooks, demo output
demo/ offline demo (zero setup) + Docker live demo
tests/ 27 tests, no network
pyproject.toml packaging + ruff / mypy / pytest config
Makefile make test | demo | lint | typecheckQuickstart — real store (Docker)
cd demo
bash setup_store.sh # brings up WordPress + WooCommerce
# create a Read API key at http://localhost:8080/wp-admin
export WC_STORE_URL=http://localhost:8080
export WC_CONSUMER_KEY=ck_...
export WC_CONSUMER_SECRET=cs_...
python seed_data.py # sample products + orders
python demo_live.py # the connector in actionConfiguration
Copy .env.example to .env. All secrets are read from the environment —
nothing is hard-coded and nothing secret is ever logged or returned.
Variable | Required | Default | Purpose |
| yes | — | store base URL (HTTPS in production) |
| yes | — |
|
| yes | — |
|
| no | 20 | per-request timeout (s) |
| no | 4 | retries on 429/5xx |
| no | 100 | page size (max 100) |
| no | 5 | client-side request rate |
| no | true | TLS verification |
Run the MCP server
python -m mcp_server.server # stdio (MCP hosts)
MCP_TRANSPORT=streamable-http python -m mcp_server.server # HTTPDevelop
make dev # install dev dependencies
make test # pytest
make cov # pytest + coverage
make demo # zero-setup offline end-to-end demo
make lint # ruff
make typecheck # mypyCurrent state: 27 tests passing, 87% coverage, ruff clean. CI runs lint plus the tests and the offline demo on Python 3.11 and 3.12.
Design decisions
Authentication. HTTP Basic (ck/cs) over HTTPS, never in the query
string. The key is issued with Read permission to a dedicated
least-privilege user, so a leak can only read — it cannot damage the store.
Full flow in docs/auth.md.
Pagination / search primitives. paginate() follows the store's
X-WP-TotalPages header and streams lazily with an optional max_items cap;
page() returns one slice plus metadata. This is the scalable primitive:
callers bound their own cost. Deep-pagination limits — and the index-backed
long-term fix — are called out honestly in
docs/limitations.md.
Rate-limit handling. Two layers: a client-side token bucket so we never
hammer the store, and exponential backoff with jitter that honours
Retry-After on 429/5xx. Exhausted retries raise a typed RateLimitedError.
Normalisation. Raw WooCommerce objects are large; returning them would blow
up the agent's context and leak fields it shouldn't rely on. Every resource is
projected to a small, documented shape in models.py.
Typed errors. The agent gets AuthError, NotFoundError,
RateLimitedError or UpstreamError — and can reason about them — instead of a
raw stack trace.
Read-only. No tool mutates the store. Bounded blast radius by design.
Event-driven v2. The request-driven ceiling and the webhook + index design
that removes it are in docs/webhooks.md.
How this maps to the assignment brief
Requirement | Where it's satisfied |
Connector lets an agent read tickets/orders/inventory |
|
Working demo or key authentication flow | Both: |
Scalable long-term search primitives |
|
Rate-limit handling |
|
Webhook handling (event-driven) | designed in |
MCP tool specification or equivalent |
|
Short doc: what the agent can and cannot do |
|
Setup steps, restrictions, assumptions, limitations |
|
No real customer data / secrets |
|
Docs index
Doc | What it covers |
the merchant problem, and how we'd measure impact | |
layering, request lifecycle, failure path | |
the REST API key authentication flow | |
every tool, with input/return schemas | |
what the agent can and cannot do | |
limitations, assumptions, the long-term fix | |
event-driven v2: webhooks + incremental sync | |
captured demo output | |
how this was planned and sequenced |
Available Tools
7 toolsget_customerA
Fetch a single customer by id (orders count, lifetime spend).
| Name | Required | Description | Default |
|---|---|---|---|
| customer_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose the return payload shape (orders count, lifetime spend), which is genuinely useful, but says nothing about missing-customer behavior, errors, auth requirements, or whether the lookup is cached/read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource and its key return fields, zero padding, and no restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description covers the essentials and even hints at return contents. It is still thin on error/not-found behavior and prerequisites, which the absent annotations do not cover elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole parameter is only identified as 'Customer Id' with type integer. The description's 'by id' reiterates the schema property name without adding format, source, or validity constraints, so it only marginally compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (a single customer) scoped to an id lookup, which cleanly separates it from get_order, get_product, and the list_* siblings. It does not explicitly name or contrast with those siblings, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by id' implies the precondition that the caller already has a customer identifier, so usage is inferable. However, there is no explicit statement of when to use this versus list_orders/search_products or any exclusion, leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderB
Fetch a single order (line items, status, totals) by id.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It reveals the return contents (line items, status, totals) but omits auth requirements, error behavior, and whether the operation is read-only, leaving meaningful gaps for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that identifies the operation, scope, and return fields with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description sufficiently covers the purpose and return shape. Minor gaps remain around error handling and permission requirements, but the core is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the only parameter is order_id. The description says 'by id' without adding format, type, or example beyond the schema's own field name, so it fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Fetch) and resource (a single order), and lists the fields returned (line items, status, totals). The word 'single' contrasts with the sibling list_orders, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool is for retrieving one order by its id. No guidance is given on when to use this versus list_orders or how to obtain the order_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productB
Fetch a single product by id (price, stock, categories).
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. 'Fetch' implies a read operation, but it does not state permissions, error behavior for missing products, rate limits, or any other operational detail beyond the minimal returned-field hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. The parenthetical return-field hint is compact and relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool, the description gives the essential purpose and some return fields. However, with no annotations and no output schema, it leaves error handling and the full return shape unstated, making it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single parameter, so the description should compensate. It only restates that lookup is 'by id', adding no format, origin, constraint, or example beyond the parameter name already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch'), resource ('a single product'), and lookup key ('by id'), making the core action clear. It implicitly distinguishes itself from list/search siblings through 'single product by id', but never names an alternative tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this when you have a product ID and need one product record, not for listing or searching. There is no explicit when-to-use guidance, no exclusions, and no sibling tool named as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Check connectivity and credentials against the configured store.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the two things being probed (connectivity and credentials) and that these are checked against the 'configured store', implying a non-mutating diagnostic. It does not say whether failure surfaces as an error or a status value, nor what permissions the check itself needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. Every word ('connectivity', 'credentials', 'configured store') conveys scope, and nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only source of information about this tool. It covers what is checked but omits what the result looks like (boolean, status message, raised error) and what a failed check implies, leaving an agent guessing about the return contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so parameter semantics default to a baseline of 4. There is nothing for the description to clarify here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and specific resources (connectivity and credentials against the configured store), which is more than a restatement of the name 'health_check'. It is unambiguously a diagnostic tool, clearly distinct from the inventory/order/product siblings even without naming them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: reach for this to verify that the configured store is reachable and that credentials work. However, it gives no explicit when-to-use guidance, no prerequisites, and no mention of alternatives (there are none among the siblings, which helps, but it is not stated).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inventoryB
List products at or below low_stock_threshold units.
Scans the published catalogue via pagination, capped at max_items.
| Name | Required | Description | Default |
|---|---|---|---|
| max_items | No | ||
| only_managed | No | ||
| low_stock_threshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that the tool scans the published catalogue via pagination and caps results at max_items, which is real behavioral context. However, it says nothing about read-only safety profile, sort order, or what happens when the cap is hit (truncation vs error).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core filter condition front-loaded and no filler. Every phrase carries information, though the trailing pagination clause reads slightly like an afterthought.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with no output schema, the description covers the core selection logic and the result cap. It is incomplete on the only_managed parameter and on return ordering/truncation semantics, gaps that neither the schema nor annotations fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all three parameters. It explains low_stock_threshold and max_items in prose, but only_managed is never mentioned, leaving a parameter that materially changes the result set entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (products) with an explicit filter condition (at or below low_stock_threshold units). An agent can identify the purpose immediately, though it doesn't distinguish itself from the sibling search_products, which could also return products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this tool versus search_products or get_product, and no prerequisites or exclusions. The stock-threshold framing implies an inventory-monitoring scenario, but that must be inferred rather than read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersB
List orders. status e.g. pending/processing/completed/refunded.
after/before are ISO-8601 dates (e.g. 2026-01-01T00:00:00). search
matches order/customer fields. Returns a page plus pagination metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| after | No | ||
| before | No | ||
| search | No | ||
| status | No | ||
| per_page | No | ||
| customer_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden but only partially discharges it. It usefully discloses the return shape ("a page plus pagination metadata") and the meaning of specific filters, but says nothing about read-only safety, auth requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and then grouped by parameter, with no filler sentences. The backticked parameter references keep it scannable and every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter list tool with no output schema, the description is adequate: it explains the filters it does cover and hints at the paginated return. It falls short by omitting the meaning of page/per_page/customer_id and giving no sense of default page size or result shape beyond "a page".
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it only covers three of seven parameters. It adds real value for status (enum values), after/before (ISO-8601 format with example), and search (which fields match), but page, per_page, and customer_id remain entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List orders") and layers in filter semantics, so an agent knows exactly what the tool does. It does not distinguish itself from siblings like get_order or list_inventory, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this versus get_order or the other siblings, nor any mention of prerequisites or exclusions. Usage is only implied by the filter parameters, leaving the agent to infer that this is the bulk/collection retrieval route.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsB
Search products by free text, SKU, category id/name, or stock status.
stock_status is one of instock/outofstock/onbackorder.
| Name | Required | Description | Default |
|---|---|---|---|
| sku | No | ||
| page | No | ||
| query | No | ||
| category | No | ||
| per_page | No | ||
| stock_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about read-only semantics, pagination behavior (despite page/per_page existing), default result size, or how multiple filters combine. For a filter-heavy query tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact lines with no filler, and the primary purpose is front-loaded before the stock_status detail. It is efficient, though the brevity borders on under-specification of non-filter parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, no annotations, and no output schema, the description is only minimally complete: it covers the filter surface but says nothing about pagination, result volume, or response shape. Adequate to call the tool, but an agent gets no help on paging or interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It usefully maps four of six parameters (query, sku, category, stock_status) and — critically — enumerates the allowed stock_status values (instock/outofstock/onbackorder) and clarifies that category takes an id or name, neither of which the schema conveys. However, page and per_page semantics are untouched, so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (products) and enumerates the searchable dimensions: free text, SKU, category id/name, stock status. It distinguishes itself implicitly from siblings like get_product (single lookup) and list_inventory. No sibling is named explicitly, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The list of filter dimensions implies when the tool applies (filtered product retrieval), but there is no explicit when-to-use guidance, no exclusion, and no pointer to alternatives such as get_product for a single item or list_inventory for stock views. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
get_customer - First observed
get_order - First observed
get_product - First observed
health_check - First observed
list_inventory - First observed
list_orders - First observed
search_products
TDQS
Scored across 7 tools
Most tools target a clear resource+action (list_orders/get_order, search_products/get_product, get_customer). The main overlap is between list_inventory and search_products, since search_products also accepts a stock_status filter, so an agent could hesitate between them for low-stock queries.
Nearly all tools follow a clean snake_case verb_noun pattern (list_inventory, list_orders, get_order, search_products, get_product, get_customer). health_check breaks the verb-first convention but is still readable and unambiguous.
Seven tools is well-scoped for a read-only storefront connector, with each tool earning its place for a distinct resource. No redundant or filler tools.
Product and order access is solid (list/get/search), but customer coverage is only get_customer with no list/search counterpart, and there is no general product listing beyond search/inventory. The surface is usable but has notable gaps for a WooCommerce connector, with no write operations.
Maintenance
Related MCP Connectors
Federated commerce search across independent WooCommerce merchants. Keyless, read-only MCP server.
MerchantFlow is a hosted, read-only ecommerce analytics MCP server for Shopify and WooCommerce. It gives AI assistants tenant-scoped access to revenue, profit and loss, product and SKU profitability, COGS coverage, fulfillment costs, advertising spend, ROAS, marketing performance, cohorts, LTV, and business valuation across connected commerce and marketing platforms. Connect with OAuth over Streamable HTTP. No local server installation is required.
Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.
Unified MCP server for 70+ eCommerce platforms: products, orders, customers, and more.
Related MCP Servers
- AlicenseBqualityAmaintenanceRead-only MCP server for WooCommerce that enables answering questions about products, orders, sales, and blog posts via the WordPress REST API without needing plugins or write access.535 npm2MIT
- AlicenseAqualityCmaintenanceA read-only MCP server that lets AI assistants answer Shopify store operations questions via tools like get_shop, list_products, get_product, and list_orders.4MIT
- FlicenseNot gradedqualityBmaintenanceEnables secure, read-only access to WooCommerce store data through MCP-compatible assistants, letting users query products, orders, sales summaries, and inventory alerts without exposing store credentials.-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to answer merchant questions about stock levels, reorder alerts, sales orders, and customers through a read-only MCP interface, with OAuth 2.0, rate-limit handling, and a mock backend for testing.MIT