Data di pubblicazione: 18 maggio 2026
| Divulgatore | Web | Estensioni | Stato di Chrome | Intenzione |
|---|---|---|---|---|
| GitHub | Visualizza | Intenzione di sperimentare |
Utilizza l'API dichiarativa per trasformare i moduli HTML standard in strumenti WebMCP aggiungendo annotazioni. Le annotazioni definiscono il nome e lo scopo dello strumento nell'elemento
<form>, mentre i campi fungono da parametri dello strumento. Il browser
traduce questi elementi in una rappresentazione strutturata che gli agenti possono utilizzare
in modo simile agli strumenti imperativi.
Prima di utilizzare questa API, leggi gli esempi di casi d'uso.
Registrazione dello strumento
Aggiungi i seguenti attributi HTML al modulo:
toolname: assegna un nome chiaro allo strumento, in base al suo scopo.tooldescription: descrivi l'azione eseguita dallo strumento e il suo scopo.
Ad esempio, il seguente modulo si trova all'indirizzo example.com/get-customer-support:
<form toolname="createSupportRequest" tooldescription="Submits a request for customer support.">
</form>
Quando un agente chiama toolname, il browser porta il modulo in primo piano e ne compila il campo. Il modulo rimane visibile all'utente.
Se rimuovi l'attributo HTML toolname o tooldescription, la registrazione dello strumento viene annullata.
(Facoltativo) Parametri dello strumento
Per migliorare l'accuratezza, aggiungi i seguenti attributi HTML ai singoli elementi del modulo:
toolparamdescription: mappa gli elementi a una descrizione della proprietà all'interno dello schema JSON. Senza questo attributo, il browser utilizza il contenuto all'interno dell'elemento<label>associato e salta i discendenti etichettabili. Se non è presente un'etichetta, il browser fa riferimento aaria-description.
Il seguente modulo utilizza i parametri facoltativi per l'elemento <select>.
<form toolname="supportRequestTool"
tooldescription="Submit a request for support."
action="/submit">
<label for="firstName">First Name</label>
<input type=text name=firstName>
<label for="lastName">Last Name</label>
<input type=text name=lastName>
<select name="select" required toolparamtitle="Support type"
toolparamdescription="Determines what team this request is routed to.">
<option value="Customer happiness team">Return my purchase.</option>
<option value="Distribution team">Check where my package is.</option>
<option value="Website support team">Get help on the website.</option>
</select>
<button type=submit>Submit</button>
</form>
Il browser interpreta questo modulo come uno strumento, rappresentato dal seguente JSON:
[
{
"name": "supportRequestTool",
"description": "Submit a request for support.",
"inputSchema": {
"type": "object",
"properties": {
"text": {
"type": "string",
"title": "firstName",
"description": "First name"
},
"text": {
"type": "string",
"title": "lastName",
"description": "Last name"
},
"select": {
"type": "string",
"anyOf": [
{
"const": "Customer happiness team",
"title": "Return my purchase."
},
{
"const": "Distribution team",
"title": "Check where my package is."
},
{
"const": "Website support team",
"title": "Get help on the website."
}
],
"enum": [
"Customer happiness team",
"Distribution team",
"Website support team"
],
"title": "Support type",
"description": "Determines what team this request is routed to."
}
},
"required": [
"select"
]
}
}
]
Invia il modulo
Hai due opzioni per l'invio del modulo:
- L'utente deve fare clic manualmente su Invia per completare l'attività.
- Aggiungi
toolautosubmitper attivare l'invio e una navigazione quando il modello richiama questo strumento.
L'interfaccia SubmitEvent introduce l'attributo booleano agentInvoked. Questo attributo è impostato su true ogni volta che un modulo viene attivato da un agente AI, per adattare il comportamento della tua app web in modo specifico per le interazioni basate su agenti.
Inoltre, SubmitEvent include il metodo respondWith(Promise<any>),
in modo da poter passare al browser una promessa che viene risolta con i risultati del modulo. Il valore risultante viene quindi serializzato e restituito al modello come output dello strumento. Per utilizzare questo metodo, devi prima chiamare preventDefault() per interrompere l'invio standard del modulo del browser.
<form toolautosubmit toolname="search_tool"
tooldescription="Search the web" action="/search">
<input type=text name=query>
</form>
<script>
document.querySelector("form").addEventListener("submit", (e) => {
e.preventDefault();
if (!myFormIsValid()) {
if (e.agentInvoked) { e.respondWith(myFormValidationErrorPromise) };
return;
}
if (e.agentInvoked) { e.respondWith(Promise.resolve("Search is done!")); }
});
</script>
Il browser segnala che un agente AI ha eseguito uno strumento con l'"toolactivated"
evento. Questo evento viene attivato nella finestra una volta che i campi del modulo sono stati precompilati. Al contrario, se
un utente annulla l'operazione dell'agente o viene richiamato il metodo reset(), viene attivato un
"toolcancel" evento. Entrambi questi eventi non sono annullabili e forniscono un attributo toolName per l'identificazione.
window.addEventListener('toolactivated', ({ toolName }) => {
console.log(`the tool "${toolName}" execution was activated.`);
// TODO: Update UI or validate form if needed.
});
window.addEventListener('toolcancel', ({ toolName }) => {
console.log(`the tool "${toolName}" execution was cancelled.`);
// TODO: Let the user know. Update UI.
});
Modifica l'indicatore di selezione
Un indicatore di selezione visibile è fondamentale per informare utenti e agenti della loro posizione in una pagina. Quando un agente richiama correttamente uno strumento, mette a fuoco il modulo associato e compila automaticamente i relativi campi, il browser attiva pseudo-classi CSS specifiche per il feedback visivo:
:tool-form-activeviene applicato all'elemento HTMLformdello strumento.:tool-submit-activeviene applicato al pulsante di invio del modulo, se presente.
Queste classi vengono disattivate quando il modulo viene inviato, l'agente annulla l'azione o l'utente reimposta il modulo. Puoi personalizzare il CSS per questi stati o affidarti a uno stile predefinito del browser.
/* Chrome default declarative form styles. */
form:tool-form-active {
outline: light-dark(blue, cyan) dashed 1px;
outline-offset: -1px;
}
input:tool-submit-active {
outline: light-dark(red, pink) dashed 1px;
outline-offset: -1px;
}
Scopri di più sulle best practice e sullo stile per la selezione.
Partecipa e condividi feedback
WebMCP è in fase di discussione attiva ed è soggetto a modifiche in futuro. Se provi questa API e hai feedback, non esitare a comunicarcelo.
- Leggi il divulgatore di WebMCP, poni domande e partecipa alla discussione.
- Leggi le best practice di WebMCP.
- Esamina l'implementazione di Chrome nello stato di Chrome su Chrome Status.
- Partecipa al programma di anteprima per dare un'occhiata in anteprima alle nuove API e accedere alla nostra mailing list.
- Se hai feedback sull'implementazione di Chrome, segnala un bug di Chromium.