Veröffentlicht am 18. Mai 2026, zuletzt aktualisiert am 15. Oktober 2026
| Erklärvideo | Web | Erweiterungen | Chrome-Status | Absicht |
|---|---|---|---|---|
| GitHub | Ansicht | Absicht zum Testen |
Mit der WebMCP Imperative API können Sie viele Arten von Tools mit Standard-JavaScript definieren. Ihre Tools können verschiedene Funktionen ausführen, z. B. Formulareingabe, Websitenavigation und Statusverwaltung.
Lesen Sie vor der Verwendung dieser API die Anwendungsbeispiele.
Modellkontext angeben
Verwenden Sie die modelContext-Schnittstelle, um Tools zu registrieren. Für die Toolregistrierung sind ein Name, eine Beschreibung und ein Eingabeschema mit relevanten Eigenschaften erforderlich.
Verwenden Sie registerTool, um dem Modellkontext ein einzelnes Tool hinzuzufügen.
WebMCPza Maker
await document.modelContext.registerTool({
name: 'toggle_layer',
description: 'Control pizza layers (sauce, cheese). Use "add", "remove", or "toggle".',
inputSchema: {
type: 'object',
properties: {
layer: { type: 'string', enum: ['sauce-layer', 'cheese-layer'] },
action: { type: 'string', enum: ['add', 'remove', 'toggle'] },
},
required: ['layer'],
},
execute: async ({ layer, action }) => {
await toggleLayer(layer, action);
return `Performed ${action || 'toggle'} on layer: ${layer}`;
},
});
Bestellstatus abrufen
await document.modelContext.registerTool({
name: 'get_order_status',
description: 'Search orders in a given timeframe. Returns order number, shipping status and location',
inputSchema: {
"type": "object",
"properties": {
"timeframe": { "type": "string", "oneOf": [
{ "type": "string", "const": "today", "title": "Today" },
{ "type": "string", "const": "yesterday", "title": "Yesterday" },
{ "type": "string", "const": "last_7_days", "title": "Last 7 Days" },
{ "type": "string", "const": "last_30_days", "title": "Last 30 Days" },
{ "type": "string", "const": "last_6_months", "title": "Last 6 Months" }],
"enum": [ "today", "yesterday", "last_7_days", "last_30_days", "last_6_months" ],
"description": "Timeframe for the order lookup." }
},
"required": [ "timeframe" ]
},
execute: async ({ timeframe }) => {
// Add your API or database logic here to fetch and return the order data as a string.
},
});
Toolanmerkungen (optional)
Beim Registrieren eines Tools können Sie Metadaten in der annotations-Eigenschaft hinzufügen.
Diese Anmerkungen helfen Agenten und Browsern, die Sicherheitsmerkmale, erwarteten Nebenwirkungen, die Zuverlässigkeit der Ausgabe und die Zielgruppe eines Tools zu verstehen:
readOnlyHint(boolesch, Standardwertfalse): Wenntrue, gibt an, dass das Tool nur Informationen liest und den Zustand der Anwendung oder des Systems nicht ändert (z. B. Suche in einem Produktkatalog oder Abrufen des Bestellstatus). So können Agenten feststellen, ob das Tool sicher und ohne Nebenwirkungen aufgerufen werden kann.untrustedContentHint(boolesch, Standardwertfalse): Wenntrue, gibt an, dass die Ausgabe des Tools aus Sicht des Toolautors nicht vertrauenswürdige Daten enthält (z. B. von Nutzern erstellte Inhalte, Rezensionen oder externe Webdaten). Dies signalisiert dem Agenten und Client, dass die zurückgegebene Nutzlast eine erhöhte Sicherheitsbehandlung erfordert, z. B. Bereinigung oder Begrenzung, um indirekte Prompt-Injection zu verhindern.consequentialHint(boolesch, Standardwertfalse): Wenntrue, gibt an, dass die Ausführung des Tools zu wichtigen, realen oder nicht umkehrbaren Aktionen führt (z. B. Flug buchen, Geld überweisen oder Daten löschen). So können Agenten und Browser obligatorische Nutzerbestätigungsaufforderungen erzwingen, bevor sie Tools mit hohem Risiko ausführen, und das Risiko einer versehentlichen oder böswilligen Falschdarstellung der Nutzerabsicht verringern.debugging(boolesch, Standardwertfalse, verfügbar ab Chrome 156): Wenntrue, gibt an, dass das Tool speziell für die Überprüfung und Entwicklertools (z. B. Testframeworks oder Chrome-Entwicklertools mit KI-Unterstützung) und nicht für Endnutzerinteraktionen entwickelt wurde. So können Allzweck- und Endnutzer-Agenten Tools herausfiltern, die auf Entwickler ausgerichtet sind.
await document.modelContext.registerTool({
name: 'book_flight',
description: 'Book a flight for the user with confirmed flight details.',
inputSchema: {
type: 'object',
properties: {
flightId: { type: 'string', description: 'ID of the flight to book' },
passengers: { type: 'number', description: 'Number of tickets to purchase' },
},
required: ['flightId', 'passengers'],
},
annotations: {
readOnlyHint: false,
consequentialHint: true,
untrustedContentHint: false,
debugging: false,
},
execute: async ({ flightId, passengers }) => {
// Add your flight booking transaction logic here.
return `Booked ${passengers} passenger(s) on flight ${flightId}.`;
},
});
Beispiele dafür, wie Anmerkungen das Verhalten von Agenten beeinflussen können, finden Sie in der Beispielerweiterung WebMCP.
Tools abmelden
Sie können ein Tool mit AbortSignal entfernen, wenn es als optionaler Parameter übergeben wird.
const addTodoTool = {
name: "addTodo",
description: "Add a new item to the to-do list",
inputSchema: {
type: "object",
properties: { text: { type: "string" } },
},
execute: async ({ text }) => {
// You should handle the persistence logic here (omitted for demo)
return `Added to-do: ${text}`;
},
annotations: {
readOnlyHint: false,
untrustedContentHint: true
},
};
const controller = new AbortController();
await document.modelContext.registerTool(addTodoTool, { signal: controller.signal });
// Unregister the tool later...
controller.abort();
Ab Chrome 153 können Sie die Registrierung eines Tools aufheben, ohne laufende Ausführungen abzubrechen. So werden unerwartete Nebenwirkungen bei der Verwaltung von Tool-Lebenszyklen in Komponenten-Frameworks vermieden.
Toolabbruch verarbeiten
Die Funktion execute erhält als zweites Argument einen AbortSignal-Parameter namens signal, um Ausführungsabbrüche zu verarbeiten, die vom Nutzer oder Agenten initiiert wurden. Wenn Sie dieses Signal an zeitaufwendige asynchrone Aufgaben oder Netzwerkoperationen (z. B. fetch()) übergeben, können Sie unnötige Arbeit vermeiden, die allgemeine Ressourcenverwaltung verbessern und potenzielle Lecks vermeiden.
await document.modelContext.registerTool({
name: 'fetch_tool',
description: 'Fetch the text content of a URL and stream the response.',
inputSchema: {
type: 'object',
properties: {
url: { type: 'string', description: 'The URL to fetch' },
priority: { type: 'string', enum: ['high', 'low', 'auto'] },
},
required: ['url'],
},
execute: async ({ url, priority }, { signal }) => {
// Abort the fetch request when tool execution is aborted.
const response = await fetch(url, { priority, signal });
const stream = response.body.pipeThrough(new TextDecoderStream());
for await (const chunk of stream) {
document.querySelector('pre').textContent += chunk;
}
return 'Success';
},
});
Tools entdecken
Verwenden Sie document.modelContext.getTools(), um verfügbare Tools abzurufen. Diese asynchrone Methode gibt eine alphabetisch sortierte Liste von Tools zurück, auf die das aufrufende Dokument zugreifen darf.
const [tool] = await document.modelContext.getTools();
console.log(tool);
// {
// annotations: { consequentialHint: false, debugging: false, readOnlyHint: false, untrustedContentHint: true }, // Optional hints
// description: "Add a new item to the to-do list",
// inputSchema: {"type":"object","properties":{…}},
// name: "addTodo",
// origin: "https://example.com",
// title: ""
// window: Window {window: Window, self: Window, …},
// }
Standardmäßig gibt getTools() nur Tools desselben Ursprungs zurück, die vom aufrufenden Dokument oder anderen Dokumenten desselben Ursprungs im Frame-Baum registriert wurden. Wenn Sie ursprungsübergreifende Tools abrufen möchten, müssen Sie ihre Ursprünge explizit in der Option fromOrigins auflisten. Dieses Array unterstützt nur sichere Ursprünge.
Tools aus ursprungsübergreifenden Dokumenten werden nur berücksichtigt, wenn:
- Der Hosting-Ursprung ist in der Option
fromOriginsaufgeführt. - Das Tool wurde explizit für Ihren Ursprung verfügbar gemacht.
// https://example.com
// Get same-origin tools only
const sameOriginTools = await document.modelContext.getTools();
// Get same-origin tools plus tools from specific cross-origin documents
const allTools = await document.modelContext.getTools({
fromOrigins: ['https://partner.org']
});
In der WebMCP Page Agent-Demo finden Sie ein Beispiel dafür, wie Sie Tools aus einem iFrame abrufen und in einer webbasierten Chat-Oberfläche ausführen. In der Beispielerweiterung WebMCP erfahren Sie, wie ein Agent in einer Browsererweiterung Tools in ursprungsübergreifenden und ursprungsübergreifenden iFrames findet und ausführt.
Tool ausführen
Wenn Sie ein in getTools() gefundenes Tool manuell ausführen möchten, rufen Sie document.modelContext.executeTool() mit einem optionalen JavaScript-Objekt für Eingabeargumente auf, das in einen JSON-String serialisiert werden kann. Diese asynchrone Methode gibt das Ergebnis der Toolausführung oder „null“ zurück, wenn eine Navigation ausgelöst wird.
const result = await document.modelContext.executeTool(tool, { text: "Buy milk" });
console.log(result);
// 'Added to-do: Buy milk'
Sie können eine ausstehende Toolausführung mit AbortSignal abbrechen, wenn es als optionaler Parameter übergeben wird.
const controller = new AbortController();
document.modelContext.executeTool(tool, { text: "Buy milk" }, { signal: controller.signal });
// Cancel tool execution later...
controller.abort();
Ereignisse
Frames können auf das Ereignis toolchange in document.modelContext warten, um benachrichtigt zu werden, wenn sich die Liste der verfügbaren Tools geändert hat.
document.modelContext.addEventListener("toolchange", (event) => {
// Tools have changed.
});
Ursprungsübergreifende iFrames
WebMCP unterstützt ursprungsübergreifende iFrames, die sowohl Berechtigungsrichtlinien als auch explizite Ursprungsbeschränkungen verwenden.
Berechtigungsrichtlinie
Die Toolregistrierung ist in ursprungsübergreifenden iFrames standardmäßig deaktiviert. Eine Seite muss
den Zugriff mit der tools
Berechtigungsrichtlinie delegieren:
<iframe src="https://example.com" allow="tools"></iframe>
Ursprungsfreigabe
Tools sind für ursprungsübergreifende Dokumente standardmäßig nicht verfügbar. Mit dem Array exposedTo in registerTool können Sie bestimmte Ursprünge auflisten, die ein Tool ansehen und ausführen dürfen. Dieses Array unterstützt nur sichere Ursprünge.
// https://partner.org
await document.modelContext.registerTool({
name: 'my_shared_tool',
description: 'Shared across origins',
// ...
}, {
exposedTo: ['https://example.com']
});
React-Unterstützung
React bietet experimentelle Unterstützung für WebMCP
mit dem usewebmcp Paket. Wenn Ihre Anwendung bereits mit React geschrieben wurde, können Sie Tools mit eigenständigen Hooks registrieren, die an den Lebenszyklus der Komponentenmontage und ‑demontage gebunden sind. Der Hook useWebMCP bietet auch schemagesteuerte Typinferenz und macht den lokalen Ausführungsstatus verfügbar.
Angular-Unterstützung
Angular bietet experimentelle Unterstützung für WebMCP. Wenn Ihre Anwendung bereits mit Angular geschrieben wurde, können Sie Tools registrieren, die an den Lebenszyklus der Abhängigkeitsinjektion der Anwendung gebunden sind, und Ihre Signal Forms in WebMCP-Tools umwandeln.
Vue-Unterstützung
Vue bietet experimentelle Unterstützung für WebMCP
mit dem @vueuse/core Paket. Wenn Ihre Anwendung bereits mit Vue geschrieben wurde, können Sie Tools mit der zusammensetzbaren Funktion useWebMCP registrieren, die an den Lebenszyklus des aktuellen Vue-Bereichs gebunden ist. Außerdem werden reaktive und bedingte Toolregistrierung unterstützt und Ausführungsergebnisse automatisch normalisiert.
Mitmachen und Feedback geben
WebMCP wird aktiv diskutiert und kann sich in Zukunft ändern. Wenn Sie diese API testen und Feedback haben, freuen wir uns darauf.
- Lesen Sie die WebMCP-Erklärung, stellen Sie Fragen und beteiligen Sie sich an der Diskussion.
- Lesen Sie, wie Sie effektive WebMCP-Tools erstellen und WebMCP-Best Practices.
- Überprüfen Sie die Implementierung für Chrome im Chrome-Status.
- Nehmen Sie am Programm für frühe Vorabversionen teil um neue APIs vorab zu sehen und Zugriff auf unsere Mailingliste zu erhalten.
- Wenn Sie Feedback zur Chrome-Implementierung haben, melden Sie einen Chromium-Fehler.