shopify-operations-mcp server
io.github.jpka/shopify-operations-mcp·v0.1.2Safe-write Shopify operations: plan-before-execute writes with out-of-band approval and audit.
0 stars49 downloads/wk
Reviews
Write oneNobody has reviewed shopify-operations-mcp yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
shopify-operations-mcp tools (9, 6 write)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
cancel_orderwrite actionPreview and execute order cancellation (two-phase). Cancellation is permanent — an order cannot be uncancelled — so every cancel plan ALWAYS requires human approval through the localhost approval UI, regardless of item count, and cancel_order can never be rolled back. The preview is a zero-write call that returns the refund implication and flags the human sees before granting or denying; execute a
create_discountwrite actionPreview and execute the creation of a discount code (two-phase). Previews the planned discount (pure reads, zero mutation) and returns a plan_token; nothing changes until execute_plan runs with that token. A plan touching at least plans.approvalRequiredAboveItems items requires human approval through the localhost approval UI before it executes. Discount creation is reversible via rollback_plan, w
execute_planwrite actionExecute a previously previewed write (update_prices, update_inventory, create_discount, refund_order, or cancel_order). Pass back the exact plan_token and the exact manifest from the preview response. The token is single-use, expires, and refuses any manifest that does not fingerprint-match the preview; write plans also refuse when the current data drifted since the preview (STATE_CHANGED). Plans
list_ordersList cancellable and refundable orders (id, name, financial and fulfillment status, total price, line items), optionally filtered by financial status, fulfillment status, and created-date range. Read-only: a single GraphQL query over the orders connection with no mutation.
refund_orderwrite actionPreview and execute an order refund (two-phase). Previews via Shopify's refundCalculate (zero writes) to obtain exact suggested refund amounts, then — only after a human approves through the localhost approval UI — executes via refundCreate. ALWAYS requires human approval regardless of item count, because a refund is irreversible and unwinds a payment. Refunds cannot be rolled back (refund_order i
rollback_planUndo a previously executed reversible plan (update_prices, update_inventory, or create_discount) in one call: restores each item to its previewed before-state by re-applying inverse mutations. Requires no approval — restoring prior state is the safe direction. Refused with ROLLBACK_UNSUPPORTED for non-reversible kinds (cancel_order, refund_order) or unknown tokens, and ROLLBACK_WINDOW_EXPIRED once
search_productsSearch products by title, sku, vendor, or tag and return variant pricing and per-location inventory references. Read-only: composes a Shopify search string, walks the cursor-paginated products connection to completion, and flags any product carrying a configured protected tag so a later write plan touching it is refused at preview time.
update_inventorywrite actionPreview and execute bulk inventory quantity changes at one location (two-phase). Sets the available quantity of each inventory item at the location to the absolute value supplied (not a delta). Previews planned changes (pure reads, zero mutation) and returns a plan_token; nothing changes until execute_plan runs with that token. A plan touching at least plans.approvalRequiredAboveItems items requir
update_priceswrite actionPreview and execute bulk variant price changes (two-phase). Previews the exact price change for every matched variant (pure reads, zero mutation) and returns a plan_token; nothing changes until execute_plan runs with that token. A plan that changes any single variant's price by more than plans.maxPriceChangePct (default 30%), or that touches at least plans.approvalRequiredAboveItems variants, requ
Public scan report
scanner v0.1.10 · 2026-11-03 · same rubric, same numbers if you re-run it
- Code scan42 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitystatic API keys via environment variables6/15
- Maintenancelast push 60 days ago12/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
How shopify-operations-mcp compares
Against every graded E-commerce MCP server, from our own scans and uptime checks. Updated after each scan run.
- Safety score
- 78/100
- higher than 67% of 2,174 E-commerce servers
- Tools
- 9
- the typical E-commerce server has 6
- Tools that change things
- 67%
- typical: 0%. Fewer write tools means less an agent can break
- Downloads a week
- 49
- more than 45% of 411 E-commerce servers with a package
What its tools let an agent do: 3 read · 1 create · 3 change · 1 delete · 1 run or deploy
Install shopify-operations-mcp in Claude Code, Cursor or VS Code
Runs npx -y shopify-operations-mcp on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add shopify-operations-mcp -- npx -y shopify-operations-mcp
What the publisher says
From the shopify-operations-mcp repository's README, as published. We do not edit it. Read it on GitHub
Safe-write MCP server for Shopify Admin API operations
An agent can read and modify a Shopify store without being able to cause an unrecoverable accident. The safety layer is the differentiator: every write previews before it commits, large or irreversible changes require out-of-band human approval, and every action is recorded to a tamper-evident hash-chained audit file.
Architecture
flowchart TB
subgraph agent["Agent"]
A[Claude]
end
subgraph mcp["MCP stdio transport"]
T[tools/call]
end
subgraph core["safe-write-mcp-core"]
PS[PlanStore]
AS[ApprovalServer]
end
subgraph shopify["Shopify Admin API"]
GQL[GraphQL endpoint<br/>/admin/api/2026-04/graphql.json]
end
subgraph audit["Audit"]
LF[JSONL audit file<br/>hash-chained]
end
A -->|"MCP stdio"| T
T -->|create plan| PS
T -->|preview| PS
T -->|execute plan| PS
PS -->|awaiting_approval| AS
AS -->|approve/reject| PS
PS -->|execute| GQL
PS -->|record| LF
style PS fill:#e1f5fe
style AS fill:#fff3e0
style LF fill:#f3e5f5
style GQL fill:#e8f5e9The two-phase pattern (preview → token → execute) is the core discipline. Every write tool:
- Preview — reads current state and computes what would change, performing zero mutation calls
- Token — issues a plan token bound to the exact previewed manifest via a SHA-256 fingerprint
- Approval — plans exceeding approvalRequiredAboveItems (default 25) or containing always-gated operations wait for human approval at the token-bearing URL the server prints on startup (e.g. http://127.0.0.1:4319/?token=)
- Execute — re-reads current values, refuses if they drifted from the preview (STATE_CHANGED), then applies mutations per-item with a full success/failure ledger
A plan whose manifest exceeds hardMaxItems (default 250) is refused outright — no token, no approval path.
Irreversible operations (cancelorder, refundorder) always require approval regardless of item count and cannot be rolled back. Reversible operations (price changes, inventory adjustments) support rollback within a configurable window (default 24 hours).
Threat model
The risk is not a malicious agent — the agent is trusted to author correct GraphQL. The risk is a trusted-but-fallible agent: syntactically perfect, well-formed operations whose scope is the problem.
The killer scenario — a syntactically perfect bulk reprice with a misplaced decimal:
update_prices([...], newPrice: 1.5) ← meant 15.00, typed 1.5A 500-product bulk update that runs without preview-and-approve, or where the agent's price calculation contains a typo, produces exactly the wrong result at scale. Approval would catch it: a human sees "change 500 prices from $X to $1.50" and flags the不对劲. Without approval, or without the preview that makes the damage visible before it happens, the error lands silently in Shopify.
Three mechanisms carry the safety guarantee:
1. Preview-first, computed-diff. Every write tool reads current state and computes the manifest ({ref, before, after} pairs) without calling any mutation. A STATECHANGED re-read at execute time refuses the write if the world moved since preview. The blast radius is visible before* anything changes.
2. Approval gating above the threshold. Plans touching >= approvalRequiredAboveItems items (default 25) require human approval. The threshold is sized for "is this large enough to warrant a human eye?" — meaningful for bulk value changes; irrelevant for one-item operations (which get unconditional approval for irreversible ops instead).
3. Plan token bound to exact manifest. The token is a SHA-256 fingerprint of the exact previewed manifest — not an opaque ID. Swapping in a wider set of items or a different price at execute time produces a different fingerprint and is refused as STATEMENT_MISMATCH.
Shortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
shopify-operations-mcp: common questions
- Is shopify-operations-mcp server safe?
- Mostly: it is graded B (78/100). Read the shopify-operations-mcp safety report
- How do I install shopify-operations-mcp?
- It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
- Does shopify-operations-mcp need an API key?
- Yes. The registry entry asks for
SHOPIFY_ADMIN_TOKEN. - Is shopify-operations-mcp maintained?
- The last commit was 61 days ago (2026-09-04). The latest release is v0.1.2.
- What can I use instead of shopify-operations-mcp?
- Servers from other publishers that do the same job: Shopware MCP server, HasData Shopify MCP server and Markifact - Ads & Analytics MCP server.
- How does shopify-operations-mcp compare with other E-commerce MCP servers?
- safety score 78/100 (higher than 67% of 2,174 E-commerce servers); tools 9 (the typical E-commerce server has 6); tools that change things 67% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.
Alternatives to shopify-operations-mcp
Same job from other publishers: the closest match first, then the best rated.
- ShopwareQuery and safely manage a Shopware 6 shop: products, orders, customers, stock, audits, reports.not reviewedGrowingB
- HasData ShopifyThe public product catalogue and collections of any Shopify storefront, as structured JSON.not reviewedGrowingA
Markifact - Ads & AnalyticsAI marketing agent for Google Ads, Meta, GA4, TikTok, LinkedIn, Shopify, HubSpot and more.not reviewedGrowingA- AsoBeastApp Store and Google Play ASO: keyword rankings, competitors, reviews, audits and an action queue.not reviewedGrowingA
- ShopifyMCP server for Shopify — Admin REST API (orders, products, customers, inventory, fulfillments)not reviewedGrowingB