← Back to article
Open article →
Webmcp Browser Agent Open Standard Poc 2026
Evidence notes document the bounded local or source-based checks behind an Effloow article. They are not product endorsements, legal advice, or benchmark claims.
Date: 2026-05-29 Track: sandbox-poc Slug: webmcp-browser-agent-open-standard-poc-2026
Goal
Verify the developer-facing shape of WebMCP with a small local sandbox before writing the article. The goal was not to claim native Chrome origin-trial execution. The goal was to confirm that a page-level tool can be described with a structured schema, registered through a WebMCP-like interface, and called deterministically.
Environment
- OS: macOS
- Shell: zsh
- Working directory:
/Users/jangwook/Documents/workspace/www.effloow.com - Node.js:
v25.9.0 - npm:
11.12.1 - Date used for article metadata:
2026-05-29
Source Verification
Sources checked before the sandbox:
- Google Developers Blog, "All the news from the Google I/O 2026 Developer keynote"
- Chrome for Developers, "15 updates from Google I/O 2026"
webmachinelearning/webmcpGitHub repositoryGoogleChromeLabs/webmcp-toolsGitHub repository- Puppeteer WebMCP guide
- WebMCP demo/library site
- arXiv:2508.09171
Important source constraints:
- Google describes WebMCP as a proposed open web standard.
- Google says the experimental origin trial starts in Chrome 149.
- Puppeteer documentation says WebMCP requires Chrome 149+ and browser flags.
- This local machine did not run a native WebMCP browser origin-trial session.
Commands And Outputs
Check Node.js
node --version
Output:
v25.9.0
Check npm
npm --version
Output:
11.12.1
Inspect the WebMCP demo package
npm view @jason.today/webmcp version description license repository --json
Output:
{
"version": "0.1.13",
"description": "WebSocket-based Model Context Protocol implementation",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/jasonjmcghee/webmcp.git"
}
}
Inspect latest Puppeteer package metadata
npm view puppeteer version --json
Output:
"25.1.0"
Check local Puppeteer availability
node -e "try{require.resolve('puppeteer'); console.log('puppeteer-installed')}catch(e){console.log('puppeteer-not-installed')}"
Output:
puppeteer-not-installed
Run a minimal WebMCP-like registration mock
node <<'NODE'
const registered = [];
const modelContext = {
registerTool(definition, handler) {
if (!definition || typeof definition.name !== 'string') throw new Error('tool name required');
if (!definition.inputSchema || definition.inputSchema.type !== 'object') throw new Error('object input schema required');
registered.push({ definition, handler });
}
};
modelContext.registerTool({
name: 'calculate_refund_window',
description: 'Return the deadline and eligibility label for a purchase date.',
inputSchema: {
type: 'object',
properties: {
purchaseDate: { type: 'string', pattern: '^\\d{4}-\\d{2}-\\d{2}$' },
returnDays: { type: 'integer', minimum: 1, maximum: 90 }
},
required: ['purchaseDate', 'returnDays']
}
}, ({ purchaseDate, returnDays }) => {
const start = new Date(`${purchaseDate}T00:00:00Z`);
const deadline = new Date(start.getTime() + returnDays * 86400000);
return { deadline: deadline.toISOString().slice(0, 10), label: returnDays <= 30 ? 'standard' : 'extended' };
});
const call = registered[0].handler({ purchaseDate: '2026-05-29', returnDays: 14 });
console.log(JSON.stringify({ registeredTools: registered.map(t => ({ name: t.definition.name, required: t.definition.inputSchema.required })), call }, null, 2));
NODE
Output:
{
"registeredTools": [
{
"name": "calculate_refund_window",
"required": [
"purchaseDate",
"returnDays"
]
}
],
"call": {
"deadline": "2026-06-12",
"label": "standard"
}
}
What Worked
- A schema-backed tool descriptor can be represented in a compact page-level JavaScript object.
- The handler can return deterministic structured output without DOM scraping.
- The local mock clearly demonstrates the contract shape: name, description, input schema, required fields, handler, and structured result.
- Package inspection found a public WebMCP demo package (
@jason.today/webmcp) and a current Puppeteer package version.
What Failed Or Was Not Attempted
- Native Chrome WebMCP execution was not attempted because the official origin trial is Chrome 149 and local Puppeteer was not installed.
- No browser flags were enabled.
- No MCP client was connected to the demo package.
- No production website or authenticated session was tested.
Limitations
- This PoC validates the developer contract shape, not browser-native interoperability.
- The local mock does not prove Gemini in Chrome support.
- The mock does not validate user-consent UX, origin isolation, extension behavior, or browser permission prompts.
- The article should describe WebMCP as early, experimental, and suitable for exploration, not as a production baseline.
Read the article
This note supports the public article and records what was actually checked.