
Что такое WebMCP: инструменты сайта для ИИ-агента, API и поддержка
WebMCP — черновик веб-стандарта: страница сама регистрирует инструменты на JavaScript, и ИИ-агент в браузере вызывает их вместо поиска кнопок и полей. Ниже API с примером кода, вариант на HTML-формах, поддержка в Chrome и Edge, способы попробовать сегодня и ограничения.
Что такое WebMCP и зачем он сайту
WebMCP описывает, как сайт превращает свои действия в инструменты: функции на JavaScript с описанием на естественном языке и схемой входных данных. Вызывать их может ИИ-агент, встроенный в браузер, работающий в расширении или во фрейме на странице. Страницу с WebMCP сравнивают с MCP-сервером, у которого инструменты написаны в клиентском скрипте вместо бэкенда.
Предложение развивает Web Machine Learning Community Group консорциума W3C, у спецификации статус черновика группы (CG-DRAFT). Первая версия эксплейнера вышла 13 августа 2025 года, редакторы спецификации — сотрудники Microsoft и Google.
Без WebMCP агент разглядывает скриншоты, дерево DOM и дерево доступности, а потом имитирует клики и ввод текста. Каждый такой шаг агент толкует сам и может ошибиться. С WebMCP сайт прямо сообщает, какие действия есть и какие аргументы им нужны. Если подходящего инструмента нет, агент возвращается к обычной автоматизации страницы.
Сценарий рассчитан на совместную работу: человек сидит в той же вкладке, видит, что делает агент, и может вмешаться. Инструменты выполняются на странице у него на глазах. Полностью автономных агентов без открытого браузера авторы в цели не ставят.
Чем WebMCP отличается от MCP-сервера
Обычный MCP-сервер — отдельная программа: агентская платформа обращается к нему напрямую, минуя интерфейс сайта. Чтобы отдать через него действия веб-приложения, разработчику приходится повторять на сервере состояние пользователя, контекст и данные для входа. Как устроены MCP и MCP-сервер, мы разбирали на странице /blog/mcp-server/, готовые серверы собраны в каталоге /mcp/.
Инструменты WebMCP живут в скрипте открытой страницы. Агент работает в браузере пользователя и наследует его вход на сайт вместе с сессией. Инструмент вызывает тот же код, что и кнопки интерфейса, и страница сразу показывает результат.
Протокол MCP в браузер напрямую переносить не стали: он рассчитан на обмен между процессами через stdio и SSE и ничего не знает про источники (origin), разрешения браузера, DOM и жизненный цикл вкладки. С MCP у WebMCP общий словарь — инструменты, схемы, параметры, — API у него свой. WebMCP задуман как дополнение к MCP-серверам.
Коротко по пунктам. Где работает: MCP-сервер — процесс на компьютере или удалённый сервер, WebMCP — открытая вкладка. Вход в сервис: MCP-серверу нужны свои данные для входа, WebMCP пользуется сессией пользователя в браузере. Откуда агент узнаёт об инструментах: MCP-сервер прописывают в настройках клиента, инструменты WebMCP агент видит, только когда страница открыта.
API WebMCP: как зарегистрировать инструмент
Инструменты регистрирует метод document.modelContext.registerTool(). Объект modelContext есть у каждого документа и доступен только в безопасном контексте — на страницах по HTTPS и на localhost.
Обязательные поля инструмента — name, description и функция execute. Аргументы описывает inputSchema в формате JSON Schema, ещё есть outputSchema для ответа, title для показа в интерфейсе и annotations с подсказками агенту. Браузер передаёт агенту список инструментов, принимает от него аргументы, вызывает execute на странице и возвращает результат.
Чтобы убрать инструмент, передайте при регистрации AbortSignal и вызовите abort(). С Chrome 153 снятие инструмента не обрывает уже идущие вызовы. Для агентов внутри страницы и во фреймах есть методы getTools() и executeTool(), событие toolchange сообщает, что набор инструментов поменялся.
В ранних примерах встречаются navigator.modelContext, provideContext() и unregisterTool(). provideContext() и clearContext() удалили из черновика 5 марта 2026 года, unregisterTool() пропал из эксплейнера 27 марта, 27 мая modelContext перенесли с navigator на document. Типы для TypeScript лежат в npm-пакете webmcp-types, экспериментальная поддержка есть в React (пакет use-webmcp-tool), Angular и Vue.
const controller = new AbortController();
await document.modelContext.registerTool({
name: "add-todo",
description: "Add a new item to the user's active todo list",
inputSchema: {
type: "object",
properties: {
text: { type: "string", description: "The text content of the todo item" }
},
required: ["text"]
},
async execute({ text }) {
// Reuse existing client-side application logic and update UI.
await addTodoItemToCollection(text);
return {
content: [
{
type: "text",
text: `Added todo item: "${text}" successfully.`
}
]
};
}
}, { signal: controller.signal });
// To unregister the tool later, abort the signal.
// controller.abort();Декларативный вариант: инструмент из HTML-формы
Обычную форму можно сделать инструментом без JavaScript: атрибут toolname задаёт имя, tooldescription — описание, toolparamdescription у поля — описание параметра. Без toolparamdescription браузер берёт текст связанного label. Схему аргументов браузер строит сам по полям формы, у select варианты становятся списком допустимых значений.
Когда агент вызывает такой инструмент, браузер переводит фокус на форму и заполняет поля, форма остаётся на виду у пользователя. Без атрибута toolautosubmit кнопку отправки нажимает человек, с ним форма отправится сама. В событии submit появляется флаг agentInvoked, метод respondWith() возвращает агенту результат без перехода на другую страницу, перед ним нужно вызвать preventDefault(). Пока агент заполняет форму, на ней срабатывают CSS-псевдоклассы :tool-form-active и :tool-submit-active.
Ограничение: в спецификацию декларативный API сейчас не входит. 8 октября 2026 года его убрали из черновика, идеи лежат в отдельном эксплейнере, Chromium реализует упрощённую версию для испытаний. Как вернуть агенту ответ формы, если после отправки открывается новая страница, ещё обсуждают.
<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
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>Какие браузеры поддерживают WebMCP и как попробовать
В Chrome идёт origin trial — испытание на настоящих сайтах после регистрации домена. Записаться можно с Chrome 149, в карточке Chrome Status испытание отмечено до Chrome 156 на компьютерах и Android. В Edge такое же испытание идёт с версии 150. В Chrome и Edge по умолчанию WebMCP не включён, в Chrome Status у него статус Proposed. Firefox и Safari позиции не высказали.
Из агентов поддержка заявлена в ChatGPT Desktop. В Brave инструменты WebMCP будет видеть чат Leo AI начиная с версии 1.102.2, её выход ожидают 5 января 2027 года.
Для разработки в Chrome откройте chrome://flags/#enable-webmcp-testing, включите флаг и перезапустите браузер. В DevTools на вкладке Application есть панель WebMCP: список инструментов страницы, журнал вызовов с аргументами и ответами и ручной запуск инструмента без агента.
Проверить инструменты с агентом помогут два расширения Google: Example Agentic Chrome Extension и Model Context Tool Inspector. Обоим нужен ключ API, запросы по умолчанию уходят в модель gemini-3.6-flash. Первое расширение умеет работать и с локальной моделью через Prompt API, для этого нужен флаг chrome://flags/#prompt-api-tool-use. С Gemini в Chrome эти расширения не связаны.
Агент в редакторе кода достаёт инструменты WebMCP через Chrome DevTools MCP: у сервера есть list_webmcp_tools и execute_webmcp_tool. Категория выключена по умолчанию, включается флагом --categoryExperimentalWebmcp и требует Chrome 150 или новее с флагом --enable-features=WebMCP; если Chrome запускает сам сервер, флаг браузеру передают через --chromeArg. Сервер разобран на странице /mcp/chrome-devtools/, ещё один способ дать агенту браузер — /mcp/browser-mcp/.
До W3C похожий подход развивал открытый проект MCP-B (репозиторий MiguelsPizza/WebMCP) с расширением для Chrome. Работа переехала в репозиторий группы W3C, код расширения MCP-B закрыт, полифил document.modelContext выходит npm-пакетом @mcp-b/global, сейчас версия 6.2.0.
# Chrome: WebMCP для локальной разработки (включить и перезапустить браузер)
chrome://flags/#enable-webmcp-testing
# Chrome: инструменты для проверки с локальной моделью через Prompt API
chrome://flags/#prompt-api-tool-use
# Chrome DevTools MCP с инструментами list_webmcp_tools и execute_webmcp_tool
# (нужен Chrome 150 или новее с флагом --enable-features=WebMCP)
npx -y chrome-devtools-mcp@latest --categoryExperimentalWebmcp=trueБезопасность и ограничения WebMCP
WebMCP подчиняется политике разрешений tools. По умолчанию она равна self: инструменты регистрируются в основном окне и во фреймах того же источника, фрейму с другого домена нужен атрибут allow="tools". Заголовок Permissions-Policy: tools=() выключает WebMCP на странице и во всех её фреймах, тогда registerTool() вернёт ошибку NotAllowedError. Заголовок ставят на страницы, где инструменты не нужны: так их не зарегистрирует внедрённый скрипт или взломанная зависимость.
Инструменты страницы видны ей самой, документам того же источника и встроенному агенту браузера. Чтобы отдать их агенту во фрейме с другого домена, нужно согласие с двух сторон: владелец инструмента перечисляет домены в exposedTo, агент — в fromOrigins.
Аннотации подсказывают агенту, чего ждать. readOnlyHint — инструмент только читает данные. consequentialHint — действие серьёзное или необратимое, вроде оплаты или удаления, и агент может спросить подтверждение. untrustedContentHint — в ответе чужой контент, например отзывы. debugging (с Chrome 156) — инструмент для разработчиков. Вредный сайт может подсказки не поставить или исказить, поэтому защищаться агент должен сам.
Главные риски — промпт-инъекции в описаниях, аргументах и ответах инструментов, действия вразрез с намерением пользователя и утечка личных данных, когда инструмент просит лишние параметры вроде возраста или местоположения и сайт использует их, например, для разных цен. Агент работает с сессией пользователя, его историей и платёжными данными, поэтому ошибка обходится дорого. Имя инструмента ограничено 128 знаками.
Чего в WebMCP пока нет: изменения инструмента на месте (только снять и зарегистрировать заново), картинок и аудио на входе и выходе, потоковых ответов, запроса подтверждения у пользователя от имени сайта и вызова инструментов на неоткрытых сайтах через Service Worker — всё это открытые вопросы. Работа без окна браузера возможна, но API рассчитан на человека рядом. Десятки и сотни инструментов на странице могут сильно ухудшить работу агента. API ещё меняется.
# Выключить WebMCP на странице и во всех её фреймах
Permissions-Policy: tools=()
<!-- Разрешить инструменты фрейму с другого домена -->
<iframe src="https://chat-bot-provider.example/" allow="tools"></iframe>WebMCP и сайты: что известно про поиск
WebMCP открывает агенту действия сайта: поиск по каталогу, фильтры, запись, оформление заказа. Агент видит эти инструменты только на открытой странице, заранее узнать о них из файла на сервере нельзя. Статичный манифест авторы рассматривали и отложили на будущее.
Сайт при этом остаётся на виду: инструменты выполняются в его интерфейсе, с его дизайном и брендом, и человек видит результат на странице. Одна из целей WebMCP — сохранить сайт в цепочке, когда агенты работают через бэкенд-интеграции. Инструменты добавляют поверх готовой страницы как прогрессивное улучшение, у сложных сайтов может понадобиться доработка скриптов.
Влияние WebMCP на позиции в поиске нигде не описано: ни в спецификации, ни в документации Chrome о выдаче речи нет. Связь с разметкой есть в эксплейнере декларативного API: после отправки формы браузер может взять JSON-LD (script type="application/ld+json") с новой страницы и отдать агенту как ответ формы. Эта часть ещё обсуждается.
Частые вопросы
Что такое WebMCP?
Чем WebMCP отличается от MCP?
Какие браузеры поддерживают WebMCP?
Как добавить WebMCP на сайт?
Что стало с navigator.modelContext и provideContext()?
Источники: webmachinelearning/webmcp, https://webmachinelearning.github.io/webmcp, webmachinelearning/webmcp/blob/main/declarative-api-explaine, webmachinelearning/webmcp/blob/main/implementation-status.md, https://developer.chrome.com/docs/ai/webmcp, https://developer.chrome.com/docs/ai/webmcp/imperative-api, https://developer.chrome.com/docs/ai/webmcp/declarative-api, https://developer.chrome.com/docs/devtools/application/webmc