Кейсовое исследование продукта · 31 августа 2026
WebMCP без риска записи: Лаборатория инструментов браузера только для чтения
Создайте один инструмент браузера WebMCP только для чтения, проверьте его схему, логируйте каждый вызов, сохраните резервный интерфейс и интерпретируйте воспроизводимый тест 20 против 20.

WebMCP — это многообещающий экспериментальный браузерный API, а не повод давать агенту больше полномочий. Наши родные Chromium-компоненты вернули правильную синтетическую запись 20 из 20 раз без изменений в наборе данных, с полными журналами и сокращением медианной задержки на 75,5%. Поскольку не было доступного одобренного клиентского или модельного браузерного агента, надежность агента от начала до конца остается неизмеренной.
WebMCP предоставляет веб-странице способ описывать функции JavaScript как структурированные инструменты для агента. Текущий проект размещает API на document.modelContext: страница регистрирует имя, описание, контракт входных данных в форме JSON Schema, аннотации и обратный вызов выполнения.[2][5] OpenAI называет это экспериментальным открытым стандартом и проводит конкурс с дедлайном 3 сентября 2026 года, 13:00 по тихоокеанскому времени.[1]
Привлекательный аргумент — это скорость и надежность: перестаньте заставлять агент делать вывод о каждом действии исходя из пикселей и меток, дайте ему типизированный путь вместо этого. Этот аргумент все еще нуждается в измерении. Инструмент может быть хорошо структурированным и чрезвычайно мощным; быстрый бенчмарк также может быть бессмысленным, если сравнение «UI» искусственное.
Этот учебник выбирает узкий путь: один запрос только для чтения по замороженным синтетическим данным, один видимый резервный интерфейс, одна учетная запись аудита и отсутствие утверждения, что тест на браузерной инфраструктуре доказывает эффективность агента.
Сначала разместите WebMCP на правильном уровне
WebMCP — это API, ориентированное на браузер, реализованное на странице и управляемое поддерживающим браузером. В проекте описаны инструменты клиентской стороны, которые существуют вместе с видимым приложением и могут совместно использовать его текущий контекст страницы.[2][5]
Это не:
- навык агента или
SKILL.mdпакет инструкций; - удалённый или локальный сервер MCP, использующий транспорт бекенда;
- CLI, который агент запускает как подпроцесс;
- расширение браузера или общая система плагинов;
- полноценное приложение, система аутентификации, политика авторизации или песочница.
Это различие имеет значение. В репозитории WebMCP указано, что интеграции backend MCP общаются напрямую с сервисом, в то время как инструменты WebMCP запускаются на странице браузера и дополняют, а не заменяют интеграции backend.[2] Человеческий интерфейс остаётся основным; структурированный инструмент — это другой путь через проверенную логику приложения.
Спецификация представляет собой проект отчёта Community Group, явно не являющийся стандартом W3C или документом стандарта.[5] Chrome указывает эту функцию как origin trial начиная с версий 149 по 156 и делает её доступной локально через Экспериментальные функции веб-платформы.[3][4] Страница вызовов OpenAI также называет встроенный браузер ChatGPT и Chrome с экспериментальным флагом или origin trial как пути тестирования.[1]
Демонстрация с одним инструментом
Репозиторий включает examples/webmcp-read-only-demo/. Он обслуживает восемь синтетических учебных записей и регистрирует ровно один инструмент:
ожидать документ.модельКонтекст.зарегистрироватьИнструмент({
имя: "search_superbash_library",
описание: "Ищет в замороженном каталоге синтетических учебных пособий. Только для чтения.",
inputSchema: {
тип: "object",
дополнительныеСвойства: ложь,
свойства: {
query: { type: "string", minLength: 2, maxLength: 64 },
},
required: ["query"],
},
аннотации: { readOnlyHint: true, untrustedContentHint: ложь },
асинхронный выполнить(ввод) {
вернуть выполнитьТолькоДляЧтения(input, "webmcp");
},
}, { signal: registrationController.signal });
Аннотация является полезным метаданным, а не средством принуждения. Реализация создаёт границу:
- Обратный вызов отклоняет массивы, неизвестные поля, нестроковые запросы и строки длиной не от 2 до 64 символов.
- Набор данных рекурсивно замораживается и сериализуется перед вызовами.
- Результаты представляют собой новые копии объектов; ссылка на набор данных не возвращается.
- Нет функций создания, обновления, удаления, входа в систему, сети, администрирования или хранения.
- Каждый вызов проверяет, что сериализованный набор данных не изменился.
Черновик все еще движется. Его текущая executeTool() сигнатура принимает объект, но установленная сборка Chromium 151 возвращала Failed to parse input arguments для этой формы и принимала строку JSON. Демонстрация сначала пробует форму закрепленного черновика, затем использует строковую форму только для этой конкретной ошибки совместимости. Сохраняйте проверку на стороне обратного вызова, даже если схема выглядит полной: спецификация все еще отслеживает проверку схемы нативного ввода/вывода как открытую область.[2]
Запустите и включите это
Из корня репозитория:
python3 -m http.server 4173 \
--директория examples/webmcp-read-only-demo
Открыть http://127.0.0.1:4173. Для локального теста в Chrome включите Экспериментальные функции веб-платформы в chrome://flags/#enable-experimental-web-platform-features и перезапустите браузер. Для развернутого теста во время эксперимента зарегистрируйте точный источник для тестирования Chrome origin trial, а не выпускайте глобальный флаг браузера для пользователей.[3][4]
Значок должен показывать Native WebMCP active и количество инструментов должно быть одно. Если API отсутствует, на странице об этом сообщается, и обычная форма поиска остаётся активной. Выполните поиск по webmcp; детерминированный ответ — запись sb-008.
Не тестируйте эту демо-версию в браузерном профиле, содержащем производственные сессии, если они вам не нужны. Она не требует входа в систему. Данные синтетические, сервер работает только в loopback, и эталон не делает внешних запросов.
Разрешения не являются авторизацией
Черновик WebMCP включает концепции браузера, такие как безопасные контексты, обнаружение того же источника, явное раскрытие между источниками и tools Политика разрешений для фреймов.[2][5] Эти элементы управления определяют, какой документ или агент может обнаружить и вызвать зарегистрированный инструмент страницы. Они не решают, разрешено ли пользователю просматривать производственный счет, менять роль или утверждать платеж.
Инструмент производства все равно должен вызывать стандартный слой авторизации приложения. Он должен получать только контекст сессии, который уже есть у видимой страницы, обеспечивать уровень доступа к объекту на сервере и отклонять операцию даже если агент сгенерировал синтаксически верные аргументы.
Эта демо-версия полностью избегает этой неоднозначности: у нее нет аккаунта, токена, серверного API, частной записи или операции записи. Если для вашего первого доказательства WebMCP требуется учетные данные администратора, вы выбрали неправильное доказательство.
Логируйте вызов, а не секрет
Каждое выполнение демо записывает:
- метку времени и последовательность;
webmcpилиuiканал;- название инструмента для структурированных вызовов;
- нормализованный синтетический запрос;
- идентификаторы результатов;
- успешность или ошибка проверки;
- длительность обратного вызова;
- результат проверки целостности набора данных.
Он не записывает модельный запрос, cookies, заголовки авторизации, профиль браузера или приватные исходные данные. Журнал является артефактом сессии страницы в памяти и доступен через кнопку «Скачать очищенный журнал». Ведение журнала — это состояние работы, а не изменение каталога, к которому выполняется запрос.
Для реального приложения направляйте проверенные события аудита в ваш существующий журнал безопасности с настройками хранения и контроля доступа. Не выгружайте полный контекст агента просто потому, что произошел вызов инструмента. Текст запроса может содержать секреты и нерелевантные персональные данные.
Путь интерфейса является частью дизайна
Форма вызывает ту же queryLibrary() функцию, что и обратный вызов инструмента. Это не отдельная страница-запасной вариант, поддерживаемая отдельно. Это дает пользователям три выхода:
- браузеры без WebMCP используют форму;
- агенты могут переключаться на управление браузером, когда подходящего инструмента нет, поведение, которое объяснитель WebMCP явно сохраняет;[2]
- операторы могут прервать сигнал регистрации, удалив инструмент, оставив форму работоспособной.
Нажать Отключить инструмент WebMCP чтобы запустить локальный выключатель. Эталон отдельно проверяет, что getTools() возвращает ноль после этого, запрос все еще возвращает sb-008, а замороженный набор данных остается идентичным.
Очистка столь же мала: закройте вкладку и остановите статический сервер. Оснастка удаляет свой временный профиль Chromium. В браузер не устанавливается никакой пакет, нет расширения для удаления, нет учетных данных для аннулирования и нет постоянной базы данных приложения.
Что измерял прогон 20-на-20
Воспроизводимая оснастка на benchmarks/webmcp-read-only-demo/run-browser.mjs запустил Chromium 151.0.7922.108 с экспериментальными функциями веб-платформы. Он закрепил ревизию WebMCP 41d12f057167ccf5954dbcf49d99502cb6c84491, подтвердил один зарегистрированный инструмент, выполнил webmcp → sb-008 20 запусков через нативный document.modelContext.executeTool(), затем выполнил тот же запрос 20 раз через видимую форму.
| Измерить | Нативный WebMCP | UI форма |
|---|---|---|
| Исправить | 20/20 | 20/20 |
| Медианное время в браузере | 4,1 мс | 16,75 мс |
| Несанкционированные записи в набор данных | 0 | 0 |
| Полные структурированные логи инструмента | 20/20 | Не применимо |
Нативный путь был на 75,5% быстрее по этой узкой временной границе, поэтому он преодолел установленный порог времени в 30%. Более важно, что этот запуск использовал безголовый CDP-харнесс, а не встроенный браузер ChatGPT, одобренный клиент Chrome или какой-либо фиксированный модельный агент. Путь через форму был скриптован; никакая модель не должна была воспринимать, планировать и кликать.
Честный вердикт, следовательно, не оценивается с точки зрения производительности агента. Запуск демонстрирует, что регистрация через родной API, выполнение, проверка, аудит, проверка целостности набора данных, путь отключения и резервное решение в интерфейсе работают в записанной экспериментальной сборке Chromium. Это не доказывает, что WebMCP делает агента на 30% быстрее.
Чтобы подтвердить это утверждение, заморозьте одного одобренного клиента и модель, текст задачи, стартовую страницу, ожидаемые идентификаторы, сеть и границу времени выполнения «от начала до конца». Проведите 20 новых структурированных испытаний и 20 новых UI-испытаний. Публикуйте «пройдено» только если WebMCP достигнет по крайней мере 18/20 правильных, не создаст ни одной несанкционированной записи, снизит медианное время выполнения как минимум на 30% и создаст полный журнал вызовов инструментов для каждого структурированного испытания.
Безопасное первое развертывание
Начните с запроса, который пользователь, не вошедший в систему, уже может выполнять над общедоступными или синтетическими данными. Укажите одну узкую схему и один тип результата. Сохраните видимый пользовательский интерфейс. Повторно проверяйте внутри обратного вызова. Логируйте идентификаторы, а не секреты. Предусмотрите аварийный выключатель и протестируйте его.
Только затем рассматривайте инструменты для чтения с аутентификацией. Инструменты для записи требуют отдельной модели угроз, явного подтверждения, проверки авторизации на серверной стороне, управления идемпотентностью и повторным воспроизведением, а также тестирования отката. readOnlyHint не превращает JavaScript с возможностью записи в код только для чтения.
Ценность WebMCP заключается в более ясном пути через веб-приложение. Самый безопасный эксперимент также ясен: показывайте меньше, измеряйте честно и сохраняйте работоспособность человеческого пути.
Источники
[1] https://openai.com/webmcp-challenge — Вызов WebMCP | OpenAI [2] https://github.com/webmachinelearning/webmcp — Репозиторий спецификаций WebMCP [3] https://developer.chrome.com/blog/ai-webmcp-origin-trial — Присоединяйтесь к пробной версии WebMCP | Chrome для разработчиков [4] https://chromestatus.com/feature/5117755740913664 — WebMCP | Статус платформы Chrome [5] https://webmachinelearning.github.io/webmcp — Проект отчета рабочей группы сообщества WebMCP
Запустите это в работу
Отделите структурированный инструмент браузера от клиентского агента, аутентификации приложения, разрешений браузера и бэкенд-авторизации, которые его окружают.
Попробовать
Запустите изолированную демонстрацию на loopback, включите экспериментальные функции веб-платформы Chrome и проверьте контракт одного инструмента перед запуском тестового приложения.
Докажите, что это сработало
Сохраняйте закрепленное ревизию спецификации, версию браузера, 40 согласованных строк запуска, очищенный журнал аудита, проверки целостности набора данных и доказательства резервного варианта после отключения.
Где это может оплатить
Проверяемая интеграция только для чтения может быть более безопасным первым шагом для команд, оценивающих нативные веб-интерфейсы агента, но не продавайте необоснованное заявление о скорости.
Держите в поле зрения
- WebMCP предоставляет структурированные инструменты, принадлежащие странице, через document.modelContext; это не сервер MCP и не замена пользовательского интерфейса сайта.
- Демонстрация содержит один инструмент только для чтения на основе замороженных синтетических данных, проверку на стороне вызова, безопасный аудит и отсутствуют учетные данные для продакшена.
- Нативный путь браузера набрал 20/20 и преодолел временной порог 30% на уровне 75,5%, но ни одна модель агента не была протестирована.