Publié le 18 mai 2026, dernière mise à jour le 1er juin 2026
| Présentateur | Web | Extensions | État de Chrome | Intention |
|---|---|---|---|---|
| GitHub | Afficher | Intention de test |
Vous pouvez utiliser l'API impérative WebMCP pour définir de nombreux types d'outils avec JavaScript standard. Vos outils peuvent exécuter différentes fonctions, telles que la saisie de formulaires, la navigation sur le site et la gestion de l'état.
Avant d'utiliser cette API, consultez des exemples de cas d'utilisation.
Fournir le contexte du modèle
Utilisez l'interface modelContext pour enregistrer des outils. L'enregistrement d'un outil nécessite un nom, une description et un schéma d'entrée avec les propriétés pertinentes.
Utilisez registertool pour ajouter un seul outil au contexte du modèle.
WebMCPza Maker
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}`;
},
});
Obtenir l'état de la commande
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.
},
});
Vous pouvez supprimer un outil avec AbortSignal, lorsqu'il est transmis en tant que paramètre facultatif.
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();
document.modelContext.registerTool(addTodoTool, { signal: controller.signal });
// Unregister the tool later...
controller.abort();
Découvrir les outils
Pour afficher les outils disponibles, utilisez document.modelContext.getTools(). Cette méthode asynchrone renvoie une liste d'outils auxquels le document appelant est autorisé à accéder.
const [tool] = await document.modelContext.getTools();
console.log(tool);
// {
// annotations: { readOnlyHint: false, untrustedContentHint: true },
// description: "Add a new item to the to-do list",
// inputSchema: '{"type":"object","properties":{"text":{"type":"string"}}}',
// name: "addTodo",
// origin: "https://example.com",
// window: Window {window: Window, self: Window, ...},
// }
Par défaut, getTools() ne renvoie que les outils de même origine enregistrés par le document appelant ou d'autres documents de même origine dans l'arborescence des frames. Pour récupérer des outils inter-origines, vous devez explicitement lister leurs origines dans l'option fromOrigins. Ce tableau n'accepte que les origines sécurisées.
Les outils provenant de documents inter-origines ne sont inclus que si :
- L'origine d'hébergement est listée dans l'option
fromOrigins. - L'outil a été explicitement exposé à votre origine.
// 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']
});
Exécuter l'outil
Pour exécuter manuellement un outil découvert dans getTools(), appelez document.modelContext.executeTool() avec des arguments d'entrée sous forme de chaîne JSON valide. Cette méthode asynchrone renvoie le résultat de l'exécution de l'outil ou la valeur "null" lorsqu'une navigation est déclenchée.
const result = await document.modelContext.executeTool(tool, '{"text": "Buy milk"}');
console.log(result);
// 'Added to-do: Buy milk'
Vous pouvez annuler l'exécution d'un outil en attente avec AbortSignal, lorsqu'il est transmis en tant que paramètre facultatif.
const controller = new AbortController();
document.modelContext.executeTool(tool, '{"text": "Buy milk"}', {
signal: controller.signal,
});
// Cancel tool execution later...
controller.abort();
Événements
Les frames peuvent écouter l'événement toolchange sur document.modelContext pour être averties lorsque la liste des outils disponibles a changé.
document.modelContext.addEventListener("toolchange", (event) => {
// Tools have changed.
});
iFrames inter-origines
WebMCP prend en charge les iFrames inter-origines qui utilisent à la fois des règles sur les autorisations et un contrôle d'origine explicite.
Règles sur les autorisations
L'enregistrement des outils est désactivé par défaut dans les iFrames inter-origines. Une page doit
déléguer l'accès à l'aide de la tools
règle sur les autorisations :
<iframe src="https://example.com" allow="tools"></iframe>
Exposition de l'origine
Les outils ne sont pas disponibles pour les documents inter-origines par défaut. Vous pouvez utiliser le tableau exposedTo dans registerTool pour lister les origines spécifiques autorisées à afficher et à exécuter un outil. Ce tableau n'accepte que les origines sécurisées.
// https://partner.org
document.modelContext.registerTool({
name: 'my_shared_tool',
description: 'Shared across origins',
// ...
}, {
exposedTo: ['https://example.com']
});
Participer et partager vos commentaires
WebMCP fait l'objet de discussions actives et peut être modifié à l'avenir. Si vous essayez cette API et que vous avez des commentaires, n'hésitez pas à nous en faire part.
- Consultez la présentation de WebMCP, posez des questions et participez à la discussion.
- Consultez les bonnes pratiques WebMCP.
- Consultez l'implémentation pour Chrome sur l'état de Chrome.
- Rejoignez le programme d'aperçu anticipé pour découvrir les nouvelles API et accéder à notre liste de diffusion.
- Si vous avez des commentaires sur l'implémentation de Chrome, signalez un bug dans Chromium.