Serveur MCP

Moltline Shopify Prep

com.moltlinestudio/shopify
Commerce et retail Outils développeur Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Validates and prepares Shopify product imports, handles, variant combinations, metafield keys, bulk pricing, and payout estimates.

bulk_price_change
Bulk Price Change
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.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['prices'], 'properties': {'prices': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Current prices, at least one, each greater than 0.'}, 'round_to': {'type': 'number', 'default': 0.01, 'description': 'Rounding increment applied last, e.g. 0.01 or 0.05.\nDefault 0.01.', 'exclusiveMinimum': 0}, 'change_pct': {'type': 'number', 'default': 0, 'description': 'Percentage change applied first, e.g. 10 to raise by 10%\nor -5 to cut by 5%. Default 0.'}, 'change_flat': {'type': 'number', 'default': 0, 'description': 'Flat amount applied after the percentage. Default 0.'}, 'charm_ending': {'type': 'string', 'default': '', 'description': 'Force every price to end in these cents, e.g. ".99" or\n".95". Applied after rounding. Empty by default.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'additionalProperties': True}
metafield_key_check
Metafield Key Check
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.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['namespace', 'key'], 'properties': {'key': {'type': 'string', 'description': 'The metafield key, e.g. "care_instructions".'}, 'namespace': {'type': 'string', 'description': 'The metafield namespace, e.g. "custom".'}, 'value_type': {'type': 'string', 'default': 'single_line_text_field', '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.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'additionalProperties': True}
payout_estimate
Payout Estimate
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.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['order_total'], 'properties': {'orders': {'type': 'integer', 'default': 1, 'minimum': 1, 'description': 'How many orders to model. Default 1.'}, 'fee_pct': {'type': 'number', 'default': 2.9, 'minimum': 0, 'description': 'Percentage fee per transaction. Default 2.9 — a common\npublished rate, not a promise about your account.'}, 'fee_fixed': {'type': 'number', 'default': 0.3, 'minimum': 0, 'description': 'Fixed fee per transaction. Default 0.30.'}, 'order_total': {'type': 'number', 'description': 'Value of one order including anything the processor\ntakes a percentage of. Must be greater than 0.', 'exclusiveMinimum': 0}, 'refund_rate_pct': {'type': 'number', 'default': 0, 'maximum': 100, 'minimum': 0, 'description': 'Share of order value refunded, as a percentage.\nDefault 0.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'additionalProperties': True}
product_csv_check
Product Csv Check
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.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['header_row'], 'properties': {'mode': {'type': 'string', 'default': 'new', 'pattern': '^(new|update)$', 'description': '"new" when creating products, where Shopify requires only Title;\n"update" when changing existing ones, where it also requires URL\nhandle. Default "new".'}, 'header_row': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The CSV\'s first row as a list of column names, exactly as\nwritten in the file, e.g. ["Handle", "Title", "Variant Price"].'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'additionalProperties': True}
url_handle
Url Handle
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.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['title'], 'properties': {'title': {'type': 'string', 'description': 'The product title or a candidate handle, e.g. "Men\'s Merino\nWool Socks".'}, 'existing': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}], 'default': None, 'description': 'Handles already used in the store or the file, so a\ncollision can be reported and a suffixed alternative suggested.\nOptional.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'additionalProperties': True}
variant_matrix
Variant Matrix
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.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['options'], 'properties': {'options': {'type': 'object', 'description': 'Option names mapped to their values, e.g. {"Size": ["S",\n"M"], "Colour": ["Black"]}. Each list needs at least one value.', 'additionalProperties': {'type': 'array', 'items': {'type': 'string'}}}, 'list_rows': {'type': 'boolean', 'default': False, 'description': 'When true, also return every variant combination. Off by\ndefault because the list can be very large.'}, 'max_options': {'type': 'integer', 'default': 3, 'minimum': 1, 'description': 'Ceiling on distinct option names. Default 3.'}, 'max_variants': {'type': 'integer', 'default': 2048, 'minimum': 1, '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.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'additionalProperties': True}
Ajouté
payout_estimate
17 September 2026 12:36
Ajouté
bulk_price_change
17 September 2026 12:36
Ajouté
metafield_key_check
17 September 2026 12:36
Ajouté
variant_matrix
17 September 2026 12:36
Ajouté
url_handle
17 September 2026 12:36
Ajouté
product_csv_check
17 September 2026 12:36