Императивный API

Александра Клеппер
Alexandra Klepper

Опубликовано: 18 мая 2026 г.

Пояснительная записка Веб Расширения Статус Chrome Намерение
GitHub Пробная версия для разработчиков Пробная версия для разработчиков Пробная версия для разработчиков Пробная версия для разработчиков Вид Намерение провести эксперимент

С помощью API WebMCP Imperative можно определять множество типов инструментов на основе стандартного JavaScript. Ваши инструменты могут выполнять различные функции, такие как ввод данных в формы, навигация по сайту и управление состоянием.

Перед использованием этого API ознакомьтесь с примерами его применения .

Предоставьте контекст модели

Для регистрации инструментов используйте интерфейс modelContext . Для регистрации инструмента необходимо указать имя, описание и входную схему с соответствующими свойствами.

Используйте registertool для добавления отдельного инструмента в контекст модели.

WebMCPza Maker

navigator.modelContext.registerTool({
  name: 'toggle_layer',
  description: 'Control pizza layers (sauce, cheese). Use "add", "remove", or "toggle".',
  inputSchema: {
    type: 'object',
    properties: {
      layer: { type: 'string', enum: ['sauce-layer', 'cheese-layer'] },
      action: { type: 'string', enum: ['add', 'remove', 'toggle'] },
    },
    required: ['layer'],
  },
  execute: ({ layer, action }) => {
    toggleLayer(layer, action);
    return `Performed ${action || 'toggle'} on layer: ${layer}`;
  },
});

Получить статус заказа

navigator.modelContext.registerTool({
  name: 'get_order_status',
  description: 'Search orders in a given timeframe. Returns order number, shipping status and location',
  inputSchema: {
    "type": "object",
    "properties": {
      "timeframe": { "type": "string", "oneOf": [
        { "type": "string", "const": "today", "title": "Today" },
        { "type": "string", "const": "yesterday", "title": "Yesterday" },
        { "type": "string", "const": "last_7_days", "title": "Last 7 Days" },
        { "type": "string", "const": "last_30_days", "title": "Last 30 Days" },
        { "type": "string", "const": "last_6_months", "title": "Last 6 Months" }],
      "enum": [ "today", "yesterday", "last_7_days", "last_30_days", "last_6_months" ],
      "description": "Timeframe for the order lookup." }
    },
    "required": [ "timeframe" ]
  },
  execute: ({ timeframe }) => {
    // Add your API or database logic here to fetch and return the order data as a string.
  },
});

Удалить инструмент можно с помощью AbortSignal , если этот параметр является необязательным.

const addTodoTool = {
  name: "addTodo",
  description: "Add a new item to the todo list",
  inputSchema: {
    type: "object",
    properties: { text: { type: "string" } },
  },
  execute: ({ text }) => {
    // You should handle the persistence logic here (omitted for demo)
    return `Added todo: ${text}`;
  },
  annotations: {
    readOnlyHint: false,
    untrustedContentHint: true
  },
};
const controller = new AbortController();
navigator.modelContext.registerTool(addTodoTool, { signal: controller.signal });

// Unregister the tool later...
controller.abort();

Принимайте участие и делитесь отзывами.

WebMCP находится в стадии активного обсуждения и может быть изменен в будущем. Если вы попробуете этот API и у вас появятся отзывы, мы будем рады их услышать.