The site-embed — a webGCP extension for participant websites

Extension identifier: org.webgcp/site-embed · Version: 0.1 (draft) Anchors — three, all published elsewhere:

Anchor Standing (verified 2026-08-23) What this extension takes from it
webGCP v0.1 frozen 2026-05-16 §5.1 descriptor, §5.1.1 SVCB, §8 link-driven discovery
WebMCP Draft Community Group Report (W3C Web Machine Learning CG, 19 Aug 2026) — "not a W3C Standard nor on the W3C Standards Track" document.modelContext tool registration, ToolAnnotations, the origins/Permissions-Policy isolation model
x402 open, neutral standard for internet-native payments over HTTP 402 the metered-lane payment mechanism: 402 + X-PAYMENT, settled-only, nano granularity

⚠ WebMCP is cited accurately on purpose. It is an actively incubating community-group draft with a real implementation — a strong position, but not a ratified standard, and this document does not describe it as one. Its surface has already moved once (the API migrated from navigator to document, and most secondary documentation has not caught up), so implementers should feature-detect and re-verify rather than trust any explainer, including this one, on a fixed date.

This extension invents no identity scheme, no payment scheme, and no tool-registration API. It composes three published surfaces and adds only the participant shape that none of them defines.

WebMCP declares what a site can do. webGCP declares what a network knows. This extension is the packaged thing a webmaster installs to join the second without giving up the first: a descriptor entry that says the site participates, a domain-bound identity it can be held to, and a client split so that no credential capable of spending money ever reaches a browser.

Nothing here is new machinery. Every part rides a v0.1 surface that already exists.

1. The anchor, as published

webGCP v0.1 fact Why it matters here
§5.1 descriptor at /.well-known/webgcp — HTTPS, application/json, cacheable 1–24 h The descriptor is the installation. There is nothing else to register with.
§8 discovery is link-driven — "No central registry... Aggregators MAY exist; they are not the protocol" A participant is found the same way everything else is. This extension adds no directory.
role discriminates document classes — the spec host carries role: "specification_authority" instead of conformance_level, and its live descriptor calls itself "distinct from server descriptors that implementations publish" A third document class — the participant — needs no new mechanism, only a new value. See the framing note below.
§5.1.1 SVCB — _webgcp.<host> RR TYPE 64, binding "a webGCP server" Participants are not servers. This is the one place the anchor does not cleanly cover the case; see SE-7.
§4 conformance levels are self-declared and externally verifiable A participant profile must be testable, or it is decoration.

Framing note — what this extension does to role. v0.1 names exactly one role value, in one place: the spec host carries role: "specification_authority" instead of a conformance_level. There is no role enumeration in v0.1, and knowledge servers are discriminated by conformance_level, not by a role value. So this extension does something slightly larger than add a second value — it generalizes role into a document-class discriminator for hosts that are neither the specification authority nor a conforming knowledge server, with participant meaning consumer. That is an extension and not a spec change (there is no enum to violate), but implementers should understand it as a generalization rather than assume v0.1 already shipped a role vocabulary.

What the anchor deliberately does not cover

Property webGCP v0.1 state
A consumer that publishes but serves nothing Undefined. §5.1's descriptor is written for servers; §4's levels grade served capability. A site that only calls has no level to claim and no shape to publish.
Identity for a non-server domain Undefined. Trust roots (§5.1) are for servers that sign.
Where a credential may live Unaddressed. v0.1 has no client model at all, so nothing forbids the failure that matters most here.
Composition with a site's own tool card Out of scope for v0.1; the composition reference is informative.

The anchor holds on extension point plus governance, not coverage — which is what an extension wants.

2. The delta

Four properties:

  1. The participant descriptor — a site declares participation in the document it already knows how to serve. (SE-1)
  2. Domain-bound identity — did:web:<domain>, proven by control of the well-known path. The site is an agent; receipts carry it; credibility accrues to the domain. (SE-2)
  3. Two halves, one rule — a public browser half confined to the free lane, a credentialed server half for metered lanes, and no metered credential in the page, ever. (SE-3, SE-4)
  4. Materialization, not replacement — matched network skills may surface in the site's own WebMCP card, each labeled with its provenance so a visiting agent can always tell a local tool from a network skill. (SE-5)

3. Normative requirements

Key words MUST / MUST NOT / SHOULD / MAY per BCP 14.

SE-1 — The participant descriptor

{
  "role": "participant",
  "spec_version": "0.1",
  "extensions": ["org.webgcp/site-embed@0.1"],
  "identity": "did:web:example.com",
  "consumes": ["https://catalog.example-network.org"],
  "svcb_status": "live 2026-08-23"
}

SE-2 — Domain-bound identity

SE-3 — The two halves, and the credential rule

SE-4 — Lanes, and the payment anchor

The payment mechanism is x402 — not a webGCP invention. Internet-native machine payments already have an open, neutral standard built on HTTP's own 402 Payment Required, and this extension anchors on it rather than defining a parallel scheme. The same reasoning that made site identity did:web instead of a bespoke URN applies here with more force: payments are precisely where a private scheme costs an ecosystem the most.

The lane cascade. A participant's server half SHOULD resolve payment in fixed priority — free → session budget → x402 → 402 — falling through to a 402 refusal rather than failing open. The free lane sits first by construction: the common case costs nothing and never reaches a payment rail at all.

⚠ What this extension does NOT do: take a percentage of every transaction. Fees attach to operated rails by scope, not as a tax on each call. A participant that installs the embed and stays on the free lane pays nothing, forever, and that is the intended common case — the metered lanes price work performed, not access granted.

SE-5 — WebMCP composition is materialization

Why this is composition and not the disintermediation WebMCP guards against. The WebMCP proposal names an explicit aim of preventing disintermediation of web apps by backend integrations, and surfacing another party's tools into a site's card superficially resembles exactly that. It is worth answering directly rather than leaving the reader to wonder. Four properties, each required above, distinguish the two:

  1. The site opts in. Nothing materializes without the operator installing the embed; the network never reaches into a card it was not invited into.
  2. Entries are provenance-labeled. A visiting agent can always tell a local tool from a network skill — the opposite of disintermediation, which works by being invisible.
  3. Removal is clean. Uninstalling leaves the site's own card intact and valid; the site's surface is extended, never replaced.
  4. The site keeps its role in the transaction. Calls carry the site's identity and receipts accrue to its domain. The site is a party to the exchange, not an intermediary routed around.

Note also that WebMCP is "primarily designed for local browser workflows with a human in the loop", and names fully autonomous workflows an explicit non-goal. The browser half of SE-3 sits inside that model deliberately; nothing in this extension asks WebMCP to carry unattended execution.

SE-6 — Receipts and attribution

SE-7 — DNS-layer discovery

Ruled SHOULD by the specification authority, 2026-08-23.

The question, and why it needed a ruling. §5.1.1 binds its MUST to "a webGCP server"; the frozen text then generalizes it to any host serving the descriptor, spec hosts included. A participant serves the descriptor and is not a server, so the two readings disagree for exactly the class this extension defines. Worse, the spec's restricted-domain escape hatch lands in conformance_level — a field a participant does not carry — so the caveat as written could not be applied here at all.

The case that was weighed. For MUST (uniformity): the DNS signal is what lets an agent ask "does this domain speak webGCP?" without an HTTPS round-trip, and a population-scanning agent would find participants the same way it finds servers; precedent leaned this way, since the spec host carries role instead of conformance_level and is still bound by §5.1.1. For SHOULD (adoption): requiring an RR TYPE 64 to install a script is the difference between a webmaster installing this and a webmaster filing a ticket with a DNS provider that may not support the type at all — and the spec's own restricted-domain caveat exists precisely because that population is large.

What was preserved either way. The disclosure is MUST under both readings. A participant without the record is legible — it says so, in the descriptor, with a reason — rather than silently non-conformant. That was the part worth protecting, and the ruling keeps it.

⚠ Scope of the ruling: it binds this extension, not the frozen spec. v0.1 §5.1.1 is unchanged and, per §10.4 normative immutability, will stay unchanged. A participant conformant to org.webgcp/site-embed@0.1 may therefore still read as non-conformant to a strict application of the frozen text's generalization. Closing that gap is a v0.2 clarification — that the SVCB MUST binds servers, not every host that serves a descriptor — and it is listed as owed below.

4. Conformance

The participant conformance profile — assertions, controls, and what is verifiable from the wire versus only by architecture review — is a separate document. The runnable fixture suite is owed, not shipped; until it exists this profile is a specification of tests, not a passing result. The anchor's own §16 is the standard being held to here: a standard without runnable conformance tests is aspirational.

Known limitations

Open items

Owed by v0.2 of the anchor spec (not by this extension):

  1. A §5.1.1 clarification — that the SVCB MUST binds servers, not every host that serves a descriptor. The SE-7 ruling settles participant behaviour for this extension; only the spec can settle the reading. The clarification should also give the restricted-domain caveat a landing field for hosts that carry role in place of conformance_level, which today it lacks.

Owed by v0.2 of this extension:

  1. The cold-start credibility curve, as a testable bound rather than a principle.
  2. Whether consumes should carry a per-host lane declaration (free-only vs metered-enabled), which would make the SE-4 opt-in externally verifiable rather than an internal posture.