{
  "schema_version": 1,
  "snapshot_date": "2026-09-29",
  "sealed": false,
  "generated_at": "2026-09-29T00:17:42.175Z",
  "as_of_note": "Values are cumulative as of generated_at. snapshot_date is the day this file seals, not a per-day delta. Per-day figures are in data.crawl_first_seen.",
  "license": "CC BY 4.0",
  "license_url": "https://creativecommons.org/licenses/by/4.0/",
  "cite_as": "Do not cite latest.json: it is rewritten daily. Cite the sealed dated file instead, e.g. https://webmcpshield.com/data/2026-09-29.json once it exists.",
  "canonical_url": "https://webmcpshield.com/data/latest.json",
  "method": {
    "tools_invoked": false,
    "tools_invoked_note": "We read what sites and servers declare. We never invoke a tool.",
    "capability_inference": "Capability is inferred from tool names and descriptions. We have not yet published an accuracy measurement for this inference. Treat these as measured indicators, not audits.",
    "robots_txt": "We honour robots.txt. Sites that disallow us are excluded and counted separately.",
    "daily_series": "crawl_first_seen counts when our crawler first observed a site, not when the site implemented WebMCP. This is crawl progress, not adoption growth.",
    "adoption_growth": "Not published. Measuring adoption growth requires a frozen cohort re-scanned on a fixed schedule. We do not have enough history yet.",
    "collection_gaps": "Days when collection failed are marked status=\"collection_gap\". We do not backfill them and we do not merge them into adjacent days.",
    "anonymization": "Individual sites are not named. Findings are published as anonymized identifiers and aggregates.",
    "methodology_url": "https://webmcpshield.com/#methodology"
  },
  "data": {
    "updated_at": "2026-09-29T00:17:42.175Z",
    "observing_since": "2026-08-09T12:20:07.503Z",
    "stats": {
      "domains_monitored": 5439636,
      "domains_crawled": 5439596,
      "domains_not_yet_crawled": 40,
      "domains_monitored_note": "domains_monitored is the size of our crawl list, not the number of domains fetched. Use domains_crawled for statements about what we have actually looked at.",
      "sites_analyzed": 133913,
      "webmcp_detected": 78199,
      "webmcp_detected_ever": 78199,
      "webmcp_detected_latest_scan": 77630,
      "not_observed_on_latest_scan": 569,
      "not_observed_note": "Detected on an earlier scan but not observed on the most recent one. This is not a removal: transient failures are common, and we only treat a site as having removed WebMCP after three consecutive misses.",
      "high_risk_sites": 15,
      "tools_analyzed": 7528911,
      "distinct_tools": 910112,
      "distinct_tool_names": 12675,
      "tools_analyzed_note": "tools_analyzed counts tool observations across all snapshots, not distinct tools: the same tool on the same site is counted once per scan. Use distinct_tools for unique (site, tool) pairs and distinct_tool_names for unique names.",
      "alerts_30d": 16270,
      "alerts_30d_sites": 1424,
      "alerts_counted_since": "2026-08-30T06:07:13.445Z",
      "alerts_excluded_not_attributable": 466955,
      "alerts_30d_note": "Counts only risk increases attributable to the site, not to changes in our own scoring rules: a risk_increased event is counted only when the two snapshots compared were scored by the same scorer version. Events recorded before alerts_counted_since carry no version stamp and are excluded (alerts_excluded_not_attributable). The 30-day window is therefore only fully covered once alerts_counted_since is more than 30 days old."
    },
    "adoption_breakdown": {
      "detected": 77630,
      "template_sites": 73447,
      "custom_sites": 4183,
      "custom_implementations": 3611,
      "largest_template_sites": 63026,
      "templates": [
        {
          "tool_names": [
            "add_to_cart",
            "browse_store",
            "cancel_cart",
            "get_cart",
            "get_product",
            "manage_orders",
            "proceed_to_checkout",
            "search_catalog",
            "search_shop_policies_and_faqs",
            "show_variant",
            "update_cart_lines"
          ],
          "sites": 63026
        },
        {
          "vendor": "Shopify",
          "vendor_doc_url": "https://shopify.dev/docs/api/web-mcp",
          "note": "Documented platform feature, not a vulnerability. Individual merchants did not opt in to it one by one.",
          "tool_names": [
            "browse_store",
            "cancel_cart",
            "get_cart",
            "get_product",
            "manage_orders",
            "proceed_to_checkout",
            "search_catalog",
            "search_shop_policies_and_faqs",
            "show_variant",
            "update_cart"
          ],
          "sites": 10248
        },
        {
          "vendor": "Cloudflare",
          "vendor_doc_url": "https://blog.cloudflare.com/webmcp/",
          "note": "Injected at the edge by Cloudflare when a site enables the WebMCP toggle (developer preview, 2026-08-06). No change at the origin is required. Documented platform feature, not a vulnerability.",
          "tool_names": [
            "inspect_image_c2pa",
            "scan_images_c2pa"
          ],
          "sites": 171
        }
      ]
    },
    "findings_total": 2255,
    "findings_shown": 20,
    "findings_truncated": true,
    "findings_denominator": 4183,
    "findings_note": "Findings are independent implementations where a scoring rule fired, out of all independent implementations. Copies of a vendor-distributed template are collapsed into template_derived_observation instead of being listed one by one. Most findings are unverifiable_execute, which records that we could not read the implementation — not that we found something dangerous.",
    "template_derived_observation": {
      "vendor": null,
      "vendor_doc_url": null,
      "sites": 63026,
      "sites_with_a_scoring_signal": 1,
      "implementation_analysed": false,
      "tool_names": [
        "add_to_cart",
        "browse_store",
        "cancel_cart",
        "get_cart",
        "get_product",
        "manage_orders",
        "proceed_to_checkout",
        "search_catalog",
        "search_shop_policies_and_faqs",
        "show_variant",
        "update_cart_lines"
      ],
      "note": "One implementation, distributed by the vendor. The same rules fire on every copy, so we count it once rather than listing it 63,026 times. This is a documented platform feature, not a vulnerability. We have not yet analysed this vendor's bundle, so 1 of these sites still carry unverifiable_execute — that records what we have not verified, not something we found."
    },
    "template_derived_observations": [
      {
        "vendor": null,
        "vendor_doc_url": null,
        "sites": 63026,
        "sites_with_a_scoring_signal": 1,
        "implementation_analysed": false,
        "tool_names": [
          "add_to_cart",
          "browse_store",
          "cancel_cart",
          "get_cart",
          "get_product",
          "manage_orders",
          "proceed_to_checkout",
          "search_catalog",
          "search_shop_policies_and_faqs",
          "show_variant",
          "update_cart_lines"
        ],
        "note": "One implementation, distributed by the vendor. The same rules fire on every copy, so we count it once rather than listing it 63,026 times. This is a documented platform feature, not a vulnerability. We have not yet analysed this vendor's bundle, so 1 of these sites still carry unverifiable_execute — that records what we have not verified, not something we found."
      },
      {
        "vendor": "Shopify",
        "vendor_doc_url": "https://shopify.dev/docs/api/web-mcp",
        "sites": 10248,
        "sites_with_a_scoring_signal": 16,
        "implementation_analysed": true,
        "tool_names": [
          "browse_store",
          "cancel_cart",
          "get_cart",
          "get_product",
          "manage_orders",
          "proceed_to_checkout",
          "search_catalog",
          "search_shop_policies_and_faqs",
          "show_variant",
          "update_cart"
        ],
        "note": "One implementation, distributed by the vendor. The same rules fire on every copy, so we count it once rather than listing it 10,248 times. This is a documented platform feature, not a vulnerability. We fetched and analysed the distributed bundle, so these copies carry no unverified-implementation signal."
      },
      {
        "vendor": "Cloudflare",
        "vendor_doc_url": "https://blog.cloudflare.com/webmcp/",
        "sites": 171,
        "sites_with_a_scoring_signal": 1,
        "implementation_analysed": false,
        "tool_names": [
          "inspect_image_c2pa",
          "scan_images_c2pa"
        ],
        "note": "One implementation, distributed by the vendor. The same rules fire on every copy, so we count it once rather than listing it 171 times. This is a documented platform feature, not a vulnerability. We have not yet analysed this vendor's bundle, so 1 of these sites still carry unverifiable_execute — that records what we have not verified, not something we found."
      }
    ],
    "scored_sites": {
      "detected_latest_scan": 77630,
      "with_a_scoring_signal": 2273,
      "independent": 2255,
      "template_derived": 18
    },
    "crawl_first_seen": {
      "metric": "crawl_first_seen",
      "disclaimer": "Counts when our crawler first observed a site, not when the site implemented WebMCP. This is crawl progress, not adoption growth.",
      "series": [
        {
          "date": "2026-08-30",
          "vendor_distributed": 1032,
          "independent": 38,
          "total": 1070
        },
        {
          "date": "2026-08-31",
          "vendor_distributed": 875,
          "independent": 37,
          "total": 912
        },
        {
          "date": "2026-09-01",
          "vendor_distributed": 1024,
          "independent": 202,
          "total": 1226
        },
        {
          "date": "2026-09-02",
          "vendor_distributed": 990,
          "independent": 45,
          "total": 1035
        },
        {
          "date": "2026-09-03",
          "vendor_distributed": 1225,
          "independent": 45,
          "total": 1270
        },
        {
          "date": "2026-09-04",
          "vendor_distributed": 1095,
          "independent": 32,
          "total": 1127
        },
        {
          "date": "2026-09-05",
          "vendor_distributed": 1241,
          "independent": 29,
          "total": 1270
        },
        {
          "date": "2026-09-06",
          "vendor_distributed": 1297,
          "independent": 415,
          "total": 1712
        },
        {
          "date": "2026-09-07",
          "vendor_distributed": 868,
          "independent": 20,
          "total": 888
        },
        {
          "date": "2026-09-08",
          "vendor_distributed": 921,
          "independent": 41,
          "total": 962
        },
        {
          "date": "2026-09-09",
          "vendor_distributed": 1374,
          "independent": 63,
          "total": 1437
        },
        {
          "date": "2026-09-10",
          "vendor_distributed": 836,
          "independent": 54,
          "total": 890
        },
        {
          "date": "2026-09-11",
          "vendor_distributed": 1013,
          "independent": 64,
          "total": 1077
        },
        {
          "date": "2026-09-12",
          "vendor_distributed": 1656,
          "independent": 133,
          "total": 1789
        },
        {
          "date": "2026-09-13",
          "vendor_distributed": 1283,
          "independent": 151,
          "total": 1434
        },
        {
          "date": "2026-09-14",
          "vendor_distributed": 496,
          "independent": 41,
          "total": 537
        },
        {
          "date": "2026-09-15",
          "vendor_distributed": 1185,
          "independent": 92,
          "total": 1277
        },
        {
          "date": "2026-09-16",
          "vendor_distributed": 1114,
          "independent": 136,
          "total": 1250
        },
        {
          "date": "2026-09-17",
          "vendor_distributed": 1134,
          "independent": 92,
          "total": 1226
        },
        {
          "date": "2026-09-18",
          "vendor_distributed": 970,
          "independent": 115,
          "total": 1085
        },
        {
          "date": "2026-09-19",
          "vendor_distributed": 1768,
          "independent": 156,
          "total": 1924
        },
        {
          "date": "2026-09-20",
          "vendor_distributed": 3091,
          "independent": 191,
          "total": 3282
        },
        {
          "date": "2026-09-21",
          "vendor_distributed": 4623,
          "independent": 220,
          "total": 4843
        },
        {
          "date": "2026-09-22",
          "vendor_distributed": 1654,
          "independent": 95,
          "total": 1749
        },
        {
          "date": "2026-09-23",
          "vendor_distributed": 1195,
          "independent": 101,
          "total": 1296
        },
        {
          "date": "2026-09-24",
          "vendor_distributed": 979,
          "independent": 118,
          "total": 1097
        },
        {
          "date": "2026-09-25",
          "vendor_distributed": 1423,
          "independent": 123,
          "total": 1546
        },
        {
          "date": "2026-09-26",
          "vendor_distributed": 1306,
          "independent": 97,
          "total": 1403
        },
        {
          "date": "2026-09-27",
          "vendor_distributed": 1568,
          "independent": 223,
          "total": 1791
        },
        {
          "date": "2026-09-28",
          "vendor_distributed": 1371,
          "independent": 133,
          "total": 1504
        },
        {
          "date": "2026-09-29",
          "vendor_distributed": 30,
          "independent": 1,
          "total": 31
        }
      ]
    },
    "requested_data": {
      "examples": [
        {
          "tool": "get_product",
          "sites": 73414,
          "description": "Get product details, OR navigate the browser to the product page. Set catalog.navigate=true whenever the user wants to see/view the product in the browser (triggers: \"show me\", \"open\", \"view\", \"go to\", \"take me to\", \"navigate to\" a product). Set catalog.navigate=false (default) only when you need data (description, options, variants, prices, availability) to answer a question or to prepare an add_",
          "fields": [
            {
              "key": "catalog.id",
              "type": "string",
              "description": "Storefront API Product GID, product handle, or product URL path. Custom app product paths and Shopify standard /products/<handle> paths are supported. The id fi",
              "personal": false,
              "label": null
            },
            {
              "key": "catalog.navigate",
              "type": "boolean",
              "description": "When true, navigate the browser to the product page after fetching details. Set true for user intents like \"show me\", \"open\", \"view\", \"go to\", \"take me to\" a pr",
              "personal": false,
              "label": null
            },
            {
              "key": "catalog.selected_options",
              "type": "array",
              "description": "Known product option selections to filter available_options. Use exact option names and values from search_catalog options or a prior get_product available_opti",
              "personal": false,
              "label": null
            }
          ]
        },
        {
          "tool": "search_catalog",
          "sites": 73392,
          "description": "Search the store catalog for products, collections, articles, and pages. Does NOT add anything to the cart; use add_to_cart for cart changes. If the user asks for a specific product variant, call get_product after search_catalog to inspect available variants, then show_variant to display one.",
          "fields": [
            {
              "key": "catalog.query",
              "type": "string",
              "description": "Search query string.",
              "personal": false,
              "label": null
            },
            {
              "key": "catalog.pagination.limit",
              "type": "integer",
              "description": "Max results per type (1-10). Defaults to 5.",
              "personal": false,
              "label": null
            }
          ]
        },
        {
          "tool": "get_cart",
          "sites": 73386,
          "description": "Get the current shopping cart contents — line items with product titles, variant titles, handles, URLs, images, unit prices, quantities, and totals. Everything needed to describe the cart to the user in natural language, without a follow-up get_product call per line. Works from any page.",
          "fields": []
        }
      ],
      "personal_examples": [
        {
          "sites": 1,
          "fields": [
            {
              "key": "employee_email",
              "type": "string",
              "personal": true,
              "label": "Email address"
            },
            {
              "key": "passport_expiry",
              "type": "string",
              "personal": true,
              "label": "Government ID (passport / SSN)"
            },
            {
              "key": "passport_number",
              "type": "string",
              "personal": true,
              "label": "Government ID (passport / SSN)"
            }
          ]
        },
        {
          "sites": 1,
          "fields": [
            {
              "key": "name",
              "type": "string",
              "personal": true,
              "label": "Name"
            },
            {
              "key": "email",
              "type": "string",
              "personal": true,
              "label": "Email address"
            },
            {
              "key": "birthDate",
              "type": "string",
              "personal": true,
              "label": "Date of birth"
            }
          ]
        }
      ],
      "sites_with_tools": 77630,
      "no_personal_data": 77121,
      "requests_personal_data": 479,
      "undetermined": 30,
      "fields": [
        {
          "label": "Email address",
          "sites": 356
        },
        {
          "label": "Name",
          "sites": 250
        },
        {
          "label": "Phone number",
          "sites": 167
        },
        {
          "label": "Postal code",
          "sites": 25
        },
        {
          "label": "Government ID (passport / SSN)",
          "sites": 4
        },
        {
          "label": "Date of birth",
          "sites": 4
        },
        {
          "label": "Postal address",
          "sites": 3
        },
        {
          "label": "Payment details",
          "sites": 2
        }
      ]
    },
    "mcp_registry": {
      "servers_monitored": 36509,
      "servers_probed": 10734,
      "tool_lists_retrieved": 6385,
      "listing_state_changing_tools": 4163,
      "listing_destructive_tools": 2413,
      "auth_metadata_mismatch": 2715,
      "auth_metadata_mismatch_denominator": 9100,
      "auth_metadata_mismatch_note": "Servers that declared no authentication in the registry and responded to us. Servers that did not respond are excluded: we cannot tell whether their declaration was accurate.",
      "local_execution": 15233,
      "tools_analyzed": 108705,
      "observing_since": "2026-08-11T13:11:37.094Z"
    },
    "findings": [
      {
        "id": "site-#FF7B96",
        "risk_category": "output_concealed_from_user",
        "severity": "high",
        "first_detected": "2026-08-14T03:52:00.550Z"
      },
      {
        "id": "site-#2B94DD",
        "risk_category": "credential_input",
        "severity": "high",
        "first_detected": "2026-09-28T04:05:14.677Z"
      },
      {
        "id": "site-#DA6C9B",
        "risk_category": "credential_input",
        "severity": "high",
        "first_detected": "2026-09-20T06:13:27.094Z"
      },
      {
        "id": "site-#A2CEED",
        "risk_category": "credential_input",
        "severity": "high",
        "first_detected": "2026-09-21T16:06:12.029Z"
      },
      {
        "id": "site-#145CB1",
        "risk_category": "unverifiable_execute_declared_readonly",
        "severity": "high",
        "first_detected": "2026-09-06T07:59:27.236Z"
      },
      {
        "id": "site-#19F4FC",
        "risk_category": "unverifiable_execute",
        "severity": "high",
        "first_detected": "2026-09-06T06:23:14.940Z"
      },
      {
        "id": "site-#D3E94A",
        "risk_category": "credential_input",
        "severity": "high",
        "first_detected": "2026-09-27T04:31:25.836Z"
      },
      {
        "id": "site-#B53D1D",
        "risk_category": "credential_input",
        "severity": "high",
        "first_detected": "2026-08-15T01:39:42.246Z"
      },
      {
        "id": "site-#BCC9EF",
        "risk_category": "unverifiable_execute_declared_readonly",
        "severity": "high",
        "first_detected": "2026-09-01T04:28:04.653Z"
      },
      {
        "id": "site-#F1C873",
        "risk_category": "unverifiable_execute",
        "severity": "high",
        "first_detected": "2026-09-28T06:36:43.079Z"
      },
      {
        "id": "site-#E2F645",
        "risk_category": "unverifiable_execute_declared_readonly",
        "severity": "high",
        "first_detected": "2026-09-06T07:45:36.697Z"
      },
      {
        "id": "site-#986B64",
        "risk_category": "unverifiable_execute",
        "severity": "high",
        "first_detected": "2026-09-19T22:55:35.774Z"
      },
      {
        "id": "site-#50B394",
        "risk_category": "unverifiable_execute",
        "severity": "high",
        "first_detected": "2026-08-16T22:59:29.990Z"
      },
      {
        "id": "site-#F7EFE8",
        "risk_category": "unverifiable_execute",
        "severity": "high",
        "first_detected": "2026-09-06T07:45:24.662Z"
      },
      {
        "id": "site-#365A75",
        "risk_category": "external_data_transmission",
        "severity": "high",
        "first_detected": "2026-09-20T17:07:24.314Z"
      },
      {
        "id": "site-#D96A67",
        "risk_category": "unverifiable_execute_declared_readonly",
        "severity": "medium",
        "first_detected": "2026-09-06T07:48:02.068Z"
      },
      {
        "id": "site-#6F84AF",
        "risk_category": "unverifiable_execute_declared_readonly",
        "severity": "medium",
        "first_detected": "2026-09-06T08:04:19.294Z"
      },
      {
        "id": "site-#3676E7",
        "risk_category": "unverifiable_execute",
        "severity": "medium",
        "first_detected": "2026-09-13T07:14:44.717Z"
      },
      {
        "id": "site-#25F1E4",
        "risk_category": "unverifiable_execute_with_personal_data",
        "severity": "medium",
        "first_detected": "2026-09-23T06:47:07.662Z"
      },
      {
        "id": "site-#97BAC8",
        "risk_category": "unverifiable_execute",
        "severity": "medium",
        "first_detected": "2026-09-06T07:16:44.442Z"
      }
    ]
  }
}
