ndthanhdev/mcp-browser-kit

ndthanhdev/mcp-browser-kit

от ndthanhdev
MCP Browser Kit — сервер, который позволяет AI-ассистентам напрямую управлять локальными браузерами. Полезен для автоматизации действий на страницах, сбора данных и тестирования. Разработчики и тес...

MCP Browser Kit

NPM Version Workspace Updated Checked with Biome Trust Score

mcp-browser-kit MCP server

🚀 On the main branch? You're viewing the bleeding-edge dev docs! For other versions, check out the release/* branches.

An MCP Server that enables AI assistants to interact with your local browsers.

https://github.com/user-attachments/assets/1fbf87fd-06d1-42bf-a06f-cc2bbdf375a8

Usage

  1. Add MCP Browser Kit to your MCP Client:

    {
        "mcpServers": {
            "browser-kit": {
                "command": "npx",
                "args": ["@mcp-browser-kit/server@latest"]
            }
        }
    }
    
  2. Choose the right extension build for your browser:

    • Check the Compatibility table below to see which build (M2 or M3) is compatible with your browser
    • Note that M2 builds offer more functionality than M3 builds, so prefer M2 if your browser supports both
  3. Download the latest compatible build from The Latest Release.

  4. Load the extension into a compatible browser and enable it.

  5. Refresh open tabs to ensure extension scripts are loaded.

  6. Start messaging on your MCP Client:

    Use browser-kit, star the last open GitHub repo on my browser
    
  7. Optional, check User Notes for more information.

Инструменты были проиндексированы:
captureTabтолько чтениевнешний мир

Делает скриншот вкладки. Когда: только для вкладок MV2; вам нужны пиксельные координаты для инструментов, работающих с координатами. Как: browserId, windowId, tabId из bk:///context; используйте полученные размеры для вычисления x/y. Требует: browserId, windowId, tabId. Возвращает: value { data (изображение base64), width, height, mimeType } - используйте width/height для масштабирования координат. Избегайте: вызова на manifestVersion 3 - используйте readable-elements.

Снимает скриншот вкладки

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

clickOnCoordinatesвнешний мир

Выполняет клик по пиксельным координатам внутри вкладки. Когда: Запасной вариант для MV2, когда нет доступного readablePath. Как: x/y из последнего скриншота captureTab (одинаковые ширина/высота); browserId, windowId, tabId из контекста. Требует: browserId, windowId, tabId, x, y. Возвращает: ok=true при успехе; при ok=false — повторно захватывает вкладку и пересчитывает x/y. Избегать: на MV3 (нет источника скриншота); предпочитать clickOnElement, когда существует readablePath.

Кликает по координатам

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

  • xnumberобязательный

    X coordinate in pixels from a recent captureTab screenshot (MV2 only)

  • ynumberобязательный

    Y coordinate in pixels from a recent captureTab screenshot (MV2 only)

clickOnElementвнешний мир

Кликает по элементу с помощью readablePath. Используется: основной метод клика в MV2 и MV3. Как работает: читает {tabUri}/readable-elements; фильтрует наборы [path, role, text, value?] по роли и тексту; копирует путь точно (например, 0.2.1) — не CSS-селектор. Специальные выпадающие списки/комбобоксы/выбор даты: кликает по триггеру, чтобы открыть их, затем повторно читает readable-elements и кликает по опции или ячейке дня. Нативные <select>: клик по опции может сработать для listbox-select (multiple или size>1), но однострочные выпадающие списки используют нативное всплывающее окно, которое игнорирует синтетические клики: для них нужен invokeJsFn (MV2) или showHumanHint (MV3). Проверяет повторным чтением и переходит к более сложным действиям. Подробнее в разделе Complex inputs. Требует: browserId, windowId, tabId, readablePath. Возвращает: ok=true при успехе; при ok=false повторно читает readable-elements и выбирает новый путь. Избегает: выдумывания путей; повторно читает элементы после навигации, если клик не удался.

Нажимает элемент.

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • readablePathstringобязательный

    Dot-separated tree path (e.g. 0.2.1) — first element of [path, role, text] tuple from readable-elements; not a CSS selector

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

closeTabидемпотентныйвнешний мир

Закрывает вкладку. Необратимо. Когда: работа с вкладкой завершена и дальнейшее взаимодействие не требуется. Как: browserId, windowId, tabId из bk:///context. Требует: browserId, windowId, tabId. Возвращает: ok=true после закрытия. Избегайте: закрытия вкладки, которая ещё нужна для дальнейших взаимодействий.

Закрывает вкладку

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

fillTextToCoordinatesвнешний мир

Нажимает в точке (x, y), затем вводит текст в активное поле ввода. Когда: резервный вариант для MV2 для полей ввода без readablePath. Как: координаты из последнего captureTab; отправляет через clickOnCoordinates на кнопку отправки или hitEnterOnCoordinates. Требует: browserId, windowId, tabId, x, y, value. Возвращает: ok=true при успехе; при ok=false — повторно захватывает вкладку и пересчитывает x/y. Избегайте: на MV3; предпочитайте fillTextToElement, когда доступен readablePath.

Заполняет текст по координатам

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • valuestringобязательный

    Text to enter into the input field

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

  • xnumberобязательный

    X coordinate in pixels from a recent captureTab screenshot (MV2 only)

  • ynumberобязательный

    Y coordinate in pixels from a recent captureTab screenshot (MV2 only)

fillTextToElementвнешний мир

Вводит текст в <input> или <textarea> по readablePath. Когда: основной метод заполнения в MV2 и MV3. Также обрабатывает нативные <input> date/time/datetime-local/month/color, когда значение имеет точный формат (date YYYY-MM-DD, time HH:MM, datetime-local YYYY-MM-DDTHH:MM, month YYYY-MM, color #rrggbb). Как: readablePath из первого элемента кортежа [path, role, text, value?] в readable-elements; отправка через clickOnElement на кнопке отправки или hitEnterOnElement. Требует: browserId, windowId, tabId, readablePath, value. Возвращает: ok=true при успехе; при ok=false — повторно читает readable-elements и выбирает новый путь. Избегайте: CSS-селекторы в качестве readablePath; устаревшие пути после изменений DOM. Не работает в contenteditable-редакторах форматированного текста (в MV2 используйте invokeJsFn вместо этого), нативных <select> или пользовательских выпадающих списках/выборах даты — используйте лестницу стратегий в разделе Complex inputs в инструкциях сервера.

Заполняет элемент текстом

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • readablePathstringобязательный

    Dot-separated tree path (e.g. 0.2.1) — first element of [path, role, text] tuple from readable-elements; not a CSS selector

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • valuestringобязательный

    Text to enter into the input field

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

getContextтолько чтениевнешний мир

Получает агрегированное состояние каждого подключённого браузера. Когда: обнаружение доступных вкладок перед взаимодействием — эквивалентно чтению ресурса bk:///context. Как: параметры не требуются. Требует: ничего. Возвращает: browsers[] (каждый с browserId, extensionInfo, windows) и tabs (каждый с id (tabId), windowId, tabUri, url, title, active). Избегайте: повторного вызова в плотном цикле — кешируйте результат на время выполнения задачи.

Получает контекст браузера.

Параметры

Без параметров.

getReadableElementHtmlтолько чтениевнешний мир

Возвращает outerHTML одного элемента по readablePath. Когда: нужна точная разметка (атрибуты, классы, вложенная структура) одного элемента — эквивалентно чтению {tabUri}/readable-element-html/<readablePath>. Как: readablePath берётся из кортежа readable-elements (первое поле); browserId и tabId — из getContext или bk:///context. Требуется: browserId, tabId, readablePath (точечный индекс дерева, например 0.2.1, а не CSS-селектор). Возвращает: { snapshotId, data (HTML), hasNextPage, nextPageNumber, totalPages }. Пагинация: если hasNextPage равен true, вызовите getSnapshotPage с полученным snapshotId, типом readable-element-html и nextPageNumber.

Получает читаемый HTML элемента

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • readablePathstringобязательный

    Dot-separated tree path (e.g. 0.2.1) — first element of a [path, role, text, value?] tuple from readable-elements; not a CSS selector

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

getReadableElementsтолько чтениевнешний мир

Получает интерактивные элементы вкладки в виде кортежей [path, role, text, value?]. Когда: нужны пути элементов для clickOnElement/fillTextToElement — эквивалентно чтению ресурса {tabUri}/readable-elements. Как: browserId и tabId из getContext или bk:///context. Требуется: browserId, tabId. Возвращает: { snapshotId, data (кортежи [path, role, text, value?]), hasNextPage, nextPageNumber, totalPages }. path — это древовидный индекс, разделённый точками (например, 0.2.1). Используется как readablePath в инструментах взаимодействия. Пагинация: если hasNextPage равен true, вызывается getSnapshotPage с полученными snapshotId и nextPageNumber.

Получает читаемые элементы.

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

getReadableTextтолько чтениевнешний мир

Получает читаемый внутренний текст вкладки. Когда: вам нужно текстовое содержимое страницы — эквивалентно чтению ресурса {tabUri}/readable-text. Как: browserId и tabId из getContext или bk:///context. Требует: browserId, tabId. Возвращает: { snapshotId, data (text), hasNextPage, nextPageNumber, totalPages }. Пагинация: если hasNextPage равно true, вызовите getSnapshotPage с возвращёнными snapshotId и nextPageNumber.

Получает читаемый текст

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

getSelectionтолько чтениевнешний мир

Получает текущее выделение текста пользователя во вкладке. Когда: нужен текст, который пользователь выделил на странице. Как: browserId, windowId, tabId из bk:///context. Требуется: browserId, windowId, tabId. Возвращает: value.selectedText - пустая строка, если ничего не выбрано. Избегайте: ожидать содержимое, когда ничего не выбрано.

Получает выделение текста

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

getSnapshotPageтолько чтениевнешний мир

Получает страницу продолжения для снимка readable-text, readable-elements или readable-element-html. Когда: предыдущий вызов getReadableText, getReadableElements или getReadableElementHtml вернул hasNextPage=true. Как: используй snapshotId и nextPageNumber из предыдущего ответа. Требуется: snapshotId, type (readable-text | readable-elements | readable-element-html), pageNumber. Возвращает: ту же структуру, что и исходный вызов: { snapshotId, data, hasNextPage, nextPageNumber, totalPages }. Не вызывайте без предварительного получения страницы 1 через getReadableText, getReadableElements или getReadableElementHtml.

Получает снимок страницы

Параметры
  • pageNumberintegerобязательный

    Page number to retrieve (from nextPageNumber in a prior response)

  • snapshotIdstringобязательный

    The snapshotId returned from a previous getReadableText or getReadableElements call

  • typeenumобязательный

    Content type: readable-text, readable-elements, or readable-element-html

hitEnterOnCoordinatesвнешний мир

Кликает по (x, y) и нажимает Enter для отправки формы. Когда: запасной вариант для MV2 для отправки, если не существует readablePath кнопки отправки. Как: координаты из последнего captureTab. Требует: browserId, windowId, tabId, x, y. Возвращает: ok=true при успехе; при ok=false повторно захватывает вкладку и пересчитывает x/y. Не использовать на MV3; предпочтительнее hitEnterOnElement, когда readablePath доступен.

Нажмите Enter по указанным координатам

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

  • xnumberобязательный

    X coordinate in pixels from a recent captureTab screenshot (MV2 only)

  • ynumberобязательный

    Y coordinate in pixels from a recent captureTab screenshot (MV2 only)

hitEnterOnElementвнешний мир

Фокусируется на элементе по readablePath, затем нажимает Enter. Когда: при отправке формы, если нет явной кнопки отправки. Как: readablePath из кортежа readable-elements (индекс через точку, например 0.2.1). Требуется: browserId, windowId, tabId, readablePath. Возвращает: ok=true при успехе; при ok=false повторно читает readable-elements и выбирает новый путь. Избегайте: использования, когда доступен readablePath кнопки отправки — вместо этого нажмите на неё.

Нажмите Enter на элементе

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • readablePathstringобязательный

    Dot-separated tree path (e.g. 0.2.1) — first element of [path, role, text] tuple from readable-elements; not a CSS selector

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

invokeJsFnвнешний мир

Выполняет тело функции JavaScript в контексте страницы. Когда: только в MV2, и только когда инструменты для элементов/координат не могут выполнить задачу — например, установка нативного <select> (.value, затем dispatch change) или ползунок диапазона. Как: fnBodyCode — это только тело функции (без обёртки функции); используйте return, чтобы отправить значение обратно. Пример: return document.title; Требует: browserId, windowId, tabId, fnBodyCode. Возвращает: value.result = то, что вы возвращаете (должно быть сериализуемо в JSON). Избегайте: на manifestVersion 3; обёртывания в function () { ... }.

Вызывает функцию JavaScript

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • fnBodyCodestringобязательный

    Function body only (no function wrapper). Example: return document.title; MV2 only

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

openTabвнешний мир

Открывает URL в новой вкладке. Когда: переход на страницу, которая ещё не открыта. Как: browserId и windowId из bk:///context; url должен содержать схему (https://); после успеха повторно прочитайте контекст для нового tabId и дождитесь загрузки страницы. Требует: browserId, windowId, url. Возвращает: значение { browserId, windowId, tabId } — используйте возвращённые идентификаторы для последующих вызовов. Избегайте: немедленного взаимодействия — вкладке нужно время на загрузку.

Открывает вкладку

Параметры
  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • urlstringобязательный

    URL to open, including scheme (e.g. https://example.com)

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

scrollElementвнешний мир

Прокручивает внутри прокручиваемого элемента (панели, списка или любого контейнера с собственной полосой прокрутки). Когда: содержимое находится в прокручиваемой области, которую scrollPage (прокрутка всего окна) не двигает — например, панель чата или длинный список внутри div. Работает в MV2 и MV3 (снимок экрана не требуется). Как: readablePath из кортежа readable-elements; направление — up/down/left/right; необязательное количество пикселей — если не указано, прокручивает примерно на 90% размера элемента. Прокручивается элемент по readablePath, либо его ближайший прокручиваемый предок, если сам элемент не прокручивается (так можно нацелиться на интерактивный дочерний элемент внутри панели). browserId, windowId, tabId из bk:///context. Требует: browserId, windowId, tabId, readablePath, direction. Возвращает: ok=true после прокрутки. Если уже у края или не найден ни один прокручиваемый контейнер (нечего прокручивать), всё равно возвращает ok=true. Избегайте: использовать для прокрутки всей страницы — вместо этого используйте scrollPage; после прокрутки перечитывайте readable-elements, снапшоты устаревают.

Прокручивает элемент.

Параметры
  • amountinteger

    Pixels to scroll; defaults to ~one element height/width when omitted

  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • directionenumобязательный

    Direction to scroll the element

  • readablePathstringобязательный

    Dot-separated tree path (e.g. 0.2.1) — first element of [path, role, text] tuple from readable-elements; not a CSS selector

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

scrollPageвнешний мир

Прокручивает область просмотра страницы в заданном направлении. Когда: целевой контент или элементы находятся за пределами экрана; покажите больше страницы перед чтением или взаимодействием. Работает в MV2 и MV3 (скриншот не требуется). Как: направление - up/down/left/right; необязательное количество пикселей - опустите его для прокрутки примерно на один viewport (страницу). browserId, windowId, tabId из bk:///context. Требуется: browserId, windowId, tabId, direction. Возвращает: ok=true после прокрутки. Если уже достигнут край (прокручивать нечего), всё равно возвращается ok=true. Избегайте: предполагать, что появились новые элементы - после прокрутки заново читайте readable-elements, снимки устаревают.

Прокручивает страницу

Параметры
  • amountinteger

    Pixels to scroll; defaults to ~one viewport when omitted

  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • directionenumобязательный

    Direction to scroll the viewport

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

showHumanHintидемпотентныйвнешний мир

Подсвечивает элемент и инструктирует человека действовать, когда автоматизация не удалась или шаг предназначен только для человека. Когда: CAPTCHA, 2FA, необратимые подтверждения, повторные сбои инструментов или элементы ввода MV3, которые инструменты не могут установить (нативный <select>, ползунок диапазона). Как: укажите ровно одну цель - readablePath (предпочтительно) ИЛИ x и y, но не оба сразу; действие fill требует значение. Требует: browserId, windowId, tabId, action (click | fill | hit-enter), message. Возвращает: humanMessage (передаёт дословно пользователю) и expiresInSeconds. Избегайте: одновременного указания readablePath и координат.

Показать подсказку для человека

Параметры
  • actionenumобязательный

    Manual step the human should take

  • browserIdstringобязательный

    browserId from bk:///context browsers[].browserId

  • messagestringобязательный

    Human-facing instruction shown in browser callout and chat

  • readablePathstring

    Dot-separated tree path from readable-elements (e.g. 0.2.1); provide this OR x+y, not both

  • tabIdstringобязательный

    tabId from bk:///context browsers[].tabs[].id

  • valuestring

    Required for fill — text the human should type

  • windowIdstringобязательный

    windowId from bk:///context browsers[].tabs[].windowId

  • xnumber

    X coordinate from captureTab (MV2); provide this with y OR readablePath, not both

  • ynumber

    Y coordinate from captureTab (MV2); provide this with x OR readablePath, not both

Похожие MCP-сервера

Browser MCP

Browser MCP

официальный

Browser MCP автоматизирует браузер через ИИ (VS Code, Claude, Cursor, Windsurf) — локально и приватно, с вашим профилем. Сервер обходит капчи и детекцию ботов, подходит для RPA и тестирования разра...

TypeScript7070
automatalabs/mcp-server-playwright

automatalabs/mcp-server-playwright

Сервер для автоматизации браузера через Playwright: позволяет ИИ-агентам открывать страницы, делать скриншоты, кликать, заполнять формы и выполнять JavaScript — полезен для тестирования и сбора данных.

JavaScript299
Browserbase MCP

Browserbase MCP

официальный

MCP сервер облачной автоматизации браузера Browserbase. Позволяет AI-агентам навигировать по сайтам, извлекать данные и выполнять действия. Полезен для RPA и веб-скрапинга. Доступен self-hosted и hosted.

TypeScript3404
freema/firefox-devtools-mcp

freema/firefox-devtools-mcp

MCP-сервер от Mozilla для автоматизации Firefox через WebDriver BiDi. Позволяет ИИ-агентам (Claude, Cursor) управлять браузером: навигация, скриншоты и работа с консолью/сетью. Полезен разработчика...

TypeScript401
ymw0407/auth-fetch-mcp

ymw0407/auth-fetch-mcp

MCP сервер для AI-ассистентов: открывает браузер для входа на защищённые страницы, захватывает очищенный HTML и сохраняет сессии локально. Помогает разработчикам читать сайты с авторизацией через ИИ без повторных логинов.

TypeScript36
executeautomation/playwright-mcp-server

executeautomation/playwright-mcp-server

Сервер для браузерной автоматизации на Playwright. Используется AI-агентами для открытия страниц, скриншотов, веб-скрапинга и выполнения JavaScript в реальном браузере. Отлично подходит для тестиро...

TypeScript5644
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин