web-picker
Web Picker
Выберите элемент интерфейса на странице localhost в браузере, введите запрос на исправление, и ваш MCP-агент для кодинга (Claude Code, Codex, ...) заберёт его и отредактирует код.
Хватит описывать элементы словами. Нажмите на элемент. Захват содержит минимальные подсказки, необходимые агенту, чтобы найти именно этот элемент в вашей кодовой базе — при этом конфиденциальные значения никогда не утекают.
v1 по замыслу работает только с localhost. Никакого облака, аккаунтов и API-ключей.
Как это работает
Browser (localhost page) Local machine Coding agent
┌────────────────────────┐ ┌───────────────────────┐ ┌──────────────────┐
│ content script │ │ Daemon (127.0.0.1) │ │ MCP adapter │
│ pick + mask + rank │ │ durable queue │ │ connect / list │
│ │ runtime msg │ │ extension HTTP │ │ pull / resolve │
│ service worker ────────┼HTTP►│ token IPC /ipc │◄────┤ (7 MCP tools) │
└────────────────────────┘ └───────────────────────┘ IPC └──────────────────┘Демон привязывается только к
127.0.0.1. Воркер расширения принимает сообщения только от подтверждённых Chrome вкладок localhost, а эндпоинты расширения демона принимают только закреплённыйchrome-extension://mnglicpibnccgcifnndemfpidkcgboliOrigin. IPC MCP-адаптера защищён токеном, уникальным для каждого запуска.Не зависит от агента: демону неизвестно, является ли агент Claude Code или Codex. Различается только шаг регистрации.
Маскирование сохраняет идентичность: значения полей ввода, email-адреса и токены никогда не экспортируются; короткие видимые метки, селектор, предки и landmark сохраняются, чтобы агент мог найти цель.
Related MCP server: Peek
Требования
Node.js >= 20.18.0 (проверено на 20.20.2)
Google Chrome (MV3, загрузить распакованное)
Агент для кодинга, поддерживающий MCP (Claude Code или Codex)
Установка
./bootstrap.sh # macOS/Linux (installs deps + builds)
# or
pwsh ./bootstrap.ps1 # WindowsЗатем:
Загрузите расширение Chrome Откройте
chrome://extensions→ включите Режим разработчика → нажмите Загрузить распакованное → выберите папкуextension/.Зарегистрируйте MCP-сервер в вашем агенте:
./scripts/register-claude-code.sh # Claude Code ./scripts/register-codex.sh # CodexОба способа указывают агенту на
scripts/run.cjs, который лениво запускает демон.
Пятиминутный сценарий проверки (без ключей и аккаунтов)
Весь цикл воспроизводим с одной лишь демо-страницы. Автоматическая проверка обычно укладывается в пять минут на машине с установленным Chrome и графическим рабочим столом; не нужен ни API-ключ модели, ни загрузка браузера Playwright.
Настройка
./bootstrap.shЗапустите демо-страницу на localhost
python3 -m http.server 3000 --directory test-pageОткройте http://localhost:3000. На ней есть три кнопки с одинаковой подписью 저장 — в шапке, основной части и подвале; это намеренный набор приманок.
Загрузите расширение (см. шаг 1 установки) и зарегистрируйте своего агента (шаг 2 установки).
Выберите элемент
Нажмите кнопку 픽 (справа внизу) → 요소 선택.
Наведите курсор на кнопку 저장 в основной области (в карточке профиля) и нажмите её.
Введите запрос, например
이 버튼을 파란색으로, и нажмите 보내기.Вы должны увидеть
요청을 큐에 보냈습니다.
Заберите его с помощью агента В сессии Claude Code / Codex:
connect_web_picker→ забирает пикер, показывает количество ожидающих.list_web_requests→ показывает ваш запрос с его id и статусом.get_web_requestс этим id → показывает подсказки о цели. Обратите внимание, чтоlandmark: section(и селектор#profile-save) отличают его от приманок 저장 в шапке и подвале (landmark: header/landmark: footer), хотя у всех трёх одна и та же видимая подпись 저장.resolve_web_requestс этим id → помечает его решённым.
Этот цикл с приманками покрыт как безбраузерным интеграционным набором, так и настоящим E2E-тестом Chrome ниже.
Воспроизведение без браузера (полностью автоматизировано)
npm testtest/integration.test.ts отправляет три захвата-приманки, затем прогоняет реальные MCP-инструменты по цепочке connect → list → get → resolve, проверяя, что выбранный элемент идентифицируется однозначно. Он также выполняет холодный запуск собранного демона из dist/.
Воспроизведение с реальным расширением Chrome
npm run test:e2e открывает установленный Google Chrome в новом профиле с видимым окном, загружает распакованное расширение extension/, выполняет выбор кнопки профиля через реальный контентный интерфейс, а затем проверяет и помечает запрос из очереди решённым через MCP-клиент. Требуется графическая сессия рабочего стола; обычно выполнение занимает около 10 секунд. Браузер при этом не скачивается.
macOS или Linux:
npm run test:e2e
# For a non-standard Chrome install:
PLAYWRIGHT_CHROME_EXECUTABLE=/path/to/google-chrome npm run test:e2eWindows PowerShell:
npm run test:e2e
# For a non-standard Chrome install:
$env:PLAYWRIGHT_CHROME_EXECUTABLE = 'C:\Path\To\chrome.exe'
npm run test:e2eЕсли Chrome отсутствует или переопределение не указывает на установленный исполняемый файл, тест завершается ошибкой:
Google Chrome is required for npm run test:e2e; install Chrome or set PLAYWRIGHT_CHROME_EXECUTABLEБезопасность по умолчанию
Демон привязан только к
127.0.0.1.Расширение активируется только на страницах
localhost/127.0.0.1/*.localhost.Воркер расширения принимает только подтверждённых Chrome отправителей из вкладок localhost; HTTP-эндпоинты расширения требуют точного закреплённого Origin расширения. IPC требует токен (сравниваемый за постоянное время), хранящийся с правами
0600в~/.web-picker/token.Значения полей ввода и строки, похожие на email, длинные числа или токены, никогда не экспортируются. Тот же фильтр применяется к селектору,
id,class,role,aria-label,name, сводкам предков и замаскированному HTML, сохраняя при этом безопасные токены классов для идентификации цели.datasetотправляет только неконфиденциальные имена ключей после нормализации DOM; значения никогда не покидают страницу.
MCP-инструменты
Инструмент | Назначение |
| Подключиться, зарегистрировать сессию, забрать пикер, сообщить об ожидающих |
| Список запросов в очереди (автоматически забирает при первом использовании) |
| Долгий опрос новых запросов |
| Полная информация об одном запросе (подсказки о цели) |
| Пометить запрос как решённый |
| Освободить сессию пикера |
| Забрать сессию у другого агента |
Разработка
npm test # vitest (unit + jsdom + integration; excludes real Chrome)
npm run test:e2e # headed installed-Chrome round trip
npm run build # tsc -> dist/
npm run benchmark # deterministic target-disambiguation benchmark -> artifacts/
npm run sbom # CycloneDX 1.5 inventory -> artifacts/sbom.cdx.jsonnpm run sbom отклоняет версии Node ниже задокументированного минимального уровня engine, восстанавливает полученные из lock-файла метаданные integrity/development/optional, проверяет итоговый CycloneDX JSON и записывает канонические байты независимо от скрытого lock-кэша npm.
npm run benchmark измеряет только устранение неоднозначности цели на 30 статических HTML-фикстурах. Он включает сбалансированные контрольные случаи с неоднозначными и уникальными метками, а также как успешные, так и неуспешные разрешения локаторов. Это не показатель продуктивности агента для кодинга и не показатель поиска по исходникам. В результатах фиксируются: разрешение только по тексту, разрешение локатора Web Picker, глобальная и категорийная × калибровка достоверности, страты меток и размеры сериализованного payload захвата в байтах — в artifacts/benchmark-results.json и artifacts/benchmark-results.md.
Архитектура: чистое ядро (src/daemon/state.ts) + обработчики приложения (extension-api, ipc-api, tools) + тонкие адаптеры (server.ts, исходный код MCP-адаптера в src/shim/, spawn.ts). Порты внедряются, поэтому всё проходит модульные тесты без сокетов. См. docs/architecture.md.
Материалы для подачи: docs/dependencies.md, docs/video-script.md и docs/submission-checklist.md. URL публичного репозитория и YouTube остаются явными блокерами чек-листа, пока владелец не опубликует и не проверит их.
Лицензия
MIT. Лицензии зафиксированных зависимостей записаны из метаданных установленных пакетов в docs/dependencies.md. Зависимостей времени выполнения семейства GPL нет.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server and Chrome extension that allows users to select browser DOM elements via a keyboard shortcut to provide detailed technical context to AI coding tools. It captures HTML attributes, CSS styles, and React component metadata, enabling agents to analyze and modify web elements directly.592MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to take screenshots of local web pages and capture user-selected UI elements via a bookmarklet, providing element metadata for precise visual understanding.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables visual annotation on web pages for Claude Code, allowing element selection, comment addition, screenshot capture, and structured UI feedback for code fixes via an MCP server.MIT
- AlicenseNot gradedqualityCmaintenanceEnables designing, modifying, and bug reporting in web apps, sending changes to coding agents via MCP.1346MIT
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Give AI coding agents access to your Vynix visual feedback, bug reports, and AI diagnosis.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/chappse6/web-picker'
If you have feedback or need assistance with the MCP directory API, please join our Discord server