Implements WebMCP provideContext API for bulk tool registration, page state metadata sharing, and dynamic context updates to AI agents. Use for e-commerce pages like product or cart views.
npx claudepluginhub orcaqubits/agentic-commerce-skills-plugins --plugin webmcp-browser-agentsThis skill is limited to using the following tools:
**Fetch live docs**:
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Automates semantic versioning and release workflow for Claude Code plugins: bumps versions in package.json, marketplace.json, plugin.json; verifies builds; creates git tags, GitHub releases, changelogs.
Fetch live docs:
https://webmachinelearning.github.io/webmcp/ for the provideContext method specificationwebmcp provideContext specification for the API shape and optionswebmcp context metadata agent for contextual data patternssite:developer.chrome.com webmcp context for Chrome-specific context featuresnavigator.modelContext.provideContext(options) is a method for bulk registration of multiple tools and providing additional contextual metadata to agents. While registerTool adds one tool at a time, provideContext can set up an entire tool surface in a single call.
Note: This API is still being specified and may change. Always fetch the latest spec before implementing.
Agents make better decisions when they understand the current page state:
| Aspect | registerTool | provideContext |
|---|---|---|
| Granularity | One tool at a time | Multiple tools + metadata |
| Metadata | Tool-level only | Page-level context included |
| Use case | Dynamic, individual tools | Page initialization, bulk setup |
| Lifecycle | Register/unregister individually | Set/clear entire context |
Provide agents with situational awareness:
Product page context:
navigator.modelContext.provideContext({
tools: [viewDetails, addToCart, compareProducts],
metadata: {
pageType: "product-detail",
productId: "sku-12345",
productName: "Wireless Headphones",
price: 79.99,
inStock: true,
userAuthenticated: true
}
});
Cart page context:
navigator.modelContext.provideContext({
tools: [updateQuantity, removeItem, applyCoupon, checkout],
metadata: {
pageType: "shopping-cart",
itemCount: 3,
subtotal: 247.50,
currency: "USD",
hasShippingAddress: true,
hasSavedPayment: true
}
});
Update context as the page state changes:
// Initial page load — browse tools
navigator.modelContext.provideContext({
tools: [searchProducts, viewDetails],
metadata: { pageType: "catalog", authenticated: false }
});
// User logs in — expand tools
navigator.modelContext.clearContext();
navigator.modelContext.provideContext({
tools: [searchProducts, viewDetails, addToCart, getCartContents, checkout],
metadata: { pageType: "catalog", authenticated: true, userName: "Alice" }
});
// Navigate to cart — switch tools
navigator.modelContext.clearContext();
navigator.modelContext.provideContext({
tools: [updateQuantity, removeItem, applyCoupon, checkout],
metadata: { pageType: "cart", itemCount: 3 }
});
In single-page applications, update context on route changes:
router.on("routeChange", (route) => {
navigator.modelContext.clearContext();
switch (route.name) {
case "catalog":
provideCatalogContext();
break;
case "product":
provideProductContext(route.params.id);
break;
case "cart":
provideCartContext();
break;
case "checkout":
provideCheckoutContext();
break;
}
});
provideContext for initial page setup; use registerTool / unregisterTool for incremental changesFetch the specification for the exact provideContext options shape, metadata fields, and any new features before implementing.