Prototyp · Vorschau: alle Server aus der offiziellen Registry, alle 30 Minuten synchronisiert. Bewertungen und Benutzerkonten folgen in einem späteren Schritt.
PopNx MCPMCP-Server für alle, die KI nutzen · in einfachen Worten erklärt

shopify-operations-mcp

von jpkaVersion 0.1.2i★ –iLäuft auf deinem Computer
Name in der Registryio.github.jpka/shopify-operations-mcp

Installieren

Überblick

Beschreibung vom Entwickler (englisches Original)

Safe-write Shopify operations: plan-before-execute writes with out-of-band approval and audit.

Die drei Säulen von PopNx MCP

Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.

Was du damit machen kannst

Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.

  • Verbindung: Läuft auf deinem Computer
  • Transport: stdio
  • Kategorie: Onlineshops & Zahlungen
  • Das musst du eintragen: SHOPIFY_STORE_DOMAIN, SHOPIFY_ADMIN_TOKEN

Installation

Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.

Bevor du installierst

  • Basischecks: 1 von 1 bestanden
  • Läuft auf deinem Computer mit den Rechten deines Benutzerkontos (Dateien, Netzwerk, Apps).
  • Das trägst du selbst ein: SHOPIFY_STORE_DOMAIN, SHOPIFY_ADMIN_TOKEN, SHOPIFY_CONFIG, SHOPIFY_PLAN_TTL_MS, SHOPIFY_APPROVAL_SERVER_PORT, SHOPIFY_PROTECTED_TAGS, SHOPIFY_CALLER_ID, SHOPIFY_AUDIT_PATH

Als geheim markierte Werte sind Schlüssel zu deinem Konto. Gib sie nie weiter und füge sie nie in einen Chat ein.

Du brauchst

  • npmNode.js installiert (für den Befehl npx)

Welche App nutzt du?

Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.

Öffne Claude Desktop → Settings → Developer → Edit Config und füge dies in claude_desktop_config.json ein

{
  "mcpServers": {
    "shopify-operations": {
      "command": "npx",
      "args": [
        "-y",
        "shopify-operations-mcp"
      ],
      "env": {
        "SHOPIFY_STORE_DOMAIN": "your-value",
        "SHOPIFY_ADMIN_TOKEN": "your-value",
        "SHOPIFY_CONFIG": "your-value",
        "SHOPIFY_PLAN_TTL_MS": "your-value",
        "SHOPIFY_APPROVAL_SERVER_PORT": "your-value",
        "SHOPIFY_PROTECTED_TAGS": "your-value",
        "SHOPIFY_CALLER_ID": "your-value",
        "SHOPIFY_AUDIT_PATH": "your-value"
      }
    }
  }
}

Führe das in deinem Terminal aus

claude mcp add shopify-operations --env SHOPIFY_STORE_DOMAIN=your-value --env SHOPIFY_ADMIN_TOKEN=your-value --env SHOPIFY_CONFIG=your-value --env SHOPIFY_PLAN_TTL_MS=your-value --env SHOPIFY_APPROVAL_SERVER_PORT=your-value --env SHOPIFY_PROTECTED_TAGS=your-value --env SHOPIFY_CALLER_ID=your-value --env SHOPIFY_AUDIT_PATH=your-value -- npx -y shopify-operations-mcp

Trag die leeren Werte ein, bevor du ihn startest.

In Cursor öffnen

Oder kopier die Einstellungen selbst

In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen

{
  "mcpServers": {
    "shopify-operations": {
      "command": "npx",
      "args": [
        "-y",
        "shopify-operations-mcp"
      ],
      "env": {
        "SHOPIFY_STORE_DOMAIN": "your-value",
        "SHOPIFY_ADMIN_TOKEN": "your-value",
        "SHOPIFY_CONFIG": "your-value",
        "SHOPIFY_PLAN_TTL_MS": "your-value",
        "SHOPIFY_APPROVAL_SERVER_PORT": "your-value",
        "SHOPIFY_PROTECTED_TAGS": "your-value",
        "SHOPIFY_CALLER_ID": "your-value",
        "SHOPIFY_AUDIT_PATH": "your-value"
      }
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

In VS Code öffnen

Oder kopier die Einstellungen selbst

In .vscode/mcp.json in deinem Projekt einfügen

{
  "servers": {
    "shopify-operations": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "shopify-operations-mcp"
      ],
      "env": {
        "SHOPIFY_STORE_DOMAIN": "your-value",
        "SHOPIFY_ADMIN_TOKEN": "your-value",
        "SHOPIFY_CONFIG": "your-value",
        "SHOPIFY_PLAN_TTL_MS": "your-value",
        "SHOPIFY_APPROVAL_SERVER_PORT": "your-value",
        "SHOPIFY_PROTECTED_TAGS": "your-value",
        "SHOPIFY_CALLER_ID": "your-value",
        "SHOPIFY_AUDIT_PATH": "your-value"
      }
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

Dieser Server läuft auf deinem Computer, und ChatGPT kann sich nur mit Servern im Internet verbinden. Wähle eine andere App.

Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.

Werte, die du selbst einträgst

  • SHOPIFY_STORE_DOMAIN erforderlich env
    The myshopify.com store domain, e.g. my-store.myshopify.com. Overrides shopify.storeDomain from the config file.
  • SHOPIFY_ADMIN_TOKEN geheim erforderlich env
    Shopify Admin API access token. Required and only ever read from the environment — never from the config file.
  • SHOPIFY_CONFIG env
    Path to a config.json with shopify/plans/approvalServer/protectedTags settings. Defaults to ./config.json in the working directory.
  • SHOPIFY_PLAN_TTL_MS env
    How long a plan token stays valid before it must be executed or expires, in milliseconds. Default 60000.
  • SHOPIFY_APPROVAL_SERVER_PORT env
    Port the localhost human-approval HTTP server binds to (127.0.0.1 only). Default 4319.
  • SHOPIFY_PROTECTED_TAGS env
    Comma-separated tags that plans may never modify; any plan touching an item carrying one is refused. Default do-not-touch.
  • SHOPIFY_CALLER_ID env
    Identity recorded as the caller on every audit log row. Default unknown.
  • SHOPIFY_AUDIT_PATH env
    File path for the tamper-evident JSONL audit log. Default shopify-operations-audit.jsonl in the working directory.

Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.

Was er kann

Läuft auf deinem Computer; die Tool-Liste erscheint nach der Installation in deiner KI-App.

Basischecksi

Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 7. Nov. 2026

  • ✓ Bestanden

    Entwickler passt zum Repo

    Der Registry-Name wurde mit dem GitHub-Konto jpka bestätigt, dem das Repo gehört

  • … Noch nicht geprüft

    Wird noch gepflegt

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • … Noch nicht geprüft

    Hat eine Lizenz

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • – Nicht zutreffend

    Endpunkt antwortet

    Dieser Server läuft auf deinem Computer; es gibt keinen Endpunkt im Internet

  • – Nicht zutreffend

    Anmeldung mit OAuth

    Läuft auf deinem Computer und nutzt stattdessen lokale Einstellungen

  • … Noch nicht geprüft

    Keine versteckten Anweisungen in Tool-Beschreibungen

    Läuft auf deinem Computer; Tool-Listen können wir nur von Endpunkten im Internet lesen

Im Vergleich mit anderen in Onlineshops & Zahlungeni

  • Mehr Sterne als 0 % der anderen 1753 Server in dieser Kategorie
  • Neuer in der Registry veröffentlicht als 28 % der anderen 1753 Server in dieser Kategorie
  • Basischecks gleich gut wie oder besser als bei 100 % der anderen 1753 Server in dieser Kategorie

Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.

Häufige Fragen

Ist shopify-operations-mcp sicher?

Er hat 1 von 1 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.

Welche Schlüssel oder Codes braucht er?

Das musst du eintragen: SHOPIFY_STORE_DOMAIN, SHOPIFY_ADMIN_TOKEN

Läuft er auf meinem Computer oder in der Cloud?

Er läuft auf deinem Computer. Deine KI-App startet ihn bei Bedarf, und die Daten laufen nicht über die Server des Entwicklers (außer der Server ruft selbst einen Onlinedienst auf).

Wird er noch gepflegt?

Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (0.1.2) kam vor 3 Monaten in die Registry.

Welche Apps können ihn nutzen?

Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Außerdem brauchst du Node.js auf deinem Computer.

Was kann ich stattdessen nutzen?

In derselben Kategorie: Spree Commerce: open-source B2B and marketplace ecommerce, Stripe MCP, MCP Cn Commerce

Alternativen

Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.

So liest du eine Karte:★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti

Stripe MCP

von stripe

MCP server integrating with Stripe - tools for customers, products, payments, and more.

Läuft in der Cloud★ 2.043MITAktualisiert vor 12 Monaten
Installieren

MCP Cn Commerce

von TonyWang-hub

8 read-only MCP platform entries; support is operation-specific; merchant live acceptance pending

Läuft auf deinem Computer★ 96MITAktualisiert vor 28 Tagen
Installieren

README vom Entwickler

README öffnen

Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.

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 /admin/api/2026-04/graphql.json] end

subgraph audit["Audit"] LF[JSONL audit file 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:#e8f5e9

The two-phase pattern (preview → token → execute) is the core discipline. Every write tool:

  1. Preview — reads current state and computes what would change, performing zero mutation calls
  2. Token — issues a plan token bound to the exact previewed manifest via a SHA-256 fingerprint
  3. 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= )
  4. 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 (cancel_order, refund_order) 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.5

A 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 STATE_CHANGED 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.

Rollback provides recovery for reversible mistakes (wrong price, wrong inventory level) within the rollback window. It does *not* recover from the irreversible operations: a cancelled order stays cancelled, a refunded payment stays refunded.

Quick start

npm install

npm test npm run build

Set the required environment variable and point Claude Desktop at the server (see Configuration below). node dist/index.js starts the localhost approval UI alongside the MCP stdio server.

Demo: the step-by-step walkthrough script (store-wide reprice refused → approval-gated reprice → one-call rollback → hash-chained audit) is in docs/demo-runbook.md.

Configuration

Configuration file (default config.json in the working directory, or path via SHOPIFY_CONFIG):

{

"shopify": { "storeDomain": "my-store.myshopify.com", "apiVersion": "2026-04" }, "plans": { "planTtlMs": 60000, "approvalRequiredAboveItems": 25, "hardMaxItems": 250, "maxPriceChangePct": 30, "rollbackTtlMs": 86400000 }, "approvalServer": { "enabled": true, "port": 4319, "requireAuth": true }, "protectedTags": ["do-not-touch"], "callerId": "shopify-operations-mcp" }

Config reference
FieldTypeDefaultDescription
shopify.storeDomainstring*(required)*MyShopify domain, e.g. "my-store.myshopify.com"
shopify.apiVersionstring"2026-04"Pinned quarterly Admin API version
shopify.adminTokenstring*(env only)*Admin API token — never in config file, only SHOPIFY_ADMIN_TOKEN env var
plans.planTtlMspositive int60000How long a plan token stays valid (ms). Overridable: SHOPIFY_PLAN_TTL_MS
plans.approvalRequiredAboveItemspositive int25Plans touching this many items require human approval. Overridable: SHOPIFY_APPROVAL_REQUIRED_ABOVE_ITEMS
plans.hardMaxItemspositive int250Plans exceeding this item count are refused outright. Overridable: SHOPIFY_HARD_MAX_ITEMS
plans.maxPriceChangePctpositive int30Price changes exceeding this % require approval. Overridable: SHOPIFY_MAX_PRICE_CHANGE_PCT
plans.rollbackTtlMspositive int86400000Rollback window (ms, default 24h). Overridable: SHOPIFY_ROLLBACK_TTL_MS
approvalServer.enabledbooleantrueStart localhost approval UI alongside MCP server. Overridable: SHOPIFY_APPROVAL_SERVER_ENABLED
approvalServer.portpositive int4319Port for localhost approval UI (127.0.0.1 only). Overridable: SHOPIFY_APPROVAL_SERVER_PORT
approvalServer.requireAuthbooleantrueRequire the per-session bearer token on every approval-server route. Set false to fall back to pre-0.4.0 behavior (not recommended). Overridable: SHOPIFY_APPROVAL_SERVER_REQUIRE_AUTH
approvalServer.authTokenstring?*(env only)*Explicit bearer token for the approval server — never in config file, only SHOPIFY_APPROVAL_SERVER_AUTH_TOKEN env var. Unset means a random token is generated per start and printed once on stderr.
protectedTagsstring[]["do-not-touch"]Tags that plans may never modify. Overridable: SHOPIFY_PROTECTED_TAGS (comma-separated)
callerIdstring"unknown"Identity recorded on every audit row. Overridable: SHOPIFY_CALLER_ID

Invariant: plans.hardMaxItems must be >= plans.approvalRequiredAboveItems. The loader throws if violated.

Environment variables

All config fields are overridable by environment variables (precedence: env > config file > default). SHOPIFY_ADMIN_TOKEN is required and only ever read from the environment.

Tools

Read tools
search_products

Search products by title, SKU, vendor, or tag. Returns products with variants, current prices, and per-location inventory levels.

Arguments:

FieldTypeDescription
titlestring?Matches products whose title contains the term (Shopify fuzzy search)
skustring?Matches products with a variant whose SKU equals the term
vendorstring?Matches products from this vendor
tagstring?Matches products carrying this tag
firstpositive int?Page size passed to Admin API (default 50)

Returns: products[] with id, title, vendor, tags, variants (each with id, sku, price, inventoryItemId, inventoryLevels), plus flags.protected / flags.protectedTags indicating whether the product carries a protected tag.

Safety properties: Pure read — zero mutation calls. Protected-tagged products are returned (never filtered out) so a later write plan that touches them is refused.

list_orders

List orders filtered by financial status, fulfillment status, and date range.

Arguments:

FieldTypeDescription
financialStatusFinancialStatus?`"pending" \"authorized" \"partially_paid" \"paid" \"partially_refunded" \"refunded" \"voided"`
fulfillmentStatusFulfillmentStatus?`"fulfilled" \"partial" \"unfulfilled"`
createdAfterISO-8601 string?Orders created at or after this datetime
createdBeforeISO-8601 string?Orders created at or before this datetime
firstpositive int?Page size (default 250)

Returns: orders[] with id, name, financialStatus, fulfillmentStatus, totalPrice, lineItems[].

Safety properties: Pure read — zero mutation calls.

Write tools (two-phase)

All write tools go through preview → token → (approval) → execute.

update_inventory

Set absolute inventory quantities at a named location for multiple inventory items. Preview reads current levels; execute calls inventorySetQuantities.

Arguments:

FieldTypeDescription
locationIdstringgid://shopify/Location/… id
adjustmentsInventoryAdjustment[]Each {inventoryItemId, quantity} sets the available quantity at locationId

Safety properties:

  • Threshold gating: requires approval when adjustments.length >= approvalRequiredAboveItems (default 25); refused outright when > hardMaxItems (default 250)
  • Protected-tag enforcement: plans touching a product with a protected tag throw PROTECTED_RESOURCE before a token is issued — no approval path
  • Per-item ledger: partial failure is recorded, never hidden
  • Rollback: supported — restores before.available quantities via the snapshot
cancel_order

Cancel a Shopify order. Always requires approval regardless of item count. Cannot be rolled back.

Arguments:

FieldTypeDescription
orderIdstringgid://shopify/Order/… id
reasonstring`"customer" \"inventory" \"fraud" \"other"`
restockbooleanReturn items to inventory
notifyCustomerbooleanSend cancellation email

Safety properties:

  • Always approval: alwaysRequireApproval: true is hardcoded in the tool — approval thresholds are never consulted
  • No snapshot: no snapshotStore.capture() call — rollback is not opened for this operation
  • Rollback: refused with ROLLBACK_UNSUPPORTED — cancellation is a state transition, not a value change
refund_order

Refund a Shopify order. Always requires approval regardless of item count. Cannot be rolled back.

Arguments:

FieldTypeDescription
orderIdstringgid://shopify/Order/… id
refundLineItemsRefundLineItem[]?Line items and quantities to refund; absent = full refund of all fulfilled items
reasonstringHuman-readable reason recorded in audit

Each RefundLineItem: {lineItemId, quantity, restockType?} where restockType is "RETURN" \| "NO_RESTOCK" \| "CANCEL".

Safety properties:

  • **A

Nur der Anfang wird gezeigt; den Rest findest du im Repo

PopNx fragen