pub struct WebMCP { /* private fields */ }Expand description
The tools a page registers through the experimental WebMCP browser API, so a test can list and call them as an agent would.
Reached through Page::webmcp (the main
frame’s tools) or Frame::webmcp.
The API is behind a flag in every browser that has it. Launch Chromium
with --enable-features=WebMCP in args, or Firefox with the
dom.modelcontext.enabled and dom.modelcontext.testing.enabled
preferences set in firefox_user_prefs. Without them, tools
fails with WebMCP is not enabled, followed by how to enable it; WebKit
does not support it at all and fails with WebMCP is not supported in WebKit.
§Example
use playwright_rs::LaunchOptions;
use playwright_rs::protocol::Playwright;
let playwright = Playwright::launch().await?;
let browser = playwright
.chromium()
.launch_with_options(LaunchOptions::new().args(vec!["--enable-features=WebMCP".into()]))
.await?;
let page = browser.new_page().await?;
page.goto("https://example.com/app", None).await?;
for tool in page.webmcp().tools(None).await? {
println!("{}: {}", tool.name, tool.description);
}
let sum: serde_json::Value = page
.webmcp()
.call_tool("add", &serde_json::json!({ "a": 2, "b": 40 }), None)
.await?;Implementations§
Source§impl WebMCP
impl WebMCP
Sourcepub async fn tools(
&self,
options: impl Into<Option<WebMCPOptions>>,
) -> Result<Vec<WebMCPTool>>
pub async fn tools( &self, options: impl Into<Option<WebMCPOptions>>, ) -> Result<Vec<WebMCPTool>>
Lists the tools the frame’s page has registered, in the browser’s order.
§Errors
Returns error if WebMCP is not enabled in this browser (see the type docs), or the frame has been detached.
See: https://playwright.dev/docs/api/class-webmcp#webmcp-tools
Sourcepub async fn call_tool<I, R>(
&self,
name: &str,
input: &I,
options: impl Into<Option<WebMCPOptions>>,
) -> Result<R>
pub async fn call_tool<I, R>( &self, name: &str, input: &I, options: impl Into<Option<WebMCPOptions>>, ) -> Result<R>
Calls the tool registered as name with input, and returns what it
returned, deserialized as R (use serde_json::Value to take it
as it is). A tool reports its own failure in its result, with
isError set, rather than raising one, so such a result comes back
like any other.
input is serialized the way an evaluate argument is; pass &()
for a tool that takes none.
§Errors
Returns error if no tool is registered as name
(No WebMCP tool named "..."), WebMCP is not enabled, or the result
does not deserialize as R.
See: https://playwright.dev/docs/api/class-webmcp#webmcp-call-tool