Что такое WebMCP: инструменты сайта для ИИ-агента, API и поддержка

Проверено 13.11.2026

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?
Черновик веб-стандарта от Web Machine Learning Community Group консорциума W3C. Сайт регистрирует на странице инструменты — функции на JavaScript с описанием и схемой аргументов, — и ИИ-агент в браузере вызывает их вместо поиска кнопок и полей. Сейчас WebMCP доступен в виде origin trial в Chrome 149 и Edge 150.
Чем WebMCP отличается от MCP?
MCP-сервер — отдельная программа, к которой агент подключается напрямую. Инструменты WebMCP работают в открытой вкладке, вызывают код страницы и пользуются сессией пользователя, отдельный сервер не нужен. Понятия общие: инструмент, описание, схема аргументов в JSON Schema. API у WebMCP свой, браузерный, и MCP-серверы он дополняет.
Какие браузеры поддерживают WebMCP?
Chrome — origin trial с версии 149, в карточке Chrome Status до версии 156, плюс флаг chrome://flags/#enable-webmcp-testing для разработки. Edge — origin trial с версии 150. Firefox и Safari позиции не высказали. Из агентов поддержка заявлена в ChatGPT Desktop, в Brave её ждут в Leo AI с версии 1.102.2.
Как добавить WebMCP на сайт?
Вызовите document.modelContext.registerTool() с именем, описанием, схемой inputSchema и функцией execute, которая выполняет действие кодом вашей страницы. Для простой формы хватит атрибутов toolname и tooldescription в теге form, но в спецификацию этот вариант пока не входит. Чтобы инструменты работали у посетителей Chrome, зарегистрируйте домен в origin trial WebMCP; у себя включите флаг и проверьте инструменты в панели WebMCP в DevTools.
Что стало с navigator.modelContext и provideContext()?
В мае 2026 года modelContext перенесли с navigator на document, методы provideContext() и clearContext() удалили ещё в марте. Старые примеры переписывают на document.modelContext.registerTool(), снимают инструмент через AbortSignal.

Источники: 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