<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged webmcp</title>
<link>https://coderlegion.com/tag/webmcp</link>
<description>Powered by Question2Answer</description>
<item>
<title>Native WebMCP on a live MCP registry</title>
<link>https://coderlegion.com/33062/native-webmcp-on-a-live-mcp-registry</link>
<description>&lt;p&gt;Originally published at &lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/anhmtk/native-webmcp-on-a-live-mcp-registry-4a8&quot;&gt;https://dev.to/anhmtk/native-webmcp-on-a-live-mcp-registry-4a8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is the same integration, written here so the source stays on dev.to. &lt;a rel=&quot;nofollow&quot; href=&quot;https://agentshare.dev/registry&quot;&gt;https://agentshare.dev/registry&lt;/a&gt; registers one read-only tool, &lt;code&gt;search_listings&lt;/code&gt;, on &lt;code&gt;document.modelContext&lt;/code&gt; when that API exists in the open Chrome tab. An agent that never opens a browser still calls remote MCP at &lt;a rel=&quot;nofollow&quot; href=&quot;https://agentshare.dev/mcp&quot;&gt;https://agentshare.dev/mcp&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;two-ways-to-read-the-same-registry&quot;&gt;Two ways to read the same registry&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;&lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Remote MCP &lt;/th&gt;&lt;th align=&quot;left&quot;&gt;Native WebMCP&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;Where &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;code&gt;https://agentshare.dev/mcp&lt;/code&gt; &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;code&gt;https://agentshare.dev/registry&lt;/code&gt;, tab open&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;Call style &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Streamable HTTP. API key or x402 &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;code&gt;document.modelContext&lt;/code&gt; in Chrome&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;Lifetime &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;The server stays up &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;Ends when the tab closes&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;left&quot;&gt;Payload &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;The MCP tool list, including paid Objective Trust &lt;/td&gt;&lt;td align=&quot;left&quot;&gt;&lt;code&gt;search_listings&lt;/code&gt; only. Public fields. At most 5 matches&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Remote MCP is for an agent that is not on the page. WebMCP is for an agent that already has the registry tab open in Chrome and can call &lt;code&gt;getTools&lt;/code&gt; / &lt;code&gt;executeTool&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;what-the-page-registers&quot;&gt;What the page registers&lt;/h3&gt;
&lt;p&gt;The script is &lt;code&gt;https://agentshare.dev/static/js/webmcp-registry.js&lt;/code&gt;. It returns immediately when &lt;code&gt;document.modelContext.registerTool&lt;/code&gt; is missing. It does not install a polyfill.&lt;/p&gt;
&lt;p&gt;The tool is read-only. &lt;code&gt;readOnlyHint&lt;/code&gt; is true. &lt;code&gt;untrustedContentHint&lt;/code&gt; is true because listing descriptions are written by the people who submitted them.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;execute&lt;/code&gt; calls &lt;code&gt;GET /api/v1/registry/entries&lt;/code&gt; on the same origin. &lt;code&gt;limit&lt;/code&gt; is clamped to 1–5. &lt;code&gt;sort&lt;/code&gt; is &lt;code&gt;new&lt;/code&gt; or &lt;code&gt;popular&lt;/code&gt;. Featured rows still sort first. Featured does not change &lt;code&gt;health_status&lt;/code&gt; and is not a trust rank.&lt;/p&gt;
&lt;p&gt;The page aborts the registration on &lt;code&gt;pagehide&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;the-envelope-models-can-quote&quot;&gt;The envelope models can quote&lt;/h3&gt;
&lt;p&gt;Every successful call returns &lt;code&gt;schema&lt;/code&gt; set to &lt;code&gt;agentshare.catalog.v1&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;schema&quot;: &quot;agentshare.catalog.v1&quot;,
  &quot;catalog_as_of&quot;: &quot;2026-10-30T03:15:00Z&quot;,
  &quot;listed&quot;: 147,
  &quot;sort&quot;: &quot;featured_then_newest&quot;,
  &quot;sort_note&quot;: &quot;Featured listings sort first. Featured does not change health_status and is not a trust rank.&quot;,
  &quot;returned&quot;: 1,
  &quot;matches&quot;: [
    {
      &quot;id&quot;: 0,
      &quot;name&quot;: &quot;Example listing&quot;,
      &quot;description_excerpt&quot;: &quot;Short public description, clipped to 160 characters.&quot;,
      &quot;health_status&quot;: &quot;responding&quot;,
      &quot;reviewed&quot;: true,
      &quot;category&quot;: &quot;agent_tools&quot;,
      &quot;opens&quot;: 0,
      &quot;featured&quot;: false,
      &quot;mcp_url&quot;: &quot;https://example.com/mcp&quot;
    }
  ],
  &quot;next&quot;: &quot;For a rank that ignores featured and sponsored, call Objective Trust at https://agentshare.dev/mcp/objective-trust&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;catalog_as_of&lt;/code&gt; and &lt;code&gt;listed&lt;/code&gt; in that sample are the shape, not a frozen snapshot. On a live call, &lt;code&gt;catalog_as_of&lt;/code&gt; is &lt;code&gt;generated_at&lt;/code&gt; from that entries response: the server clock when the catalog was built for the tool call. It is not &lt;code&gt;Date.now()&lt;/code&gt; in the browser. &lt;code&gt;listed&lt;/code&gt; is &lt;code&gt;total_listed&lt;/code&gt; on the same response.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;reviewed: true&lt;/code&gt; means the row status is &lt;code&gt;verified&lt;/code&gt;. &lt;code&gt;health_status&lt;/code&gt; is the stored probe label, such as &lt;code&gt;responding&lt;/code&gt;, &lt;code&gt;needs_sign_in&lt;/code&gt;, &lt;code&gt;unreachable&lt;/code&gt;, &lt;code&gt;not_remote&lt;/code&gt;, or &lt;code&gt;unknown&lt;/code&gt;. &lt;code&gt;description_excerpt&lt;/code&gt; is clipped. The Objective Trust score is not in this object. The &lt;code&gt;next&lt;/code&gt; field points at the paid ranker, which ignores featured and sponsored.&lt;/p&gt;
&lt;p&gt;A model that quotes this payload can cite three stable facts: the schema name &lt;code&gt;agentshare.catalog.v1&lt;/code&gt;, the page &lt;code&gt;https://agentshare.dev/registry&lt;/code&gt;, and a server timestamp for that response.&lt;/p&gt;
&lt;h3 id=&quot;checking-the-open-tab&quot;&gt;Checking the open tab&lt;/h3&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://chromewebstore.google.com/detail/agentshare-agent-readiness/nimndnhajfkicbnipbfdkmgencjejjed&quot;&gt;AgentShare Agent Readiness&lt;/a&gt; 0.6.0 reads native &lt;code&gt;document.modelContext&lt;/code&gt; on the active tab when you open the popup. It lists each tool name and whether the tool is read-only, consequential, or marked untrusted content.&lt;/p&gt;
&lt;p&gt;The score gains 4 points when the tab has at least one native tool. No native API means no point change. A missing &lt;code&gt;untrustedContentHint&lt;/code&gt; is a warning, not a penalty. A polyfill that only sets &lt;code&gt;document.modelContext&lt;/code&gt; inside the page is invisible to the extension. The reference score for agentshare.dev stays 92.&lt;/p&gt;
&lt;p&gt;The scan stays in the browser. Tool names are not uploaded.&lt;/p&gt;
&lt;h3 id=&quot;where-to-look&quot;&gt;Where to look&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Registry, with the WebMCP tool while the tab is open: &lt;a rel=&quot;nofollow&quot; href=&quot;https://agentshare.dev/registry&quot;&gt;https://agentshare.dev/registry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Remote MCP: &lt;a rel=&quot;nofollow&quot; href=&quot;https://agentshare.dev/mcp&quot;&gt;https://agentshare.dev/mcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Objective Trust: &lt;a rel=&quot;nofollow&quot; href=&quot;https://agentshare.dev/mcp/objective-trust&quot;&gt;https://agentshare.dev/mcp/objective-trust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Original article: &lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/anhmtk/native-webmcp-on-a-live-mcp-registry-4a8&quot;&gt;https://dev.to/anhmtk/native-webmcp-on-a-live-mcp-registry-4a8&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/33062/native-webmcp-on-a-live-mcp-registry</guid>
<pubDate>Fri, 30 Oct 2026 08:46:24 +0000</pubDate>
</item>
<item>
<title>Bridging Model Context Protocol (MCP) to Browser Agents via W3C WebMCP (document.modelContext)</title>
<link>https://coderlegion.com/32204/bridging-model-context-protocol-mcp-browser-agents-via-w3c-webmcp-document-modelcontext</link>
<description>&lt;p&gt;As AI agents move from local developer runtimes (like Claude Desktop and Cursor) into browser environments, developers face a major integration challenge: how to expose structured backend tools to client-side agents securely and without fragile DOM scraping.&lt;/p&gt;
&lt;p&gt;At SEOSiri, we solved this by implementing the W3C WebMCP specification (document.modelContext). Our central developer portal dynamically registers our entire autonomous tool catalog on boot, proxying execution requests seamlessly through secure, stateless Cloudflare Edge Gateways.&lt;/p&gt;
&lt;p&gt;Key Technical Implementation Highlights:&lt;/p&gt;
&lt;p&gt;Dynamic Universal Registry: Automatically loops through master component registers to bind server schemas into browser runtimes.&lt;br&gt;
Edge Proxying &amp;amp; Security: Ensures zero secret exposure by keeping backend encryption keys locked inside Cloudflare Worker environment variables while marshaling public JSON-RPC requests across HTTPS.&lt;br&gt;
Namespace Segregation: Explicitly namespaced tool identifiers prevent collision with browser default diagnostic suites.&lt;br&gt;
Native DevTools Debugging: Streamlines inspection and verification via the Chrome DevTools WebMCP application panel.&lt;/p&gt;
&lt;p&gt;Read the Full Engineering Walkthrough:&lt;br&gt;
🔗 &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.seosiri.com/2026/10/webmcp-chrome-mcp-tools-guide.html&quot;&gt;https://www.seosiri.com/2026/10/webmcp-chrome-mcp-tools-guide.html&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;coderlegion-webdev-aiagents-mcp-typescript-architecture-edgecomputing&quot;&gt;coderlegion #webdev #aiagents #mcp #typescript #architecture #edgecomputing&lt;/h2&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/32204/bridging-model-context-protocol-mcp-browser-agents-via-w3c-webmcp-document-modelcontext</guid>
<pubDate>Fri, 23 Oct 2026 16:11:38 +0000</pubDate>
</item>
<item>
<title>WebMCP: Letting Browser Agents Use Your Site's Own Tools</title>
<link>https://coderlegion.com/32138/webmcp-letting-browser-agents-use-your-sites-own-tools</link>
<description>&lt;p&gt;WebMCP is a proposed web standard that lets a page register its own tools, either JavaScript functions or marked-up HTML forms, which an agent in the visitor's browser can then call instead of feeling its way through buttons and inputs. In October 2026 it's a W3C Community Group draft with a Chrome origin trial, and the API changed during 2026, so many tutorials are already out of date.&lt;/p&gt;
&lt;p&gt;I explain what it is and who's behind it, and summarise its status: an origin trial starting in Chrome 149, a flag for local testing, the move from navigator.modelContext to document.modelContext in May 2026, and early support elsewhere. Anything built now should feature-detect and fail silently.&lt;/p&gt;
&lt;p&gt;The imperative API is registerTool(), with a name, description, input schema, callback and annotations including one that marks consequential actions like booking or paying. The declarative API turns an existing form into a tool with a few attributes. I compare WebMCP with a server-side MCP server: one lives in an open tab with the user's session, the other is a network endpoint any client can call, and Chrome's own guidance suggests using both for different jobs.&lt;/p&gt;
&lt;p&gt;The security section covers HTTPS only, same-origin by default, a person in the loop and prompt injection as the main risk. I include a small business example and an honest list of when not to bother yet.&lt;/p&gt;
&lt;h4 id=&quot;key-takeaways&quot;&gt;Key takeaways&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;WebMCP lets a page expose tools to in-browser agents&lt;/li&gt;
&lt;li&gt;It's an experimental draft with an active Chrome origin trial&lt;/li&gt;
&lt;li&gt;Forms can become tools with a few attributes&lt;/li&gt;
&lt;li&gt;It complements, not replaces, a server-side MCP server&lt;/li&gt;
&lt;li&gt;Mark consequential tools and validate everything server-side&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Related on BuiltToWinWeb: &lt;a rel=&quot;nofollow&quot; href=&quot;https://built2winweb.com/blog/add-mcp-server-to-website/&quot;&gt;adding a server-side MCP server&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Read the full guide on BuiltToWinWeb:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://built2winweb.com/blog/webmcp-explained/&quot;&gt;&lt;strong&gt;WebMCP explained, with a working example&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;A summary by Jacob Campbell of an article first published on built2winweb.com on October 7, 2026.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/32138/webmcp-letting-browser-agents-use-your-sites-own-tools</guid>
<pubDate>Fri, 23 Oct 2026 03:36:01 +0000</pubDate>
</item>
<item>
<title>Securing the Pipeline: A DevSecOps Guide to Atlassian Rovo Agent Architecture and Zero-Trust MCP Gat</title>
<link>https://coderlegion.com/28958/securing-the-pipeline-devsecops-guide-atlassian-rovo-agent-architecture-and-zero-trust</link>
<description>&lt;h2 id=&quot;section&quot;&gt;&lt;/h2&gt;
&lt;p&gt;Integrating Large Language Models (LLMs) into production pipelines introduces critical data leakage vectors. For platform engineers and security architects, autonomous AI agents present a unique challenge: how do you allow models to interact with live backend systems without exposing API tokens, system credentials, or protected regulatory identifiers? &lt;/p&gt;
&lt;p&gt;The full implementation details of this infrastructure are published in the comprehensive blueprint guide: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.seosiri.com/2026/09/pii-shield-for-atlassian-rovo.html&quot;&gt;Keeping Sensitive Data Out of Your Rovo Agents: A Practical Guide to the SEOSiri MCP &amp;amp; PII Shield&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;the-problem-non-deterministic-prompt-exploits&quot;&gt;The Problem: Non-Deterministic Prompt Exploits&lt;/h4&gt;
&lt;p&gt;When an autonomous AI agent or an automated Jira workflow processes operational data, the raw prompt payload frequently introduces hidden systemic compliance risks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hardcoded API Keys:&lt;/strong&gt; Source logs and environment configurations accidentally pasted into tickets by developers under pressure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Identifiers:&lt;/strong&gt; Server database schemas, cloud infrastructure paths, and network strings exposed inside debugging logs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Regulated Information:&lt;/strong&gt; Sensitive customer identifiers or clinical patient data parsed during automated issue routing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once these objects exit your corporate cloud perimeter and stream to external third-party model inference endpoints, &lt;strong&gt;data sovereignty is lost&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;the-mitigation-in-memory-edge-proxying-via-model-context-protocol&quot;&gt;The Mitigation: In-Memory Edge Proxying via Model Context Protocol&lt;/h4&gt;
&lt;p&gt;The open-source &lt;a rel=&quot;nofollow&quot; href=&quot;https://modelcontextprotocol.io&quot;&gt;Model Context Protocol (MCP)&lt;/a&gt; &lt;em&gt;(rel=&quot;nofollow&quot;)&lt;/em&gt; allows engineering teams to isolate tool access configurations cleanly. By routing all agentic connections through the &lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://marketplace.atlassian.com/apps/2089400507/seosiri-mcp-pii-shield-for-rovo&quot;&gt;SEOSiri MCP &amp;amp; PII Shield for Rovo&lt;/a&gt;&lt;/strong&gt; app on the Atlassian Marketplace, companies drop an active inline data firewall straight into the runtime communication stream.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;mcpServers&quot;: {
    &quot;SEOSiri&quot;: {
      &quot;command&quot;: &quot;npx&quot;,
      &quot;args&quot;: [
        &quot;-y&quot;,
        &quot;@modelcontextprotocol/server-sse&quot;,
        &quot;https://rovomcp.seosiri.com/api/mcp&quot;
      ]
    }
  }
}

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[Atlassian Cloud Client]│▼ (Raw JSON-RPC Payload with Hidden PII/Secrets)┌────────────────────────────────────────────────────────┐│   SEOSiri Zero-Trust Edge Gateway (In-Memory Proxy)    ││   ──────────────────────────────────────────────────   ││   1. Instantly Redacts RegEx Tokens (SSNs, API Keys)    ││   2. Validates Structural JSON Structural Schemas      ││   3. Operates in Volatile V8 Sandbox (Zero Disk Logs)   │└────────────────────────────────────────────────────────┘│▼ (Sanitized Payload Enforcing Deterministic Tool Hooks)[Downstream External Sovereign Server Tiers]&lt;/p&gt;
&lt;h5 id=&quot;why-this-works-at-scale-&quot;&gt;Why This Works at Scale:&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Zero-Log Volatile Processing:&lt;/strong&gt; The proxy engine operates fully inside short-lived edge runtimes. Prompt objects are evaluated and transformed completely in volatile memory. &lt;strong&gt;No data is ever written to physical disk logs&lt;/strong&gt;, neutralizing systemic data breach threats.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strict Token-Level Redaction:&lt;/strong&gt; System payloads pass through a two-phase sanitization filter. Pattern matching immediately neutralizes standard credential formats, while contextual parsing strips out arbitrary strings sitting next to sensitive target keywords (such as &lt;code&gt;token=&lt;/code&gt; or &lt;code&gt;bearer:&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h4 id=&quot;architectural-support-for-regulated-life-sciences&quot;&gt;Architectural Support for Regulated Life Sciences&lt;/h4&gt;
&lt;p&gt;For teams engineering biopharma software ecosystems under severe statutory oversight, the framework implements native schema compliance tracking:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FDA 21 CFR Part 11 Audit Isolation:&lt;/strong&gt; While data payloads are fully sanitized, the gateway generates cryptographically signed tool execution signatures. This proves &lt;em&gt;what&lt;/em&gt; tool action occurred and &lt;em&gt;when&lt;/em&gt; without logging restricted data values.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HL7 FHIR Integrity Validation:&lt;/strong&gt; Diagnostic and clinical narrative strings are automatically structured and checked against core healthcare schema protocols before routing down the line.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To safely spin up isolated sovereign test sandboxes, developers can load specialized local nodes natively inside an IDE client like Anthropic's Claude Desktop:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Deploy the Managed Biopharma Compliance Engine:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;mcpServers&quot;: {
    &quot;seosiri-biopharma&quot;: {
      &quot;command&quot;: &quot;npx&quot;,
      &quot;args&quot;: [&quot;-y&quot;, &quot;@seosiri/biopharma-mcp&quot;]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Launch the High-Performance BioAssay Analytical Pipe:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;mcpServers&quot;: {
    &quot;seosiri-bioassay&quot;: {
      &quot;command&quot;: &quot;uvx&quot;,
      &quot;args&quot;: [&quot;seosiri-bioassay-mcp&quot;]
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h4 id=&quot;step-by-step-system-testing&quot;&gt;Step-by-Step System Testing&lt;/h4&gt;
&lt;p&gt;To debug your connection schemas directly without writing custom UI wrappers, you can test the active server endpoint using standard terminal tools like &lt;code&gt;cURL&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -X POST https://seosiri.com \
     -H &quot;Content-Type: application/json&quot; \
     -d '{&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;method&quot;:&quot;initialize&quot;,&quot;params&quot;:{&quot;protocolVersion&quot;:&quot;2024-11-05&quot;,&quot;capabilities&quot;:{},&quot;clientInfo&quot;:{&quot;name&quot;:&quot;test-client&quot;,&quot;version&quot;:&quot;1.0.0&quot;}},&quot;id&quot;:1}'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Accessing the gateway address (&lt;code&gt;https://rovomcp.seosiri.com/api/mcp&lt;/code&gt;) via a standard web browser address bar will return an &lt;code&gt;Endpoint or method mismatch&lt;/code&gt; error. This occurs because the browser sends an empty &lt;code&gt;GET&lt;/code&gt; request instead of a structured &lt;code&gt;POST&lt;/code&gt; payload, which the edge security firewall drops automatically for safety.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h4 id=&quot;access-the-full-engineering-suite&quot;&gt;Access the Full Engineering Suite&lt;/h4&gt;
&lt;p&gt;Review the underlying infrastructure matrices, dry-run live tool execution schemas, and match security profiles to your scale requirements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Interactive Testing Sandbox:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://developers.seosiri.com/#tester&quot;&gt;SEOSiri Live MCP Endpoint Tester&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Layout Blueprints:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://seosiri.com&quot;&gt;SEOSiri Server Configuration Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise Resource Allocation:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://developers.seosiri.com/#manual&quot;&gt;SEOSiri Predictable Platform Pricing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For advanced international environments requiring highly localized cloud boundaries, check out the specialized &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.seosiri.com/dutch-mcp&quot;&gt;SEOSiri Dutch MCP Sovereign Framework Architecture&lt;/a&gt;.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/28958/securing-the-pipeline-devsecops-guide-atlassian-rovo-agent-architecture-and-zero-trust</guid>
<pubDate>Mon, 28 Sep 2026 16:10:26 +0000</pubDate>
</item>
<item>
<title>WebMCP Skills v0.0.1 is live — feedback welcome</title>
<link>https://coderlegion.com/27129/webmcp-skills-v0-0-1-is-live-feedback-welcome</link>
<description>&lt;p&gt;I just shipped the first release of a WebMCP skills collection.&lt;/p&gt;
&lt;p&gt;Here are 5 things I learned while making it work across browsers, emulators, and desktops:&lt;/p&gt;
&lt;p&gt;1️⃣ Probe before acting&lt;/p&gt;
&lt;p&gt;Before executing anything, detect the actual page, origin, device, permissions, and adapter state.&lt;/p&gt;
&lt;p&gt;“Visible” is not the same as “controllable.”&lt;/p&gt;
&lt;p&gt;2️⃣ Keep WebMCP separate from DevTools&lt;/p&gt;
&lt;p&gt;WebMCP executes page-owned tools.&lt;/p&gt;
&lt;p&gt;DevTools inspects the browser.&lt;/p&gt;
&lt;p&gt;Lighthouse audits the page.&lt;/p&gt;
&lt;p&gt;Native adapters control the operating system or emulator.&lt;/p&gt;
&lt;p&gt;They are complementary but they are not interchangeable.&lt;/p&gt;
&lt;p&gt;3️⃣ Deterministic checks matter&lt;/p&gt;
&lt;p&gt;The release includes executable checks for:&lt;/p&gt;
&lt;p&gt;→ Tool schemas&lt;br&gt;
→ Security risks&lt;br&gt;
→ Confirmation boundaries&lt;br&gt;
→ Eval traces&lt;br&gt;
→ DESIGN.md references and states&lt;br&gt;
→ Host readiness&lt;br&gt;
→ Repository health&lt;/p&gt;
&lt;p&gt;Documentation alone cannot prove that a contract works.&lt;/p&gt;
&lt;p&gt;4️⃣ Unavailable is a valid result&lt;/p&gt;
&lt;p&gt;iOS requires macOS and Xcode.&lt;/p&gt;
&lt;p&gt;Desktop input requires OS permissions and native tools.&lt;/p&gt;
&lt;p&gt;Android requires an authorized device or a working emulator.&lt;/p&gt;
&lt;p&gt;The adapter should report the missing prerequisite instead of pretending the action completed.&lt;/p&gt;
&lt;p&gt;5️⃣ Distribution is part of engineering&lt;/p&gt;
&lt;p&gt;The release includes current skills.sh installation guidance, all-agent installation support, a discoverable 13-skill catalog, and verification commands.&lt;/p&gt;
&lt;p&gt;A capability that cannot be found, installed, or verified is not finished.&lt;/p&gt;
&lt;p&gt;The release is live:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/JustineDevs/webmcp-skills/releases/tag/v0.0.1&quot;&gt;https://github.com/JustineDevs/webmcp-skills/releases/tag/v0.0.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What is the hardest capability boundary your agent tooling has had to handle?&lt;/p&gt;
</description>
<category>Discussions</category>
<guid isPermaLink="true">https://coderlegion.com/27129/webmcp-skills-v0-0-1-is-live-feedback-welcome</guid>
<pubDate>Mon, 14 Sep 2026 07:47:31 +0000</pubDate>
</item>
<item>
<title>WebMCP: The Next Technical SEO Frontier Nobody Is Talking About Yet</title>
<link>https://coderlegion.com/22756/webmcp-the-next-technical-seo-frontier-nobody-is-talking-about-yet</link>
<description>&lt;h2 id=&quot;webmcp-the-next-technical-seo-frontier-nobody-is-talking-about-yet&quot;&gt;WebMCP: The Next Technical SEO Frontier Nobody Is Talking About Yet&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Originally published on &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.devndespro.com&quot;&gt;www.devndespro.com&lt;/a&gt;, canonical: &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.devndespro.com/blog/webmcp-2026&quot;&gt;https://www.devndespro.com/blog/webmcp-2026&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Most SEO conversations in 2026 are about getting &lt;em&gt;cited&lt;/em&gt; by AI, structured data, FAQ schema, llms.txt, being the source ChatGPT quotes. That's one problem. There's a different one quietly forming behind a Chrome flag, and it's about whether AI agents can actually &lt;em&gt;use&lt;/em&gt; your site, not just read it.&lt;/p&gt;
&lt;p&gt;That's what WebMCP is, and if you run a website with forms, checkouts, bookings, or search, it's worth understanding now while almost nobody else is writing about it.&lt;/p&gt;
&lt;h3 id=&quot;the-problem-it-solves&quot;&gt;The problem it solves&lt;/h3&gt;
&lt;p&gt;Right now, when an AI agent tries to interact with a website, meaning fill out a form, search for a product, or complete a booking, it does the same thing a screen reader from 2005 would do: it looks at the page, guesses which element is a button, guesses what a field expects, and hopes nothing breaks. This is slow, expensive in tokens, and fragile. Change a CSS class and the agent's automation falls apart.&lt;/p&gt;
&lt;p&gt;WebMCP flips that. Instead of an agent guessing where the &quot;Book a Flight&quot; button is, a WebMCP-enabled page tells the agent directly: here's a function called &lt;code&gt;bookFlight()&lt;/code&gt;, here are the exact parameters it expects, here's what it returns. The agent calls the function the same way a developer calls an API, no screenshots, no clicking simulation, no guesswork.&lt;/p&gt;
&lt;h3 id=&quot;why-this-matters-for-you&quot;&gt;Why this matters for you&lt;/h3&gt;
&lt;p&gt;The efficiency difference is not small. Early benchmarking on WebMCP-style structured calls shows dramatic token savings compared to screenshot-based agent browsing, and near-identical task success rates to traditional automation at a fraction of the processing cost.&lt;/p&gt;
&lt;p&gt;Practically, that means agents will increasingly prefer sites that support this. A site an agent can use directly gets used. A site an agent has to fight its way through gets skipped in favor of a competitor that made itself agent-friendly.&lt;/p&gt;
&lt;p&gt;Think of it as the same shift that happened when robots.txt first appeared, except this time the file isn't telling crawlers what not to index, it's telling agents what they're allowed to &lt;em&gt;do&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id=&quot;where-it-stands-right-now&quot;&gt;Where it stands right now&lt;/h3&gt;
&lt;p&gt;To be clear about where things actually are: this is early. Chrome 146 shipped a flag-gated developer preview in February 2026, co-authored by engineers at both Google and Microsoft under a W3C community group, which is a strong signal it's headed toward becoming a real standard rather than staying a Google-only experiment. Edge added an equivalent preview shortly after. A public origin trial is expected in a later Chrome release. It is not production-ready, and the security model around things like prompt injection and multi-agent conflicts is still being worked out.&lt;/p&gt;
&lt;p&gt;That said, &quot;early&quot; is exactly the window worth paying attention to. The businesses that experiment now will understand the pattern before it becomes table stakes.&lt;/p&gt;
&lt;h3 id=&quot;how-it-actually-works-briefly&quot;&gt;How it actually works, briefly&lt;/h3&gt;
&lt;p&gt;There are two ways to expose tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Declarative&lt;/strong&gt;: add attributes like &lt;code&gt;toolname&lt;/code&gt; and &lt;code&gt;tooldescription&lt;/code&gt; directly to an existing HTML form. Minimal code, works with what you already have.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Imperative&lt;/strong&gt;: register a tool in JavaScript via &lt;code&gt;navigator.modelContext.registerTool()&lt;/code&gt;, giving it a name, a plain-language description, a JSON schema for its inputs, and a handler function.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both approaches use JSON Schema, the same format Claude, GPT, and Gemini already use for tool-calling, so there's no new format to learn if you've touched AI tool integration before.&lt;/p&gt;
&lt;h3 id=&quot;what-to-actually-do-about-it-today&quot;&gt;What to actually do about it today&lt;/h3&gt;
&lt;p&gt;You don't need to ship this in production tomorrow. A sensible first step:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Identify your highest-value user flows, checkout, booking, contact forms, search, the ones an agent completing on a user's behalf would matter most for.&lt;/li&gt;
&lt;li&gt;Enable the WebMCP flag in Chrome 146+ and try the Model Context Tool Inspector extension to see what agent-visible tooling would look like on your own site.&lt;/li&gt;
&lt;li&gt;Sketch a minimal declarative implementation on one form as a prototype, nothing customer-facing yet.&lt;/li&gt;
&lt;li&gt;Keep watching the spec. It's moving fast, and being early here costs little but attention.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you want a second pair of eyes on how agent-readiness fits into your broader technical SEO picture, feel free to reach out through &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.devndespro.com&quot;&gt;www.devndespro.com&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;I'm a DevOps engineer and web developer running &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.devndespro.com&quot;&gt;DevnDespro&lt;/a&gt;, a small web development, UI/UX, and SEO agency.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/22756/webmcp-the-next-technical-seo-frontier-nobody-is-talking-about-yet</guid>
<pubDate>Wed, 15 Jul 2026 12:17:07 +0000</pubDate>
</item>
<item>
<title>How we made automatelab.tech agent-ready with WebMCP</title>
<link>https://coderlegion.com/19474/how-we-made-automatelab-tech-agent-ready-with-webmcp</link>
<description>&lt;p&gt;TL;DR: We wired every tool and search box on automatelab.tech to AI agents using WebMCP - the &lt;code&gt;navigator.modelContext&lt;/code&gt; browser API - by reusing the functions our on-page buttons already call. It now shows up in Lighthouse's new Agentic Browsing audit. Here is how, and an honest read on whether it is worth your time in 2026.&lt;/p&gt;
&lt;h3 id=&quot;what-webmcp-is&quot;&gt;What WebMCP is&lt;/h3&gt;
&lt;p&gt;WebMCP is a browser API (&lt;code&gt;navigator.modelContext&lt;/code&gt;) that a page calls to register tools for an in-browser AI agent. Each tool carries a name, a natural-language description, a JSON input schema, and a handler that runs when the agent calls it. It is the browser-side cousin of the Model Context Protocol that server-side integrations already speak. The spec is a W3C draft from the Web Machine Learning group.&lt;/p&gt;
&lt;p&gt;The honest part: WebMCP ships only in Chrome 146 behind a feature flag, real-world adoption is near zero, and most agents today still read the raw DOM. This is a plant-the-flag move. Two reasons to do it anyway: it is cheap if your pages already have working actions, and Google just started measuring it.&lt;/p&gt;
&lt;h3 id=&quot;registering-a-tool&quot;&gt;Registering a tool&lt;/h3&gt;
&lt;p&gt;There are two paths. The declarative one adds &lt;code&gt;toolname&lt;/code&gt; and &lt;code&gt;tooldescription&lt;/code&gt; attributes to an existing &lt;code&gt;&amp;lt;form&amp;gt;&lt;/code&gt; and the browser builds the input schema for you. The imperative one calls &lt;code&gt;registerTool()&lt;/code&gt;. We took the imperative path because every tool already had a compute function:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-jsx&quot;&gt;if (navigator.modelContext) {
  navigator.modelContext.registerTool({
    name: &quot;audit_ai_seo&quot;,
    description: &quot;Audit a URL for AEO/GEO readiness; return the score.&quot;,
    inputSchema: {
      type: &quot;object&quot;,
      properties: { url: { type: &quot;string&quot;, description: &quot;Full URL incl. https://&quot; } },
      required: [&quot;url&quot;]
    },
    execute: async ({ url }) =&amp;gt; {
      const result = await runAudit(url);   // the function the page already had
      return { content: [{ type: &quot;text&quot;, text: result.summary }] };
    }
  });
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The point: you are not writing new tools, you are exposing the ones you already shipped. The whole integration is a roughly forty-line helper that feature-detects &lt;code&gt;navigator.modelContext&lt;/code&gt; and no-ops in every browser without it, so normal visitors are unaffected.&lt;/p&gt;
&lt;h3 id=&quot;what-we-exposed&quot;&gt;What we exposed&lt;/h3&gt;
&lt;p&gt;Ten surfaces, each reusing the function behind its on-page button:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Surface &lt;/th&gt;&lt;th&gt;WebMCP tool&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;AI SEO Checker &lt;/td&gt;&lt;td&gt;&lt;code&gt;audit_ai_seo&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;AI Overview checker &lt;/td&gt;&lt;td&gt;&lt;code&gt;score_ai_overview_eligibility&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;n8n cost calculator &lt;/td&gt;&lt;td&gt;&lt;code&gt;estimate_n8n_cost&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;n8n workflow validator &lt;/td&gt;&lt;td&gt;&lt;code&gt;validate_n8n_workflow&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;GPTBot / robots.txt helper &lt;/td&gt;&lt;td&gt;&lt;code&gt;get_ai_crawler_robots_rules&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Blog search &lt;/td&gt;&lt;td&gt;&lt;code&gt;search_blog&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Automation Error Index search &lt;/td&gt;&lt;td&gt;&lt;code&gt;search_automation_errors&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&quot;the-lighthouse-angle&quot;&gt;The Lighthouse angle&lt;/h3&gt;
&lt;p&gt;Lighthouse 13.3 added an Agentic Browsing category. The WebMCP check is informational only - it lists the tools your page registers and never fails you for having none. The other three checks (llms.txt, accessibility-tree integrity, and layout stability) pay off today regardless of WebMCP adoption: they help screen readers, retrieval crawlers, and real users.&lt;/p&gt;
&lt;h3 id=&quot;is-it-worth-it-in-2026-&quot;&gt;Is it worth it in 2026?&lt;/h3&gt;
&lt;p&gt;Do the agent-readiness groundwork for the wins you can bank now - ship &lt;code&gt;llms.txt&lt;/code&gt;, fix the accessibility tree, kill layout shift - and treat the WebMCP registration as a cheap option on a standard that might matter in a year. One caveat worth taking seriously: the WebMCP security model is still incomplete, so never expose a destructive or account-changing action without a user-confirmation step. Read-only audits, calculators, and search are safe first candidates; &quot;delete my account&quot; is not.&lt;/p&gt;
&lt;p&gt;Full write-up with the step-by-step: &lt;a rel=&quot;nofollow&quot; href=&quot;https://automatelab.tech/blog/al-products/how-we-made-automatelab-tech-agent-ready-webmcp/&quot;&gt;https://automatelab.tech/blog/al-products/how-we-made-automatelab-tech-agent-ready-webmcp/&lt;/a&gt;&lt;/p&gt;
</description>
<category>Tutorials</category>
<guid isPermaLink="true">https://coderlegion.com/19474/how-we-made-automatelab-tech-agent-ready-with-webmcp</guid>
<pubDate>Tue, 02 Jun 2026 10:43:02 +0000</pubDate>
</item>
<item>
<title>Implementing WebMCP on a Recruitment Website</title>
<link>https://coderlegion.com/15383/implementing-webmcp-on-a-recruitment-website</link>
<description>&lt;p&gt;&lt;strong&gt;Thinking about what, exactly, the future of a website “looks” like in the agentic era is a challenging proposition. It might be that in most cases, our future viewers/readers/customers can do everything, from their chatbot of preference while never visiting your site.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WebMCP is a part of this puzzle. The protocol directs an agent to stop guessing what a button does, and starts calling tools with typed inputs with a fundamentally simple tool registration protocol.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So, what’s WebMCP? WebMCP is “an emerging W3C standard developed by Google and Microsoft that acts as a browser API to turn websites into interactive tools for AI agents”.&lt;/p&gt;
&lt;p&gt;This is the future and I think it’s very exciting. For fun, I added WebMCP support to &lt;a rel=&quot;nofollow&quot; href=&quot;https://yubhub.co&quot;&gt;&lt;strong&gt;YubHub&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;,&lt;/strong&gt; (my recruitment site).&lt;/p&gt;
&lt;p&gt;Today, I’m going to talk about what I learned building, the design choices we made that worked, an agent trace that caught a hallucination in a production system (fixed), and why (in my opinion!) a recruitment site turned out to be an unusually good fit for this protocol.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://houtini.com/wp-content/uploads/2026/04/yubhub-with-webmcp-inspector-1024x542.png&quot; alt=&quot;YubHub - our jobs site ready for an AI future&quot;&gt;&lt;br&gt;
&lt;em&gt;YubHub in Chrome 146 with the Model Context Tool Inspector open.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;why-a-recruitment-site-&quot;&gt;Why a Recruitment Site?&lt;/h3&gt;
&lt;p&gt;Because websites new and old are going to have to change rather quickly (and, I really enjoy starting online business from scratch – the test of a true martech marketer!).&lt;/p&gt;
&lt;p&gt;Most of the WebMCP explainers I read while researching this use a checkout flow, a to-do list, or a colour picker. Toys. They work for illustrating the API surface (what can this new thing do?), but without implmenting and playing with teh protocol yourself I fear the penny simply does not drop.&lt;/p&gt;
&lt;p&gt;The real value with WebMCP emerges when an agent needs to reason about a lot of structured data that’s already behind a nice URL structure – and recruitment sites are built around exactly that shape: job details, salary ranges, skills required or employment locations.&lt;/p&gt;
&lt;p&gt;&lt;iframe width=&quot;660&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/srC-1pEXdmY?si=50yTpz46bG489FFi&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;allowfullscreen&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;YubHub already served clean data at predictable URLs (&lt;code&gt;/jobs/skill/figma&lt;/code&gt;, &lt;code&gt;/jobs/at/anthropic&lt;/code&gt;) and emits schema.org JobPosting markup. What it didn’t have was a “contract”. Any agent browsing the site could see the HTML and JSON-LD I’m sure, but getting an agent to browse your website for an answer via Chrome is just the craziest waste of time when ideas as fundamental as an API have been around for decades.&lt;/p&gt;
&lt;p&gt;WebMCP fixes that by publishing the interface explicitly, with typed inputs and structured responses. Prompt in &amp;gt; “find me an X for a Y in Z”. So, for a site whose whole job is “be discoverable”, WebMCP is a big deal.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://houtini.com/wp-content/uploads/2026/04/09-architecture-diagram-yubhub-webmcp-agent-1.jpg&quot; alt=&quot;Architecture diagram showing a YubHub page exposing tools through navigator.modelContext to a browser AI agent, with a response flowing back&quot;&gt;&lt;br&gt;
&lt;em&gt;The basic flow. The page registers tools on &lt;code&gt;navigator.modelContext&lt;/code&gt;, the agent discovers and invokes them, the page replies with structured data. No screen-scraping in between.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;what-s-webmcp-&quot;&gt;What’s WebMCP?&lt;/h3&gt;
&lt;p&gt;WebMCP is a proposed web standard, co-authored by engineers at Google and Microsoft under the &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.w3.org/groups/cg/webmachinelearning/&quot;&gt;W3C Web Machine Learning community group&lt;/a&gt;, that lets a site expose a set of callable tools to an AI agent running in the browser. There are two APIs: imperative (&lt;code&gt;navigator.modelContext.registerTool()&lt;/code&gt; called from JavaScript), and declarative.&lt;/p&gt;
&lt;p&gt;Think of it as a contract the site publishes to any agent that lands on it. Instead of the agent guessing that a div with &lt;code&gt;class=&quot;btn-primary&quot;&lt;/code&gt; means “checkout”, the page says: here’s a &lt;code&gt;checkout&lt;/code&gt; tool, here’s what it needs, here’s what you’ll get back.&lt;/p&gt;
&lt;p&gt;That’s a welcome leap from screen-scraping and MCP based browser control. The Chrome DevTools MCP quickstart benchmarked a simple “set counter to 42” task at 3,801 tokens using screenshots and 433 tokens using WebMCP. That’s an 89% reduction in token use!&lt;/p&gt;
&lt;p&gt;The current spec lives on the W3C community group site (&lt;a rel=&quot;nofollow&quot; href=&quot;https://webmachinelearning.github.io/webmcp&quot;&gt;webmachinelearning.github.io/webmcp&lt;/a&gt;), with Chrome’s early-preview announcement and detailed posts on &lt;a rel=&quot;nofollow&quot; href=&quot;https://developer.chrome.com/blog/webmcp-epp&quot;&gt;developer.chrome.com/blog/webmcp-epp&lt;/a&gt;. It ships behind a flag in Chrome Canary 146. Google Chrome Labs maintain a reference extension – the Model Context Tool Inspector – that lists the tools any page has registered and lets you call them manually. If you’re planning to build anything with this, you’ll want both installed.&lt;/p&gt;
&lt;h3 id=&quot;how-webmcp-differs-from-mcp&quot;&gt;How WebMCP Differs From MCP&lt;/h3&gt;
&lt;p&gt;The names don’t help much, do they! Model Context Protocol (MCP) is &lt;strong&gt;server-side&lt;/strong&gt; – you deploy an MCP server that an agent connects to, it runs in its own process, exposes tools to your AI assistant over JSON-RPC. We have a growing library of our own MCP connectors like my favourites &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/houtini-ai/gemini-mcp&quot;&gt;Gemini MCP&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/houtini-ai/lm&quot;&gt;Houtini-LM&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WebMCP is the browser-side sibling&lt;/strong&gt;. Your tool code runs in the page’s JavaScript context, so it has the user’s cookies, their session, their permissions – everything the user already has access to. There’s no deployment, no auth bridge, no server to pay for. Well, mostly – you still have to maintain the page, obviously, but there’s nothing extra. If your site already authenticates the user, your WebMCP tools inherit that authentication for free.&lt;/p&gt;
&lt;p&gt;The practical consequence: MCP is the right fit for agents that need third-party data (GitHub, Gmail, a database). WebMCP is the right fit for agents that need to interact with a specific site the user has requested.&lt;/p&gt;
&lt;h3 id=&quot;getting-set-up&quot;&gt;Getting Set Up&lt;/h3&gt;
&lt;p&gt;If you have Chrome Canary 146 or higher, you are already setup. The stable, Beta, and Dev channels of Chrome do not ship with the WebMCP flag – so you have to enable it:&lt;/p&gt;
&lt;p&gt;Open a new tab to &lt;code&gt;chrome://flags/#enable-webmcp-testing&lt;/code&gt; and set “WebMCP for testing” to Enabled. Click Relaunch.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://houtini.com/wp-content/uploads/2026/04/02-chrome-flag-enable-webmcp-testing-1.png&quot; alt=&quot;Chrome flags page with the WebMCP for testing flag highlighted and set to Enabled&quot;&gt;&lt;br&gt;
&lt;em&gt;Enable WebMCP for testing&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Third, install the &lt;a rel=&quot;nofollow&quot; href=&quot;https://chromewebstore.google.com/detail/webmcp-model-context-tool/gbpdfapgefenggkahomfgkhfehlcenpd&quot;&gt;Model Context Tool Inspector extension&lt;/a&gt; from the Chrome Web Store. This is currently the only way to test anything before you’ve wired an agent in. It lists every tool the current page has registered, shows you their JSON schemas, and lets you execute them manually with whatever input you want. The extension requires a Gemini API key as the extension uses Gemini as a natural-language test harness, which is useful for checking whether your tool descriptions are clear enough for a real LLM to pick the right tool. This is much like tool context set in tool descriptions in the MCP protocol.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://houtini.com/wp-content/uploads/2026/04/03-model-context-tool-inspector-chrome-store-1.png&quot; alt=&quot;Chrome Web Store listing for the WebMCP Model Context Tool Inspector extension&quot;&gt;&lt;br&gt;
&lt;em&gt;The WebMCP Inspector extension.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;To verify the whole thing is working, open DevTools and run &lt;code&gt;console.log(navigator.modelContext)&lt;/code&gt;. If you see an object come back rather than &lt;code&gt;undefined&lt;/code&gt;, you’re in business. If it’s &lt;code&gt;undefined&lt;/code&gt;, either your flag isn’t set or you’re on the wrong Chrome channel.&lt;/p&gt;
&lt;h3 id=&quot;setting-up-the-imperative-api&quot;&gt;Setting Up the Imperative API&lt;/h3&gt;
&lt;p&gt;Here’s the minimum viable tool registration from YubHub’s live scaffold:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;if (!navigator.modelContext) return;

var pageController = new AbortController();
addEventListener('pagehide', () =&amp;gt; pageController.abort(), { once: true });

navigator.modelContext.registerTool({
  name: 'yubhub_fetch_job',
  description: 'Fetch a single YubHub job as clean markdown (company, location, salary, work arrangement, full description, apply URL, skills). More token-efficient than the HTML page.',
  inputSchema: {
    type: 'object',
    properties: {
      id: { type: 'string', pattern: '^job_[a-z0-9_-]+$' },
    },
    required: ['id'],
  },
  execute: async (params) =&amp;gt; {
    const r = await fetch('/jobs/' + params.id + '.md',
      { headers: { Accept: 'text/markdown' } });
    return { id: params.id, markdown: await r.text() };
  },
}, { signal: pageController.signal });
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There are 4 things to look at here – firstly, the feature-detection guard – &lt;code&gt;navigator.modelContext&lt;/code&gt; only exists in Chrome 146 with the flag on, so every public-facing scaffold needs to short-circuit gracefully elsewhere or you’ll throw on every other browser your users visit from.&lt;/p&gt;
&lt;p&gt;The pattern constraint on &lt;code&gt;id&lt;/code&gt; – the spec treats JSON Schema loosely in the browser, so validating in code catches the cases the schema doesn’t. And the return value is a structured object, not a string – the agent reads it as data rather than trying to parse text/html.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://houtini.com/wp-content/uploads/2026/04/04-annotated-tool-definition-vs-agent-prompt-1.png&quot; alt=&quot;Model Context Tool Inspector panel showing the tool definition highlighted in a green box and the agent prompt highlighted in a red box&quot;&gt;&lt;br&gt;
&lt;em&gt;The Inspector showing the tool’s schema (green box) and the agent’s prompt (red box). You can drive this entirely by hand during development, which is the fastest way to catch bad tool descriptions.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;the-declarative-api-is-free-engineering&quot;&gt;The Declarative API Is Free Engineering&lt;/h3&gt;
&lt;p&gt;I think this is the cleverest part of the WebMCP spec. If you’ve got an HTML form – and of course, you do, you can annotate it and get a tool registration for free.&lt;/p&gt;
&lt;p&gt;YubHub’s nav already had a GET form submitting to &lt;code&gt;/jobs/search&lt;/code&gt;. All I did was add three attributes:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;form action=&quot;/jobs/search&quot; method=&quot;GET&quot;
      toolname=&quot;yubhub_search&quot;
      tooldescription=&quot;Search YubHub's enriched job board by free-text query - title, company, or keyword. Submits a GET to /jobs/search and renders the results page.&quot;
      toolautosubmit&amp;gt;
  &amp;lt;input type=&quot;search&quot; name=&quot;q&quot;
         toolparamdescription=&quot;Job title, company name, or any keyword (2-100 chars)&quot;
         minlength=&quot;2&quot; maxlength=&quot;100&quot; /&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The browser reads the form, builds a JSON Schema from the input fields, and registers it as a tool. When an agent calls it with &lt;code&gt;{q: &quot;python&quot;}&lt;/code&gt;, the browser focuses the form, populates the input, and – because of &lt;code&gt;toolautosubmit&lt;/code&gt; – submits it automatically. Zero JavaScript. Your form already works for humans; now it works for agents.&lt;/p&gt;
&lt;p&gt;One thing worth flagging: &lt;code&gt;toolautosubmit&lt;/code&gt; is only really safe on read-only operations. Search queries, availability lookups, status checks – fine, let the agent submit. Anything that creates, modifies, or deletes data should leave the flag off, so the human has to click Submit after the agent fills the form.&lt;/p&gt;
&lt;p&gt;And that, I reckon, is how WebMCP adoption will probably start to emerge – by adding it to their internal site search forms and results pages. But I hope to see people agreeing that this idea undersells what WebMCP can do in the longer term.&lt;/p&gt;
&lt;h3 id=&quot;context-scoped-tool-registration&quot;&gt;Context-Scoped Tool Registration&lt;/h3&gt;
&lt;p&gt;I’ve got a tool called &lt;code&gt;yubhub_current_job&lt;/code&gt;. It takes no arguments, and it just returns the current job’s markdown. Obviously, that only makes sense on my job listing pages, so anywhere else on the site it would be meaningless (worse, it’d be confusing). The scaffold pattern-matches the URL and registers conditionally:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;const jobMatch = location.pathname.match(/^\/jobs\/(job_[a-z0-9_-]+)$/i);
if (jobMatch) {
  const currentJobId = jobMatch[1];
  navigator.modelContext.registerTool({
    name: 'yubhub_current_job',
    description: 'Return clean markdown for the job the user is currently viewing ('
      + currentJobId + '). Zero-arg shortcut.',
    inputSchema: { type: 'object', properties: {} },
    execute: async () =&amp;gt; {
      const r = await fetch('/jobs/' + currentJobId + '.md');
      return { id: currentJobId, markdown: await r.text() };
    },
  }, { signal: pageController.signal });
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The AbortController ties it to the page lifecycle – when the user navigates away, &lt;code&gt;pagehide&lt;/code&gt; fires, the controller aborts, and all tools registered with its signal drop off the agent’s radar. Importantly this leaves no leftover closures holding references to the previous page’s state.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://houtini.com/wp-content/uploads/2026/04/10-context-scoped-tool-registration-by-url-1.jpg&quot; alt=&quot;Diagram showing three YubHub pages (homepage, job detail, facet archive) with different sets of registered WebMCP tools on each&quot;&gt;&lt;br&gt;
&lt;em&gt;Same site, three pages, three different tool menus. The agent sees only the tools that make contextual sense.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;navigation-tools-vs-data-retrieval-tools&quot;&gt;Navigation Tools vs Data-Retrieval Tools&lt;/h3&gt;
&lt;p&gt;There are two kinds of tools you can give an agent, and they create completely different user experiences.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Navigation tools&lt;/strong&gt; change the URL on the user’s behalf. They’re the right call when the user actually wants to end up somewhere else – looking at a specific job, browsing a facet, running a search. So the agent calls &lt;code&gt;yubhub_browse_jobs({type: 'skill', slug: 'figma'})&lt;/code&gt;, the tab navigates, the user sees the archive page. The return value is basically a receipt (“I took you here, here’s what’s on the page”).&lt;/p&gt;
&lt;p&gt;The real power, IMO, is this: &lt;strong&gt;Data-retrieval tools&lt;/strong&gt; return parsed data and leave the URL alone. The agent calls them to reason, compare, filter, summarise – and the user stays on whatever page they were already on, quite unaware that the agent just read a hundred jobs to answer a question. &lt;code&gt;yubhub_fetch_facet&lt;/code&gt; returns up to 100 schema.org JobPosting entries; &lt;code&gt;yubhub_shortlist&lt;/code&gt; filters them by salary floor, remote status, title keyword, and hands back a ranked list.&lt;/p&gt;
&lt;p&gt;Data-retrieval is what I’m bullish on – it’s a midbendingly powerful solution to the current state of play with AI based webcrawl / actions for users and so on.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://houtini.com/wp-content/uploads/2026/04/05-agent-response-product-manager-jobs-1.png&quot; alt=&quot;Inspector panel showing a ranked list of product manager job results returned by a WebMCP data-retrieval tool&quot;&gt;&lt;br&gt;
_&lt;code&gt;yubhub_shortlist&lt;/code&gt; returning a ranked list of product manager roles._&lt;/p&gt;
&lt;p&gt;Only shipping navigation tools is the mistake I’d warn you off. It just makes the agent a fancy URL-rewriter – it can answer “take me to X”, but it can’t answer “summarise the options and recommend one” without hauling the whole user along.&lt;/p&gt;
&lt;h3 id=&quot;what-webmcp-can-t-do-yet-&quot;&gt;What WebMCP Can’t Do (Yet)&lt;/h3&gt;
&lt;p&gt;A browsing context is required. There’s no headless mode – if a tab isn’t open, the tools don’t exist. That rules out batch or scheduled agentic work against a WebMCP site, for now.&lt;/p&gt;
&lt;p&gt;Discoverability is thin. An agent has to visit your page to see your tools. There’s no global registry, no “hey agent, here’s a list of sites with useful WebMCP tools” index. A &lt;code&gt;.well-known/webmcp&lt;/code&gt; manifest has been proposed – and I think it’ll be necessary eventually – but nothing’s shipped yet. Someone is going to come up with an authority directory of WebMCP supportive brands any minute now.&lt;/p&gt;
&lt;p&gt;The spec moves weekly. Between my first discovery of the docs and shipping, my implementation, &lt;code&gt;provideContext&lt;/code&gt; and &lt;code&gt;clearContext&lt;/code&gt; got removed entirely, &lt;code&gt;unregisterTool&lt;/code&gt; came back after being briefly deprecated, and the &lt;code&gt;AbortSignal&lt;/code&gt; handling in &lt;code&gt;registerTool&lt;/code&gt;‘s second argument settled into the form above. Track the spec repo and expect to rewrite things. I’m in the preview group which is very easy to register for.&lt;/p&gt;
&lt;p&gt;If you run a site that has structured data behind predictable URLs – a product catalogue, a job board, a docs site, a media library – WebMCP is worth shipping now, even though browser adoption is near zero. It’s cheap to add, it forces you to think about your tool contracts before agents try to guess them, and it positions the site for when Chrome lifts the flag and Edge follows. When that happens I think there will be quite a fuss about it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The post &lt;a rel=&quot;nofollow&quot; href=&quot;https://houtini.com/webmcp-on-a-recruitment-website/&quot;&gt;Implementing WebMCP on a Recruitment Website&lt;/a&gt; appeared first on &lt;a rel=&quot;nofollow&quot; href=&quot;https://houtini.com&quot;&gt;Houtini&lt;/a&gt;.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/15383/implementing-webmcp-on-a-recruitment-website</guid>
<pubDate>Tue, 21 Apr 2026 09:58:19 +0000</pubDate>
</item>
</channel>
</rss>