WebMCP
WebMCP exposes the tools that a frame registers through the experimental WebMCP browser API, navigator.modelContext. It lists the tools and calls them.
Instances are accessed through frame.webmcp. page.webmcp is the instance of the main frame.
WebMCP is an experimental browser feature. Chromium enables it with the --enable-features=WebMCP launch argument, Firefox with the dom.modelcontext.enabled and dom.modelcontext.testing.enabled preferences. WebKit does not implement it.
Tool names, descriptions, input schemas and results are provided by the page, so treat them as untrusted input.
const browser = await chromium.launch({ args: ['--enable-features=WebMCP'] });
const page = await browser.newPage();
await page.goto('https://example.com');
for (const tool of await page.webmcp.tools())
console.log(tool.name, tool.description);
const result = await page.webmcp.callTool('add', { a: 2, b: 40 });
Methods
callTool
Added in: v1.64Calls a tool registered by the frame and returns its result. The result is whatever the tool's execute function resolved to, typically an object with a content array. A result with isError: true is returned as is. The method throws when the tool is not registered or its execute function throws.
const result = await page.webmcp.callTool('add', { a: 2, b: 40 });
console.log(result.content[0].text); // "42"
Usage
await webMCP.callTool(name);
await webMCP.callTool(name, input, options);
Arguments
-
Name of the tool, as reported by webMCP.tools().
-
inputSerializable (optional)#Input for the tool, matching its
inputSchema. Defaults to an empty object. -
optionsObject (optional)-
Maximum time in milliseconds. Defaults to
0- no timeout. The default value can be changed viaactionTimeoutoption in the config, or by using the browserContext.setDefaultTimeout() or page.setDefaultTimeout() methods.
-
Returns
tools
Added in: v1.64Returns the tools currently registered by the frame. Throws if the browser was launched without WebMCP support, see the note above for the launch options that enable it.
page.webmcp covers the main frame only, child frames list their tools through their own frame.webmcp.
Usage
await webMCP.tools();
await webMCP.tools(options);
Arguments
optionsObject (optional)-
Maximum time in milliseconds. Defaults to
0- no timeout. The default value can be changed viaactionTimeoutoption in the config, or by using the browserContext.setDefaultTimeout() or page.setDefaultTimeout() methods.
-
Returns
- Promise<Array<Object>>#
-
namestringTool name, unique within the frame.
-
descriptionstringTool description.
-
inputSchemaSerializable (optional)JSON Schema of the tool input, when the page provides one.
-
annotationsObject (optional)-
readOnlyboolean (optional)The tool does not modify any state.
-
untrustedContentboolean (optional)The tool output may contain third-party content.
-
consequentialboolean (optional)The tool takes a consequential action, such as placing an order.
Hints the page provides about the tool.
-
-