---
title: "AR-ACT-07: WebMCP tools | Agent Ready Checklist"
description: "AR-ACT-07 (SHOULD, Act layer): WebMCP tools. What it asks, the evidence, the command that verifies it and the fix on 19 platforms."
canonical: https://agentreadychecklist.com/checklist/ar-act-07
site: "Agent Ready Checklist"
last_updated: 2026-11-05
section: "Checklist"
---

# AR-ACT-07: WebMCP tools | Agent Ready Checklist

> AR-ACT-07 (SHOULD, Act layer): WebMCP tools. What it asks, the evidence, the command that verifies it and the fix on 19 platforms.

Source: https://agentreadychecklist.com/checklist/ar-act-07
Site: Agent Ready Checklist
Last reviewed: 2026-11-05
Agent endpoints: https://agentreadychecklist.com/llms.txt (index), https://agentreadychecklist.com/openapi.json (API), https://agentreadychecklist.com/mcp (MCP server), https://agentreadychecklist.com/ask (search)
Access: https://agentreadychecklist.com/auth.md (no key). Pricing: https://agentreadychecklist.com/pricing.md (free).

# AR-ACT-07: WebMCP tools

AR-ACT-07 is a SHOULD on the act layer: A product with a web UI an agent should operate registers WebMCP tools on document.modelContext; feature-detect and only ship tools that map to real actions. It applies to products with a web UI agents operate. 19 of 19 platforms have a recipe below, 2 of them workarounds. 4 cited facts back it.

## The requirement

Identifier

AR-ACT-07

Level

SHOULD

Layer

Act

Applies to

products with a web UI agents operate

Checked by

Ora, matched on this site, Cloudflare webMcp, Verify Kit webmcp

Ora check

[webmcp](#ora)

The statement

A product with a web UI an agent should operate registers WebMCP tools on document.modelContext; feature-detect and only ship tools that map to real actions.

## Why

-   v2.0 raised WebMCP from MAY to SHOULD and gave it the AR-ACT-07 identifier.primary source, 2026-10-20: [github.com/agentready-org/standard/blob/main/CHANGELOG.md](https://github.com/agentready-org/standard/blob/main/CHANGELOG.md), read 2026-11-04
-   WebMCP is a W3C Community Group draft from the Web Machine Learning group.primary source: [webmachinelearning.github.io/webmcp/](https://webmachinelearning.github.io/webmcp/), read 2026-11-04
-   Chrome opened WebMCP to its early preview program on 2026-02-10 with a declarative API for forms and an imperative API in JavaScript.primary source, 2026-02-10: [developer.chrome.com/blog/webmcp-epp](https://developer.chrome.com/blog/webmcp-epp), read 2026-11-04
-   Cloudflare detects WebMCP by loading the page in a browser and says older Chrome builds expose navigator.modelContext.primary source: [isitagentready.com/.well-known/agent-skills/webmcp/SKILL.md](https://isitagentready.com/.well-known/agent-skills/webmcp/SKILL.md), read 2026-11-04

## How to verify

### [WebMCP registration on an action page](https://agentreadychecklist.com/kit/webmcp/)

```bash
curl -fsSL https://agentreadychecklist.com/kit/verify.sh | bash -s -- https://example.com --only=webmcp
```

Looks in the initial HTML and its same-origin scripts for document.modelContext.registerTool, navigator.modelContext or declarative toolname attributes on forms.

**It cannot prove:** A string match does not prove the tool registers at runtime; Cloudflare detects it by loading the page in a browser.

### The one-line version

curl -s <action-page> | grep -cE "modelContext\\.registerTool|toolname=" must be 1 or more.

## Verify with Ora

One check in Ora's catalogue (contract 1.38.0, read 2026-11-05) read this row. Each entry says what the check looks at and why this page lists it.

-   `webmcp` WebMCP support Reads the tools the pages register through WebMCP and grades them. WebMCP is a draft API from a W3C Community Group. Usability, 5 points, required; catalogue applicability domain-only. Listed because: same name, `webmcp`.

### Run just these checks

```bash
curl -s -X POST https://ora.ai/api/scan/checks -H 'content-type: application/json' -d '{"url":"https://example.com","checkIds":["webmcp"]}'
```

This calls the endpoint Ora documents for re-verifying a fix. It sends no cache, returns a result for each id and no total score, and spends one scan from the daily budget. Replace the URL with yours. [How to re-verify one fix](https://agentreadychecklist.com/guides/re-verify-one-fix-with-ora/).

### Or audit the whole site

```bash
npx ax@0.10 audit https://example.com --min-score 70
```

Exit code 1 means the score is below the number you passed, so the same line gates a deploy: [the CI recipe](https://agentreadychecklist.com/guides/gate-deploys-on-agent-readiness-in-ci/). [Why this site recommends Ora, and where it falls short](https://agentreadychecklist.com/verify-with-ora/).

## Fix it on your platform

### Next.js (App Router)recipe

In a "use client" component call document.modelContext?.registerTool({ name, description, inputSchema, execute }) inside useEffect, or load a script with next/script strategy="afterInteractive". Feature-detect first.

Next.js 16.x (npm latest 16.4.5, read 2026-11-04); docs at nextjs.org/docs/app. Read 2026-11-04. [nextjs.org/docs/app/api-reference/components/script](https://nextjs.org/docs/app/api-reference/components/script). [All Next.js (App Router) recipes](https://agentreadychecklist.com/platforms/nextjs-app-router/#ar-act-07)

### Astrorecipe

Add a <script> in the page (Astro bundles it and runs it on load) that feature-detects document.modelContext and calls registerTool for each form action.

Astro 7.x (npm latest astro 7.4.5, @astrojs/sitemap 3.7.4, read 2026-11-04). Read 2026-11-04. [docs.astro.build/en/guides/client-side-scripts/](https://docs.astro.build/en/guides/client-side-scripts/). [All Astro recipes](https://agentreadychecklist.com/platforms/astro/#ar-act-07)

### Nuxtrecipe

Create plugins/webmcp.client.ts (the .client suffix runs it only in the browser) that feature-detects document.modelContext and calls registerTool.

Nuxt 4.x (npm latest nuxt 4.6.4, @nuxtjs/robots 7.0.2, @nuxtjs/sitemap 9.1.0, read 2026-11-04). Read 2026-11-04. [nuxt.com/docs/guide/directory-structure/plugins](https://nuxt.com/docs/guide/directory-structure/plugins). [All Nuxt recipes](https://agentreadychecklist.com/platforms/nuxt/#ar-act-07)

### SvelteKitrecipe

In +page.svelte register tools in onMount (browser only): if (document.modelContext) document.modelContext.registerTool({…}).

SvelteKit (npm latest @sveltejs/kit 3.1.1, read 2026-11-04); docs at svelte.dev/docs/kit. Read 2026-11-04. [svelte.dev/docs/kit/page-options](https://svelte.dev/docs/kit/page-options). [All SvelteKit recipes](https://agentreadychecklist.com/platforms/sveltekit/#ar-act-07)

### Remix and React Router (framework mode)recipe

In a route component register tools in useEffect after feature-detecting document.modelContext; effects run only in the browser.

React Router framework mode (npm latest react-router 8.5.1; Remix v2 @remix-run/node 2.17.5, read 2026-11-04); docs at reactrouter.com. Read 2026-11-04. [reactrouter.com/start/framework/route-module](https://reactrouter.com/start/framework/route-module). [All Remix and React Router (framework mode) recipes](https://agentreadychecklist.com/platforms/remix-react-router/#ar-act-07)

### Plain static hosting (Netlify, Vercel static, Cloudflare Pages, GitHub Pages, S3 and CloudFront)recipe

Add a script tag that feature-detects document.modelContext and calls registerTool; any static host serves it.

Host documentation as published on 2026-11-04 (no version numbers; config files \_headers, \_redirects, vercel.json, 404.html). Read 2026-11-04. [docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages). [All Plain static hosting (Netlify, Vercel static, Cloudflare Pages, GitHub Pages, S3 and CloudFront) recipes](https://agentreadychecklist.com/platforms/static-hosting/#ar-act-07)

### WordPress and Elementorrecipe

Enqueue a footer script with `wp_enqueue_script('webmcp', get_stylesheet_directory_uri().'/webmcp.js', [], null, true);` or paste it in Elementor Custom Code at </body> end. In it: `if (document.modelContext) document.modelContext.registerTool({name:'search', description:'Search the site', inputSchema:{type:'object',properties:{q:{type:'string'}}}, execute: ({q}) => fetch('/?s='+encodeURIComponent(q)).then(r=>r.text())});`

WordPress 7.1.4 (core release from the version-check API), Elementor 4.3.6 (plugin directory, updated 2026-11-02), Yoast SEO 28.8 noted for llms.txt; docs read 2026-11-04. Read 2026-11-04. [developer.wordpress.org/reference/functions/wp\_enqueue\_script/](https://developer.wordpress.org/reference/functions/wp_enqueue_script/). [All WordPress and Elementor recipes](https://agentreadychecklist.com/platforms/wordpress-elementor/#ar-act-07)

### Shopify (Online Store 2.0 themes)recipe

Add a script before </body> in theme.liquid or ship it as a theme app extension: `if (document.modelContext) document.modelContext.registerTool({name:'search_products', description:'Search this store', inputSchema:{type:'object',properties:{q:{type:'string'}},required:['q']}, execute: ({q}) => fetch('/search/suggest.json?q='+encodeURIComponent(q)).then(r=>r.json())});`

Hosted SaaS, Online Store 2.0 Liquid themes, docs read 2026-11-04; storefront behaviour probed live on one Shopify store the same day. Read 2026-11-04. [help.shopify.com/en/manual/online-store/themes/customizing-themes/edit-code/edit-theme-code](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/edit-code/edit-theme-code). [All Shopify (Online Store 2.0 themes) recipes](https://agentreadychecklist.com/platforms/shopify/#ar-act-07)

### Webflowrecipe

Site settings > Custom code > Footer code: `<script>if (document.modelContext) document.modelContext.registerTool({name:'contact', description:'Send a message to sales', inputSchema:{type:'object',properties:{email:{type:'string'},message:{type:'string'}}}, execute: async (a) => { /* post to your form endpoint */ }});</script>`

Hosted SaaS, help center articles read 2026-11-04 (updated dates 2024-10-14 to 2026-10-29). Read 2026-11-04. [help.webflow.com/hc/en-us/articles/33961357265299-Custom-code-in-head-and-body-tags](https://help.webflow.com/hc/en-us/articles/33961357265299-Custom-code-in-head-and-body-tags). [All Webflow recipes](https://agentreadychecklist.com/platforms/webflow/#ar-act-07)

### Framerrecipe

Project Settings > Custom Code > end of body, Run on every page visit: `<script>if (document.modelContext) document.modelContext.registerTool({name:'book_demo', description:'Request a demo', inputSchema:{type:'object',properties:{email:{type:'string'}}}, execute: async (a) => { /* submit */ }});</script>`

Hosted SaaS, help articles read 2026-11-04 (marked updated 2026-09-15). Read 2026-11-04. [framer.com/help/articles/how-to-add-custom-code/](https://www.framer.com/help/articles/how-to-add-custom-code/). [All Framer recipes](https://agentreadychecklist.com/platforms/framer/#ar-act-07)

### Wix (Wix Editor and Wix Studio)recipe

Settings > Custom Code > Body - end, all pages: `<script>if (document.modelContext) document.modelContext.registerTool({name:'search', description:'Search the site', inputSchema:{type:'object',properties:{q:{type:'string'}}}, execute: ({q}) => location.assign('/search?q='+encodeURIComponent(q))});</script>`

Hosted SaaS, help center read 2026-11-04. Read 2026-11-04. [support.wix.com/en/article/wix-editor-embedding-custom-code-on-your-site](https://support.wix.com/en/article/wix-editor-embedding-custom-code-on-your-site). [All Wix (Wix Editor and Wix Studio) recipes](https://agentreadychecklist.com/platforms/wix/#ar-act-07)

### Squarespace (version 7.1)recipe

Code Injection > Footer: `<script>if (document.modelContext) document.modelContext.registerTool({name:'book', description:'Book an appointment', inputSchema:{type:'object',properties:{date:{type:'string'}}}, execute: ({date}) => location.assign('/book?date='+encodeURIComponent(date))});</script>` Checkout pages do not run code.

Hosted SaaS, version 7.1 sites, help center read 2026-11-04 (articles updated 2026-07-17 to 2026-11-03). Read 2026-11-04. [support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection](https://support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection). [All Squarespace (version 7.1) recipes](https://agentreadychecklist.com/platforms/squarespace/#ar-act-07)

### HubSpot CMS (Content Hub)recipe

Design Manager > File > New file > JavaScript, then attach it to the domain: `if (document.modelContext) document.modelContext.registerTool({name:'search', description:'Search the site', inputSchema:{type:'object',properties:{q:{type:'string'}}}, execute: ({q}) => location.assign('/hs-search-results?term='+encodeURIComponent(q))});`

Hosted SaaS, Content Hub, knowledge base and developer docs read 2026-11-04. Read 2026-11-04. [knowledge.hubspot.com/design-manager/add-a-javascript-file-to-hubspot](https://knowledge.hubspot.com/design-manager/add-a-javascript-file-to-hubspot). [All HubSpot CMS (Content Hub) recipes](https://agentreadychecklist.com/platforms/hubspot-cms/#ar-act-07)

### Docusaurusworkaround

Register tools from a client module: add clientModules: \[require.resolve('./src/webmcp.js')\] and in that file feature-detect document.modelContext (fall back to navigator.modelContext) before calling registerTool for search.

3.10.2 (npm @docusaurus/core latest, read 2026-11-04). Read 2026-11-04. [docusaurus.io/docs/advanced/client](https://docusaurus.io/docs/advanced/client). [All Docusaurus recipes](https://agentreadychecklist.com/platforms/docusaurus/#ar-act-07)

### Mintlifyrecipe

WebMCP on Pro or Enterprise plans registers search\_docs, read\_page, get\_site\_overview, read\_skill and more on navigator.modelContext.

Hosted SaaS, docs read 2026-11-04. Read 2026-11-04. [mintlify.com/docs/ai/model-context-protocol](https://mintlify.com/docs/ai/model-context-protocol). [All Mintlify recipes](https://agentreadychecklist.com/platforms/mintlify/#ar-act-07)

### GitBookworkaround

No WebMCP support documented for published sites. Workaround: none inside GitBook; point agents at the ~gitbook/mcp endpoint instead.

Hosted SaaS, docs read 2026-11-04. Read 2026-11-04. [gitbook.com/docs/ai-for-your-readers/mcp-servers-for-published-docs](https://gitbook.com/docs/ai-for-your-readers/mcp-servers-for-published-docs). [All GitBook recipes](https://agentreadychecklist.com/platforms/gitbook/#ar-act-07)

### ReadMerecipe

Turn on WebMCP Tools in AI Discoverability; four tools (search, navigate, read current page, try an API endpoint) are exposed via navigator.modelContext.

Hosted SaaS, docs read 2026-11-04. Read 2026-11-04. [docs.readme.com/main/docs/ai-discoverability](https://docs.readme.com/main/docs/ai-discoverability). [All ReadMe recipes](https://agentreadychecklist.com/platforms/readme/#ar-act-07)

### Salesforce B2C Commerce (SFRA and PWA Kit / Composable Storefront)recipe

The PWA Kit storefront is a React app built from components, so register tools from a component after feature-detecting document.modelContext, one tool per real action.

Hosted SaaS (B2C Commerce help release 264.0.0); PWA Kit retail-react-app 10.3.0 and pwa-kit-runtime 3.21.0 on npm, read 2026-11-04. Derived from Salesforce B2C Commerce's documentation read on 2026-11-04. [developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/retail-react-app.html](https://developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/retail-react-app.html) and [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md). [All Salesforce B2C Commerce (SFRA and PWA Kit / Composable Storefront) recipes](https://agentreadychecklist.com/platforms/salesforce-commerce-cloud/#ar-act-07)

### Adobe Commerce and Magento Open Sourcerecipe

Add the script through a head or footer block in the theme layout, feature-detect document.modelContext and register one tool per real action, such as a catalogue search.

2.4.9 (GitHub tag published 2026-05-12; 2.4.10-alpha1 tagged 2026-10-13); release notes read 2026-11-04. Generic step from the AgentReady specification; not platform-specific. [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md). [All Adobe Commerce and Magento Open Source recipes](https://agentreadychecklist.com/platforms/adobe-commerce/#ar-act-07)

## What it does not do

-   Does not replace a server MCP; WebMCP tools run in the live page with the signed-in session.
-   A plain fetch can only see the registration script, not prove it runs.

## Common mistakes

-   Registering tools before feature detection, throwing in browsers without the API.
-   Tools that do things the UI does not offer.

## Related

-   Guide: [How to add WebMCP to a form](https://agentreadychecklist.com/guides/add-webmcp-to-a-form/)
-   Term: [MUST](https://agentreadychecklist.com/glossary/must/)
-   Term: [SHOULD](https://agentreadychecklist.com/glossary/should/)
-   Term: [WebMCP](https://agentreadychecklist.com/glossary/webmcp/)

## Sources

-   [github.com/agentready-org/standard/blob/main/spec/spec.md](https://github.com/agentready-org/standard/blob/main/spec/spec.md)read 2026-11-04
-   [github.com/agentready-org/standard/blob/main/CHANGELOG.md](https://github.com/agentready-org/standard/blob/main/CHANGELOG.md)read 2026-11-04
-   [webmachinelearning.github.io/webmcp/](https://webmachinelearning.github.io/webmcp/)read 2026-11-04
-   [developer.chrome.com/blog/webmcp-epp](https://developer.chrome.com/blog/webmcp-epp)read 2026-11-04
-   [isitagentready.com/.well-known/agent-skills/webmcp/SKILL.md](https://isitagentready.com/.well-known/agent-skills/webmcp/SKILL.md)read 2026-11-04
-   [nextjs.org/docs/app/api-reference/components/script](https://nextjs.org/docs/app/api-reference/components/script)read 2026-11-04
-   [docs.astro.build/en/guides/client-side-scripts/](https://docs.astro.build/en/guides/client-side-scripts/)read 2026-11-04
-   [nuxt.com/docs/guide/directory-structure/plugins](https://nuxt.com/docs/guide/directory-structure/plugins)read 2026-11-04
-   [svelte.dev/docs/kit/page-options](https://svelte.dev/docs/kit/page-options)read 2026-11-04
-   [reactrouter.com/start/framework/route-module](https://reactrouter.com/start/framework/route-module)read 2026-11-04
-   [docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages)read 2026-11-04
-   [developer.wordpress.org/reference/functions/wp\_enqueue\_script/](https://developer.wordpress.org/reference/functions/wp_enqueue_script/)read 2026-11-04
-   [help.shopify.com/en/manual/online-store/themes/customizing-themes/edit-code/edit-theme-code](https://help.shopify.com/en/manual/online-store/themes/customizing-themes/edit-code/edit-theme-code)read 2026-11-04
-   [help.webflow.com/hc/en-us/articles/33961357265299-Custom-code-in-head-and-body-tags](https://help.webflow.com/hc/en-us/articles/33961357265299-Custom-code-in-head-and-body-tags)read 2026-11-04
-   [framer.com/help/articles/how-to-add-custom-code/](https://www.framer.com/help/articles/how-to-add-custom-code/)read 2026-11-04
-   [support.wix.com/en/article/wix-editor-embedding-custom-code-on-your-site](https://support.wix.com/en/article/wix-editor-embedding-custom-code-on-your-site)read 2026-11-04
-   [support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection](https://support.squarespace.com/hc/en-us/articles/205815908-Customize-parts-of-your-site-with-code-injection)read 2026-11-04
-   [knowledge.hubspot.com/design-manager/add-a-javascript-file-to-hubspot](https://knowledge.hubspot.com/design-manager/add-a-javascript-file-to-hubspot)read 2026-11-04
-   [docusaurus.io/docs/advanced/client](https://docusaurus.io/docs/advanced/client)read 2026-11-04
-   [mintlify.com/docs/ai/model-context-protocol](https://mintlify.com/docs/ai/model-context-protocol)read 2026-11-04
-   [gitbook.com/docs/ai-for-your-readers/mcp-servers-for-published-docs](https://gitbook.com/docs/ai-for-your-readers/mcp-servers-for-published-docs)read 2026-11-04
-   [docs.readme.com/main/docs/ai-discoverability](https://docs.readme.com/main/docs/ai-discoverability)read 2026-11-04
-   [developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/retail-react-app.html](https://developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/retail-react-app.html)read 2026-11-04
-   [ora.ai/api/checks, contract 1.38.0](https://ora.ai/api/checks?utm_source=agentreadychecklist.com&utm_medium=referral&utm_campaign=requirement)read 2026-11-05
-   [ora.ai/llms-full.txt](https://ora.ai/llms-full.txt?utm_source=agentreadychecklist.com&utm_medium=referral&utm_campaign=requirement)read 2026-11-05
-   [registry.npmjs.org/ax, the ax README](https://registry.npmjs.org/ax)read 2026-11-05

Verify with Ora

The scanner this site recommends for the whole checklist. 132 checks, a score out of 100, no account.

`npx ax@0.10 audit <url> --min-score <n>`

[Why Ora, and its limits](https://agentreadychecklist.com/verify-with-ora/)

Fix it on

-   [Next.js (App Router)recipe](#p-nextjs-app-router)
-   [Astrorecipe](#p-astro)
-   [Nuxtrecipe](#p-nuxt)
-   [SvelteKitrecipe](#p-sveltekit)
-   [Remix and React Router (framework mode)recipe](#p-remix-react-router)
-   [Plain static hosting (Netlify, Vercel static, Cloudflare Pages, GitHub Pages, S3 and CloudFront)recipe](#p-static-hosting)
-   [WordPress and Elementorrecipe](#p-wordpress-elementor)
-   [Shopify (Online Store 2.0 themes)recipe](#p-shopify)
-   [Webflowrecipe](#p-webflow)
-   [Framerrecipe](#p-framer)
-   [Wix (Wix Editor and Wix Studio)recipe](#p-wix)
-   [Squarespace (version 7.1)recipe](#p-squarespace)
-   [HubSpot CMS (Content Hub)recipe](#p-hubspot-cms)
-   [Docusaurusworkaround](#p-docusaurus)
-   [Mintlifyrecipe](#p-mintlify)
-   [GitBookworkaround](#p-gitbook)
-   [ReadMerecipe](#p-readme)
-   [Salesforce B2C Commerce (SFRA and PWA Kit / Composable Storefront)recipe](#p-salesforce-commerce-cloud)
-   [Adobe Commerce and Magento Open Sourcerecipe](#p-adobe-commerce)

Last reviewed 2026-11-05. AgentReady v2.0, read 2026-11-04.
