search_shop_policies_and_faqs
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:
Used to get facts about the store's policies, FAQ, or contact details. When the question is about specific policy kinds, set policy_types to those kinds; leave it unset for general FAQ questions. Some examples of questions you can ask are: - What is your return policy? (policy_types: ["refund"]) - What is your shipping policy? (policy_types: ["shipping"]) - What is your phone number? (policy_types: ["contact"]) - What are your hours of operation? (policy_types: ["contact"]) - Do you offer gift wrapping? (general FAQ, no specific policy kind — leave policy_types unset)
| 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: true (the tool declares itself read-only) |
| 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 |
|---|---|---|---|
query | string | yes | A natural language query. Searches FAQ pages and articles, and routes policies by keyword when policy_types is omitted. |
policy_types | array | no | Policy kinds to fetch, chosen from the user's question — e.g. ["refund"] for returns/exchanges, ["contact"] for phone/hours/address. Include every kind the question touches. Omit when no specific policy is relevant (e.g. a general FAQ question). |
The full input schema, as declared:
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "A natural language query. Searches FAQ pages and articles, and routes policies by keyword when policy_types is omitted."
},
"policy_types": {
"type": "array",
"description": "Policy kinds to fetch, chosen from the user's question — e.g. [\"refund\"] for returns/exchanges, [\"contact\"] for phone/hours/address. Include every kind the question touches. Omit when no specific policy is relevant (e.g. a general FAQ question).",
"items": {
"type": "string",
"enum": [
"refund",
"shipping",
"privacy",
"terms_of_service",
"terms_of_sale",
"subscription",
"legal_notice",
"contact"
]
}
}
},
"required": [
"query"
]
}
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_catalogshow_variantupdate_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.