プロトタイプ · プレビュー版:公式レジストリのすべてのサーバーを掲載し、30分ごとに同期しています。レビューとアカウント機能は今後のステップで始まります。
PopNx MCPAIを使う人のためのMCPサーバー · やさしい言葉で解説

shopify-operations-mcp

作者:jpkaバージョン 0.1.2i★ –iパソコンで動く
レジストリ名io.github.jpka/shopify-operations-mcp

インストール

概要

作者による説明(英語の原文)

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

PopNx MCPの3つの柱

この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。

できること

このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。

  • 接続方法: パソコンで動く
  • トランスポート: stdio
  • カテゴリ: ネットショップ・決済
  • 入力が必要なもの:SHOPIFY_STORE_DOMAIN, SHOPIFY_ADMIN_TOKEN

インストール

使っているAIアプリを選んで、設定をコピーしてください。

インストールの前に

  • 基本チェック:1項目中1項目に合格
  • あなたのパソコンで、あなたのユーザーと同じ権限(ファイル、ネットワーク、アプリ)で動きます。
  • 自分で入力するもの: 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

「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。

必要なもの

  • npmNode.jsのインストール(npxコマンドに必要)

どのアプリを使っていますか?

上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。

Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます

{
  "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"
      }
    }
  }
}

ターミナルでこれを実行します

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

動かす前に、空欄の値を入力してください。

Cursorで開く

または、設定を自分でコピーする

プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます

{
  "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"
      }
    }
  }
}

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

VS Codeで開く

または、設定を自分でコピーする

プロジェクトの .vscode/mcp.json に貼り付けます

{
  "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"
      }
    }
  }
}

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。

選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。

自分で入力する値

  • SHOPIFY_STORE_DOMAIN 必須 env
    The myshopify.com store domain, e.g. my-store.myshopify.com. Overrides shopify.storeDomain from the config file.
  • SHOPIFY_ADMIN_TOKEN 秘密 必須 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.

この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。

できること

パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。

基本チェックi

誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック

  • ✓ 合格

    作者とリポジトリが一致

    レジストリ名は、リポジトリを所有するGitHubアカウント jpka で確認済みです

  • … 未チェック

    今もメンテナンスされている

    このリポジトリはまだGitHubから読み取っていません

  • … 未チェック

    ライセンスがある

    このリポジトリはまだGitHubから読み取っていません

  • – 対象外

    エンドポイントが応答する

    これはパソコンで動くため、インターネット上のエンドポイントはありません

  • – 対象外

    OAuthでサインイン

    パソコンで動き、代わりにローカルの設定を使います

  • … 未チェック

    ツールの説明に隠れた指示がない

    パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです

ネットショップ・決済のほかのサーバーとの比較i

  • このカテゴリのほかの1754件のうち0%よりスターが多い
  • このカテゴリのほかの1754件のうち28%より最近レジストリに公開
  • 基本チェックの結果が、このカテゴリのほかの1754件のうち100%と同じかそれ以上

レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。

よくある質問

shopify-operations-mcpは安全ですか?

当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。

どんなキーやコードが必要ですか?

入力が必要なもの:SHOPIFY_STORE_DOMAIN, SHOPIFY_ADMIN_TOKEN

パソコンで動きますか、それともクラウドですか?

あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。

今もメンテナンスされていますか?

GitHubリポジトリの最終更新は–、最新バージョン(0.1.2)がレジストリに届いたのは3 か月前です。

どのアプリで使えますか?

Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。

代わりに使えるものは?

同じカテゴリには:Spree Commerce: open-source B2B and marketplace ecommerce, Stripe MCP, MCP Cn Commerce

代わりの候補

同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。

カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i

Stripe MCP

作者:stripe

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

クラウドで動く★ 2,043MIT12 か月前更新
インストール

MCP Cn Commerce

作者:TonyWang-hub

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

パソコンで動く★ 96MIT28 日前更新
インストール

作者のREADME

READMEを開く

作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。

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

冒頭だけを表示しています。続きはリポジトリで読めます

PopNxに聞く