update_cart
A WebMCP tool distributed by Shopify. 4,082 of the sites we crawled carry a tool set that includes it (4.1% 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:
Add products to the cart, update line item quantities, or remove items. Batch EVERY change for one request into a SINGLE call — line_items accepts up to 10 entries; do NOT call update_cart once per item. Do NOT retry a call that already returned a result: adds are cumulative, so repeating a call adds duplicate items. Use line_items[].item.id with a ProductVariant GID when the exact variant is known. Use line_items[].id from get_cart to update or remove an existing line, passing the ABSOLUTE target quantity (not a delta; quantity 0 removes the line). Use handle or query only when adding the selected or first available variant.
| Vendor | Shopify |
|---|---|
| Sites | 4,082 in 1 tool set |
| Declared by bundle versions | 0.1.0, 0.1.1 |
| Read-only hint | readOnlyHint: false |
The newest bundle version no longer declares this tool.
The input it asks for
| Field | Type | Required | Description |
|---|---|---|---|
cart | object | yes |
The full input schema, as declared:
{
"type": "object",
"required": [
"cart"
],
"properties": {
"cart": {
"type": "object",
"required": [
"line_items"
],
"properties": {
"line_items": {
"type": "array",
"description": "Items to add or update (1-10).",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Existing cart line id from get_cart. Use to update or remove an existing line. Omit when adding new items."
},
"item": {
"type": "object",
"description": "The merchandise to add.",
"properties": {
"id": {
"type": "string",
"description": "ProductVariant GID from get_product variants[].id, e.g. \"gid://shopify/ProductVariant/123\"."
}
}
},
"handle": {
"type": "string",
"description": "Product handle. Adds the selected or first available variant; call get_product first if the user requested specific options."
},
"query": {
"type": "string",
"description": "Search query to find and add the selected or first available variant. For specific variants, call search_catalog/get_product first and pass item.id."
},
"quantity": {
"type": "integer",
"description": "Quantity. Defaults to 1 for adds and updates. Set to 0 with an existing line id to remove it.",
"default": 1
}
}
}
}
}
}
}
}
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
browse_storecancel_cartget_cartget_productmanage_ordersproceed_to_checkoutsearch_catalogsearch_shop_policies_and_faqsshow_variant
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.