Skip to main content
Glama

Playwright MCP

Сервер протокола контекста модели (MCP), предоставляющий возможности автоматизации браузера с помощью Playwright. Этот сервер позволяет LLM взаимодействовать с веб-страницами через структурированные снимки доступности, обходя необходимость в скриншотах или моделях, настроенных на визуальное восприятие.

Playwright MCP vs Playwright CLI

Этот пакет предоставляет интерфейс MCP для Playwright. Если вы используете агент кода, вам может быть полезнее использовать CLI+SKILLS.

  • CLI: Современные агенты кода все чаще отдают предпочтение рабочим процессам на основе CLI, представленным как SKILLs, а не MCP, потому что вызовы CLI более эффективны с точки зрения токенов: они избегают загрузки больших схем инструментов и подробных деревьев доступности в контекст модели, позволяя агентам действовать через краткие, целенаправленные команды. Это делает CLI + SKILLs более подходящими для высокопроизводительных агентов кода, которые должны балансировать автоматизацию браузера с большими кодовыми базами, тестами и рассуждениями в ограниченных контекстных окнах.Узнайте больше о Playwright CLI с SKILLS.

  • MCP: MCP остается актуальным для специализированных агентских циклов, которые выигрывают от постоянного состояния, богатой интроспекции и итеративного рассуждения над структурой страницы, таких как исследовательская автоматизация, самовосстанавливающиеся тесты или длительные автономные рабочие процессы, где поддержание непрерывного контекста браузера перевешивает опасения по поводу стоимости токенов.

Ключевые особенности

  • Быстрый и легковесный. Использует дерево доступности Playwright, а не ввод на основе пикселей.

  • Дружественный к LLM. Не требуются модели зрения, работает исключительно на структурированных данных.

  • Детерминированное применение инструментов. Избегает неоднозначности, распространенной в подходах, основанных на скриншотах.

Требования

  • Node.js 18 или новее

  • VS Code, Cursor, Windsurf, Claude Desktop, Goose, Grok, Junie или любой другой MCP-клиент

Начало работы

Сначала установите сервер Playwright MCP в вашем клиенте.

Стандартная конфигурация работает в большинстве инструментов:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

Добавьте через экран настроек расширения Amp VS Code или обновив файл settings.json:

"amp.mcpServers": {
  "playwright": {
    "command": "npx",
    "args": [
      "@playwright/mcp@latest"
    ]
  }
}

Настройка Amp CLI:

Добавьте с помощью команды amp mcp add ниже

amp mcp add playwright -- npx @playwright/mcp@latest

Добавьте через настройки Antigravity или обновив файл конфигурации:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

Используйте CLI Claude Code, чтобы добавить сервер Playwright MCP:

claude mcp add playwright npx @playwright/mcp@latest

Следуйте руководству по установке MCP, используйте стандартную конфигурацию выше.

Следуйте инструкциям в разделе Configuring MCP Servers

Пример: Локальная настройка

Добавьте следующее в ваш файл cline_mcp_settings.json:

{
  "mcpServers": {
    "playwright": {
      "type": "stdio",
      "command": "npx",
      "timeout": 30,
      "args": [
        "-y",
        "@playwright/mcp@latest"
      ],
      "disabled": false
    }
  }
}

Используйте CLI Codex, чтобы добавить сервер Playwright MCP:

codex mcp add playwright npx "@playwright/mcp@latest"

Или создайте или отредактируйте файл конфигурации ~/.codex/config.toml и добавьте:

[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]

Для получения дополнительной информации см. документацию Codex MCP.

Используйте CLI Copilot для интерактивного добавления сервера Playwright MCP:

/mcp add

Или создайте или отредактируйте файл конфигурации ~/.copilot/mcp-config.json и добавьте:

{
  "mcpServers": {
    "playwright": {
      "type": "local",
      "command": "npx",
      "tools": [
        "*"
      ],
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

Для получения дополнительной информации см. документацию Copilot CLI.

Нажмите кнопку для установки:

Или установите вручную:

Перейдите в Cursor Settings -> MCP -> Add new MCP Server. Дайте любое имя, используйте тип command с командой npx @playwright/mcp@latest. Вы также можете проверить конфигурацию или добавить аргументы команды, нажав Edit.

Используйте CLI Factory, чтобы добавить сервер Playwright MCP:

droid mcp add playwright "npx @playwright/mcp@latest"

Или введите /mcp в Factory droid, чтобы открыть интерактивный интерфейс для управления MCP-серверами.

Для получения дополнительной информации см. документацию Factory MCP.

Следуйте руководству по установке MCP, используйте стандартную конфигурацию выше.

Нажмите кнопку для установки:

Установить в Goose

Или установите вручную:

Перейдите в Advanced settings -> Extensions -> Add custom extension. Дайте любое имя, используйте тип STDIO и установите command в npx @playwright/mcp. Нажмите "Add Extension".

Используйте CLI Grok, чтобы добавить сервер Playwright MCP:

grok mcp add playwright -- npx @playwright/mcp@latest

Или создайте или отредактируйте файл конфигурации ~/.grok/config.toml и добавьте:

[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]

Для получения дополнительной информации см. документацию Grok MCP.

Чтобы добавить сервер Playwright MCP в Junie CLI:

  1. Введите /mcp

  2. Нажмите Ctrl+A, чтобы добавить новый MCP-сервер

  3. Выберите Playwright из списка

Или добавьте в .junie/mcp/mcp.json:

{
  "mcpServers": {
    "Playwright": {
      "command": "npx",
      "args": [
        "-y",
        "@playwright/mcp@latest"
      ]
    }
  }
}

Для получения дополнительной информации см. документацию по конфигурации Junie MCP.

Добавить в Kiro

Следуйте документации по MCP-серверам. Например, в .kiro/settings/mcp.json:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

Нажмите кнопку для установки:

Добавить MCP-сервер playwright в LM Studio

Или установите вручную:

Перейдите в Program на правой боковой панели -> Install -> Edit mcp.json. Используйте стандартную конфигурацию выше.

Следуйте документации по MCP-серверам. Например, в ~/.config/opencode/opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "playwright": {
      "type": "local",
      "command": [
        "npx",
        "@playwright/mcp@latest"
      ],
      "enabled": true
    }
  }
}

Откройте панель чата Qodo Gen в VSCode или IntelliJ → Connect more tools → + Add new MCP → Вставьте стандартную конфигурацию выше.

Нажмите Save.

Нажмите кнопку для установки:

Или установите вручную:

Следуйте руководству по установке MCP, используйте стандартную конфигурацию выше. Вы также можете установить сервер Playwright MCP с помощью CLI VS Code:

# For VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'

После установки сервер Playwright MCP будет доступен для использования с агентом GitHub Copilot в VS Code.

Перейдите в Settings -> AI -> Manage MCP Servers -> + Add, чтобы добавить MCP-сервер. Используйте стандартную конфигурацию выше.

Или используйте слеш-команду /add-mcp в приглашении Warp и вставьте стандартную конфигурацию сверху:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

Следуйте документации Windsurf MCP. Используйте стандартную конфигурацию выше.

Конфигурация

Сервер Playwright MCP поддерживает следующие аргументы. Они могут быть указаны в JSON-конфигурации выше, как часть списка "args":

Опция

Описание

--allowed-hosts <hosts...>

список хостов, разделенных запятыми, с которых этому серверу разрешено обслуживать. По умолчанию используется хост, к которому привязан сервер. Передайте '*' для отключения проверки хоста.env PLAYWRIGHT_MCP_ALLOWED_HOSTS

--allowed-origins

список ДОВЕРЕННЫХ источников, разделенных точкой с запятой, для разрешения запросов браузера. По умолчанию разрешены все. Важно: не является границей безопасности и не влияет на перенаправления.env PLAYWRIGHT_MCP_ALLOWED_ORIGINS

--allow-unrestricted-file-access

разрешить доступ к файлам за пределами корневых каталогов рабочей области. Также разрешает неограниченный доступ к URL-адресам file://. По умолчанию доступ к файловой системе ограничен только корневыми каталогами рабочей области (или текущим рабочим каталогом, если корни не настроены), а переход по URL-адресам file:// заблокирован.env PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS

--blocked-origins

список источников, разделенных точкой с запятой, которые браузеру запрещено запрашивать. Черный список проверяется перед белым списком. Если используется без белого списка, запросы, не соответствующие черному списку, все равно разрешены. Важно: не является границей безопасности и не влияет на перенаправления.env PLAYWRIGHT_MCP_BLOCKED_ORIGINS

--block-service-workers

блокировать сервис-воркеровenv PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS

--browser

браузер или канал Chrome для использования, возможные значения: chrome, firefox, webkit, msedge.env PLAYWRIGHT_MCP_BROWSER

--caps

список дополнительных возможностей, разделенных запятыми, для включения, возможные значения: vision, pdf, devtools.env PLAYWRIGHT_MCP_CAPS

--cdp-endpoint

конечная точка CDP для подключения.env PLAYWRIGHT_MCP_CDP_ENDPOINT

--cdp-header <headers...>

заголовки CDP для отправки с запросом на подключение, можно указать несколько.env PLAYWRIGHT_MCP_CDP_HEADERS

--cdp-timeout

таймаут в миллисекундах для подключения к конечной точке CDP, по умолчанию 30000msenv PLAYWRIGHT_MCP_CDP_TIMEOUT

--codegen

укажите язык для генерации кода, возможные значения: "typescript", "python", "java", "csharp", "none". По умолчанию "typescript".env PLAYWRIGHT_MCP_CODEGEN

--config

путь к файлу конфигурации.env PLAYWRIGHT_MCP_CONFIG

--console-level

уровень возвращаемых сообщений консоли: "error", "warning", "info", "debug". Каждый уровень включает сообщения более серьезных уровней.env PLAYWRIGHT_MCP_CONSOLE_LEVEL

--device

устройство для эмуляции, например: "iPhone 15"env PLAYWRIGHT_MCP_DEVICE

--mobile

эмулировать общее мобильное устройство (Pixel 10 для Chromium, iPhone 17 для WebKit). Мобильные страницы обычно легче, что экономит токены. Нельзя комбинировать с --device.env PLAYWRIGHT_MCP_MOBILE

--executable-path

путь к исполняемому файлу браузера.env PLAYWRIGHT_MCP_EXECUTABLE_PATH

--extension

Подключиться к запущенному экземпляру браузера (только Edge/Chrome). Требуется установка "Playwright Extension".env PLAYWRIGHT_MCP_EXTENSION

--endpoint

Привязанная конечная точка браузера для подключения.env PLAYWRIGHT_MCP_ENDPOINT

--grant-permissions <permissions...>

Список разрешений для предоставления контексту браузера, например "geolocation", "clipboard-read", "clipboard-write".env PLAYWRIGHT_MCP_GRANT_PERMISSIONS

--headless

запустить браузер в безголовом режиме, по умолчанию с графическим интерфейсомenv PLAYWRIGHT_MCP_HEADLESS

--host

хост для привязки сервера. По умолчанию localhost. Используйте 0.0.0.0 для привязки ко всем интерфейсам.env PLAYWRIGHT_MCP_HOST

--ignore-https-errors

игнорировать ошибки HTTPSenv PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS

--init-page <path...>

путь к файлу TypeScript для выполнения на объекте страницы Playwrightenv PLAYWRIGHT_MCP_INIT_PAGE

--init-script <path...>

путь к файлу JavaScript для добавления в качестве скрипта инициализации. Скрипт будет выполняться на каждой странице перед любыми скриптами страницы. Можно указать несколько раз.env PLAYWRIGHT_MCP_INIT_SCRIPT

--isolated

хранить профиль браузера в памяти, не сохранять на диск.env PLAYWRIGHT_MCP_ISOLATED

--image-responses

отправлять ли ответы с изображениями клиенту. Может быть "allow" или "omit", по умолчанию "allow".env PLAYWRIGHT_MCP_IMAGE_RESPONSES

--no-sandbox

отключить песочницу для всех типов процессов, которые обычно находятся в песочнице.env PLAYWRIGHT_MCP_NO_SANDBOX

--output-dir

путь к каталогу для выходных файлов.env PLAYWRIGHT_MCP_OUTPUT_DIR

--output-max-size

Порог для вытеснения старых выходных файлов, в байтах.env PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE

--port

порт для прослушивания транспорта SSE.env PLAYWRIGHT_MCP_PORT

--proxy-bypass

домены, разделенные запятыми, для обхода прокси, например ".com,chromium.org,.domain.com"env PLAYWRIGHT_MCP_PROXY_BYPASS

--proxy-server

укажите прокси-сервер, например "http://myproxy:3128" или "socks5://myproxy:8080"env PLAYWRIGHT_MCP_PROXY_SERVER

--sandbox

включить песочницу для всех типов процессов, которые обычно не находятся в песочнице.env PLAYWRIGHT_MCP_SANDBOX

--save-session

Сохранять ли сессию Playwright MCP в выходной каталог.env PLAYWRIGHT_MCP_SAVE_SESSION

--secrets

путь к файлу, содержащему секреты в формате dotenvenv PLAYWRIGHT_MCP_SECRETS_FILE

--shared-browser-context

повторно использовать один и тот же контекст браузера между всеми подключенными HTTP-клиентами.env PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT

--snapshot-boxes

включать ограничивающую рамку каждого элемента как [box=x,y,width,height] в снимках. Координаты относительно области просмотра, в CSS-пикселях.env PLAYWRIGHT_MCP_SNAPSHOT_BOXES

--snapshot-mode

при создании снимков для ответов указывает режим использования. Может быть "full" или "none". По умолчанию "full".env PLAYWRIGHT_MCP_SNAPSHOT_MODE

--storage-state

путь к файлу состояния хранилища для изолированных сессий.env PLAYWRIGHT_MCP_STORAGE_STATE

--test-id-attribute

укажите атрибут для идентификаторов тестов, по умолчанию "data-testid"env PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE

--timeout-action

укажите таймаут действия в миллисекундах, по умолчанию 5000msenv PLAYWRIGHT_MCP_TIMEOUT_ACTION

--timeout-navigation

укажите таймаут навигации в миллисекундах, по умолчанию 60000msenv PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION

--timeout-settle

сколько ждать после каждого действия для завершения запущенной работы, в миллисекундах, по умолчанию 500msenv PLAYWRIGHT_MCP_TIMEOUT_SETTLE

--user-agent

укажите строку user agentenv PLAYWRIGHT_MCP_USER_AGENT

--user-data-dir

путь к каталогу пользовательских данных. Если не указан, будет создан временный каталог.env PLAYWRIGHT_MCP_USER_DATA_DIR

--viewport-size

укажите размер области просмотра браузера в пикселях, например "1280x720"env PLAYWRIGHT_MCP_VIEWPORT_SIZE

Профиль пользователя

Вы можете запускать Playwright MCP с постоянным профилем, как обычный браузер (по умолчанию), в изолированных контекстах для тестовых сессий или подключаться к существующему браузеру через расширение.

Постоянный профиль

Вся информация о входе в систему будет сохранена в постоянном профиле; вы можете удалить его между сессиями, если хотите очистить офлайн-состояние. Постоянный профиль находится в следующих расположениях, и вы можете переопределить его с помощью аргумента --user-data-dir.

# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-{workspace-hash}

# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-{workspace-hash}

# Linux
- ~/.cache/ms-playwright/mcp-{channel}-{workspace-hash}

{workspace-hash} вычисляется из корня рабочей области MCP-клиента, поэтому разные проекты автоматически получают отдельные профили.

[!IMPORTANT] Постоянный профиль может использоваться только одним экземпляром браузера одновременно, поэтому одновременные MCP-клиенты, использующие одну рабочую область, будут конфликтовать. Чтобы запустить несколько клиентов параллельно, запустите каждый дополнительный клиент с флагом --isolated или укажите ему отдельный --user-data-dir.

Изолированный

В изолированном режиме каждая сессия запускается в изолированном профиле. Каждый раз, когда вы просите MCP закрыть браузер, сессия закрывается, и все данные хранилища для этой сессии теряются. Вы можете предоставить начальное состояние хранилища браузеру через contextOptions в конфигурации или через аргумент --storage-state. Узнайте больше о состоянии хранилища здесь.

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest",
        "--isolated",
        "--storage-state={path/to/storage.json}"
      ]
    }
  }
}

Расширение браузера

Расширение Playwright MCP для Chrome позволяет подключаться к существующим вкладкам браузера и использовать ваши авторизованные сессии и состояние браузера. См. microsoft/playwright › packages/extension для инструкций по установке и настройке.

Начальное состояние

Существует несколько способов предоставить начальное состояние контексту браузера или странице.

Для состояния хранилища вы можете:

  • Начать с каталога пользовательских данных, используя аргумент --user-data-dir. Это сохранит все данные браузера между сессиями.

  • Начать с файла состояния хранилища, используя аргумент --storage-state. Это загрузит cookies и локальное хранилище из файла в изолированный контекст браузера.

Для состояния страницы вы можете использовать:

  • --init-page для указания TypeScript-файла, который будет выполнен на объекте страницы Playwright. Это позволяет запускать произвольный код для настройки страницы.

// init-page.ts
export default async ({ page }) => {
  await page.context().grantPermissions(['geolocation']);
  await page.context().setGeolocation({ latitude: 37.7749, longitude: -122.4194 });
  await page.setViewportSize({ width: 1280, height: 720 });
};
  • --init-script для указания JavaScript-файла, который будет добавлен как скрипт инициализации. Скрипт будет выполняться на каждой странице перед любыми скриптами этой страницы. Это полезно для переопределения API браузера или настройки окружения.

// init-script.js
window.isPlaywrightMCP = true;

Файл конфигурации

Сервер Playwright MCP можно настроить с помощью JSON-файла конфигурации. Вы можете указать файл конфигурации, используя опцию командной строки --config:

npx @playwright/mcp@latest --config path/to/config.json
{
  /**
   * The browser to use.
   */
  browser?: {
    /**
     * The type of browser to use.
     */
    browserName?: 'chromium' | 'firefox' | 'webkit';

    /**
     * Keep the browser profile in memory, do not save it to disk.
     */
    isolated?: boolean;

    /**
     * Path to a user data directory for browser profile persistence.
     * Temporary directory is created by default.
     */
    userDataDir?: string;

    /**
     * Launch options passed to
     * @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context
     *
     * This is useful for settings options like `channel`, `headless`, `executablePath`, etc.
     */
    launchOptions?: playwright.LaunchOptions;

    /**
     * Context options for the browser context.
     *
     * This is useful for settings options like `viewport`.
     */
    contextOptions?: playwright.BrowserContextOptions;

    /**
     * Chrome DevTools Protocol endpoint to connect to an existing browser instance in case of Chromium family browsers.
     */
    cdpEndpoint?: string;

    /**
     * CDP headers to send with the connect request.
     */
    cdpHeaders?: Record<string, string>;

    /**
     * Timeout in milliseconds for connecting to CDP endpoint. Defaults to 30000 (30 seconds). Pass 0 to disable timeout.
     */
    cdpTimeout?: number;

    /**
     * Remote endpoint to connect to an existing Playwright server. May be a
     * WebSocket URL string, or a [ConnectOptions] object that mirrors the
     * `connectOptions` shape used by the test runner. When passed as an object,
     * `exposeNetwork`, `headers`, `slowMo`, and `timeout` are forwarded to the
     * underlying connect call.
     */
    remoteEndpoint?: string | playwright.ConnectOptions & { endpoint: string };

    /**
     * Paths to TypeScript files to add as initialization scripts for Playwright page.
     */
    initPage?: string[];

    /**
     * Paths to JavaScript files to add as initialization scripts.
     * The scripts will be evaluated in every page before any of the page's scripts.
     */
    initScript?: string[];
  },

  /**
   * Connect to a running browser instance (Edge/Chrome only). If specified, `browser`
   * config is ignored.
   * Requires the "Playwright Extension" to be installed.
   */
  extension?: boolean;

  server?: {
    /**
     * The port to listen on for SSE or MCP transport.
     */
    port?: number;

    /**
     * The host to bind the server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.
     */
    host?: string;

    /**
     * The hosts this server is allowed to serve from. Defaults to the host server is bound to.
     * This is not for CORS, but rather for the DNS rebinding protection.
     */
    allowedHosts?: string[];
  },

  /**
   * List of enabled tool capabilities. Possible values:
   *   - 'core': Core browser automation features.
   *   - 'pdf': PDF generation and manipulation.
   *   - 'vision': Coordinate-based interactions.
   *   - 'devtools': Developer tools features.
   */
  capabilities?: ToolCapability[];

  /**
   * Whether to save the Playwright session into the output directory.
   */
  saveSession?: boolean;

  /**
   * Reuse the same browser context between all connected HTTP clients.
   */
  sharedBrowserContext?: boolean;

  /**
   * Secrets are used to replace matching plain text in the tool responses to prevent the LLM
   * from accidentally getting sensitive data. It is a convenience and not a security feature,
   * make sure to always examine information coming in and from the tool on the client.
   */
  secrets?: Record<string, string>;

  /**
   * The directory to save output files.
   */
  outputDir?: string;

  /**
   * Threshold for evicting old output files, in bytes.
   */
  outputMaxSize?: number;

  console?: {
    /**
     * The level of console messages to return. Each level includes the messages of more severe levels. Defaults to "info".
     */
    level?: 'error' | 'warning' | 'info' | 'debug';
  },

  network?: {
    /**
     * List of origins to allow the browser to request. Default is to allow all. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
     *
     * Supported formats:
     * - Full origin: `https://example.com:8080` - matches only that origin
     * - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
     */
    allowedOrigins?: string[];

    /**
     * List of origins to block the browser to request. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
     *
     * Supported formats:
     * - Full origin: `https://example.com:8080` - matches only that origin
     * - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
     */
    blockedOrigins?: string[];
  };

  /**
   * Specify the attribute to use for test ids, defaults to "data-testid".
   */
  testIdAttribute?: string;

  timeouts?: {
    /*
     * Configures default action timeout: https://playwright.dev/docs/api/class-page#page-set-default-timeout. Defaults to 5000ms.
     */
    action?: number;

    /*
     * Configures default navigation timeout: https://playwright.dev/docs/api/class-page#page-set-default-navigation-timeout. Defaults to 60000ms.
     */
    navigation?: number;

    /**
     * Configures default expect timeout: https://playwright.dev/docs/test-timeouts#expect-timeout. Defaults to 5000ms.
     */
    expect?: number;

    /**
     * How long to wait after each action for triggered work (navigations, requests) to settle before responding. Defaults to 500ms.
     */
    settle?: number;
  };

  /**
   * Whether to send image responses to the client. Can be "allow", "omit", or "auto". Defaults to "auto", which sends images if the client can display them.
   */
  imageResponses?: 'allow' | 'omit';

  snapshot?: {
    /**
     * When taking snapshots for responses, specifies the mode to use.
     */
    mode?: 'full' | 'none';

    /**
     * Whether to include each element's bounding box as [box=x,y,width,height] in snapshots.
     * Coordinates are viewport-relative, in CSS pixels (Element.getBoundingClientRect).
     */
    boxes?: boolean;
  };

  /**
   * allowUnrestrictedFileAccess acts as a guardrail to prevent the LLM from accidentally
   * wandering outside its intended workspace. It is a convenience defense to catch unintended
   * file access, not a secure boundary; a deliberate attempt to reach other directories can be
   * easily worked around, so always rely on client-level permissions for true security.
   */
  allowUnrestrictedFileAccess?: boolean;

  /**
   * Specify the language to use for code generation.
   */
  codegen?: 'typescript' | 'python' | 'java' | 'csharp' | 'none';
}

Автономный MCP-сервер

При запуске браузера с графическим интерфейсом в системе без дисплея или из рабочих процессов IDE запускайте MCP-сервер из окружения с переменной DISPLAY и передавайте флаг --port для включения HTTP-транспорта.

npx @playwright/mcp@latest --port 8931

Затем в конфигурации MCP-клиента укажите url на HTTP-эндпоинт:

{
  "mcpServers": {
    "playwright": {
      "url": "http://localhost:8931/mcp"
    }
  }
}

Related MCP server: Playwright MCP Server

Безопасность

Playwright MCP не является границей безопасности. См. Рекомендации по безопасности MCP для получения рекомендаций по защите вашего развертывания.

ПРИМЕЧАНИЕ: В настоящее время реализация Docker поддерживает только headless chromium.

{
  "mcpServers": {
    "playwright": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
    }
  }
}

Или, если вы предпочитаете запускать контейнер как долгоживущий сервис вместо того, чтобы позволить MCP-клиенту порождать его, используйте:

docker run -d -i --rm --init --pull=always \
  --entrypoint node \
  --name playwright \
  -p 8931:8931 \
  mcr.microsoft.com/playwright/mcp \
  /app/cli.js --headless --browser chromium --no-sandbox --port 8931 --host 0.0.0.0

Сервер будет слушать на порту хоста 8931 и будет доступен любому MCP-клиенту.

Вы можете собрать Docker-образ самостоятельно.

docker build -t mcr.microsoft.com/playwright/mcp .
import http from 'http';

import { createConnection } from '@playwright/mcp';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';

http.createServer(async (req, res) => {
  // ...

  // Creates a headless Playwright MCP server with SSE transport
  const connection = await createConnection({ browser: { launchOptions: { headless: true } } });
  const transport = new SSEServerTransport('/messages', res);
  await connection.connect(transport);

  // ...
});

Инструменты

  • browser_click

    • Название: Клик

    • Описание: Выполнить клик на веб-странице

    • Параметры:

      • element (string, опционально): Человекочитаемое описание элемента, используемое для получения разрешения на взаимодействие с элементом

      • target (string): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

      • doubleClick (boolean, опционально): Выполнять ли двойной клик вместо одинарного

      • button (string, опционально): Кнопка для клика, по умолчанию левая

      • modifiers (array, опционально): Клавиши-модификаторы для нажатия

    • Только чтение: false

  • browser_close

    • Название: Закрыть браузер

    • Описание: Закрыть страницу

    • Параметры: Нет

    • Только чтение: false

  • browser_console_messages

    • Название: Получить сообщения консоли

    • Описание: Возвращает все сообщения консоли

    • Параметры:

      • level (string): Уровень сообщений консоли для возврата. Каждый уровень включает сообщения более серьезных уровней. По умолчанию "info".

      • all (boolean, опционально): Возвращать все сообщения консоли с начала сессии, а не только с последней навигации. По умолчанию false.

      • filename (string, опционально): Имя файла для сохранения сообщений консоли. Если не указано, сообщения возвращаются в виде текста.

    • Только чтение: true

  • browser_drag

    • Название: Перетаскивание мышью

    • Описание: Выполнить перетаскивание между двумя элементами

    • Параметры:

      • startElement (string, опционально): Человекочитаемое описание исходного элемента, используемое для получения разрешения на взаимодействие с элементом

      • startTarget (string): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

      • endElement (string, опционально): Человекочитаемое описание целевого элемента, используемое для получения разрешения на взаимодействие с элементом

      • endTarget (string): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

    • Только чтение: false

  • browser_drop

    • Название: Сбросить файлы или данные на элемент

    • Описание: Сбросить файлы или данные с MIME-типом на элемент, как если бы они были перетащены извне страницы. Должен быть указан хотя бы один из параметров "paths" или "data".

    • Параметры:

      • element (string, опционально): Человекочитаемое описание элемента, используемое для получения разрешения на взаимодействие с элементом

      • target (string): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

      • paths (array, опционально): Абсолютные пути к файлам для сброса на элемент.

      • data (object, опционально): Данные для сброса в виде карты MIME-типа к строковому значению (например, {"text/plain": "hello", "text/uri-list": "https://example.com"}).

    • Только чтение: false

  • browser_evaluate

    • Название: Выполнить JavaScript

    • Описание: Выполнить JavaScript-выражение на странице или элементе

    • Параметры:

      • element (string, опционально): Человекочитаемое описание элемента, используемое для получения разрешения на взаимодействие с элементом

      • target (string, опционально): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

      • function (string): () => { /* код / } или (element) => { / код */ } если указан элемент

      • filename (string, опционально): Имя файла для сохранения результата. Если не указано, результат возвращается в виде текста.

    • Только чтение: false

  • browser_file_upload

    • Название: Загрузить файлы

    • Описание: Загрузить один или несколько файлов

    • Параметры:

      • paths (array, опционально): Абсолютные пути к файлам для загрузки. Может быть один файл или несколько. Если опущено, выбор файла отменяется.

    • Только чтение: false

  • browser_fill_form

    • Название: Заполнить форму

    • Описание: Заполнить несколько полей формы

    • Параметры:

      • fields (array): Поля для заполнения

    • Только чтение: false

  • browser_find

    • Название: Найти в снимке страницы

    • Описание: Поиск в снимке доступности текущей страницы по тексту или регулярному выражению. Возвращает соответствующие узлы снимка с несколькими строками окружающего контекста (как фрагменты поиска), каждый показан под своим путем от корня дерева, что дешевле, чем захват всего снимка, когда нужно только найти элемент и его ссылку.

    • Параметры:

      • text (string, опционально): Простой текст для поиска в снимке страницы (поиск подстроки без учета регистра). Укажите либо text, либо regex, но не оба.

      • regex (string, опционально): Регулярное выражение для поиска в снимке страницы. По умолчанию поиск чувствителен к регистру; оберните шаблон в косые черты, чтобы добавить флаги, например "/error/i" для регистронезависимого поиска. Укажите либо text, либо regex, но не оба.

    • Только чтение: true

  • browser_handle_dialog

    • Название: Обработать диалог

    • Описание: Обработать диалог

    • Параметры:

      • accept (boolean): Принять диалог или нет.

      • promptText (string, опционально): Текст подсказки в случае диалога с вводом.

    • Только чтение: false

  • browser_hover

    • Название: Навести мышь

    • Описание: Навести курсор на элемент на странице

    • Параметры:

      • element (string, опционально): Человекочитаемое описание элемента, используемое для получения разрешения на взаимодействие с элементом

      • target (string): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

    • Только чтение: false

  • browser_navigate

    • Название: Перейти по URL

    • Описание: Перейти по URL

    • Параметры:

      • url (string): URL для перехода

    • Только чтение: false

  • browser_navigate_back

    • Название: Назад

    • Описание: Вернуться на предыдущую страницу в истории

    • Параметры: Нет

    • Только чтение: false

  • browser_network_request

    • Название: Показать детали сетевого запроса

    • Описание: Возвращает полные детали (заголовки и тело) одного сетевого запроса или одну часть, если указан part. Используйте номер из browser_network_requests.

    • Параметры:

      • index (integer): 1-индексированный номер запроса, как выведено browser_network_requests.

      • part (string, опционально): Вернуть только эту часть запроса. Опустите для возврата полных деталей.

      • filename (string, опционально): Имя файла для сохранения результата. Если не указано, вывод возвращается в виде текста.

    • Только чтение: true

  • browser_network_requests

    • Название: Список сетевых запросов

    • Описание: Возвращает нумерованный список сетевых запросов с момента загрузки страницы. Используйте browser_network_request с номером для получения полных деталей.

    • Параметры:

      • static (boolean): Включать ли успешные статические ресурсы, такие как изображения, шрифты, скрипты и т.д. По умолчанию false.

      • filter (string, опционально): Возвращать только запросы, URL которых соответствует этому регулярному выражению (например, "/api/.*user").

      • filename (string, опционально): Имя файла для сохранения сетевых запросов. Если не указано, запросы возвращаются в виде текста.

    • Только чтение: true

  • browser_press_key

    • Title: Нажатие клавиши

    • Description: Нажать клавишу на клавиатуре

    • Parameters:

      • key (string): Имя клавиши для нажатия или символ для генерации, например ArrowLeft или a

    • Read-only: false

  • browser_resize

    • Title: Изменить размер окна браузера

    • Description: Изменить размер окна браузера

    • Parameters:

      • width (number): Ширина окна браузера

      • height (number): Высота окна браузера

    • Read-only: false

  • browser_run_code_unsafe

    • Title: Запустить код Playwright (небезопасно)

    • Description: Запустить фрагмент кода Playwright. Небезопасно: выполняет произвольный JavaScript в процессе сервера Playwright и эквивалентно удаленному выполнению кода (RCE).

    • Parameters:

      • code (string, optional): Функция JavaScript, содержащая код Playwright для выполнения. Она будет вызвана с одним аргументом, page, который вы можете использовать для любого взаимодействия со страницей. Например: async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }

      • filename (string, optional): Загрузить код из указанного файла. Если указаны и code, и filename, code будет проигнорирован.

    • Read-only: false

  • browser_select_option

    • Title: Выбрать опцию

    • Description: Выбрать опцию в выпадающем списке

    • Parameters:

      • element (string, optional): Описание элемента на человеческом языке, используемое для получения разрешения на взаимодействие с элементом

      • target (string): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

      • values (array): Массив значений для выбора в выпадающем списке. Может быть одним значением или несколькими.

    • Read-only: false

  • browser_snapshot

    • Title: Снимок страницы

    • Description: Захватить снимок доступности текущей страницы; это лучше, чем скриншот

    • Parameters:

      • target (string, optional): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

      • filename (string, optional): Сохранить снимок в файл Markdown вместо возврата в ответе.

      • depth (number, optional): Ограничить глубину дерева снимка

      • boxes (boolean, optional): Включать ограничивающую рамку каждого элемента в формате [box=x,y,width,height] в снимок. Координаты относительно области просмотра, в CSS-пикселях (Element.getBoundingClientRect)

    • Read-only: true

  • browser_take_screenshot

    • Title: Сделать скриншот

    • Description: Сделать скриншот текущей страницы. Вы не можете выполнять действия на основе скриншота; используйте browser_snapshot для действий.

    • Parameters:

      • element (string, optional): Описание элемента на человеческом языке, используемое для получения разрешения на взаимодействие с элементом

      • target (string, optional): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

      • type (string, optional): Формат изображения для скриншота. Если не указан, определяется по расширению имени файла, иначе png.

      • filename (string, optional): Имя файла для сохранения скриншота. По умолчанию page-{timestamp}.{png|jpeg|webp}, если не указано. Предпочтительно использовать относительные имена файлов, чтобы оставаться в выходной директории.

      • fullPage (boolean, optional): Если true, делает скриншот всей прокручиваемой страницы, а не текущей видимой области. Нельзя использовать с элементом скриншотов.

      • scale (string): Масштаб разрешения изображения. "css" создает скриншот размером в CSS-пикселях (меньше, единообразно на разных устройствах). "device" создает скриншот высокого разрешения с использованием пикселей устройства (больше, учитывает коэффициент пикселей устройства). По умолчанию css.

    • Read-only: true

  • browser_type

    • Title: Ввести текст

    • Description: Ввести текст в редактируемый элемент

    • Parameters:

      • element (string, optional): Описание элемента на человеческом языке, используемое для получения разрешения на взаимодействие с элементом

      • target (string): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

      • text (string): Текст для ввода в элемент

      • submit (boolean, optional): Отправлять ли введенный текст (нажать Enter после)

      • slowly (boolean, optional): Вводить ли по одному символу за раз. Полезно для активации обработчиков клавиш на странице. По умолчанию весь текст вводится сразу.

    • Read-only: false

  • browser_wait_for

    • Title: Ожидание

    • Description: Ожидать появления или исчезновения текста или истечения указанного времени

    • Parameters:

      • time (number, optional): Время ожидания в секундах

      • text (string, optional): Текст, который нужно ожидать

      • textGone (string, optional): Текст, который нужно ожидать для исчезновения

    • Read-only: false

  • browser_tabs

    • Title: Управление вкладками

    • Description: Список, создание, закрытие или выбор вкладки браузера.

    • Parameters:

      • action (string): Операция для выполнения

      • index (number, optional): Индекс вкладки, используется для закрытия/выбора. Если опущен для закрытия, закрывается текущая вкладка.

      • url (string, optional): URL для перехода на новую вкладку, используется для новой.

    • Read-only: false

  • browser_get_config

    • Title: Получить конфигурацию

    • Description: Получить окончательную разрешенную конфигурацию после объединения параметров CLI, переменных окружения и файла конфигурации.

    • Parameters: None

    • Read-only: true

  • browser_network_state_set

    • Title: Установить состояние сети

    • Description: Устанавливает состояние сети браузера в онлайн или офлайн. В режиме офлайн все сетевые запросы будут неудачными.

    • Parameters:

      • state (string): Установите "offline" для имитации режима офлайн, "online" для восстановления сетевого подключения

    • Read-only: false

  • browser_route

    • Title: Имитировать сетевые запросы

    • Description: Настроить маршрут для имитации сетевых запросов, соответствующих шаблону URL

    • Parameters:

      • pattern (string): Шаблон URL для сопоставления (например, "/api/users", "/*.{png,jpg}")

      • status (number, optional): HTTP-статус код для возврата (по умолчанию: 200)

      • body (string, optional): Тело ответа (текст или строка JSON)

      • contentType (string, optional): Заголовок Content-Type (например, "application/json", "text/html")

      • headers (array, optional): Заголовки для добавления в формате "Name: Value"

      • removeHeaders (string, optional): Разделенный запятыми список имен заголовков для удаления из запроса

    • Read-only: false

  • browser_route_list

    • Title: Список сетевых маршрутов

    • Description: Перечислить все активные сетевые маршруты

    • Parameters: None

    • Read-only: true

  • browser_unroute

    • Title: Удалить сетевые маршруты

    • Description: Удалить сетевые маршруты, соответствующие шаблону (или все маршруты, если шаблон не указан)

    • Parameters:

      • pattern (string, optional): Шаблон URL для удаления маршрута (опустите, чтобы удалить все маршруты)

    • Read-only: false

  • browser_cookie_clear

    • Title: Очистить куки

    • Description: Очистить все куки

    • Parameters: None

    • Read-only: false

  • browser_cookie_delete

    • Title: Удалить куку

    • Description: Удалить конкретную куку

    • Parameters:

      • name (string): Имя куки для удаления

    • Read-only: false

  • browser_cookie_get

    • Title: Получить куку

    • Description: Получить конкретную куку по имени

    • Parameters:

      • name (string): Имя куки для получения

    • Read-only: true

  • browser_cookie_list

    • Title: Список кук

    • Description: Перечислить все куки (опционально отфильтрованные по домену/пути)

    • Parameters:

      • domain (string, optional): Фильтровать куки по домену

      • path (string, optional): Фильтровать куки по пути

    • Read-only: true

  • browser_cookie_set

    • Title: Установить куку

    • Description: Установить куку с опциональными флагами (domain, path, expires, httpOnly, secure, sameSite)

    • Parameters:

      • name (string): Имя куки

      • value (string): Значение куки

      • domain (string, optional): Домен куки

      • path (string, optional): Путь куки

      • expires (number, optional): Срок действия куки как метка времени Unix

      • httpOnly (boolean, optional): Является ли кука HTTP-only

      • secure (boolean, optional): Является ли кука безопасной (secure)

      • sameSite (string, optional): Атрибут SameSite куки

    • Read-only: false

  • browser_localstorage_clear

    • Title: Очистить localStorage

    • Description: Очистить весь localStorage

    • Parameters: None

    • Read-only: false

  • browser_localstorage_delete

    • Title: Удалить элемент localStorage

    • Description: Удалить элемент localStorage

    • Parameters:

      • key (string): Ключ для удаления

    • Read-only: false

  • browser_localstorage_get

    • Title: Получить элемент localStorage

    • Description: Получить элемент localStorage по ключу

    • Parameters:

      • key (string): Ключ для получения

    • Read-only: true

  • browser_localstorage_list

    • Title: Список localStorage

    • Description: Перечислить все пары ключ-значение localStorage

    • Parameters: None

    • Read-only: true

  • browser_localstorage_set

    • Title: Установить элемент localStorage

    • Description: Установить элемент localStorage

    • Parameters:

      • key (string): Ключ для установки

      • value (string): Значение для установки

    • Read-only: false

  • browser_sessionstorage_clear

    • Title: Очистить sessionStorage

    • Description: Очистить весь sessionStorage

    • Parameters: None

    • Read-only: false

  • browser_sessionstorage_delete

    • Title: Удалить элемент sessionStorage

    • Description: Удалить элемент sessionStorage

    • Parameters:

      • key (string): Ключ для удаления

    • Read-only: false

  • browser_sessionstorage_get

    • Title: Получить элемент sessionStorage

    • Description: Получить элемент sessionStorage по ключу

    • Parameters:

      • key (string): Ключ для получения

    • Read-only: true

  • browser_sessionstorage_list

    • Title: Список sessionStorage

    • Description: Перечислить все пары ключ-значение sessionStorage

    • Parameters: None

    • Read-only: true

  • browser_sessionstorage_set

    • Название: Установить элемент sessionStorage

    • Описание: Установить элемент sessionStorage

    • Параметры:

      • key (строка): Ключ для установки

      • value (строка): Значение для установки

    • Только для чтения: false

  • browser_set_storage_state

    • Название: Восстановить состояние хранилища

    • Описание: Восстановить состояние хранилища (cookies, локальное хранилище) из файла. Это очищает существующие cookies и локальное хранилище перед восстановлением.

    • Параметры:

      • filename (строка): Путь к файлу состояния хранилища для восстановления

    • Только для чтения: false

  • browser_storage_state

    • Название: Сохранить состояние хранилища

    • Описание: Сохранить состояние хранилища (cookies, локальное хранилище) в файл для последующего использования

    • Параметры:

      • filename (строка, необязательно): Имя файла для сохранения состояния хранилища. По умолчанию storage-state-{timestamp}.json, если не указано.

    • Только для чтения: true

  • browser_annotate

    • Название: Аннотировать текущую страницу

    • Описание: Открыть панель Playwright Dashboard в режиме аннотации для текущей страницы и дождаться, пока пользователь нарисует аннотации. Возвращает аннотированный скриншот, ARIA-снимок и список аннотаций.

    • Параметры: Нет

    • Только для чтения: true

  • browser_hide_highlight

    • Название: Скрыть подсветку элемента

    • Описание: Удалить наложенную подсветку, ранее добавленную для элемента.

    • Параметры:

      • element (строка, необязательно): Понятное человеку описание элемента, использованное при добавлении подсветки; должно совпадать со значением, переданным в browser_highlight.

      • target (строка, необязательно): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

    • Только для чтения: true

  • browser_highlight

    • Название: Подсветить элемент

    • Описание: Показать постоянную наложенную подсветку вокруг элемента на странице.

    • Параметры:

      • element (строка, необязательно): Понятное человеку описание элемента, использованное для получения разрешения на взаимодействие с элементом

      • target (строка): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

      • style (строка, необязательно): Дополнительный встроенный CSS, применяемый к наложенной подсветке, например "outline: 2px dashed red".

    • Только для чтения: true

  • browser_resume

    • Название: Возобновить выполнение приостановленного скрипта

    • Описание: Возобновить выполнение скрипта после его приостановки. При вызове с параметром step, установленным в true, выполнение снова приостановится перед следующим действием.

    • Параметры:

      • step (логический, необязательно): Если true, выполнение снова приостановится перед следующим действием, что позволяет пошаговую отладку.

      • location (строка, необязательно): Приостановить выполнение в конкретном <файл>:<строка>, например "example.spec.ts:42".

    • Только для чтения: false

  • browser_start_tracing

    • Название: Начать трассировку

    • Описание: Начать запись трассировки

    • Параметры: Нет

    • Только для чтения: true

  • browser_start_video

    • Название: Начать видео

    • Описание: Начать запись видео

    • Параметры:

      • filename (строка, необязательно): Имя файла для сохранения видео.

      • size (объект, необязательно): Размер видео

    • Только для чтения: true

  • browser_stop_tracing

    • Название: Остановить трассировку

    • Описание: Остановить запись трассировки

    • Параметры: Нет

    • Только для чтения: true

  • browser_stop_video

    • Название: Остановить видео

    • Описание: Остановить запись видео

    • Параметры: Нет

    • Только для чтения: true

  • browser_video_chapter

    • Название: Глава видео

    • Описание: Добавить маркер главы в запись видео. Показывает полноэкранную карточку главы с размытым фоном.

    • Параметры:

      • title (строка): Название главы

      • description (строка, необязательно): Описание главы

      • duration (число, необязательно): Продолжительность отображения карточки главы в миллисекундах

    • Только для чтения: true

  • browser_video_hide_actions

    • Название: Скрыть наложения действий

    • Описание: Прекратить аннотирование действий, выполняемых на странице.

    • Параметры: Нет

    • Только для чтения: true

  • browser_video_show_actions

    • Название: Показать наложения действий

    • Описание: Аннотировать последующие действия, выполняемые на странице, с помощью выноски, которая называет действие и подсвечивает целевой элемент. Полезно при записи видео или трансляции экрана.

    • Параметры:

      • duration (число, необязательно): Как долго каждая аннотация действия остается на экране, в миллисекундах. По умолчанию 500.

      • position (строка, необязательно): Где разместить название действия относительно страницы. По умолчанию вверху справа.

      • cursor (строка, необязательно): Оформление курсора для действий указателя. "pointer" (по умолчанию) анимирует указатель мыши от предыдущей точки действия к следующей; "none" отключает оформление курсора.

    • Только для чтения: true

  • browser_mouse_click_xy

    • Название: Щелчок

    • Описание: Щелкнуть кнопкой мыши в заданной позиции

    • Параметры:

      • x (число): Координата X

      • y (число): Координата Y

      • button (строка, необязательно): Кнопка для щелчка, по умолчанию левая

      • clickCount (число, необязательно): Количество щелчков, по умолчанию 1

      • delay (число, необязательно): Время ожидания между нажатием и отпусканием кнопки мыши в миллисекундах, по умолчанию 0

    • Только для чтения: false

  • browser_mouse_down

    • Название: Нажать кнопку мыши

    • Описание: Нажать кнопку мыши

    • Параметры:

      • button (строка, необязательно): Кнопка для нажатия, по умолчанию левая

    • Только для чтения: false

  • browser_mouse_drag_xy

    • Название: Перетащить мышью

    • Описание: Перетащить левой кнопкой мыши в заданную позицию

    • Параметры:

      • startX (число): Начальная координата X

      • startY (число): Начальная координата Y

      • endX (число): Конечная координата X

      • endY (число): Конечная координата Y

    • Только для чтения: false

  • browser_mouse_move_xy

    • Название: Переместить мышь

    • Описание: Переместить мышь в заданную позицию

    • Параметры:

      • x (число): Координата X

      • y (число): Координата Y

    • Только для чтения: false

  • browser_mouse_up

    • Название: Отпустить кнопку мыши

    • Описание: Отпустить кнопку мыши

    • Параметры:

      • button (строка, необязательно): Кнопка для отпускания, по умолчанию левая

    • Только для чтения: false

  • browser_mouse_wheel

    • Название: Прокрутить колесико мыши

    • Описание: Прокрутить колесико мыши

    • Параметры:

      • deltaX (число): Дельта X

      • deltaY (число): Дельта Y

    • Только для чтения: false

  • browser_pdf_save

    • Название: Сохранить как PDF

    • Описание: Сохранить страницу как PDF

    • Параметры:

      • filename (строка, необязательно): Имя файла для сохранения PDF. По умолчанию page-{timestamp}.pdf, если не указано. Предпочтительно использовать относительные имена файлов, чтобы оставаться в пределах выходного каталога.

    • Только для чтения: true

  • browser_generate_locator

    • Название: Создать локатор для элемента

    • Описание: Сгенерировать локатор для указанного элемента для использования в тестах

    • Параметры:

      • element (строка, необязательно): Понятное человеку описание элемента, использованное для получения разрешения на взаимодействие с элементом

      • target (строка): Точная ссылка на целевой элемент из снимка страницы или уникальный селектор элемента

    • Только для чтения: true

  • browser_verify_element_visible

    • Название: Проверить видимость элемента

    • Описание: Проверить, что элемент виден на странице

    • Параметры:

      • role (строка): РОЛЬ элемента. Можно найти в снимке следующим образом: - {ROLE} "Доступное имя":

      • accessibleName (строка): ДОСТУПНОЕ_ИМЯ элемента. Можно найти в снимке следующим образом: - role "{ДОСТУПНОЕ_ИМЯ}"

    • Только для чтения: false

  • browser_verify_list_visible

    • Название: Проверить видимость списка

    • Описание: Проверить, что список виден на странице

    • Параметры:

      • element (строка): Понятное человеку описание списка

      • target (строка): Точная ссылка на целевой элемент, указывающая на список

      • items (массив): Элементы для проверки

    • Только для чтения: false

  • browser_verify_text_visible

    • Название: Проверить видимость текста

    • Описание: Проверить, что текст виден на странице. По возможности используйте browser_verify_element_visible.

    • Параметры:

      • text (строка): ТЕКСТ для проверки. Можно найти в снимке следующим образом: - role "Доступное имя": {ТЕКСТ} или так: - text: {ТЕКСТ}

    • Только для чтения: false

  • browser_verify_value

    • Название: Проверить значение

    • Описание: Проверить значение элемента

    • Параметры:

      • type (строка): Тип элемента

      • element (строка): Понятное человеку описание элемента

      • target (строка): Точная ссылка на целевой элемент из снимка страницы

      • value (строка): Значение для проверки. Для флажка используйте "true" или "false".

    • Только для чтения: false

Available Tools

24 tools
browser_clickB
Destructive

Perform click on a web page

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonNoButton to click, defaults to left
targetYesExact target element reference from the page snapshot, or a unique element selector
elementNoHuman-readable element description used to obtain permission to interact with the element
modifiersNoModifier keys to press
doubleClickNoWhether to perform a double click instead of a single click

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description does not contradict the 'destructiveHint: true' annotation, which implies clicking may cause navigation or state changes. However, it does not elaborate on what makes a click destructive (e.g., navigating away, opening dialogs, submitting forms). With annotations already covering 'readOnlyHint: false', the description adds minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

At 5 words, the description is very concise. However, it could be front-loaded better with a brief usage hint (e.g., 'Click on the specified element to trigger navigation or interaction'). Every word is necessary but the sentence is underinformative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (5 parameters including a required target, optional modifiers, doubleClick, button, and element), and the absence of an output schema, the description should explain return behavior (e.g., whether navigation is waited for, if errors like missing element are returned). With 100% schema coverage and destructiveHint annotation, the description is too sparse for an agent to safely invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all 5 parameters (100% coverage) with detailed descriptions for each. The tool description adds value by implying the workflow context (preceding 'browser_snapshot'), but the schema already explains 'target', 'button', 'modifiers', 'doubleClick', and 'element' well. The description could mention the relationship between 'target' and 'element' parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'click' and the resource 'web page', and distinguishes itself from siblings like 'browser_hover', 'browser_type', 'browser_press_key', and 'browser_drop'. It could be more specific by mentioning that clicking triggers navigation or UI interactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as 'browser_hover' (for hovering) or 'browser_fill_form' (for form submission). It does not mention prerequisites like needing a page snapshot or that clicks may fail if the element is not visible.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_closeA
Destructive

Close the page

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the agent knows it is destructive. The description adds that it closes the page, but does not elaborate on side effects (e.g., unsaved changes, dialog triggers). It adds minimal value beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at three words, front-loading the core action. Every word is necessary and informationally dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema), the description is minimally complete. However, it lacks precision about closing the current page vs. the entire browser, and does not mention potential unsaved state or dialog handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters with 100% coverage, so the baseline is 3. The description does not add any parameter information beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Close the page' clearly states the verb (close) and resource (page), distinguishing it from all sibling browser tools that perform other actions like navigation, clicking, or file upload.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, such as browser_navigate_back or browser_tabs to switch. There is no mention of prerequisites or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_console_messagesB
Read-only

Returns all console messages

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoReturn all console messages since the beginning of the session, not just since the last navigation. Defaults to false.
levelYesLevel of the console messages to return. Each level includes the messages of more severe levels. Defaults to "info".info
filenameNoFilename to save the console messages to. If not provided, messages are returned as text.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint:true and destructiveHint:false, so the agent knows it's a safe read operation. The description does not add behavioral detail beyond that, such as whether messages persist across navigations or if the tool returns messages from subframes. Since annotations already handle the safety profile, the description does not need to repeat that, so a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence that is front-loaded and contains no superfluous words. It earns its place by being direct. However, it could benefit from additional context (e.g., about filtering or persistence) without becoming overly verbose, so it's not a perfect 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters (one required), 100% schema coverage, and no output schema, the description is minimally adequate. It tells the agent what the tool does, but does not explain nuances like the 'all' parameter (return all messages since session start vs. since last navigation) or the 'filename' parameter (write to file vs. return as text). These are covered in the schema, so the description doesn't need to repeat them, but it could offer a brief usage context. It's sufficient for a straightforward read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the parameters are well-documented in the schema itself. The description merely says 'Returns all console messages,' which does not add additional meaning beyond what the schema provides. However, because schema coverage is high, the baseline is 3, and the description adds no further semantics. Given the schema carries the burden, a 4 reflects that the description doesn't detract but doesn't enhance either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Returns all console messages' uses a specific verb ('Returns') and identifies the resource ('console messages'). It clearly states what the tool does, although it lacks differentiation from sibling tools like 'browser_network_requests' or 'browser_network_request' which also retrieve data. The purpose is effectively communicated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention that console messages are browser-specific, or suggest when to use filtering parameters like 'level' or 'filename'. In a browser context, it might be useful to contrast with 'browser_network_requests' for debugging, but nothing is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_dragC
Destructive

Perform drag and drop between two elements

ParametersJSON Schema
NameRequiredDescriptionDefault
endTargetYesExact target element reference from the page snapshot, or a unique element selector
endElementNoHuman-readable target element description used to obtain the permission to interact with the element
startTargetYesExact target element reference from the page snapshot, or a unique element selector
startElementNoHuman-readable source element description used to obtain the permission to interact with the element

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral detail beyond the fact that it performs a drag and drop. Annotations already indicate destructiveHint=true, so the agent knows it modifies state, but the description does not explain potential side effects (e.g., triggering events, layout changes) or how the tool interacts with the page.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (one short sentence), which is good for front-loading, but it lacks important details about element selection and permissions. It earns its place, but more context could be included without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of drag-and-drop interactions and the presence of four parameters (including startElement/endElement for human-readable descriptions), the description fails to explain how to properly use these parameters or that the tool relies on page snapshot references. No output schema exists, but the description does not clarify return behavior or error conditions. The description is insufficient for an agent to reliably invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters already have descriptions in the schema. The tool description does not add any additional meaning or constraints to the parameters beyond what the schema provides. Baseline 3 is appropriate as the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs a drag and drop between two elements, which is a specific verb-resource combination. Among siblings like browser_drop and browser_click, it distinguishes itself by explicitly naming the drag-and-drop action. However, it doesn't fully disambiguate from browser_drop, which might be related.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as browser_click, browser_hover, or browser_drop. There is no mention of prerequisites (e.g., needing a page snapshot) or conditions under which drag-and-drop is appropriate or should be avoided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_dropA
Destructive

Drop files or MIME-typed data onto an element, as if dragged from outside the page. At least one of "paths" or "data" must be provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoData to drop, as a map of MIME type to string value (e.g. {"text/plain": "hello", "text/uri-list": "https://example.com"}).
pathsNoAbsolute paths to files to drop onto the element.
targetYesExact target element reference from the page snapshot, or a unique element selector
elementNoHuman-readable element description used to obtain permission to interact with the element

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint: true and readOnlyHint: false, indicating mutation. The description adds that the drop simulates a drag-from-outside interaction, which is useful. However, it does not disclose effects on page state, potential side effects like triggering uploads or navigation, or permission implications. Since the destructive hint is present, the bar is lower, but the description could add more context about what might happen on drop (e.g., triggering file handlers).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action and key constraint. Every word earns its place; no fluff or redundancy. It effectively communicates the essential information without over-explaining.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity (4 params, nested object for data), the description covers the essential constraint and behavior. The annotations cover safety profile (destructiveHint, readOnlyHint). No output schema means agents cannot know return value, but the description could mention what happens on success/failure (e.g., returns nothing or error). However, the schema provides enough for parameter usage, and the description adds the key constraint, making it reasonably complete for a simulation action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100% (4 of 4 parameters have descriptions), so baseline is 3. The description adds value by explicitly stating the condition that at least one of paths or data must be provided, which is not in the schema. This clarifies the relationship between parameters. The schema already explains MIME-type mapping and absolute paths, so there is minimal extra need beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Drop files or MIME-typed data onto an element') and the context ('as if dragged from outside the page'). It distinguishes from siblings like browser_file_upload (upload vs drop) and browser_drag (internal drag and drop vs external drop). The requirement that at least one of paths or data must be provided is a key differentiator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for simulating external drag-and-drop operations, but it does not explicitly state when to use this over browser_file_upload or browser_drag. No explicit when-not-to-use or alternatives are mentioned, though the 'as if dragged from outside the page' phrasing provides some context. It could benefit from clarifying that it is not for internal drag-and-drop (use browser_drag) or for file selection dialogs (use browser_file_upload).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_evaluateC
Destructive

Evaluate JavaScript expression on page or element

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoExact target element reference from the page snapshot, or a unique element selector
elementNoHuman-readable element description used to obtain permission to interact with the element
filenameNoFilename to save the result to. If not provided, result is returned as text.
functionYes() => { /* code */ } or (element) => { /* code */ } when element is provided

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and openWorldHint=true, so the description need not repeat those. However, it adds no extra behavioral context—such as the scope of execution, potential side effects on page state, or security implications—beyond stating 'on page or element'. The description simply restates the action without revealing operational boundaries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no superfluous words. It efficiently conveys the core action, though it sacrifices depth for brevity. Front-loaded with the action, but could be more informative in the same space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four parameters, no output schema, and annotations that suggest destructiveness, the description is incomplete. It does not explain what happens when no target or element is provided, how the function parameter is structured beyond the inline comment, or what the return format is (text vs. file). A richer description is needed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides full (100%) coverage with clear parameter descriptions. The tool description adds little beyond the schema, merely hinting at the function parameter format. Since schema coverage is high, a baseline of 3 is appropriate; the description does not enhance understanding of the target/element distinction or filename behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Evaluate' and the resource 'JavaScript expression on page or element', which distinguishes it from tools like browser_navigate or browser_click. However, it does not explicitly differentiate from the sibling tool browser_run_code_unsafe, which also executes JavaScript, limiting clarity in choice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as browser_run_code_unsafe, browser_type, or browser_fill_form. There is no mention of prerequisites, limitations, or the recommended use cases, leaving the agent without decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_file_uploadB
Destructive

Upload one or multiple files

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsNoThe absolute paths to the files to upload. Can be single file or multiple files. If omitted, file chooser is cancelled.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true (file upload can overwrite or cause side effects), readOnlyHint=false, and openWorldHint=true (may affect external state). The description 'upload' adds minimal behavioral context beyond annotations—no mention of file type/size limits or what happens on cancellation. However, no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence. It is front-loaded with the action and resource. No wasted words, though it could be slightly more specific (e.g., mention file input context).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that uploads files with no output schema and only one parameter, the description lacks context on expected file types, size limits, and typical usage (e.g., must be called after focusing a file input element). It is barebones and assumes agent knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (the 'paths' property explains absolute paths and the omission cancels). The description adds no new parameter meaning beyond 'paths'—it just restates 'files'. The cancellation behavior is in the schema, not the description, so no additional value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Upload one or multiple files' clearly states the verb ('upload') and resource ('files'), and the input schema confirms it handles files via paths. It distinguishes from sibling browser tools (e.g., browser_drop, browser_click) which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives like browser_drop for file interactions. No mention of prerequisites (e.g., a file input element must be focused) or when to cancel (omit paths). The context is implied but lacks actionable direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_fill_formC
Destructive

Fill multiple form fields

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesFields to fill in

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds no further behavioral context (e.g., that fields must match snapshot elements, that filling checkboxes uses true/false, or that the tool may fail if elements are stale). No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

At only four words, the description is under-specified. While front-loaded, it does not earn its place—it fails to convey essential context about the nested parameters or behavior, sacrificing utility for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (nested array of field objects with multiple types) and no output schema, the description is inadequate. It does not explain how fields should be structured, what happens on error, or how it interacts with a page snapshot. Sibling tools with similar scope (e.g., browser_type) would benefit from more context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (all properties described), so the baseline is 3. The description adds no additional meaning beyond what the schema provides (e.g., no typical usage patterns or format examples).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Fill multiple form fields' clearly states the tool's action (fill) and resource (form fields). It is specific enough to distinguish from sibling tools like browser_type (single field) or browser_select_option, though it could explicitly contrast with these for full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as browser_type or browser_select_option. It does not mention prerequisites (e.g., a snapshot required), nor does it explain when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_findA
Read-only

Search the accessibility snapshot of the current page for text or a regular expression. Returns matching snapshot nodes with a few lines of surrounding context (like search snippets), each shown under its path from the root of the tree, which is cheaper than capturing the whole snapshot when you only need to locate an element and its ref.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoPlain text to search for in the page snapshot (case-insensitive substring match). Provide either text or regex, not both.
regexNoRegular expression to search for in the page snapshot. Matching is case-sensitive by default; wrap the pattern in slashes to add flags, e.g. "/error/i" for case-insensitive. Provide either text or regex, not both.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context: it searches the accessibility snapshot (not DOM), returns snippets with paths, and is cheaper than a full snapshot. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with purpose and key return details, and contains no unnecessary words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description explains what is returned (matching nodes with context and paths). Parameters are fully covered in schema, annotations are present, and the usage advantage is highlighted. The description is complete for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters already have detailed descriptions. The tool description does not add new semantic information beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches the accessibility snapshot for text or regex and returns matching nodes with context. It distinguishes itself from sibling tool browser_snapshot by noting it is cheaper and returns only matching nodes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly tells the agent to use this tool instead of browser_snapshot when only locating elements is needed by stating it is 'cheaper than capturing the whole snapshot'. However, it does not explicitly list when not to use or name alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_handle_dialogC
Destructive

Handle a dialog

ParametersJSON Schema
NameRequiredDescriptionDefault
acceptYesWhether to accept the dialog.
promptTextNoThe text of the prompt in case of a prompt dialog.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds no behavioral details. It does not explain the side effects of accepting vs. dismissing, the role of promptText, or how the tool interacts with the browser state. Annotations carry the burden, but the description contributes nothing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only four words, which is under-specified rather than concise. It lacks front-loaded structure and does not earn its place because it adds no value beyond the tool name. A useful description would at minimum clarify the dialog type and action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters, no output schema, no param enums), the description is far from complete. It omits return value, behavioral nuances, and usage context. Even a simple tool requires explaining what 'handle' means. The description leaves critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the input schema already documents both parameters clearly. The description adds no additional semantic context (e.g., when promptText is needed, what 'accept' does). Baseline of 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Handle a dialog' is essentially a tautology of the tool name and annotation title. It does not specify the type of dialog (alert, confirm, prompt) or what 'handling' entails (accepting, dismissing), making it vague and indistinguishable from a generic label.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus any of the 23 sibling tools (e.g., browser_click, browser_type). It fails to mention prerequisites (e.g., a dialog must exist) or contexts where alternative tools would be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_hoverB
Destructive

Hover over element on page

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesExact target element reference from the page snapshot, or a unique element selector
elementNoHuman-readable element description used to obtain permission to interact with the element

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint true and openWorldHint true, indicating state changes and external effects. However, the description does not add any behavioral context beyond this, such as triggering hover events, potential side effects, or requirements like element visibility. The description fails to supplement the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the key action. It is concise with no wasted words. However, it is extremely terse and could benefit from slightly more context without losing brevity, thus not a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of a hover action, the description is minimally adequate. It lacks information about return values (no output schema), prerequisites, and when hovering is appropriate. The absence of these details reduces completeness, though the annotations provide some safety context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%—both parameters have descriptions in the schema. The tool description does not add any meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Hover over element on page' clearly states the action (hover) and the target (element on page). It is distinct from sibling tools like browser_click, browser_find, and browser_type, making it easy for an agent to identify when to use this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use hover over alternatives (e.g., to trigger tooltips, reveal dropdowns) or when not to use it. No prerequisites or context about the need for element visibility or interaction chains are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_navigateB
Destructive

Navigate to a URL

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to navigate to

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include destructiveHint: true, warning that navigation could change page state (e.g., unload current page, lose form data). The description does not elaborate on this—no mention of page load wait, cancelation, or side effects. Without annotations, this would be very opaque; with them, the description adds no value beyond the hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero wasted words. It efficiently communicates the essential purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (1 param, no output schema) and sibling variety, the description is minimally complete for navigation but lacks context about page-load behavior, timeout, or error handling. For a destructive operation, more guidance (e.g., 'Waits for page to load') would improve completeness without overloading the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with one parameter (url). The description doesn't add meaning beyond the schema's 'The URL to navigate to'. Since the schema is complete and simple, a baseline of 3 is appropriate; no extra semantic richness is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Navigate to a URL' uses a clear verb ('Navigate') and resource ('URL'). It distinguishes this tool from siblings like browser_navigate_back and browser_tabs by implying forward navigation. However, it lacks specificity about URL types (e.g., http, file) or behavior (e.g., same tab vs new tab), keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like browser_navigate_back or browser_click. It does not mention when not to use it, prerequisites (e.g., browser must be open), or order of operations. The agent receives no help in making this decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_navigate_backA
Destructive

Go back to the previous page in the history

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag this as destructiveHint: true and readOnlyHint: false, indicating state-changing behavior. The description confirms it navigates back, but adds no further details about potential side effects (e.g., losing form input, triggering page reloads, or breaking out of iframes). For a simple action, the description is adequate but does not enrich the behavioral picture beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that conveys the tool's action without any fluff. Every word earns its place. The length is perfectly matched to the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has no parameters, no output schema, and a straightforward action, the description is mostly complete. It tells the agent what happens without leaving critical gaps. A small deduction because it omits any mention of the return value (likely none) and does not clarify edge cases like attempting to go back when there is no history.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema coverage is trivially 100%. The description does not need to elaborate on parameters. The baseline score of 4 fits because there is no missing parameter information to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb+resource structure: 'Go back to the previous page in the history'. It effectively distinguishes this tool from sibling tools like browser_navigate (which goes to a specific URL) and browser_click (which interacts with elements). The purpose is immediately obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives. While it's implicitly the correct choice for returning to the previous page, there is no mention of prerequisites (e.g., must have browsed forward first), exclusions, or comparisons with siblings like browser_tabs or browser_navigate. The agent must infer usage from context alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_network_requestA
Read-only

Returns full details (headers and body) of a single network request, or a single part if part is set. Use the number from browser_network_requests.

ParametersJSON Schema
NameRequiredDescriptionDefault
partNoReturn only this part of the request. Omit to return full details.
indexYes1-based index of the request, as printed by browser_network_requests.
filenameNoFilename to save the result to. If not provided, output is returned as text.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds value by specifying that it returns 'full details (headers and body)' or a single part, which informs the agent about the response structure. No contradictions are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, front-loads the core purpose, and contains zero wasted words. Every sentence provides actionable information (what it returns, how to specify the request, the optional part filter).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (3 parameters, all with descriptions, 100% coverage, no nested schemas, no output schema), the description is reasonably complete. It covers the main use cases (full details or a single part) and ties into the sibling tool for input. The only minor gap is that the agent might benefit from knowing what happens if `index` is out of range, but that is a judgment call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds minimal additional meaning—it mentions the `part` parameter and the `index` parameter implicitly via `browser_network_requests`—but does not go beyond what the schema states. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns full details (headers and body) of a network request, optionally a single part via the `part` parameter. It distinguishes itself from the sibling `browser_network_requests` by explicitly referencing its output ("the number from browser_network_requests"), making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says to use the number from `browser_network_requests` to select the request, which provides clear context for usage. It does not explicitly exclude scenarios or list alternatives beyond the sibling reference, but the connection is explicit enough for an agent to know when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_network_requestsA
Read-only

Returns a numbered list of network requests since loading the page. Use browser_network_request with the number to get full details.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoOnly return requests whose URL matches this regexp (e.g. "/api/.*user").
staticYesWhether to include successful static resources like images, fonts, scripts, etc. Defaults to false.
filenameNoFilename to save the network requests to. If not provided, requests are returned as text.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true (safe read) and destructiveHint=false, so the safety profile is clear. The description adds value by specifying the behavior: 'since loading the page' (explaining the scope/timebound) and 'numbered list' (indicating the output structure requires the partner tool for details). This goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences. The first sentence states what the tool does. The second provides immediate usage guidance for the sibling tool. Every word serves a purpose. No fluff, no repetition of what's in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description could have explained the return format (e.g., structure of the numbered list). But it's clear enough for an agent to understand: it returns a list of requests, each with a number, and the partner tool gets detail by number. The input schema is well-documented. This is adequate for the tool's functionality and complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description adds a bit of context by implying the 'filter' and 'static' parameters affect the list, and the 'filename' parameter changes the output format (save vs. return text). However, it doesn't elaborate on the regex usage or the exact effect of including static resources, so it mostly relies on the schema which is already complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Returns' and the resource 'numbered list of network requests' with a clear scope ('since loading the page'). It also differentiates from its sibling 'browser_network_request' by noting the partner tool is for getting full details of a specific request. This makes the purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use this tool first to get the list, then 'browser_network_request with the number to get full details'. This establishes a clear workflow. However, it doesn't mention when NOT to use it (e.g., if you already know the request number, or if you need details from a specific filter upfront), so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_press_keyB
Destructive

Press a key on the keyboard

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesName of the key to press or a character to generate, such as `ArrowLeft` or `a`

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, indicating mutation. The description adds no further behavioral detail (e.g., event triggering, focus dependency, release behavior). It is consistent but does not go beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the verb and resource. It is efficient and avoids wordiness, but it could include a brief usage hint (e.g., 'such as ArrowLeft or a') without becoming bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema, good annotations), the description is minimally adequate. However, it omits context like whether the key is pressed on the currently focused element or globally, and whether modifier keys (Ctrl, Shift) are supported as single key presses.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema's parameter description ('Name of the key to press or a character to generate, such as ArrowLeft or a') is already rich. The tool description adds no additional parameter information, so it does not improve on the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Press a key on the keyboard' clearly states the action (press) and the target (a key). It is specific enough to distinguish from mouse actions like browser_click or text entry like browser_type, though it could explicitly contrast with siblings (e.g., browser_type) for added clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like browser_type (for typing strings) or browser_click (for clicking). There is no mention of prerequisites (e.g., focus requirement) or context (e.g., pressing Enter to submit forms). The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_resizeC
Destructive

Resize the browser window

ParametersJSON Schema
NameRequiredDescriptionDefault
widthYesWidth of the browser window
heightYesHeight of the browser window

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, which the description aligns with. However, the description adds no new behavioral details beyond stating the action. It does not mention side effects like triggering layout recalculation, affecting screenshots, or the fact that the current browser tab's viewport changes. With annotations carrying the main transparency burden, the description adds minimal value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, making it very concise. However, it is so minimal that it borders on underspecification. There is room to add meaningful context (e.g., 'Changes the viewport width and height to the specified pixel values') without losing conciseness. It earns its place by not being verbose, but doesn't maximize the space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and a simple interface, the description should clarify the scope (current window/tab), the unit (pixels), and the impact on other tools (e.g., screenshots). It fails to mention that resize affects the active browser window only, or that dimensions are in CSS pixels. The absence of output schema means the description should explain that the tool returns nothing or confirms success. The description is incomplete given the tool's role in a sequence of browser interactions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% – both width and height have inline descriptions. The tool description repeats no parameter info. Per guidelines, baseline is 3. The description does not add context like units (pixels), allowed ranges, or validation rules, which would be useful but not required given schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'resize' and the resource 'browser window'. It is immediately understandable. However, it does not differentiate from sibling tools like browser_navigate or browser_snapshot, but the action is sufficiently distinct that no confusion arises. A more precise term like 'viewport' or 'dimensions' would improve specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when or why to use this tool over others. There is no mention of prerequisites (e.g., browser must be open), expected scenarios (e.g., responsive testing, adjusting before screenshot), or alternatives. The agent is left to infer usage solely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_run_code_unsafeA
Destructive

Run a Playwright code snippet. Unsafe: executes arbitrary JavaScript in the Playwright server process and is RCE-equivalent.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNoA JavaScript function containing Playwright code to execute. It will be invoked with a single argument, page, which you can use for any page interaction. For example: `async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }`
filenameNoLoad code from the specified file. If both code and filename are provided, code will be ignored.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and openWorldHint=true, but the description adds crucial context beyond annotations: it specifies that the tool is RCE-equivalent and executes in the Playwright server process, not the browser page. This helps an agent understand the security implications and that it can access server resources. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with only two sentences. The first sentence clearly states the purpose. The second sentence immediately adds critical safety context. There is no fluff or wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema and 2 parameters both well-described in the schema, the description is complete enough. It explains what the tool does, its safety implications, and how the code is executed. A user might still wonder about return values, but the schema provides the code parameter description that shows the function returns a value, so it's adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds no additional param-specific context beyond what the schema provides. Therefore, baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Run a Playwright code snippet', which is a specific verb+resource combination. It distinguishes itself from siblings like 'browser_evaluate' by emphasizing that this tool executes arbitrary JavaScript in the Playwright server process (RCE-equivalent), whereas evaluate typically runs code in the browser page context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly warns about the unsafe nature ('Unsafe: executes arbitrary JavaScript...RCE-equivalent'), which implies it should only be used when full server-side code execution is needed. However, it does not explicitly state alternatives (like browser_evaluate for page-scoped code) or when not to use it, though the warning strongly implies caution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_select_optionB
Destructive

Select an option in a dropdown

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesExact target element reference from the page snapshot, or a unique element selector
valuesYesArray of values to select in the dropdown. This can be a single value or multiple values.
elementNoHuman-readable element description used to obtain permission to interact with the element

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and openWorldHint=true, so the description needs only minor behavioral context. It adds nothing beyond the brief action description, missing details like page state changes or permission requirements. With annotations, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that is efficient and to the point. It could include a tiny bit more context without losing conciseness, but currently it's not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 3-parameter tool with no output schema, the description is minimally adequate. However, it lacks guidance on behavior when values don't match options, multi-select handling, or any edge cases, leaving the agent to rely solely on parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add meaning beyond what the schema provides for individual parameters. It mentions 'dropdown' in the tool description but not per parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Select an option') and the resource ('in a dropdown'), using a specific verb and resource. This distinguishes it from sibling browser tools like browser_click or browser_fill_form.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., browser_type for input fields, browser_click for links). No mention of prerequisites like having a page snapshot. The description lacks explicit usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_snapshotC
Read-only

Capture accessibility snapshot of the current page, this is better than screenshot

ParametersJSON Schema
NameRequiredDescriptionDefault
boxesNoInclude each element's bounding box as [box=x,y,width,height] in the snapshot. Coordinates are viewport-relative, in CSS pixels (Element.getBoundingClientRect)
depthNoLimit the depth of the snapshot tree
targetNoExact target element reference from the page snapshot, or a unique element selector
filenameNoSave snapshot to markdown file instead of returning it in the response.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds minimal behavioral context. It fails to disclose that the filename parameter saves snapshot to file (side effect), nor does it explain what the snapshot contains or requires beyond the current page.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise (one sentence), but it omits important details such as return format, side effects of filename, and how to use target or depth. Conciseness trades off against completeness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, no output schema, and many sibling tools, the description is incomplete. It doesn't explain what an accessibility snapshot looks like, what the target parameter references, or that filename persists output to a file. The agent lacks critical context for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter having a description. The tool description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool captures an accessibility snapshot, distinguishing it from visual screenshots. However, it doesn't specify what 'accessibility' entails (e.g., accessibility tree), which slightly reduces specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description briefly claims this is 'better than screenshot' but offers no explicit guidance on when to use it versus alternatives like browser_evaluate or browser_run_code_unsafe. No when-not-to-use advice is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_tabsB
Destructive

List, create, close, or select a browser tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL to navigate to in the new tab, used for new.
indexNoTab index, used for close/select. If omitted for close, current tab is closed.
actionYesOperation to perform

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false. The description lists both read-only (list, select) and destructive (create, close) actions, which is consistent but adds little beyond the annotations. It does not disclose important behavioral details such as that closing a tab may lose state, that creating a tab opens a default page, or that selecting a tab focuses it. The description carries minimal additional transparency given the annotation cues.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently enumerates the tool's capabilities. It is front-loaded with the operative verbs. While concise, it could be slightly improved by providing a brief example or clarifying purpose in a natural way. Still, it earns its place with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has three parameters including an enum and no output schema, the description is insufficiently complete. It does not explain what 'list' returns (e.g., an array of tab objects), what 'select' does (focus the tab), or what happens when closing without index. These are essential for an agent to invoke the tool correctly. The schema partially compensates, but the description should fill gaps that the schema does not cover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage: action with enum descriptions, url for 'new', index for 'close/select' with a note on default close behavior. The tool description merely repeats the action list without adding any new meaning or clarifying parameter semantics (e.g., format of url, bounds of index). Since the schema does the heavy lifting, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly lists the four operations (list, create, close, select) on the specific resource 'browser tab'. This clearly distinguishes it from all sibling tools, which cover other browser actions like navigation, clicking, and form filling. The verb-resource combination is precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is for managing tabs—listing, creating, closing, or selecting them—but it does not explicitly state when to prefer this over other tools. For example, it doesn't mention that closing a tab differs from closing the entire browser (browser_close) or that selecting a tab is not the same as navigating. There is no when-not-to-use guidance or comparison with alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_take_screenshotA
Read-only

Take a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoImage format for the screenshot. If unset, inferred from the filename extension, otherwise png.
scaleYesImage resolution scale. "css" produces a screenshot sized in CSS pixels (smaller, consistent across devices). "device" produces a high-resolution screenshot using device pixels (larger, accounts for the device pixel ratio). Default is css.css
targetNoExact target element reference from the page snapshot, or a unique element selector
elementNoHuman-readable element description used to obtain permission to interact with the element
filenameNoFile name to save the screenshot to. Defaults to `page-{timestamp}.{png|jpeg|webp}` if not specified. Prefer relative file names to stay within the output directory.
fullPageNoWhen true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds transparency by stating that actions cannot be performed from the screenshot, reinforcing the read-only nature. It does not contradict annotations and provides behavioral context beyond what the structured data conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two concise sentences, with the core purpose in the first sentence and critical usage guidance in the second. It is front-loaded and contains no extraneous words, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters with full schema coverage and annotations providing safety hints, the description adds the key constraint about not being usable for actions and points to a sibling. It covers the most essential contextual information for an agent to decide when to use the tool, though it omits explicit mention of extra features like element or full-page screenshots (which are in the schema).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not elaborate on any parameter beyond the schema's own descriptions (e.g., type, scale, target, element, filename, fullPage). No additional meaning is added, so the score remains at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Take' and the resource 'screenshot of the current page', establishing the core function directly. It also explicitly distinguishes from the sibling tool 'browser_snapshot' by noting that this tool cannot be used for actions, which satisfies the requirement for sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when NOT to use this tool ('You can't perform actions based on the screenshot') and recommends the alternative 'browser_snapshot' for actions. This is clear context with exclusions, though it could additionally state use cases like visual debugging or archiving.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_typeA
Destructive

Type text into editable element

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to type into the element
slowlyNoWhether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once.
submitNoWhether to submit entered text (press Enter after)
targetYesExact target element reference from the page snapshot, or a unique element selector
elementNoHuman-readable element description used to obtain permission to interact with the element

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide `destructiveHint: true` indicating mutation. The description adds value by naming the resource type ('editable element') and, via schema, mentions 'slowly' for triggering key handlers, but does not broaden behavioral disclosure beyond what is in the schema and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the tool's core purpose. Every word earns its place with zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters and no output schema, but annotations set a clear safety profile. The description, combined with exhaustive schema, covers basic usage. However, it does not explain how the element parameter differs from target or what happens when an element is non-editable, leaving moderate gaps for a parameter-rich tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented. The description adds meaning by narrowing the context to 'editable element' (helpful for target/element), but doesn't explain parameter interplay (e.g., effect of slowly + submit or target vs element disambiguation). Baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Type text into editable element' uses a specific verb ('Type') and resource ('editable element'), directly stating the tool's action. It's clear on its own and distinguishes well from siblings like browser_press_key (which presses a single key) and browser_click.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description itself provides no guidance on when to use this vs. alternatives like browser_press_key or browser_find. The sibling names and schema give some context, but the description does not explicitly state when typing versus pressing a key or filling a form is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_wait_forA
Read-only

Wait for text to appear or disappear or a specified time to pass

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoThe text to wait for
timeNoThe time to wait in seconds
textGoneNoThe text to wait for to disappear

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating safe, non-mutating behavior. The description adds the three specific waiting modes (text presence, absence, timeout) which are not captured by annotations alone. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that conveys the core functionality. It is concise but could be slightly more structured (e.g., listing the three options explicitly). No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 3 optional parameters and no output schema. The description covers the three waiting modes adequately. However, it does not explain what happens when no parameters are provided (e.g., likely no wait), or what the return value indicates (e.g., did the condition succeed?). Slightly incomplete for a tool with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so each parameter already has a description. The description groups the three parameters into 'text to appear or disappear or a specified time to pass', linking them to the three modes. This adds value beyond the individual schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool waits for text to appear, disappear, or a specified time to pass. The verb 'wait for' and the resource/conditions are explicit, distinguishing it from other browser tools like click or navigate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., browser_snapshot for checking content, or explicit sleep). There are no when-to-use or when-not-to-use instructions, leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 24 tool updatesv0.0.79
    • First observedbrowser_click
    • First observedbrowser_close
    • First observedbrowser_console_messages
    • First observedbrowser_drag
    • First observedbrowser_drop
    • First observedbrowser_evaluate
    • First observedbrowser_file_upload
    • First observedbrowser_fill_form
    • First observedbrowser_find
    • First observedbrowser_handle_dialog
    • First observedbrowser_hover
    • First observedbrowser_navigate
    • First observedbrowser_navigate_back
    • First observedbrowser_network_request
    • First observedbrowser_network_requests
    • First observedbrowser_press_key
    • First observedbrowser_resize
    • First observedbrowser_run_code_unsafe
    • First observedbrowser_select_option
    • First observedbrowser_snapshot
    • First observedbrowser_tabs
    • First observedbrowser_take_screenshot
    • First observedbrowser_type
    • First observedbrowser_wait_for

TDQS

B3.3/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, covering actions like navigation, clicking, typing, screenshots, network requests, file upload, and dialog handling. Even similar tools like browser_snapshot and browser_take_screenshot are differentiated by their intended use (actions vs. visual capture).

Naming Consistency4/5

All tools share the 'browser_' prefix, and most follow a verb_noun or verb pattern (e.g., browser_click, browser_fill_form). However, a few are noun-based (e.g., browser_network_requests, browser_tabs) which breaks the verb-first convention slightly, but the overall pattern remains predictable.

Tool Count4/5

With 24 tools, the set is extensive but well-scoped for a full browser automation server. Each tool addresses a specific operation, and the count is appropriate for the domain, though it borders on the heavier side.

Completeness4/5

The toolset covers core browser automation workflows: navigation, clicks, forms, network, screenshots, accessibility, dialogs, file upload, and tabs. Minor gaps exist (e.g., no direct tool for scrolling or getting current URL), but these do not significantly hinder common agent tasks.

Maintenance

ActivityActive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots, providing browser automation capabilities without requiring screenshots or visually-tuned models.
    6
    Apache 2.0
  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots, providing browser automation capabilities without requiring screenshots or visually tuned models.
    7
    37,909
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides browser automation capabilities by allowing LLMs to interact with web pages through structured accessibility snapshots. It enables fast, lightweight interaction with web content without the need for vision-tuned models or visual processing.
    Apache 2.0

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DavidG-BLW/MCP_DOCS'

If you have feedback or need assistance with the MCP directory API, please join our Discord server