easy-ui-mcp
easy-ui-mcp
Docker-контейнер MCP-сервера (Model Context Protocol) для локального тестирования UI. Он предоставляет инструменты автоматизации браузера на основе Playwright через HTTP/SSE, чтобы ИИ-агент (например, Claude Code) мог пошагово выполнять сценарии веб-интерфейса и получать отчёт JSON + HTML со скриншотами — без серверной LLM и без написания тестовых сценариев.
Быстрый старт
docker compose up -d --build
curl http://localhost:8765/health
# {"status":"ok"}Подключите Claude Code:
claude mcp add --transport http easy-ui-mcp http://localhost:8765/mcpЗатем попросите Claude Code перейти на страницу и сделать скриншот — он вызовет инструменты, описанные ниже, и сообщит о результате.
Используете это из другого репозитория? Регистрация MCP выполняется для каждого проекта отдельно — выполните claude mcp add также из корня того репозитория (контейнер выше достаточно запустить один раз; он общий для всех репозиториев). Полный список необходимых шагов см. в AGENTS.md → Использование easy-ui-mcp из другого репозитория.
Related MCP server: Playwright MCP Server
Сеть
Контейнер запускается с network_mode: host в docker-compose.yml (а не через опубликованный порт на bridge-сети). Это обязательно, а не опционально: браузер, которым Playwright управляет внутри этого контейнера, должен иметь доступ к localhost:<port> на вашей хост-машине, где на самом деле работает dev-сервер целевого приложения (тестируемого репозитория). Стандартная bridge-сеть выдаёт контейнеру собственное изолированное сетевое пространство имён и вообще не предоставляет маршрута обратно к хосту — целевые URL вида http://localhost:8766 будут зависать или завершаться ошибкой ERR_CONNECTION_REFUSED, а http://<host-LAN-IP>:8766 просто выйдет по таймауту, даже если целевой сервер слушает порт и доступен через curl из оболочки хоста.
Если вы форкаете или переразворачиваете этот контейнер там, где network_mode: host недоступен (например, Docker Desktop на macOS/Windows, где поддержка host-сетей ограничена или отсутствует), используйте host.docker.internal в качестве имени целевого хоста вместо localhost при вызове ui_navigate, а в docker-compose.yml добавьте запасной вариант для network_mode: host — extra_hosts: ["host.docker.internal:host-gateway"].
Инструменты
ui_start_session, ui_end_session, ui_step, ui_navigate, ui_click, ui_fill, ui_assert, ui_check, ui_wait_for, ui_get_page_state, ui_take_screenshot — плюс REST-обёртка на POST /api/run-test для клиентов, не использующих MCP.
Подписывайте шаги
ui_step(label) группирует всё, что идёт после него, под заголовком на простом языке — до следующего ui_step. Метка — это единственная в отчёте формулировка намерения, созданная вызывающим кодом. Сервер использует детерминированные шаблоны вида “Opened …”, “Clicked …” и “Filled …” для отдельных действий — внутри контейнера не запускается LLM — поэтому даже сессия без меток по-прежнему отображается в виде читаемых описаний действий в одной неявной группе.
ui_start_session target: "Account Access toggle smoke"
ui_step label: "Open the Settings page"
ui_navigate ...
ui_wait_for ...
ui_step label: "Turn Manual Invoice access on"
ui_click ...
ui_assert ...
ui_end_sessionСессии без вызовов ui_step по-прежнему корректно отображаются в одной неявной группе.
Проверка и ожидание — выбирайте правильно
Сессия помечается как failed, если любое жёсткое действие не удалось, поэтому то, как вы выполняете проверку, определяет, скажет ли отчёт правду.
Инструмент | Ложное условие означает | Используйте для |
| Сессия завершается ошибкой. | Утверждение о приложении: «переключатель теперь включён» |
| Фиксируется и показывается, выполнение продолжается | Наблюдение, которое вы хотите видеть в отчёте, но которое не должно приводить к провалу запуска |
| Продолжает опрос; по истечении таймаута сессия завершается ошибкой | Ожидание рендеринга страницы или её стабилизации |
Никогда не вызывайте ui_assert в цикле повторных попыток, чтобы чего-то дождаться — первый же ложный результат безвозвратно проваливает запуск, даже если приложение в порядке. Именно для этого существует ui_wait_for.
Для ui_check и ui_wait_for условие, которое не может выполниться (страница не открыта или выражение выбрасывает исключение), всегда считается жёстким сбоем: это ошибка обвязки, а не наблюдение.
На автоматические скриншоты сбоев выделяется бюджет на сессию (FAILURE_SCREENSHOT_BUDGET, по умолчанию 3). Идентичное содержимое скриншотов встраивается в HTML-отчёт только один раз.
Что показывает отчёт
Блок вердикта (статус, цель, количество шагов/действий/сбоев, длительность), затем запуск в виде подписанных шагов с результатами и затраченным временем по каждому, затем возможные проблемы браузера и, наконец, сырой журнал действий, свёрнутый за раскрывающимся элементом.
Ошибки консоли, необработанные ошибки страницы и сетевые сбои запросов фиксируются автоматически и перечисляются в разделе Проблемы браузера — сценарий, который проходит, в то время как консоль выбрасывает ошибки, это ложный зелёный результат, который стоит увидеть. Ответы об ошибках HTTP, например 404 или 500, не вызывают событие Playwright requestfailed и не перечисляются автоматически. Зафиксированные проблемы носят информационный характер и никогда не влияют на вердикт. На сессию сохраняется до 50 проблем; сверх этого в отчёте указывается, что остальные были отброшены.
Описание архитектуры и полное руководство по подключению MCP см. в AGENTS.md, а справочник REST API — в HARNESS.md. Процедуры развёртывания и отката описаны в RUNBOOK.md.
Область применения (v1)
Только веб (Chromium), только локально, мобильная поддержка пока отсутствует. Полный замысел продукта см. в PRD.md, а решения по архитектуре — в PROJECT_SPEC.md.
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
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to control browser automation through natural language prompts using Playwright, supporting visual element interaction, PDF generation, screenshots, and testing assertions.
- FlicenseNot gradedqualityDmaintenanceEnables web browser automation and inspection using structured data instead of screenshots, allowing AI agents to interact with web pages programmatically through the Playwright framework.
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to control web browsers through Playwright automation, providing 50+ tools for navigation, interaction, testing, accessibility audits, and visual testing across Chromium, Firefox, and WebKit.10MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to execute browser automation, perform QA tasks, and generate test code through natural language commands using Playwright.5
Related MCP Connectors
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Browser-backed QA with evidence and fix-ready reports for coding agents.
AI QA tester — real browsers scan sites for bugs, SEO, perf, and accessibility issues via chat.
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/thunderkds/easy-ui-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server