Server definition
- Hash
- sha256:796b3e188e0763f6d49d2d629344042540439b0a47d54b8a2a609294c60557c7
- What it is
- What a remote MCP server returned when asked what it offers: 6 tools
The blob, as servednamed by its sha256
{
"instructions": "Shopify catalogue preparation over MCP. Free: product_csv_check, url_handle, variant_matrix, metafield_key_check. Premium (license): bulk_price_change, payout_estimate. Works on your file, not your store — no API key, no OAuth, no store access.",
"tools": [
{
"description": "Apply one pricing rule across a list of prices and show the effect. PREMIUM (license).\n\nPercentage first, then the flat amount, then rounding — stated explicitly\nbecause the order changes the answer. Typical input {\"prices\": [19.99,\n24.5], \"change_pct\": 10, \"charm_ending\": \".99\"} returns {\"rows\":\n[{\"was\": 19.99, \"now\": 21.99}, {\"was\": 24.5, \"now\": 26.99}],\n\"total_was\": 44.49, \"total_now\": 48.98, \"uplift_pct\": 10.09}.\n\nUse when repricing a catalogue before export. Not for what a price nets\nyou 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"change_flat": {
"default": 0,
"description": "Flat amount applied after the percentage. Default 0.",
"type": "number"
},
"change_pct": {
"default": 0,
"description": "Percentage change applied first, e.g. 10 to raise by 10%\nor -5 to cut by 5%. Default 0.",
"type": "number"
},
"charm_ending": {
"default": "",
"description": "Force every price to end in these cents, e.g. \".99\" or\n\".95\". Applied after rounding. Empty by default.",
"type": "string"
},
"prices": {
"description": "Current prices, at least one, each greater than 0.",
"items": {
"type": "number"
},
"type": "array"
},
"round_to": {
"default": 0.01,
"description": "Rounding increment applied last, e.g. 0.01 or 0.05.\nDefault 0.01.",
"exclusiveMinimum": 0,
"type": "number"
}
},
"required": [
"prices"
],
"type": "object"
},
"name": "bulk_price_change",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Validate a metafield namespace and key before you define it. FREE.\n\nShopify metafield namespaces and keys are lowercase alphanumerics and\nunderscores; a capital letter or a dash is rejected at definition time,\nusually after the rest of the import has already run. Typical input\n{\"namespace\": \"custom\", \"key\": \"Care-Instructions\"} returns {\"ok\": false,\n\"problems\": [\"key: dashes and capitals are not allowed\"], \"suggested_key\":\n\"care_instructions\"}.\n\nUse when designing metafields. Not for the CSV column that carries them —\nthat 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"key": {
"description": "The metafield key, e.g. \"care_instructions\".",
"type": "string"
},
"namespace": {
"description": "The metafield namespace, e.g. \"custom\".",
"type": "string"
},
"value_type": {
"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.",
"type": "string"
}
},
"required": [
"namespace",
"key"
],
"type": "object"
},
"name": "metafield_key_check",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Estimate what actually lands in the bank after processing fees. PREMIUM (license).\n\nTypical input {\"order_total\": 84.5, \"fee_pct\": 2.9, \"fee_fixed\": 0.3,\n\"orders\": 120, \"refund_rate_pct\": 4} returns {\"gross\": 10140.0, \"fees\":\n330.06, \"refunds\": 405.6, \"net_payout\": 9404.34, \"effective_fee_pct\":\n3.26}.\n\nUse for cash-flow planning. Not as an authoritative fee schedule: rates\ndepend 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"fee_fixed": {
"default": 0.3,
"description": "Fixed fee per transaction. Default 0.30.",
"minimum": 0,
"type": "number"
},
"fee_pct": {
"default": 2.9,
"description": "Percentage fee per transaction. Default 2.9 — a common\npublished rate, not a promise about your account.",
"minimum": 0,
"type": "number"
},
"order_total": {
"description": "Value of one order including anything the processor\ntakes a percentage of. Must be greater than 0.",
"exclusiveMinimum": 0,
"type": "number"
},
"orders": {
"default": 1,
"description": "How many orders to model. Default 1.",
"minimum": 1,
"type": "integer"
},
"refund_rate_pct": {
"default": 0,
"description": "Share of order value refunded, as a percentage.\nDefault 0.",
"maximum": 100,
"minimum": 0,
"type": "number"
}
},
"required": [
"order_total"
],
"type": "object"
},
"name": "payout_estimate",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Check a product CSV's header row against Shopify's current columns. FREE.\n\nCatches the failure that wastes the most time: a template copied from an\nout-of-date guide, using column names Shopify renamed. Typical input\n{\"header_row\": [\"Handle\", \"Title\", \"Body (HTML)\", \"Variant Price\"]}\nreturns {\"ok\": false, \"missing_required\": [], \"renamed\": [{\"found\":\n\"Handle\", \"use\": \"URL handle\"}, ...], \"unrecognised\": [], \"verdict\": \"...\"}.\n\nUse before an import, on the header row alone. Not for whether the values\nin the rows are valid — check a handle with url_handle and a metafield key\nwith 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"header_row": {
"description": "The CSV's first row as a list of column names, exactly as\nwritten in the file, e.g. [\"Handle\", \"Title\", \"Variant Price\"].",
"items": {
"type": "string"
},
"type": "array"
},
"mode": {
"default": "new",
"description": "\"new\" when creating products, where Shopify requires only Title;\n\"update\" when changing existing ones, where it also requires URL\nhandle. Default \"new\".",
"pattern": "^(new|update)$",
"type": "string"
}
},
"required": [
"header_row"
],
"type": "object"
},
"name": "product_csv_check",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Turn a product title into a valid, unique Shopify URL handle. FREE.\n\nShopify handles are lowercase, may contain letters, numbers and dashes,\nand may not contain spaces. Typical input {\"title\": \"Men's Merino Wool\nSocks (2-Pack)\"} returns {\"handle\": \"mens-merino-wool-socks-2-pack\",\n\"valid\": true, \"changed\": true, \"collisions\": []}.\n\nUse when generating handles for an import, or checking one you already\nhave. 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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"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."
},
"title": {
"description": "The product title or a candidate handle, e.g. \"Men's Merino\nWool Socks\".",
"type": "string"
}
},
"required": [
"title"
],
"type": "object"
},
"name": "url_handle",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
},
{
"description": "Count the variants a set of options produces, and flag the ceilings. FREE.\n\nOption counts multiply, so three modest lists become a number nobody\nintended. Typical input {\"options\": {\"Size\": [\"S\", \"M\", \"L\"], \"Colour\":\n[\"Black\", \"Navy\"]}} returns {\"option_count\": 2, \"variant_count\": 6,\n\"within_limits\": true, \"per_option\": {\"Size\": 3, \"Colour\": 2}}.\n\nUse before building an import file, to find out whether the catalogue\nneeds splitting into several products. Not for validating the resulting\nCSV'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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"list_rows": {
"default": false,
"description": "When true, also return every variant combination. Off by\ndefault because the list can be very large.",
"type": "boolean"
},
"max_options": {
"default": 3,
"description": "Ceiling on distinct option names. Default 3.",
"minimum": 1,
"type": "integer"
},
"max_variants": {
"default": 2048,
"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.",
"minimum": 1,
"type": "integer"
},
"options": {
"additionalProperties": {
"items": {
"type": "string"
},
"type": "array"
},
"description": "Option names mapped to their values, e.g. {\"Size\": [\"S\",\n\"M\"], \"Colour\": [\"Black\"]}. Each list needs at least one value.",
"type": "object"
}
},
"required": [
"options"
],
"type": "object"
},
"name": "variant_matrix",
"outputSchema": {
"additionalProperties": true,
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:796b3e188e0763f6d49d2d629344042540439b0a47d54b8a2a609294c60557c7 | sha256sum