Руководство · Экспериментальная практика
WebMCP: инструменты сайта для браузерных ИИ-агентов
Как обычные HTML-формы и document.modelContext.registerTool() объявляют WebMCP-инструменты, чем это отличается от API/MCP-сервера и почему browser contract нельзя путать с обычным индексированием.
- Опубликовано
- Обновлено
Ограничение: материал объясняет проверяемый технический сигнал. Его наличие не гарантирует ранжирование, индексацию, цитирование или включение сайта в ответы ИИ.
Как устроен WebMCP
WebMCP позволяет странице объявлять структурированные инструменты для браузерного агента двумя способами. Declarative API использует атрибуты обычной HTML-формы (`toolname`, `tooldescription`, `toolparamdescription`), а imperative API регистрирует JavaScript-инструмент через `document.modelContext.registerTool()`.
Это отличается от отдельного MCP-сервера или REST API: инструмент живёт в контексте открытой страницы и выполняет клиентскую логику через браузер-посредник. Поэтому сам факт наличия WebMCP не делает сайт «лучше индексируемым» и не заменяет публичный HTTP-интерфейс.
Что проверяет AI Web Check
AI Web Check статически ищет декларативные WebMCP-атрибуты на формах и imperative-регистрацию `document.modelContext.registerTool()` в доступном inline-script. Внешний JavaScript сервис не выполняет, поэтому отсутствие статически видимой регистрации не доказывает отсутствие WebMCP после полноценного выполнения страницы в браузере.
WebMCP не влияет на основной AI Readiness: интерфейс быстро развивается и остаётся зависит от конкретного протокола и браузера. Такой сигнал полезнее показывать отдельно, чем штрафовать обычный сайт за отсутствие экспериментального API.
Минимальная регистрация
Название и описание должны отражать реальное действие, а схема — ограничивать допустимый ввод. Инструмент не должен получать больше полномочий, чем требуется для конкретной операции.
await document.modelContext.registerTool({
name: 'search_catalog',
description: 'Search the public catalog by query',
inputSchema: {
type: 'object',
properties: { query: { type: 'string' } },
required: ['query']
},
execute: async ({ query }) => searchCatalog(query)
});Риски и типичные ошибки
- Инструмент с размытым названием выполняет слишком широкое или необратимое действие.
- В execute смешаны чтение данных, изменение состояния и платёжная операция без дополнительного подтверждения.
- Разработчик считает обычный API, описанный через OpenAPI уже «WebMCP», хотя регистрация WebMCP на странице отсутствует.
- В документацию копируется устаревший `navigator.modelContext` вместо текущего `document.modelContext`.
Когда имеет смысл внедрять
WebMCP особенно интересен там, где агенту нужно управлять уже открытым интерфейсом: фильтровать каталог, заполнять форму, менять состояние визуального приложения. Для серверных интеграций и системных операций чаще нужен отдельно защищённый API или MCP- или A2A-интерфейс.
Экспериментировать лучше с обратимыми действиями с низким риском и явными схемами входных данных. Транзакционные действия следует проектировать отдельно, с аутентификацией, авторизацией и пользовательским подтверждением.