WebMCP Documentation: Authoring Guide
Reference for writing and editing the WebMCP docs. The repo-wide agent
instructions live in the root AGENTS.md; this file covers the
docs-specific rules (Diataxis, writing style, Mintlify components, source-of-truth
boundaries).
What this is
Documentation for WebMCP, a Community Group proposal for exposing website tools through document.modelContext. Built with
Mintlify. Live at
docs.mcp-b.ai.
Site structure
apps/documentation-website/docs.json is the single source of truth for navigation,
pages, groups, and hierarchy. Read it first.
| Tab |
Path prefix |
Diataxis type |
| Home |
index, start-here/ |
Landing + routing |
| Packages |
packages/, reference/webmcp/ |
Information-oriented |
| Tutorials |
tutorials/ |
Learning-oriented |
| How-To Guides |
how-to/ |
Goal-oriented |
| Explanation |
explanation/ |
Understanding-oriented |
Every package gets an overview page and a reference page under
packages/<name>/. The reference/webmcp/ pages route proposal and platform
details to upstream sources and sit in the same tab.
explanation/design/spec-status-and-limitations keeps its legacy URL but is a
reference directory in the WebMCP platforms and agents navigation group.
Key files
| File |
Purpose |
apps/documentation-website/docs.json |
Navigation, theme, config. Do not modify without explicit request. |
../diataxis/SKILL.md |
Diataxis framework overview and compass |
../diataxis/references/ |
17 unabridged Diataxis reference pages from diataxis.fr |
../mintlify/SKILL.md |
Mintlify best practices (components, navigation, frontmatter, deployment) |
references/design-system.mdx |
Brand colors, typography, Mintlify component examples |
Diataxis framework
This documentation follows Diataxis by Daniele Procida.
Read ../diataxis/SKILL.md for the full compass. Read
../diataxis/references/<type>.md for the complete reference on each type before
writing or editing a page of that type.
The four types (never mix on a single page)
Tutorials (../diataxis/references/tutorials.md):
- A guided learning experience. The teacher holds responsibility. The learner follows.
- Concrete steps, no choices, no branching. Every step produces a visible result.
- Zero conceptual explanation. "We're using HTTPS because it's more secure" is enough. Link to the explanation page for the full story.
- Language: "We will...", "First, do X. Now, do Y.", "Notice that...", "You have built..."
How-to guides (../diataxis/references/how-to-guides.md):
- Directions for a competent user solving a real problem.
- Assumes the reader knows the basics and has a specific goal.
- Can branch ("If you need X, do Y"). Addresses real-world conditions.
- No digression, no explanation, no teaching. "If they're important, link to them."
- Language: conditional imperatives. "To do X, run Y."
Reference (../diataxis/references/reference.md):
- Technical description of the machinery. Austere, factual, structured like the code.
- Consulted while working, not read cover-to-cover.
- Describe and only describe. No teaching, no opinions. Link to how-to guides for usage and explanation pages for the "why".
- Language: "X does Y.", "You must use X.", lists, tables, warnings.
Explanation (../diataxis/references/explanation.md):
- Discursive treatment that deepens understanding.
- Read after stepping away from work. Discusses why, provides context, weighs alternatives.
- Admits opinion and perspective. Makes connections across topics.
- Language: "The reason for X is...", "Consider...", analogies, history, alternatives.
Cross-linking between types
Each type is deliberately incomplete. Links are how the reader moves between them. Every page should have at least 2-3 outgoing links to related pages, woven naturally into prose (not a "See also" dump at the bottom).
- Tutorials → link to explanation pages parenthetically: "(see Security Model for details)"
- How-to → link to explanation with one sentence of context: "For background on transports, see Transports and Bridges." Link to reference pages on first mention of any package.
- Reference → link to how-to for practical usage, explanation for the "why"
- Explanation → link to other explanation pages for related concepts, reference pages when naming specific APIs
Canonical locations for concepts
If a concept is covered on multiple pages, one page owns it. All others link to it.
| Concept |
Canonical page |
| What is WebMCP |
explanation/what-is-webmcp |
| WebMCP vs MCP |
Chrome's external compare-mcp guide |
| WebMCP API sources |
reference/webmcp/standard-api |
| Declarative API |
reference/webmcp/declarative-api |
| Codex site tools compatibility |
reference/webmcp/codex-site-tools |
| WebMCP and MCP-B extensions |
explanation/strict-core-vs-mcp-b-extensions |
| Runtime layering / initialization |
explanation/architecture/runtime-layering |
| Transports and bridges |
explanation/architecture/transports-and-bridges |
| Tool lifecycle |
explanation/architecture/tool-lifecycle-and-context-replacement |
| Security model |
explanation/design/security-and-human-in-the-loop |
| Schemas and structured output |
how-to/use-schemas-and-structured-output |
| WebMCP resources and status |
explanation/design/spec-status-and-limitations |
| Choosing a runtime |
how-to/choose-runtime (native vs polyfill vs global) |
| Package API details |
packages/<name>/reference |
Writing style
Follow the writing-clearly-and-concisely skill (~/.claude/skills/writing-clearly-and-concisely/SKILL.md). It covers active voice, concision, AI pattern avoidance, and Strunk's composition principles. Read it before writing or editing any page.
WebMCP-specific rules
- Second-person ("you") for instructions
- Lead with the verb in steps: "Install the package", not "You should install the package"
- No em dashes. Use commas, periods, or parentheses.
- No excessive bold. Bold for terms on first definition only.
- No emoji unless the user requests them.
Product names
- "WebMCP" for the proposal and browser API
@mcp-b/* for packages
- "MCP-B" only in package scope contexts (npm scope, commit messages)
Code examples
- Every example must be real, taken from source code, tests, or package READMEs. Do not invent code.
- Specify language for syntax highlighting
- Add titles to code blocks:
"filename.ext"
- Use
CodeGroup for multi-framework examples
- Use
twoslash for TypeScript/TSX hover type information
- Make long examples (50+ lines) expandable
Mintlify format
Follow the mintlify skill (../mintlify/SKILL.md) for components, navigation
patterns, page frontmatter, and deployment. It covers everything from docs.json
configuration to component selection to the verification checklist.
The Mintlify MCP server is configured in .mcp.json and available to all agents. Use it to search Mintlify's latest docs instead of relying on training data.
Read references/design-system.mdx for brand-specific component examples (colors,
typography, callout usage).
Frontmatter requirements
Every page needs at minimum:
---
title: 'Page Title in Sentence case'
description: 'Concise summary for SEO'
---
Include keywords for discoverability. Include sidebarTitle when the full title is too long for the sidebar. Include icon when the page is a landing or index page.
Links
- Internal links: root-relative, no extension:
[text](/path/to/page)
- Paths must match entries in
docs.json
- New pages must be added to
docs.json navigation
Headings
Use sentence case for all headings and code block titles ("Getting started", not "Getting Started").
Component selection
Pick the right component for the job. See ../mintlify/SKILL.md for the full list.
Quick reference:
| Need |
Component |
| Sequential instructions |
<Steps> with <Step title="..."> children |
| Show code in multiple languages/frameworks |
<CodeGroup> |
| Supplementary info the reader can skip |
<Note> |
| Helpful context (permissions, prereqs) |
<Info> |
| Best practice or recommendation |
<Tip> |
| Potentially destructive or breaking action |
<Warning> |
| Success confirmation |
<Check> |
| Hide optional details |
<Accordion> |
| User chooses one option |
<Tabs> with <Tab> children |
| Linked navigation cards |
<Card> in <CardGroup> |
| Side-by-side comparison |
<Columns> |
| Diagrams and flowcharts |
<Mermaid> |
| Images with light/dark mode |
<Frame> |
Rules:
- All code blocks must have a language tag
- Use
<Steps> with <Step> children, not <Steps> with ### headings inside
- Do not overuse callouts. One per section at most. If everything is a note, nothing is.
- Do not nest components more than two levels deep
Source of truth: what we own vs. what upstream owns
This is critical. WebMCP is an active Web Machine Learning Community Group proposal, not a W3C Standard or Standards Track document. Our project (@mcp-b/*) provides a polyfill and runtime for that proposed API. The docs must make this distinction clear and always point to the canonical upstream sources for the proposal itself.
What the Community Group and Chrome own (link to these, don't re-document)
Community Group draft and protocol sources:
Chrome team developer docs (link to these prominently):
Chrome-linked experimental tools and demos:
OpenAI product documentation (link to these, don't re-document):
Rules for proposal vs. package content:
- When documenting
document.modelContext API shape (methods, parameters,
return types), link to the Community Group draft. Describe
navigator.modelContext only as a deprecated compatibility alias. Our
reference pages should route readers to the authoritative source and identify
package-specific differences. Do not maintain a competing API table or full spec.
- When documenting the declarative API (
toolname, form attributes, schema synthesis, CSS pseudo-classes, SubmitEvent extensions), link to Chrome's declarative API documentation and the Community Group's declarative explainer. Identify the subset implemented by MCP-B, then link. Do not re-document the full type mapping table, constraint mapping table, or event contract; those will go stale as Chrome iterates.
- When documenting
@mcp-b/* packages, document the implemented package behavior fully and link to source. Do not call the package's current type surface the complete WebMCP draft surface. The proposal changes quickly: as of August 2026 it includes executeTool() with object input, while Chrome and MCP-B compatibility implementations accept serialized JSON. Link to the live draft for the proposal and describe the package signature separately. Do not describe unregisterTool, provideContext, or clearContext as current WebMCP methods. BrowserMcpServer adds registerPrompt, registerResource, listTools, and the composed mcpServer property. Protocol-version-specific elicitation and deprecated sampling remain official MCP SDK capabilities accessed through BrowserMcpServer.mcpServer; never describe them as document.modelContext methods.
- When showing the proposal working, prefer the Chrome team's live explainer or an individual demo from
GoogleChromeLabs/webmcp-tools rather than recreating it.
- Security model documentation should summarize our approach but link to the draft's security and privacy considerations and Chrome's secure tools guidance for the full threat model.
- When mentioning native Chrome support, link to the Model Context Tool Inspector extension recommended by Chrome's WebMCP documentation. Do not describe it as an officially supported Google product.
- When documenting Codex site tools, link to OpenAI for availability, setup, security, and current limitations. Keep our page dated and limited to independently observed compatibility differences. Do not treat those observations as permanent product behavior or generalize them to Chrome, Codex CLI, or the Codex IDE extension.
Page-specific guidance:
| Our page |
What to keep |
What to defer upstream |
reference/webmcp/standard-api.mdx |
Upstream source map and MCP-B package boundary |
API tables, signatures, dictionaries, and algorithms → Community Group draft |
reference/webmcp/declarative-api.mdx |
Upstream source map and MCP-B coverage links |
Attributes, events, schema synthesis, and browser behavior → Chrome and Community Group sources |
reference/webmcp/codex-site-tools.mdx |
Dated compatibility observations and source map |
Availability, setup, product security, and supported features → OpenAI |
explanation/what-is-webmcp.mdx |
High-level "what and why", ecosystem positioning |
Detailed API walkthrough → link to the Community Group draft |
What we own (document fully)
| Topic |
Location |
@mcp-b/* package APIs |
packages/*/README.md and packages/*/src/ |
| Package architecture & philosophy |
AGENTS.md, docs/MCPB_PACKAGE_PHILOSOPHY.md |
| Polyfill behavior & initialization |
packages/webmcp-polyfill/, packages/global/ |
| React hooks |
packages/react-webmcp/, packages/usewebmcp/ |
| Transports, iframe, relay |
packages/transports/, packages/mcp-iframe/, packages/webmcp-local-relay/ |
| Tooling (smart-dom-reader, etc.) |
packages/smart-dom-reader/, etc. |
| Type contracts |
packages/webmcp-types/src/*.test-d.ts |
| Chromium flags & testing |
e2e/web-standards-showcase/CHROMIUM_FLAGS.md, e2e/tests/CHROMIUM_TESTING.md |
Brand
| Key |
Value |
| Primary color |
#005F8F (see docs.json colors) |
| Product name |
"WebMCP" (not "MCP-B" in user-facing docs) |
| Package scope |
@mcp-b/* |
| Organization |
WebMCP-org |
| Docs URL |
docs.mcp-b.ai |
| Live demo |
webmcp.sh |
| Icons |
Font Awesome (see docs.json) |
Do not
- Skip frontmatter (
title and description are required on every .mdx file)
- Use absolute URLs for internal links (use root-relative:
/path/to/page)
- Use title case for headings (use sentence case: "Getting started", not "Getting Started")
- Write code blocks without a language tag
- Use
<Steps> with ### headings inside (use <Step title="..."> children)
- Include untested or invented code examples
- Use placeholder values like "foo" or "bar" in code (use realistic values)
- Reference outdated MiguelsPizza organization links
- Mix Diataxis content types within a single page
- Re-explain a concept that has a canonical page (link to it instead)
- Re-document the proposed WebMCP API surface in detail when the upstream draft is more authoritative. Summarize, then link.
- Blur the line between the WebMCP proposal and MCP-B extensions. Always clarify which layer a feature belongs to.
- Overuse callouts. One per section at most.
- Use decorative formatting, emoji, or excessive bold
Development
pnpm dev:docs # from the repo root. Preview at http://localhost:3000
Deployed automatically on push to main via Mintlify's GitHub integration.
1---2name: docs-authoring3description: Author and review the WebMCP documentation site using its Diataxis structure, Mintlify conventions, writing rules, design system, and source-of-truth boundaries. Use when creating, editing, reorganizing, or validating pages under apps/documentation-website.4---56# WebMCP Documentation: Authoring Guide78Reference for writing and editing the WebMCP docs. The repo-wide agent9instructions live in the root [AGENTS.md](../../../AGENTS.md); this file covers the10docs-specific rules (Diataxis, writing style, Mintlify components, source-of-truth11boundaries).1213## What this is1415Documentation for [WebMCP](https://webmachinelearning.github.io/webmcp/), a Community Group proposal for exposing website tools through `document.modelContext`. Built with16[Mintlify](https://mintlify.com). Live at17[docs.mcp-b.ai](https://docs.mcp-b.ai).1819## Site structure2021`apps/documentation-website/docs.json` is the single source of truth for navigation,22pages, groups, and hierarchy. Read it first.2324| Tab | Path prefix | Diataxis type |25| ----------------- | -------------------------------- | ---------------------- |26| **Home** | `index`, `start-here/` | Landing + routing |27| **Packages** | `packages/`, `reference/webmcp/` | Information-oriented |28| **Tutorials** | `tutorials/` | Learning-oriented |29| **How-To Guides** | `how-to/` | Goal-oriented |30| **Explanation** | `explanation/` | Understanding-oriented |3132Every package gets an `overview` page and a `reference` page under33`packages/<name>/`. The `reference/webmcp/` pages route proposal and platform34details to upstream sources and sit in the same tab.35`explanation/design/spec-status-and-limitations` keeps its legacy URL but is a36reference directory in the **WebMCP platforms and agents** navigation group.3738### Key files3940| File | Purpose |41| -------------------------------------- | ------------------------------------------------------------------------- |42| `apps/documentation-website/docs.json` | Navigation, theme, config. **Do not modify without explicit request.** |43| `../diataxis/SKILL.md` | Diataxis framework overview and compass |44| `../diataxis/references/` | 17 unabridged Diataxis reference pages from diataxis.fr |45| `../mintlify/SKILL.md` | Mintlify best practices (components, navigation, frontmatter, deployment) |46| `references/design-system.mdx` | Brand colors, typography, Mintlify component examples |4748---4950## Diataxis framework5152This documentation follows [Diataxis](https://diataxis.fr/) by Daniele Procida.53Read `../diataxis/SKILL.md` for the full compass. Read54`../diataxis/references/<type>.md` for the complete reference on each type before55writing or editing a page of that type.5657### The four types (never mix on a single page)5859**Tutorials** (`../diataxis/references/tutorials.md`):6061- A guided learning experience. The teacher holds responsibility. The learner follows.62- Concrete steps, no choices, no branching. Every step produces a visible result.63- Zero conceptual explanation. "We're using HTTPS because it's more secure" is enough. Link to the explanation page for the full story.64- Language: "We will...", "First, do X. Now, do Y.", "Notice that...", "You have built..."6566**How-to guides** (`../diataxis/references/how-to-guides.md`):6768- Directions for a competent user solving a real problem.69- Assumes the reader knows the basics and has a specific goal.70- Can branch ("If you need X, do Y"). Addresses real-world conditions.71- No digression, no explanation, no teaching. "If they're important, link to them."72- Language: conditional imperatives. "To do X, run Y."7374**Reference** (`../diataxis/references/reference.md`):7576- Technical description of the machinery. Austere, factual, structured like the code.77- Consulted while working, not read cover-to-cover.78- Describe and only describe. No teaching, no opinions. Link to how-to guides for usage and explanation pages for the "why".79- Language: "X does Y.", "You must use X.", lists, tables, warnings.8081**Explanation** (`../diataxis/references/explanation.md`):8283- Discursive treatment that deepens understanding.84- Read after stepping away from work. Discusses why, provides context, weighs alternatives.85- Admits opinion and perspective. Makes connections across topics.86- Language: "The reason for X is...", "Consider...", analogies, history, alternatives.8788### Cross-linking between types8990Each type is deliberately incomplete. Links are how the reader moves between them. Every page should have at least 2-3 outgoing links to related pages, woven naturally into prose (not a "See also" dump at the bottom).9192- **Tutorials** → link to explanation pages parenthetically: "(see [Security Model](/explanation/design/security-and-human-in-the-loop) for details)"93- **How-to** → link to explanation with one sentence of context: "For background on transports, see [Transports and Bridges](/explanation/architecture/transports-and-bridges)." Link to reference pages on first mention of any package.94- **Reference** → link to how-to for practical usage, explanation for the "why"95- **Explanation** → link to other explanation pages for related concepts, reference pages when naming specific APIs9697### Canonical locations for concepts9899If a concept is covered on multiple pages, one page owns it. All others link to it.100101| Concept | Canonical page |102| --------------------------------- | ----------------------------------------------------------------- |103| What is WebMCP | `explanation/what-is-webmcp` |104| WebMCP vs MCP | Chrome's external `compare-mcp` guide |105| WebMCP API sources | `reference/webmcp/standard-api` |106| Declarative API | `reference/webmcp/declarative-api` |107| Codex site tools compatibility | `reference/webmcp/codex-site-tools` |108| WebMCP and MCP-B extensions | `explanation/strict-core-vs-mcp-b-extensions` |109| Runtime layering / initialization | `explanation/architecture/runtime-layering` |110| Transports and bridges | `explanation/architecture/transports-and-bridges` |111| Tool lifecycle | `explanation/architecture/tool-lifecycle-and-context-replacement` |112| Security model | `explanation/design/security-and-human-in-the-loop` |113| Schemas and structured output | `how-to/use-schemas-and-structured-output` |114| WebMCP resources and status | `explanation/design/spec-status-and-limitations` |115| Choosing a runtime | `how-to/choose-runtime` (native vs polyfill vs global) |116| Package API details | `packages/<name>/reference` |117118---119120## Writing style121122Follow the **writing-clearly-and-concisely** skill (`~/.claude/skills/writing-clearly-and-concisely/SKILL.md`). It covers active voice, concision, AI pattern avoidance, and Strunk's composition principles. Read it before writing or editing any page.123124### WebMCP-specific rules125126- Second-person ("you") for instructions127- Lead with the verb in steps: "Install the package", not "You should install the package"128- No em dashes. Use commas, periods, or parentheses.129- No excessive bold. Bold for terms on first definition only.130- No emoji unless the user requests them.131132### Product names133134- "WebMCP" for the proposal and browser API135- `@mcp-b/*` for packages136- "MCP-B" only in package scope contexts (npm scope, commit messages)137138---139140## Code examples141142- Every example must be real, taken from source code, tests, or package READMEs. Do not invent code.143- Specify language for syntax highlighting144- Add titles to code blocks: `"filename.ext"`145- Use `CodeGroup` for multi-framework examples146- Use `twoslash` for TypeScript/TSX hover type information147- Make long examples (50+ lines) expandable148149---150151## Mintlify format152153Follow the **mintlify** skill (`../mintlify/SKILL.md`) for components, navigation154patterns, page frontmatter, and deployment. It covers everything from `docs.json`155configuration to component selection to the verification checklist.156157The **Mintlify MCP server** is configured in `.mcp.json` and available to all agents. Use it to search Mintlify's latest docs instead of relying on training data.158159Read `references/design-system.mdx` for brand-specific component examples (colors,160typography, callout usage).161162### Frontmatter requirements163164Every page needs at minimum:165166```yaml167---168title: 'Page Title in Sentence case'169description: 'Concise summary for SEO'170---171```172173Include `keywords` for discoverability. Include `sidebarTitle` when the full title is too long for the sidebar. Include `icon` when the page is a landing or index page.174175### Links176177- Internal links: root-relative, no extension: `[text](/path/to/page)`178- Paths must match entries in `docs.json`179- New pages must be added to `docs.json` navigation180181### Headings182183Use sentence case for all headings and code block titles ("Getting started", not "Getting Started").184185### Component selection186187Pick the right component for the job. See `../mintlify/SKILL.md` for the full list.188Quick reference:189190| Need | Component |191| ------------------------------------------ | -------------------------------------------- |192| Sequential instructions | `<Steps>` with `<Step title="...">` children |193| Show code in multiple languages/frameworks | `<CodeGroup>` |194| Supplementary info the reader can skip | `<Note>` |195| Helpful context (permissions, prereqs) | `<Info>` |196| Best practice or recommendation | `<Tip>` |197| Potentially destructive or breaking action | `<Warning>` |198| Success confirmation | `<Check>` |199| Hide optional details | `<Accordion>` |200| User chooses one option | `<Tabs>` with `<Tab>` children |201| Linked navigation cards | `<Card>` in `<CardGroup>` |202| Side-by-side comparison | `<Columns>` |203| Diagrams and flowcharts | `<Mermaid>` |204| Images with light/dark mode | `<Frame>` |205206Rules:207208- All code blocks must have a language tag209- Use `<Steps>` with `<Step>` children, not `<Steps>` with `###` headings inside210- Do not overuse callouts. One per section at most. If everything is a note, nothing is.211- Do not nest components more than two levels deep212213---214215## Source of truth: what we own vs. what upstream owns216217This is critical. WebMCP is an active **Web Machine Learning Community Group proposal**, not a W3C Standard or Standards Track document. Our project (`@mcp-b/*`) provides a **polyfill and runtime** for that proposed API. The docs must make this distinction clear and always point to the canonical upstream sources for the proposal itself.218219### What the Community Group and Chrome own (link to these, don't re-document)220221**Community Group draft and protocol sources:**222223| Topic | Canonical URL |224| -------------------------- | ----------------------------------------------------------------------------------------------- |225| Community Group draft | https://webmachinelearning.github.io/webmcp/ |226| WebMCP repository overview | https://github.com/webmachinelearning/webmcp/blob/main/README.md |227| Declarative API explainer | https://github.com/webmachinelearning/webmcp/blob/main/declarative-api-explainer.md |228| Implementation status | https://github.com/webmachinelearning/webmcp/blob/main/implementation-status.md |229| Security questionnaire | https://github.com/webmachinelearning/webmcp/blob/main/security-privacy-questionnaire.md |230| Security and privacy | https://webmachinelearning.github.io/webmcp/#security-and-privacy-considerations |231| WPT source and results | https://github.com/web-platform-tests/wpt/tree/master/webmcp and https://wpt.fyi/results/webmcp |232| Web Platform Status | https://webstatus.dev/features/document-modelcontext |233| W3C Community Group | https://www.w3.org/community/webmachinelearning/ |234| Model Context Protocol | https://modelcontextprotocol.io/specification/latest |235236**Chrome team developer docs (link to these prominently):**237238| Topic | URL |239| --------------------- | ------------------------------------------------------------- |240| WebMCP overview | https://developer.chrome.com/docs/ai/webmcp |241| Imperative API | https://developer.chrome.com/docs/ai/webmcp/imperative-api |242| Declarative API | https://developer.chrome.com/docs/ai/webmcp/declarative-api |243| Use cases | https://developer.chrome.com/docs/ai/webmcp/use-cases |244| Best practices | https://developer.chrome.com/docs/ai/webmcp/best-practices |245| Build tools | https://developer.chrome.com/docs/ai/webmcp/build-tools |246| WebMCP and MCP | https://developer.chrome.com/docs/ai/webmcp/compare-mcp |247| Evaluation | https://developer.chrome.com/docs/ai/webmcp/evals |248| Secure tools | https://developer.chrome.com/docs/ai/webmcp/secure-tools |249| Chrome DevTools panel | https://developer.chrome.com/docs/devtools/application/webmcp |250| Chrome DevTools MCP | https://github.com/ChromeDevTools/chrome-devtools-mcp |251252**Chrome-linked experimental tools and demos:**253254| Topic | URL | Local clone |255| ----------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------- |256| Model Context Tool Inspector (Chrome Web Store) | https://chromewebstore.google.com/detail/webmcp-model-context-tool/gbpdfapgefenggkahomfgkhfehlcenpd | - |257| Tool Inspector source | https://github.com/beaufortfrancois/model-context-tool-inspector | `webmcp-tools/model-context-tool-inspector/` |258| webmcp-tools repo (demos + utilities) | https://github.com/GoogleChromeLabs/webmcp-tools | `webmcp-tools/` |259| Live WebMCP explainer | https://googlechromelabs.github.io/webmcp-tools/demos/explainer/ | `webmcp-tools/demos/explainer/` |260| Awesome WebMCP list | https://github.com/GoogleChromeLabs/webmcp-tools/blob/main/AWESOME_WEBMCP.md | `webmcp-tools/AWESOME_WEBMCP.md` |261262**OpenAI product documentation (link to these, don't re-document):**263264| Topic | URL |265| ------------------------ | ---------------------------------------------------------------------------------------- |266| Codex site tools | https://learn.chatgpt.com/docs/webmcp |267| ChatGPT built-in browser | https://learn.chatgpt.com/docs/browser |268| Site tools Help Center | https://help.openai.com/en/articles/20001423-using-site-tools-in-the-chatgpt-desktop-app |269270**Rules for proposal vs. package content:**271272- When documenting `document.modelContext` API shape (methods, parameters,273 return types), link to the Community Group draft. Describe274 `navigator.modelContext` only as a deprecated compatibility alias. Our275 reference pages should route readers to the authoritative source and identify276 package-specific differences. Do not maintain a competing API table or full spec.277- When documenting the declarative API (`toolname`, form attributes, schema synthesis, CSS pseudo-classes, SubmitEvent extensions), link to Chrome's [declarative API documentation](https://developer.chrome.com/docs/ai/webmcp/declarative-api) and the Community Group's [declarative explainer](https://github.com/webmachinelearning/webmcp/blob/main/declarative-api-explainer.md). Identify the subset implemented by MCP-B, then link. Do not re-document the full type mapping table, constraint mapping table, or event contract; those will go stale as Chrome iterates.278- When documenting `@mcp-b/*` packages, document the implemented package behavior fully and link to source. Do not call the package's current type surface the complete WebMCP draft surface. The proposal changes quickly: as of August 2026 it includes `executeTool()` with object input, while Chrome and MCP-B compatibility implementations accept serialized JSON. Link to the live draft for the proposal and describe the package signature separately. Do not describe `unregisterTool`, `provideContext`, or `clearContext` as current WebMCP methods. `BrowserMcpServer` adds `registerPrompt`, `registerResource`, `listTools`, and the composed `mcpServer` property. Protocol-version-specific elicitation and deprecated sampling remain official MCP SDK capabilities accessed through `BrowserMcpServer.mcpServer`; never describe them as `document.modelContext` methods.279- When showing the proposal working, prefer the Chrome team's [live explainer](https://googlechromelabs.github.io/webmcp-tools/demos/explainer/) or an individual demo from `GoogleChromeLabs/webmcp-tools` rather than recreating it.280- Security model documentation should summarize our approach but link to the draft's [security and privacy considerations](https://webmachinelearning.github.io/webmcp/#security-and-privacy-considerations) and Chrome's [secure tools guidance](https://developer.chrome.com/docs/ai/webmcp/secure-tools) for the full threat model.281- When mentioning native Chrome support, link to the [Model Context Tool Inspector](https://chromewebstore.google.com/detail/webmcp-model-context-tool/gbpdfapgefenggkahomfgkhfehlcenpd) extension recommended by Chrome's WebMCP documentation. Do not describe it as an officially supported Google product.282- When documenting Codex site tools, link to OpenAI for availability, setup, security, and current limitations. Keep our page dated and limited to independently observed compatibility differences. Do not treat those observations as permanent product behavior or generalize them to Chrome, Codex CLI, or the Codex IDE extension.283284**Page-specific guidance:**285286| Our page | What to keep | What to defer upstream |287| --------------------------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------- |288| `reference/webmcp/standard-api.mdx` | Upstream source map and MCP-B package boundary | API tables, signatures, dictionaries, and algorithms → Community Group draft |289| `reference/webmcp/declarative-api.mdx` | Upstream source map and MCP-B coverage links | Attributes, events, schema synthesis, and browser behavior → Chrome and Community Group sources |290| `reference/webmcp/codex-site-tools.mdx` | Dated compatibility observations and source map | Availability, setup, product security, and supported features → OpenAI |291| `explanation/what-is-webmcp.mdx` | High-level "what and why", ecosystem positioning | Detailed API walkthrough → link to the Community Group draft |292293### What we own (document fully)294295| Topic | Location |296| ---------------------------------- | ------------------------------------------------------------------------------- |297| `@mcp-b/*` package APIs | `packages/*/README.md` and `packages/*/src/` |298| Package architecture & philosophy | `AGENTS.md`, `docs/MCPB_PACKAGE_PHILOSOPHY.md` |299| Polyfill behavior & initialization | `packages/webmcp-polyfill/`, `packages/global/` |300| React hooks | `packages/react-webmcp/`, `packages/usewebmcp/` |301| Transports, iframe, relay | `packages/transports/`, `packages/mcp-iframe/`, `packages/webmcp-local-relay/` |302| Tooling (smart-dom-reader, etc.) | `packages/smart-dom-reader/`, etc. |303| Type contracts | `packages/webmcp-types/src/*.test-d.ts` |304| Chromium flags & testing | `e2e/web-standards-showcase/CHROMIUM_FLAGS.md`, `e2e/tests/CHROMIUM_TESTING.md` |305306---307308## Brand309310| Key | Value |311| ------------- | ------------------------------------------ |312| Primary color | #005F8F (see `docs.json` `colors`) |313| Product name | "WebMCP" (not "MCP-B" in user-facing docs) |314| Package scope | `@mcp-b/*` |315| Organization | WebMCP-org |316| Docs URL | docs.mcp-b.ai |317| Live demo | webmcp.sh |318| Icons | Font Awesome (see docs.json) |319320---321322## Do not323324- Skip frontmatter (`title` and `description` are required on every `.mdx` file)325- Use absolute URLs for internal links (use root-relative: `/path/to/page`)326- Use title case for headings (use sentence case: "Getting started", not "Getting Started")327- Write code blocks without a language tag328- Use `<Steps>` with `###` headings inside (use `<Step title="...">` children)329- Include untested or invented code examples330- Use placeholder values like "foo" or "bar" in code (use realistic values)331- Reference outdated MiguelsPizza organization links332- Mix Diataxis content types within a single page333- Re-explain a concept that has a canonical page (link to it instead)334- Re-document the proposed WebMCP API surface in detail when the upstream draft is more authoritative. Summarize, then link.335- Blur the line between the WebMCP proposal and MCP-B extensions. Always clarify which layer a feature belongs to.336- Overuse callouts. One per section at most.337- Use decorative formatting, emoji, or excessive bold338339## Development340341```bash342pnpm dev:docs # from the repo root. Preview at http://localhost:3000343```344345Deployed automatically on push to main via Mintlify's GitHub integration.