easy-ui-mcp
easy-ui-mcp
Ein Dockerisierter MCP-Server (Model Context Protocol) für lokale UI-Tests. Er stellt Playwright-basierte Browser-Automatisierungswerkzeuge über HTTP/SSE bereit, sodass ein KI-Agent (wie Claude Code) Web-UI-Abläufe Schritt für Schritt steuern und einen JSON- und HTML-Bericht mit Screenshots zurückbekommen kann – ohne serverseitiges LLM, ohne Testskripte schreiben zu müssen.
Schnellstart
docker compose up -d --build
curl http://localhost:8765/health
# {"status":"ok"}Claude Code verbinden:
claude mcp add --transport http easy-ui-mcp http://localhost:8765/mcpBitten Sie dann Claude Code, zu einer Seite zu navigieren und einen Screenshot zu machen – es wird die untenstehenden Werkzeuge aufrufen und Bericht erstatten.
Verwenden Sie dies aus einem anderen Repository? Die MCP-Registrierung ist pro Projekt – führen Sie claude mcp add auch aus dem Stammverzeichnis dieses Repos aus (der Container oben muss nur einmal laufen, wird aber von mehreren Repos gemeinsam genutzt). Siehe AGENTS.md → Using easy-ui-mcp From Another Repo für die vollständigen erforderlichen Schritte.
Related MCP server: Playwright MCP Server
Netzwerk
Der Container läuft mit network_mode: host in docker-compose.yml (nicht über einen veröffentlichten Port auf einem Bridge-Netzwerk). Dies ist erforderlich, nicht optional: Der Browser, den Playwright in diesem Container steuert, muss localhost:<port> auf Ihrem Host-Rechner erreichen, wo der Dev-Server der Ziel-App (das Repo, das Sie testen) tatsächlich läuft. Ein Standard-Bridge-Netzwerk gibt dem Container einen eigenen isolierten Netzwerk-Namespace ohne Route zurück zum Host – Ziel-URLs wie http://localhost:8766 hängen oder schlagen mit ERR_CONNECTION_REFUSED fehl, und http://<Host-LAN-IP>:8766 läuft einfach in einen Timeout, selbst wenn der Zielserver lauscht und über curl von der Host-Shell erreichbar ist.
Wenn Sie diesen Container irgendwo forken/neu bereitstellen, wo network_mode: host nicht verfügbar ist (z. B. Docker Desktop auf macOS/Windows, wo die Host-Netzwerkunterstützung eingeschränkt oder nicht vorhanden ist), verwenden Sie host.docker.internal als Ziel-Hostname anstelle von localhost, wenn Sie ui_navigate aufrufen, und fügen Sie einen network_mode: host-Fallback von extra_hosts: ["host.docker.internal:host-gateway"] zu docker-compose.yml hinzu.
Werkzeuge
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 – plus einen REST-Wrapper unter POST /api/run-test für Nicht-MCP-Aufrufer.
Beschriften Sie Ihre Schritte
ui_step(label) gruppiert alles, was danach folgt, unter einer Überschrift in einfacher Sprache, bis zum nächsten ui_step. Das Label ist die einzige vom Aufrufer verfasste Absichtserklärung im Bericht. Der Server verwendet deterministische Vorlagen wie „Geöffnet …“, „Geklickt …“ und „Ausgefüllt …“ für einzelne Aktionen – kein LLM läuft im Container –, sodass eine unbeschriftete Sitzung dennoch lesbare Aktionsbeschreibungen unter einer impliziten Gruppe rendert.
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_sessionSitzungen ohne ui_step-Aufrufe werden weiterhin korrekt gerendert, unter einer einzigen impliziten Gruppe.
Verifizieren vs. Warten – wählen Sie das Richtige
Eine Sitzung wird als failed markiert, wenn eine harte Aktion fehlschlägt. Wie Sie verifizieren, entscheidet also darüber, ob der Bericht die Wahrheit sagt.
Werkzeug | Bedingung falsch bedeutet | Verwenden Sie es für |
| Die Sitzung schlägt fehl. | Eine Behauptung über die App: „Der Schalter ist jetzt an“ |
| Wird aufgezeichnet und angezeigt, Lauf läuft weiter | Eine Beobachtung, die Sie im Bericht haben möchten, die den Lauf aber nicht verurteilen soll |
| Pollt weiter; Timeout lässt die Sitzung fehlschlagen | Warten, bis die Seite gerendert oder stabil ist |
Rufen Sie ui_assert niemals in einer Wiederholungsschleife auf, um auf etwas zu warten – das erste falsche Ergebnis lässt den Lauf dauerhaft fehlschlagen, selbst wenn die App in Ordnung ist. Dafür ist ui_wait_for da.
Für sowohl ui_check als auch ui_wait_for gilt: Eine Bedingung, die nicht ausgeführt werden kann (keine Seite geöffnet oder der Ausdruck wirft eine Ausnahme), ist immer ein harter Fehler: Das ist ein Harness-Fehler, keine Beobachtung.
Auto-Fehler-Screenshots sind pro Sitzung budgetiert (FAILURE_SCREENSHOT_BUDGET, Standard 3). Identischer Screenshot-Inhalt wird im HTML-Bericht nur einmal eingebettet.
Was der Bericht zeigt
Ein Urteilsfeld (Status, Ziel, Schritt-/Aktions-/Fehleranzahl, Dauer), dann der Lauf als beschriftete Schritte mit Ergebnissen und verstrichener Zeit pro Schritt, dann etwaige Browserprobleme und schließlich das rohe Aktionsprotokoll hinter einer Aufklappfläche.
Konsolenfehler, nicht abgefangene Seitenfehler und Netzwerkfehler bei Anfragen werden automatisch erfasst und unter Browserprobleme aufgelistet – ein Ablauf, der besteht, während die Konsole wirft, ist ein falsches Grün, das man sehen sollte. HTTP-Fehlerantworten wie 404 oder 500 lösen Playwrights requestfailed-Ereignis nicht aus und werden nicht automatisch aufgelistet. Erfasste Probleme sind informativ und ändern niemals das Urteil. Bis zu 50 werden pro Sitzung aufbewahrt; darüber hinaus sagt der Bericht, dass der Rest verworfen wurde.
Siehe AGENTS.md für die Architektur und die vollständige MCP-Verbindungsanleitung sowie HARNESS.md für die REST-API-Referenz. Bereitstellungs-/Rollback-Verfahren finden Sie in RUNBOOK.md.
Umfang (v1)
Nur Web (Chromium), nur lokal, noch keine mobile Unterstützung. Siehe PRD.md für die vollständige Produktabsicht und PROJECT_SPEC.md für Architekturentscheidungen.
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