Moltline Shopify Prep

Check a product CSV, handles, variant matrices and metafield keys. 4 of 6 free.

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
98%
命名品質
80%
汙染風險
100%
權限相符程度
90%
協定合規性
100%

發現項目(1)

  • LOWTool 'url_handle' suggests web access but openWorldHint=false在 url_handle 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~2,634Token(工具定義)
~2.0 KB典型回應大小
顯著的注意力影響(128k 上下文的 2.06%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "shopify": {
      "url": "https://mcp.moltlinestudio.com/shopify"
    }
  }
}

遠端端點

https://mcp.moltlinestudio.com/shopifystreamable-http

它能做什麼

工具清單

工具(6)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢product_csv_check(header_row, mode)

Check a product CSV's header row against Shopify's current columns. FREE. Catches the failure that wastes the most time: a template copied from an out-of-date guide, using column names Shopify renamed. Typical input {"header_row": ["Handle", "Title", "Body (HTML)", "Variant Price"]} returns {"ok": false, "missing_required": [], "renamed": [{"found": "Handle", "use": "URL handle"}, ...], "unrecognised": [], "verdict": "..."}. Use before an import, on the header row alone. Not for whether the values in the rows are valid — check a handle with url_handle and a metafield key with metafield_key_check. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "header_row must contain at least one column name"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.

輸入結構描述

{
  "type": "object",
  "properties": {
    "header_row": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "description": "The CSV's first row as a list of column names, exactly as\nwritten in the file, e.g. [\"Handle\", \"Title\", \"Variant Price\"]."
    },
    "mode": {
      "default": "new",
      "pattern": "^(new|update)$",
      "type": "string",
      "description": "\"new\" when creating products, where Shopify requires only Title;\n\"update\" when changing existing ones, where it also requires URL\nhandle. Default \"new\"."
    }
  },
  "required": [
    "header_row"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true
}
🟢url_handle(title, existing)

Turn a product title into a valid, unique Shopify URL handle. FREE. Shopify handles are lowercase, may contain letters, numbers and dashes, and may not contain spaces. Typical input {"title": "Men's Merino Wool Socks (2-Pack)"} returns {"handle": "mens-merino-wool-socks-2-pack", "valid": true, "changed": true, "collisions": []}. Use when generating handles for an import, or checking one you already have. Not for validating a whole header row — that is product_csv_check. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "title must not be empty"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.

輸入結構描述

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "description": "The product title or a candidate handle, e.g. \"Men's Merino\nWool Socks\"."
    },
    "existing": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Handles already used in the store or the file, so a\ncollision can be reported and a suffixed alternative suggested.\nOptional."
    }
  },
  "required": [
    "title"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true
}
🟢variant_matrix(options, max_variants, max_options, list_rows)

Count the variants a set of options produces, and flag the ceilings. FREE. Option counts multiply, so three modest lists become a number nobody intended. Typical input {"options": {"Size": ["S", "M", "L"], "Colour": ["Black", "Navy"]}} returns {"option_count": 2, "variant_count": 6, "within_limits": true, "per_option": {"Size": 3, "Colour": 2}}. Use before building an import file, to find out whether the catalogue needs splitting into several products. Not for validating the resulting CSV's columns — that is product_csv_check. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "options must contain at least one option"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.

輸入結構描述

{
  "type": "object",
  "properties": {
    "options": {
      "additionalProperties": {
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "type": "object",
      "description": "Option names mapped to their values, e.g. {\"Size\": [\"S\",\n\"M\"], \"Colour\": [\"Black\"]}. Each list needs at least one value."
    },
    "max_variants": {
      "default": 2048,
      "minimum": 1,
      "type": "integer",
      "description": "Ceiling to check against. Default 2048, which is the\nlimit Shopify announced on 15 October 2025, up from 100. Override\nit if your plan differs."
    },
    "max_options": {
      "default": 3,
      "minimum": 1,
      "type": "integer",
      "description": "Ceiling on distinct option names. Default 3."
    },
    "list_rows": {
      "default": false,
      "type": "boolean",
      "description": "When true, also return every variant combination. Off by\ndefault because the list can be very large."
    }
  },
  "required": [
    "options"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true
}
🟢metafield_key_check(namespace, key, value_type)

Validate a metafield namespace and key before you define it. FREE. Shopify metafield namespaces and keys are lowercase alphanumerics and underscores; a capital letter or a dash is rejected at definition time, usually after the rest of the import has already run. Typical input {"namespace": "custom", "key": "Care-Instructions"} returns {"ok": false, "problems": ["key: dashes and capitals are not allowed"], "suggested_key": "care_instructions"}. Use when designing metafields. Not for the CSV column that carries them — that is product_csv_check. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.

輸入結構描述

{
  "type": "object",
  "properties": {
    "namespace": {
      "type": "string",
      "description": "The metafield namespace, e.g. \"custom\"."
    },
    "key": {
      "type": "string",
      "description": "The metafield key, e.g. \"care_instructions\"."
    },
    "value_type": {
      "default": "single_line_text_field",
      "type": "string",
      "description": "The intended metafield type, echoed back for your record,\ne.g. \"single_line_text_field\". Not validated against Shopify's\ntype list, which changes."
    }
  },
  "required": [
    "namespace",
    "key"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true
}
🟢bulk_price_change(prices, change_pct, change_flat, round_to, charm_ending)

Apply one pricing rule across a list of prices and show the effect. PREMIUM (license). Percentage first, then the flat amount, then rounding — stated explicitly because the order changes the answer. Typical input {"prices": [19.99, 24.5], "change_pct": 10, "charm_ending": ".99"} returns {"rows": [{"was": 19.99, "now": 21.99}, {"was": 24.5, "now": 26.99}], "total_was": 44.49, "total_now": 48.98, "uplift_pct": 10.09}. Use when repricing a catalogue before export. Not for what a price nets you after Shopify's fees — that is payout_estimate. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "prices must contain at least one price"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.

輸入結構描述

{
  "type": "object",
  "properties": {
    "prices": {
      "items": {
        "type": "number"
      },
      "type": "array",
      "description": "Current prices, at least one, each greater than 0."
    },
    "change_pct": {
      "default": 0,
      "type": "number",
      "description": "Percentage change applied first, e.g. 10 to raise by 10%\nor -5 to cut by 5%. Default 0."
    },
    "change_flat": {
      "default": 0,
      "type": "number",
      "description": "Flat amount applied after the percentage. Default 0."
    },
    "round_to": {
      "default": 0.01,
      "exclusiveMinimum": 0,
      "type": "number",
      "description": "Rounding increment applied last, e.g. 0.01 or 0.05.\nDefault 0.01."
    },
    "charm_ending": {
      "default": "",
      "type": "string",
      "description": "Force every price to end in these cents, e.g. \".99\" or\n\".95\". Applied after rounding. Empty by default."
    }
  },
  "required": [
    "prices"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true
}
🟢payout_estimate(order_total, fee_pct, fee_fixed, refund_rate_pct, orders)

Estimate what actually lands in the bank after processing fees. PREMIUM (license). Typical input {"order_total": 84.5, "fee_pct": 2.9, "fee_fixed": 0.3, "orders": 120, "refund_rate_pct": 4} returns {"gross": 10140.0, "fees": 330.06, "refunds": 405.6, "net_payout": 9404.34, "effective_fee_pct": 3.26}. Use for cash-flow planning. Not as an authoritative fee schedule: rates depend on your plan, country and card mix, so pass your own. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.

輸入結構描述

{
  "type": "object",
  "properties": {
    "order_total": {
      "exclusiveMinimum": 0,
      "type": "number",
      "description": "Value of one order including anything the processor\ntakes a percentage of. Must be greater than 0."
    },
    "fee_pct": {
      "default": 2.9,
      "minimum": 0,
      "type": "number",
      "description": "Percentage fee per transaction. Default 2.9 — a common\npublished rate, not a promise about your account."
    },
    "fee_fixed": {
      "default": 0.3,
      "minimum": 0,
      "type": "number",
      "description": "Fixed fee per transaction. Default 0.30."
    },
    "refund_rate_pct": {
      "default": 0,
      "maximum": 100,
      "minimum": 0,
      "type": "number",
      "description": "Share of order value refunded, as a percentage.\nDefault 0."
    },
    "orders": {
      "default": 1,
      "minimum": 1,
      "type": "integer",
      "description": "How many orders to model. Default 1."
    }
  },
  "required": [
    "order_total"
  ],
  "additionalProperties": false
}

輸出結構描述

{
  "type": "object",
  "additionalProperties": true
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本6 個工具
已驗證未記錄版本6 個工具