Declarative API преобразует стандартные элементы HTML <form> в инструменты WebMCP с помощью атрибутов. Браузер синтезирует схему JSON из входных данных формы и обрабатывает взаимодействия агента.
Формы Angular Signal. НЕ добавляйте toolname/tooldescription в формы, созданные с помощью form() из @angular/forms/signals. Вместо этого добавьте provideExperimentalWebMcpForms() к поставщикам приложения и передайте параметр experimentalWebMcpTool: { name, description } в form(). Затем Angular регистрирует форму через Imperative API, создавая схему на основе модели сигналов и связывая ее с проверкой и отправкой. Если вы используете оба подхода, одна и та же форма будет зарегистрирована дважды.
Атрибуты формы
toolname: уникальное название инструмента.tooldescription– что делает инструмент и когда агент должен его использовать. Не перечисляйте поля, параметры и ограничения формы. Браузер уже включает их в схему, которую создает на основе элементов управления формой.toolautosubmit– необязательный атрибут. Если он указан, агент может отправить форму, не дожидаясь действий пользователя.toolparamdescription– необязательный параметр, позволяющий задать описание свойства в схеме JSON. Используйте его, чтобы объяснить, что означает значение (например, с помощью примеров значений), а не для повторения параметров или ограничений элемента управления.- Порядок разрешения. Браузер использует
toolparamdescription, если он есть. Если его нет, используетсяtextContentсвязанного элемента<label>(потомки, которым можно присвоить ярлык, пропускаются). Если ярлыка нет, используетсяaria-description. - Группировка (наборы полей). Чтобы добавить описание к группе связанных элементов (например, кнопок
<input type="radio">), поместитеtoolparamdescriptionв ближайший родительский элемент<fieldset>, чтобы оно применялось ко всей группе параметров.
- Порядок разрешения. Браузер использует
Пример
<form toolname="search-cars"
tooldescription="Perform a car make/model search"
toolautosubmit>
<label for="make">Vehicle Make</label>
<input type="text" id="make" name="make" required>
<label for="model">Vehicle Model</label>
<input type="text" id="model" name="model" toolparamdescription="e.g., 330i, F-150" required>
<button type="submit">Search</button>
</form>
Обработка отправки данных в JavaScript
Когда агент отправляет форму, SubmitEvent включает agentInvoked (логическое значение) и respondWith(promise).
document.querySelector('form').addEventListener('submit', (event) => {
event.preventDefault();
// Validate the form
const formValidationErrors = myFormIsValid();
if (formValidationErrors.length > 0) {
if (event.agentInvoked) {
const errorString =
'Validation failed: ' +
formValidationErrors
.map((err) => `${err.field} (${err.message})`)
.join(', ');
event.respondWith(Promise.resolve(errorString));
}
return;
}
const resultPromise = performAsyncSearch(new FormData(event.target));
// Return the result directly to the agent without navigation
if (event.agentInvoked) {
event.respondWith(resultPromise);
}
});
События жизненного цикла
document.modelContext генерирует события, когда агенты начинают или прекращают взаимодействие с инструментом: toolactivated срабатывает, когда начинается выполнение инструмента, а toolcancel – когда оно отменяется.
// Starting in Chrome 156, these events are dispatched on `document.modelContext`.
// Older versions dispatch them on `window`. Feature-detect the event handler
// property to pick the right target for backward compatibility.
const targetFor = (type, listener, options) =>
(`on${type}` in (document.modelContext ?? {}) ? document.modelContext : window)
.addEventListener(type, listener, options);
targetFor('toolactivated', ({ toolName }) => {
console.log(`Tool "${toolName}" started execution.`);
});
targetFor('toolcancel', ({ toolName }) => {
console.log(`Tool "${toolName}" execution is cancelled.`);
});
Визуальная обратная связь (CSS)
Используйте псевдоклассы, чтобы выделять формы, когда агент взаимодействует с ними:
:tool-form-active– применяется к элементу<form>, который активно используется агентом.:tool-submit-active: применяется к кнопке отправки, когда браузер приостанавливает работу для проверки пользователем (еслиtoolautosubmitне указан).
form:tool-form-active {
outline: 2px dashed blue;
background-color: rgba(0, 0, 255, 0.05);
}
button:tool-submit-active {
outline: 2px dashed red;
animation: pulse 2s infinite;
}
Когда не стоит использовать формы
Декларативный API лучше всего подходит для автономных стандартных форм. Этот вариант не подходит в следующих случаях:
- Поля с высокой зависимостью. Формы, в которых варианты или видимость полей меняются в зависимости от введенных данных. Синтезированная схема не может правильно выразить эти зависимости.
- Специальные компоненты интерфейса. Формы, в которых используются нестандартные элементы ввода (например, canvas, редакторы форматированного текста), не выполняющие автоматическую сериализацию значений.
- Многоэтапные мастера. Сложные рабочие процессы, требующие отправки нескольких форм. В этом случае лучше использовать императивный API или стандартное взаимодействие с DOM.
Когда использовать toolautosubmit
- Операции и запросы только для чтения. Поиск, фильтрация, получение сведений или проверка статуса (например, поиск модели автомобиля, поиск в каталоге, проверка наличия на складе).
- Действия с низким риском и обратимые действия. Действия с формами, которые пользователь может легко отменить или уточнить вручную (например, добавление товаров в корзину, применение промокода, сохранение черновика или настройка временных параметров макета).
Когда не нужно использовать toolautosubmit
- Деструктивные или необратимые действия. Удаление записей, сброс конфигураций системы или очистка баз данных.
- Финансовые и транзакционные действия. Отправка формы оплаты, перевод средств, авторизация платежей по подписке или окончательное оформление заказа.
- Важные действия, связанные с общением. Отправка заявки на вакансию, отправка электронных писем или сообщений другим пользователям, публикация общедоступного контента.
- Настройки конфиденциального аккаунта: Смена паролей, изменение ролей пользователей/разрешений или обновление платежных данных/данных профиля.
Резервные стратегии
Декларативный API WebMCP можно безопасно использовать во всех браузерах. Браузеры, которые не поддерживают WebMCP, будут игнорировать атрибуты tool*, а <form> продолжит работать как обычная HTML-форма. Распознавание объектов не требуется.