show_variant
A WebMCP tool distributed by Shopify. 99,664 of the sites we crawled carry a tool set that includes it (99.7% of vendor-distributed detections). This is a documented platform feature, not a vulnerability. Individual sites did not each choose it one by one.
What the tool declares
The description below is quoted as Shopify publishes it, in the distributed bundle:
Navigate the browser to a product page, with a specific variant OR a partial option filter selected. Use for view intents: "show me", "open", "view", "go to", "take me to" a specific product configuration. Accepts EITHER variant_id (fully specified variant) OR selected_options (partial, e.g. only Color=Purple) — with partial options the first matching available variant is picked automatically, so DO NOT ask the user for missing options when their intent is to view. Does NOT add anything to the cart; use add_to_cart for cart changes. For cart operations you still need a full variant_id — call get_product with the full option combination first. This MOVES the browser to the exact variant page with the variant pre-selected; the tool result then confirms the destination and instructs you not to navigate again — follow it.
| Vendor | Shopify |
|---|---|
| Sites | 99,664 in 3 tool sets (64,429 + 31,153 + 4,082) |
| Declared by bundle versions | 0.1.0, 0.1.1, 1cd8a9f0, f427de6a |
| Read-only hint | readOnlyHint: false |
| Other hints | untrustedContentHint: true |
The wording of this description differs between bundle versions; the one above is from the newest version that declares the tool (f427de6a).
The input it asks for
| Field | Type | Required | Description |
|---|---|---|---|
catalog | object | yes | Provide EITHER variant_id OR selected_options. Handle is required unless the user is already on the product page. |
The full input schema, as declared:
{
"type": "object",
"required": [
"catalog"
],
"properties": {
"catalog": {
"type": "object",
"description": "Provide EITHER variant_id OR selected_options. Handle is required unless the user is already on the product page.",
"properties": {
"handle": {
"type": "string",
"description": "Product handle. If omitted, uses the current product page's handle."
},
"variant_id": {
"type": [
"string",
"number"
],
"description": "ProductVariant ID from get_product variants[].id, e.g. \"gid://shopify/ProductVariant/123\", or the numeric variant ID. Use when the user picked a specific fully-specified variant. Omit when using selected_options."
},
"selected_options": {
"type": "array",
"description": "Partial (or full) option selections, e.g. [{\"name\":\"Color\",\"value\":\"Purple\"}]. Use when the user names some options but not all (e.g. \"show me the purple shoe\" — pass only Color). The first matching available variant will be selected automatically. Use exact option names and values from get_product available_options or search_catalog options.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
}
}
}
}
}
What we checked
We read the tool set the page declares and we never invoke a tool. We fetched and analysed the distributed bundle that declares this tool, so these copies carry no unverified-implementation signal. What a tool does is inferred from its name and description, and we have not yet published an accuracy measurement for that inference. These are measured indicators, not audits. The crawl is a sample, not a census.
Vendor documentation: https://shopify.dev/docs/api/web-mcp
Other tools in the same sets
add_to_cartbrowse_storecancel_cartget_cartget_productget_ucp_profilemanage_ordersproceed_to_checkoutsearch_catalogsearch_shop_policies_and_faqsupdate_cartupdate_cart_lines
Source
25d8fb700a3a3e973ea18e6ac678d15762cce58a46690334defa5b05b9142e13.
Declarations: captured from the vendor's distributed bundles, each checked against a recorded sha256.
See the Shopify tool sets
and what a tool declares and what a crawler cannot see.