Agent tools and WebMCP

View as Markdown

With discovery enabled for a Site, the SDK proposes agent tools from the structure of your application's own same-origin JSON requests. A workspace owner reviews each proposed action or workflow and enables it. Enabled tools are offered to agents in the page through WebMCP where the browser supports it, and through the SDK's in-page runner everywhere else.

Safety rules that always apply

Names, descriptions and update grades

Discovery can link a request to the control that caused it, so proposed tools get readable names and descriptions:

Any change to an enabled tool's published input schema is drift, in either direction: a new field or type, and also a required field that requests stopped sending (it would become optional) or a widened or relabelled field. Only tools not yet reviewed keep refining silently while they are learned.

Each detected change in an update entry or update draft is graded breaking (the reviewed tool's request or response no longer fits: a new required input, a removed or retyped field, a removed choice, a new required header, a different method or path) or non-breaking (a new optional input, a field that became optional, a new choice, integer widened to number, a response that only gained fields). The categories follow oasdiff's backward-compatibility checklist. Request changes are graded from the requests observed since the change, not from the merged schema: a new field counts as required until a request without it is seen (the grade then becomes non-breaking), a retyped field is breaking until its reviewed type is sent again, and a required field that requests stopped sending became optional (non-breaking). Grades are updated as observations arrive while the tool awaits review. The grade only helps reviewers: any schema drift still disables the tool until someone reviews it.

A tool whose request has not been seen for 14 days (TELLTALE_STALE_TOOL_DAYS) is flagged stale in the dashboard, with a freshness score of 1/(1 + days/30); an enabled tool that turns stale also gets an update-log entry. Nothing is disabled. When agents' inputs are rejected by the runner, or calls return 4xx answers, Telltale keeps per-field and per-status counts (never values), and model-assisted descriptions use them to make the fields agents get wrong clearer.

Which agents support WebMCP

Checked on November 5, 2026. This table is not updated automatically; each row says how we checked. "Tested by Telltale" means a native WebMCP browser check (the browser itself listed and called the page's tools), not Telltale's manual runner. The detailed tables under "Native WebMCP: what works today" list each developer client and the exact builds we ran.

Which agents support WebMCP
Browser or agentStatus on 5 Nov 2026How we checked
Google ChromeOrigin trial from Chrome 149; for local testing, the flag chrome://flags/#enable-webmcp-testingChrome documentation, WebMCP (updated 7 Oct 2026). Tested by Telltale on 28 Oct 2026: Chrome 156 started with the WebMCP feature flag registered and called our reviewed tools through developer clients (Chrome DevTools Protocol, agent-browser, chrome-devtools-mcp, and Claude Code through chrome-devtools-mcp). Not tested through the origin trial.
ChatGPT desktop app (built-in browser, used by ChatGPT Work and Codex)Supported, as "site tools"OpenAI documentation, Site tools: "Site tools currently run only in the ChatGPT desktop app's built-in browser." Tested by Telltale on 28 Oct 2026: the Codex desktop app's in-app browser listed and called our reviewed tools natively (one configuration).
Microsoft EdgeOrigin trial (expires 30 Mar 2027)Microsoft Edge origin trials, WebMCP; the WebMCP implementation status lists it from Edge 150. Not tested by Telltale.
Gemini in ChromeAnnounced, not releasedChrome blog, Google I/O 2026 (May 19, 2026): "Gemini in Chrome will soon support WebMCP APIs." No release found.
Brave (Leo)Experimental, behind a flag in NightlyBrave issue #55232 (open; flag brave://flags/#enable-webmcp-testing). Not tested by Telltale.
Claude in ChromeNo public support foundAnthropic's Claude in Chrome help pages and release notes mention no WebMCP support. Our Claude test above was Claude Code driving flagged Chrome, not Claude in Chrome.
Perplexity CometNo public support foundNo WebMCP mention found in Perplexity's announcements.
Firefox, SafariNot implementedWebMCP implementation status links only standards-position requests (Mozilla, WebKit).

Native WebMCP: what works today

WebMCP is a draft Community Group specification (Web Machine Learning CG). The page API is document.modelContext with registerTool(). The table reflects public sources checked on 2026-10-25; it will change, so verify in your target browser.

Native WebMCP: what works today
Browserdocument.modelContextHow to enable
Chrome / Chromium desktop and Android, M146 and laterBehind a flag or origin trialchrome://flags/#enable-webmcp-testing, or --enable-features=WebMCP; origin trial "WebMCP" M149–M156 (extension to M162 requested, not confirmed)
Chrome Stable 156 without flag or trial tokenNoNot shipped; status Proposed
Edge 150 and laterOrigin trial (expires 2027-03-30; checked 2026-11-05)Microsoft Edge origin trial "WebMCP"; not tested by us
FirefoxNoMozilla position: neutral; no implementation found
Safari / WebKitNoWebKit position: oppose

Older Chromium builds expose navigator.modelContext instead (for example the Chromium 149 bundled with agent-browser 0.39.2); the draft no longer defines it. The SDK registers on one context: the one whose registerTool is native browser code, so a page-script polyfill on document.modelContext cannot capture tools that a native navigator implementation would show to browser agents. When neither is native, it uses document.modelContext.

Native WebMCP: what works today, table 2
Agent or clientCalls page tools natively?Verified by us?Notes and first-party source (checked 2026-10-25)
agent-browser 0.39.2 (vercel-labs)YesYeswebmcp list / invoke over the CDP WebMCP domain; launch Chrome with --enable-features=WebMCP. Run against this SDK.
chrome-devtools-mcp 1.12.0Yes, opt-inYes--categoryExperimentalWebmcp adds list_webmcp_tools and execute_webmcp_tool. Run against this SDK.
Headless Claude Code through chrome-devtools-mcpYes, through chrome-devtools-mcpYesModel-driven discovery and calls of this SDK's tools, through the chrome-devtools-mcp tools above.
Raw Chrome DevTools Protocol (WebMCP domain)YesYesListing and invoking over CDP directly, without an agent framework.
Chrome DevTools WebMCP paneManuallyNoRun tool from the Application panel.
Google's webmcp-extension example agentYesNoTruncates results at 8,000 characters and base64-encodes results marked untrusted.
ChatGPT desktop app built-in browser (ChatGPT Work and Codex)YesYes, this Codex in-app browser configuration (2026-10-28)"Site tools" use WebMCP in the desktop app's built-in browser with GPT-5.6 Sol or Terra; not with GPT-5.6 Luna or in Enterprise or Edu workspaces. Codex changelog, 2026-08-25 (developers.openai.com/codex/changelog); ChatGPT release notes, 2026-08-31 entry (help.openai.com/en/articles/6825453-chatgpt-release-notes); help article help.openai.com/en/articles/20001423-using-site-tools-in-the-chatgpt-desktop-app.
ChatGPT browser extension (Chrome, Edge and others)No, according to OpenAINoThe 2026-08-31 release note says site tools are "not through the Chrome extension".
ChatGPT AtlasRetiredNoOpenAI's release notes (2026-07-09 entry) scheduled Atlas to stop working on 2026-08-09, before site tools launched.
Gemini in ChromeAnnounced, not confirmed shippedNoGoogle: "Gemini in Chrome will soon support WebMCP APIs" (developer.chrome.com/blog/chrome-at-io26, 2026-05-19). No later first-party note says it shipped; Chrome's WebMCP docs (developer.chrome.com/docs/ai/webmcp, updated 2026-10-07) still describe a flag and origin trial only.
Microsoft Copilot in EdgeNot confirmedNoNo first-party release note found.
Claude in Chrome and other end-user browser agentsNot confirmedNoNo first-party statement found; they operate the page UI.

On 2026-10-28, the actual Codex desktop in-app browser discovered and invoked our reviewed catalog and file-export tools through its native WebMCP capability. The catalog returned the expected item; the 70-byte PNG matched an independently fetched SHA-256; withdrawing consent removed every tool. This is one verified desktop-browser configuration, separate from the developer clients above. It does not establish support for every consumer agent or workflow.

Results and files

The draft serializes a tool result to a JSON string and has no file type. Reviewed tools that return files include them in the result itself (text for text-like files, base64 for binary), with name, type, size and SHA-256 metadata, up to 32,000 characters for the whole result. Larger files are named with their size and hash and remain available only through a page-local download link for five minutes or until pause, reset or withdrawal. See File results in the Browser SDK guide.

Failures, cancellation and refresh

The in-page runner fallback

When document.modelContext is absent, or for agents that drive the page UI, the SDK still runs reviewed tools itself:

JavaScript
const client = window.Telltale.getClient(); // the client the hosted tag, GTM, Zaraz or your code initialized
const result = await client.invokeTool('export_report', { query: { format: 'csv' } });

invokeTool() applies the same approval recheck, input validation, write confirmation, polling, cancellation and consent checks as native calls, and returns the same result object on success; on failure it rejects with an Error rather than returning an isError result. Pass options.signal to cancel. The init option onTools receives { tools, supported, registrationErrors } whenever the reviewed tool list, WebMCP support or the number of failed registrations changes, where supported says whether the page exposes a WebMCP registerTool, so your page can list tools for UI-driving agents or people. The dashboard's playground (/demo) shows this runner. It also offers a copyable prompt to give a browser agent, a demo-only form (fictional values, validated and discarded) and a live panel with this session's verdict, attribution and timeline, read from the page's own public collector responses. The playground is served on the loopback listener only, never on the public edge.

Verifying in your browser

  1. Launch Chrome with --enable-features=WebMCP (or enable chrome://flags/#enable-webmcp-testing) and open your page with the SDK permitted.
  2. Check 'modelContext' in document in the console.
  3. List tools with the DevTools WebMCP pane, agent-browser webmcp list or chrome-devtools-mcp list_webmcp_tools, then invoke one and confirm your backend authorized the request.

A manual in-page runner check is not native WebMCP verification; record which one you performed.

Repairing a changed workflow

Control › Tool access › Changes links a blocked update directly to its multi-step tool. Open Preview input updates, review the reported changes, then choose Repair with current inputs. This loads current step versions into the existing editor while preserving the broken response bindings and polling conditions so you can choose their replacements explicitly. It does not guess that two fields with the same type mean the same thing.

Use the current input/response schemas to replace a binding's source or target pointer, or update a wait-and-retry response pointer and expected value. Missing fields and incompatible types are rejected before save and checked again by the server. Save for review leaves the workflow off; review and approve it separately before agents can use it. A preview from an older saved definition is refused, and schemas that change again must be reviewed again.