<< All versions
Skill v1.0.1
Automated scan100/100webmaxru/web-ai-agent-skills/webmcp
+9 new
──Details
PublishedJune 30, 2026 at 07:47 PM
Content Hashsha256:6773507ea4395336...
Git SHA061172aaa259
Bump Typepatch
──Files
Files (1 file, 8.2 KB)
SKILL.md8.2 KBactive
SKILL.md · 73 lines · 8.2 KB
version: "1.0.1" name: webmcp description: Implements and debugs browser WebMCP integrations in JavaScript or TypeScript web apps. Use when exposing imperative tools through document.modelContext (with a navigator.modelContext fallback), annotating HTML forms for declarative tools, handling agent-invoked form flows, or validating WebMCP behavior in the current Chrome preview. Don't use for server-side MCP servers, REST tool backends, or non-browser providers. license: MIT metadata: author: webmaxru version: "1.4"
WebMCP
Procedures
Step 1: Identify the browser integration surface
- Inspect the workspace for browser entry points, UI handlers, and any existing app state or form handling layer.
- Execute
node scripts/find-webmcp-targets.mjs .to inventory likely frontend files and existing WebMCP markers when a Node runtime is available. - If a Node runtime is unavailable, inspect the nearest
package.json, HTML entry point, and framework bootstrap files manually to identify the browser app boundary. - If the workspace contains multiple frontend apps, prefer the app that contains the active route, component, or user-requested feature surface.
- If the inventory still leaves multiple plausible frontend targets, stop and ask the user which app should receive the WebMCP integration.
- If the project is not a browser web app, stop and explain that this skill does not apply.
Step 2: Choose the WebMCP shape
- Read
references/webmcp-reference.mdbefore writing code. - Read
references/declarative-api.mdwhen the feature can be expressed as an HTML form flow or needs agent-invoked submit handling. - Read
references/compatibility.mdwhen native availability, Chrome preview setup, or draft-versus-preview behavior matters. - Read
references/troubleshooting.mdwhen registration, schema serialization, or agent-driven form execution fails. - Verify that the integration runs in a secure window browsing context.
- If the feature must run on the server, in a worker, or headlessly without a visible browsing context, stop and explain the platform limitation.
- Choose the imperative API when the tool wraps existing JavaScript logic, requires dynamic registration, or needs
ModelContextClient.requestUserInteraction(). - Choose the declarative API when the user flow already maps cleanly to a form submission and the page can keep the human-visible form in sync with agent activity.
- Keep tool names, descriptions, and parameters explicit and positive, and prefer atomic tools over overlapping variants.
Step 3: Implement tool registration
- Read
assets/model-context-registry.template.tsand adapt it to the framework, state model, and file layout in the workspace when using the imperative API. - Resolve the model context with the feature-detection pattern
const modelContext = document.modelContext || navigator.modelContext;and guard subsequent registration on its presence. Preferdocument.modelContext(the current surface) and keepnavigator.modelContextonly as a fallback for older Chrome 146–149 builds. - Register imperative tools by awaiting
modelContext.registerTool()inside atry/catch, using a stablename(1–128 ASCII alphanumeric/_/-/.characters), a positivedescription, an objectinputSchema, and anexecutecallback. On Chrome 151+ the call returns aPromise<void>that resolves when the tool is available across the frame tree;awaitkeeps the same code working on older builds that registered synchronously. - Set
annotations.readOnlyHinttotrueonly for tools that do not modify state. - Set
annotations.untrustedContentHinttotruewhen the tool's output may contain data from untrusted sources. - Validate business rules inside the tool implementation even when the schema is strict, and return descriptive errors that help the agent retry with corrected input.
- Return tool results only after the UI and application state reflect the tool's effect.
- If tool availability depends on route, selection, or page state, register tools only while they are valid and unregister stale tools by aborting the
AbortControllerwhose signal was passed toregisterTool(); during the Chrome 148 transition window, also callmodelContext.unregisterTool?.()with optional chaining before aborting. - For declarative tools, annotate the target
<form>withtoolnameandtooldescription, and let form controls define the parameter surface. - Use labels or
toolparamdescriptionto produce clear parameter descriptions for declarative fields. - Use
toolautosubmitonly when the page should submit automatically after the agent populates the form.
Step 4: Wire agent-driven UX safely
- Preserve the normal human interaction path even when the page supports agent invocation.
- When an imperative tool needs explicit confirmation or a user-facing step, call
client.requestUserInteraction()instead of bypassing the UI. - When customizing declarative submit handling, call
preventDefault()beforerespondWith()and return structured validation errors for agent-invoked submits. - Use preview-only events such as
toolactivated,toolcancel,agentInvoked, and WebMCP form pseudo-classes only behind compatibility-aware UI logic. - Keep destructive or sensitive actions gated behind visible user confirmation, even if the agent can prepare the input.
- Keep UI state synchronized so the same page accurately reflects changes caused by human input and tool calls.
Step 5: Validate behavior
- Test the register and unregister lifecycle, including duplicate-name protection and cleanup on route or state changes.
- Test invalid or incomplete inputs to confirm the tool returns corrective errors instead of silently failing.
- For declarative tools, verify generated parameter descriptions, required fields, submit behavior, and any custom
respondWith()handling. - If the target environment is the current Chrome preview, confirm the required version and flag state from
references/compatibility.mdbefore treating runtime failures as application bugs. - Use the Model Context Tool Inspector or equivalent preview tooling only as a validation aid, not as a runtime dependency.
- Validate deterministic execution first by inspecting the registered tool set and manually invoking the tool with representative arguments when preview tooling is available.
- After deterministic execution is correct, validate natural-language routing so descriptions and parameter shapes guide the agent toward the correct tool.
- Run the workspace build, typecheck, or tests after editing.
Error Handling
- If both
document.modelContextandnavigator.modelContextare missing, confirm the code is running in a secure browser window context and then check the preview requirements inreferences/compatibility.md. - If only
navigator.modelContextis present, the page is running on an older Chrome 146–149 preview build; keep thedocument.modelContext || navigator.modelContextfallback in place but plan to dropnavigator.modelContextonce the deprecation window closes. - Await
registerTool()inside atry/catch. On Chrome151.0.7922.0+ it returns aPromise<void>that rejects on failure; older builds returned synchronously and threw. The sameawait+try/catchcatches both, so the error checks below apply whether the failure surfaces as a synchronous throw or a Promise rejection. - If
registerTool()throwsInvalidStateError, check for duplicate names, emptynameordescriptionvalues, or tool names that exceed 128 characters or contain disallowed characters (only ASCII alphanumeric,_,-,.are allowed). - If
registerTool()throwsNotAllowedError, check whether thetoolsPermissions Policy feature is denied; cross-origin iframes needallow="tools"from the embedding document. - If
registerTool()throwsTypeErroror JSON serialization errors, replace non-serializable or circularinputSchemavalues with plain JSON-compatible objects. - If an older demo or article references
provideContext,clearContext, ortoolparamtitle, treat those surfaces as obsolete for current implementations. - If declarative execution does not update the page correctly, read
references/declarative-api.mdandreferences/troubleshooting.mdbefore changing the tool contract.