Skip to content

Optional off-page discovery layer, and how to read third-party WebMCP audits - #7

Merged
TueJon merged 4 commits into
mainfrom
feature/discovery-layer
Aug 6, 2026
Merged

Optional off-page discovery layer, and how to read third-party WebMCP audits#7
TueJon merged 4 commits into
mainfrom
feature/discovery-layer

Conversation

@TueJon

@TueJon TueJon commented Aug 6, 2026

Copy link
Copy Markdown
Owner

WebMCP now has an ecosystem of checkers, inspector extensions and registries that grade
a page and hand the developer a score. Their lists mix three different kinds of item,
and an agent that treats the score as a to-do list will write markup that no
specification contains. This adds the missing guidance and the one piece of off-page
surface that is genuinely worth publishing.

references/discovery.md (new)

Off-page discovery as an opt-in, approval-gated layer, never part of a default
integration:

  • What is specified (document.modelContext; the declarative attributes, with
    toolparamdescription on the control; toolactivated/toolcancel; the tool CSS
    pseudo-classes) versus deprecated (navigator.modelContext, the Chrome 149
    compatibility surface) versus convention (/.well-known/webmcp, rel="webmcp",
    llms.txt) versus invented (toolaction — it exists in no draft and no Chrome doc).
  • Rule 0: record the approval before writing anything. pipeline.discovery in
    .webmcpify/manifest.json holds the date, the exact publishedTools subset, the
    paths appended as each artifact is written, and a complete flag — so a context
    reset mid-publication is distinguishable from a finished one, and AUDIT can map the
    new hunks (including in the no-baseline fallback).
  • Rule 1: the manifest is a mirror, never a source — generated from the approved
    manifest, shipped with a drift test, regenerated with every contract change.
  • Rule 2: publishing metadata is a disclosure decision — world-readable and cached
    forever, so it lists only public, unauthenticated tools whose schemas any visitor
    could already read in DevTools. Never auth-gated or admin tools, never unreleased
    functionality.
  • Rule 3: shape and servingapplication/json, HTTP 200 (a redirect counts as a
    miss), keep the repo file as webmcp.json and map the extensionless path in the
    server config. The nginx snippet distinguishes the default semantics (a location
    add_header cancels inherited headers → repeat them) from add_header_inherit merge
    (nginx 1.29.3+, where repeating them duplicates CSP/HSTS), and says to diff the
    headers afterwards either way.

Guard rails elsewhere

  • heal.md: heal failures, not scores. A third-party finding that is a confirmed
    spec violation
    means the harness is missing an assertion — add it, watch it fail,
    heal it. Conventions and invented checks are report-only: no toolaction, no forms
    added to an app that doesn't need one, no chasing a browser-side window.ai.
  • verify.md: same classification before acting on any inspector finding.
  • integrate.md: declarative tools need a form the app already has; otherwise
    integrate imperatively.
  • SKILL.md: the offer, the approval requirement, the pipeline.discovery schema, and
    the audit mapping.
  • New templates/well-known-webmcp.json.

Version 0.4.0 across the distribution manifests; npm run check green (17 tests). The
reference implementation of all three layers now runs on
webmcpify.at (TueJon/webmcpify.at#9).

TueJon added 3 commits August 6, 2026 12:34
…party audits

references/discovery.md documents the pre-visit discovery conventions around
WebMCP — the /.well-known/webmcp manifest, rel="webmcp" advertisement, llms.txt —
and separates what the spec defines from what the surrounding ecosystem invented.
Publishing is opt-in and approval-gated: a manifest is world-readable, so it
mirrors only public unauthenticated tools and must be generated from the approved
manifest with a drift test, never hand-maintained.

The same guide gives HEAL and VERIFY a rule for third-party WebMCP checkers:
their scores mix spec features with conventions and invented checks, so findings
get classified and reported, never healed toward. No non-existent attributes, no
forms added to an app that doesn't need them, no chasing browser-side APIs a page
cannot provide.

Ships templates/well-known-webmcp.json; version 0.4.0.
- document.modelContext is the specified surface; navigator.modelContext is the
  deprecated Chrome 149 compatibility fallback, and the table now says so
- toolparamdescription belongs on the form control (or enclosing fieldset), not
  on the form element
- the publication approval is persisted in pipeline.discovery (approved tool ids
  + created paths) before any file is written, so the gate survives a context
  reset and the audit can map the new hunks
- the nginx snippet repeats the inherited security headers, because add_header in
  a location cancels every inherited one
- a third-party finding that is a confirmed spec violation now means the harness
  is missing an assertion: add it, then heal — only conventions and invented
  checks stay report-only
…nheritance advice

- pipeline.discovery gains paths-as-written plus a complete flag: approval alone
  could not distinguish 'approved, nothing published yet' from 'published', so a
  context reset mid-publication looked finished. Approved-but-incomplete is now
  explicitly unfinished work that blocks leaving INTEGRATE.
- the no-baseline audit fallback collects pipeline.discovery.paths too, so
  published artifacts are audited rather than silently skipped
- only a manifest this pipeline created or modified counts as an unmapped hunk; a
  pre-existing untouched one is reported, not flagged as our change
- add_header_inherit merge (nginx 1.29.3+) inherits headers instead of cancelling
  them, so blindly repeating them duplicates CSP/HSTS — check the mode first, and
  diff the headers afterwards either way
@TueJon TueJon self-assigned this Aug 6, 2026
@TueJon TueJon added documentation Improvements or additions to documentation webmcp WebMCP agent surface labels Aug 6, 2026
…ntract

- integrate → verify now also requires pipeline.discovery to be null or complete;
  the transition table is what a literal agent follows, so the rule has to live
  there and not only in the prose
- a discovery record written before the complete key existed reads as false:
  re-check the artifacts, then persist the flag — no migration required
- an untouched pre-existing manifest is always reported, not only when it
  contradicts the integration: what it advertises is part of the app's agent
  surface either way
- the Link-header guidance carries the same add_header_inherit caveat as the
  manifest location, instead of unconditionally telling the agent to repeat
  headers
@TueJon
TueJon merged commit 1536c6c into main Aug 6, 2026
1 check passed
@TueJon
TueJon deleted the feature/discovery-layer branch August 6, 2026 11:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation webmcp WebMCP agent surface

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant