Specificatie · Nieuws en duiding

Chrome kiest eerst voor JavaScript: de formuliervariant van WebMCP is voorlopig uit de specificatie

In het kort

Op 8 oktober 2026 is de formuliervariant van WebMCP, met toolname op een formulier, voorlopig uit de specificatie gehaald. Chrome brengt eerst de JavaScript-API uit, en de proef in Chrome is verlengd tot en met versie 162. Bouw je belangrijkste actie daarom met registerTool().

Heb je een formulier met een paar attributen tot WebMCP-tool gemaakt? Dan is dit voor jou. Op 8 oktober 2026 is die formuliervariant voorlopig uit de WebMCP-specificatie gehaald, en vijf dagen later schreef het Chrome-team dat het eerst de JavaScript-API uitbrengt. Ook loopt de proef in Chrome langer door dan gepland. Wat er veranderde, en wat je nu met je formulieren doet.

Wat er in drie weken veranderde

DatumWat er gebeurdeWat het voor je site betekent
28 september 2026Chrome verlengt de origin trial van versie 156 tot en met versie 162Je kunt langer testen met echte bezoekers
8 oktober 2026De formuliervariant, de declaratieve API, gaat voorlopig uit de specificatieAlleen registerTool() is nog beschreven
13 oktober 2026Chrome wil eerst de JavaScript-API uitbrengen, de formuliervariant volgt laterEen JavaScript-tool is de veiligste keuze

Wat de formuliervariant was

Bij de declaratieve API zet je attributen op een formulier dat al werkt: toolname en tooldescription op het formulier, en toolparamdescription op de velden. De browser maakt daar zelf een tool van, met een invoerschema op basis van de velden. Je hoeft er geen JavaScript voor te schrijven. Een voorbeeld staat op onze WebMCP-pagina, en Chrome beschrijft de variant op een eigen pagina.

Wat er precies uit de specificatie ging

Op 8 oktober werd pull request #338 samengevoegd. François Beaufort, die ook de Chrome-documentatie over de declaratieve API schreef, haalde daarmee het hoofdstuk over formulieren uit de specificatie, inclusief de regels die van een formulier een invoerschema maken. Volgens zijn toelichting richt de specificatie zich nu op registerTool(), en wordt de formuliervariant verder uitgewerkt in een apart voorstel. De conceptversie van 15 oktober bevat de formuliervariant niet meer.

Het woord voorlopig is belangrijk. Op 13 oktober schreef Beaufort bij dezelfde wijziging dat het Chrome-team eerst de JavaScript-API wil uitbrengen, met de formuliervariant 'shortly after', kort daarna. Een datum of versie noemde hij niet. De toelichting bij WebMCP zegt verder dat een formuliervariant, als die terugkomt, de JavaScript-API aanvult en niet vervangt: niet alles op een website is een formulier.

Of Chrome geannoteerde formulieren in de huidige proef blijft herkennen, staat niet in de wijziging. De Chrome-documentatie beschrijft ze nog. De ChatGPT-desktopapp ondersteunt ze nu al niet: die werkt alleen met JavaScript-tools op de hoofdpagina.

De proef in Chrome loopt langer

Op 28 september vroeg Chrome op de mailinglijst blink-dev om de origin trial te verlengen van versie 156 tot en met versie 162. De reden: feedback uit de proef heeft verbeteringen aan de API opgeleverd, en Chrome wil meten hoe die werken. Alex Russell, een van de API-eigenaren van Blink, de engine onder Chrome en Edge, gaf dezelfde dag akkoord. Zijn voorwaarde: een samenvatting van wat ontwikkelaars in de eerste proefperiode meldden. Hij vroeg ook waarom WebMCP nog niet de stap naar een stabiele release zet.

Volgens de releaseplanning van Chromium komt Chrome 162 op 2 februari 2027 uit. Edge heeft een eigen proef, die volgens Microsofts trialpagina tot 30 maart 2027 loopt. Op onze browserpagina stond voor Edge 17 november 2026; dat hebben we aangepast. Heb je al een token, kijk dan in de origin-trialconsole tot wanneer het geldig is en vernieuw het als dat nodig is.

Wat dit betekent voor je formulieren

Jouw situatieWat je nu doet
Je hebt nog geen WebMCP-toolsBegin met één JavaScript-tool voor je belangrijkste actie, en controleer eerst of de browser WebMCP kent
Je hebt alleen formulieren met toolnameBied de belangrijkste actie ook aan met registerTool() en haal bij dat formulier het toolname-attribuut weg, zodat er één tool voor die actie is
Je meet SubmitEvent.agentInvokedDat signaal hoort bij de formuliervariant. Tel aanroepen ook in de JavaScript-tool zelf, want daar weet je zeker dat een agent hem gebruikte
Je formulier gaat na verzenden naar een bevestigingspaginaVerstuur in de tool met fetch, zodat de pagina niet wisselt en de agent het resultaat krijgt

Moet een actie echt over meerdere pagina's lopen? Daarvoor ligt een apart voorstel klaar, met eenmalige tokens die een tool op de volgende pagina laten verdergaan. Onze scan geeft vanaf nu een aandachtspunt als een site alleen formulieren met toolname heeft. De score verandert daardoor niet.

Voorbeeld: het offerteformulier als JavaScript-tool

Dit is hetzelfde offerteformulier als in het voorbeeld op /webmcp, nu als JavaScript-tool. Zonder WebMCP gebeurt er niets en werkt het formulier gewoon.

javascript
// Het offerteformulier van /webmcp, nu als JavaScript-tool. Het formulier
// blijft voor bezoekers precies zo werken. De tool stuurt dezelfde velden naar
// hetzelfde adres, maar met fetch: de pagina wisselt niet, dus de agent krijgt
// het resultaat terug. Je server antwoordt met JSON en een referentie.
async function registerQuoteTool() {
  const context = document.modelContext;
  const form = document.getElementById("offerte");
  if (typeof context?.registerTool !== "function" || !form) {
    return () => {};
  }

  const controller = new AbortController();
  await context.registerTool({
    name: "vraag_offerte_aan",
    description: "Vraag een vrijblijvende offerte aan. Plaatst geen opdracht.",
    inputSchema: {
      type: "object",
      properties: {
        dienst: { type: "string", description: "De gewenste dienst, bijvoorbeeld onderhoud" },
        email: { type: "string", format: "email", description: "Het e-mailadres voor de offerte" },
      },
      required: ["dienst", "email"],
    },
    execute: async ({ dienst, email }) => {
      const body = new FormData();
      body.set("dienst", dienst);
      body.set("email", email);
      const response = await fetch(form.action, {
        method: "POST",
        body,
        headers: { "X-Aanroep": "webmcp" },
      }).catch(() => null);
      if (response?.status === 422) {
        return JSON.stringify({
          status: "invalid_input",
          reason: "Controleer de dienst en het e-mailadres.",
        });
      }
      if (!response?.ok) {
        return JSON.stringify({
          status: "unavailable",
          reason: "De aanvraag is niet verstuurd. Het formulier op deze pagina werkt nog wel.",
        });
      }
      const { referentie } = await response.json();
      return JSON.stringify({ status: "received", reference: referentie });
    },
  }, { signal: controller.signal });

  return () => controller.abort();
}

try {
  // Roep stopQuoteTool() aan als de pagina deze actie niet meer aanbiedt.
  const stopQuoteTool = await registerQuoteTool();
} catch (error) {
  console.error("Registratie van de offertetool mislukt", error);
}

registerTool() geeft in de huidige specificatie een promise terug. Daarom staat er await voor: een mislukte registratie, bijvoorbeeld omdat er al een tool met die naam is, komt dan in de catch terecht. De header X-Aanroep regelt geen rechten. Die is er alleen om aanroepen via de tool apart te tellen in je serverlogs.

Wat je nu doet

Kijk eerst of je site formulieren met toolname heeft. Bouw voor de belangrijkste daarvan een JavaScript-tool zoals hierboven, en test die in Chrome en in de ChatGPT-desktopapp. De andere geannoteerde formulieren mogen blijven staan: ze doen geen kwaad. Controleer de vervaldatum van je origin-trialtoken. En houd onze browserpagina in de gaten: die werken we bij zodra Chrome een datum noemt.

Bronnen

Deel dit artikelLinkedInX
Volgende stap

Meer context bij dit onderwerp: Wat is WebMCP? De complete uitleg. Benieuwd hoe jouw site ervoor staat? Doe de gratis AI-Ready Websitescan.