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=falseurl_handle 内

ツール定義とプロトコルへの準拠に関する自動分析に基づいています。

コンテキストコスト

~2,634トークン数(ツール定義)
~2.0 KB一般的なレスポンスサイズ
注意への影響は大きい(128k コンテキストの 2.06%)

これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。

インストール

ワンクリックインストール

これを `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 件