e2e_runLABSCO SUMMARY
The test file is short enough to read, and the agent can write it.
Making a test a list of JSON actions removes the part that usually stops people writing end-to-end tests — there is no framework to learn and no build step, so a generated test is also a reviewable one. The visual verification path is the other draw: after the actions finish the runner captures a screenshot and returns its hash, so the model checks what rendered rather than trusting an assertion.
What it is
An end-to-end test runner whose test format is a JSON list of actions — goto, type, click, assert_text, screenshot — with an MCP server on top so an assistant can write and execute those tests for you. It drives a real browser, either a Chrome you already have running on a debug port, a single Obscura binary, or a Docker pool for parallel runs.
What you get
- Write and run:
e2e_create_testande2e_create_moduleproduce test files,e2e_runexecutes all tests or one suite,e2e_listshows what exists - See what the browser saw:
e2e_capturescreenshots any URL,e2e_screenshotretrieves one by hash, ande2e_analyzeextracts a page's interactive elements, forms and headings and emits a test scaffold from them - Debug a failure:
e2e_network_logsqueries the network traffic for a run ande2e_learningsreports stability insights built up across runs - Go from a bug report to a test:
e2e_issuefetches an issue and generates tests from it - Run the dashboard and the environment:
e2e_dashboard_start,e2e_dashboard_stop,e2e_dashboard_restart,e2e_pool_status,e2e_app_pool_status - Keep state between tests:
e2e_varsmanages SQLite-backed project variables,e2e_neo4jmanages the optional knowledge graph
Requirements
Nothing beyond npm and a Chromium-family browser. The package is @matware/e2e-runner (1.5.1 in package.json; server.json publishes 1.5.0 for npm and a Docker image). The MCP entry point is e2e-runner-mcp, added with claude mcp add --transport stdio --scope user e2e-runner -- npx -y -p @matware/e2e-runner e2e-runner-mcp, or installed as a Claude Code plugin. Point it at a browser with CHROME_POOL_URL and POOL_DRIVER, or let the Docker pool start itself. Docker is only needed for the parallel pool, and that path also needs baseUrl set to http://host.docker.internal:3000 so the container can reach your app. Pool start and stop are CLI-only, not exposed over MCP.
Setup effort
One command — npm install --save-dev @matware/e2e-runner
USE CASES
Getting a first end-to-end test to exist
Describe the flow in a sentence, let the runner write the JSON and execute it against a real browser, then read the pass or fail with its screenshot.
Turning a bug report into a regression test
Fetch the issue, generate a test that reproduces it, and keep that test in the suite once the fix lands.
Working out why a passing test still looks wrong
Pull the network log for the run to find requests that failed while the assertions still passed.
Scaffolding tests for a page you did not write
Extract the page's forms, headings and interactive elements and start from the generated skeleton instead of a blank file.
17 tools
Listed in project docs. Your client may show a different list.
e2e_liste2e_create_teste2e_create_modulee2e_pool_statuse2e_app_pool_statuse2e_screenshote2e_capturee2e_analyzee2e_dashboard_starte2e_dashboard_stope2e_dashboard_restarte2e_issuee2e_network_logse2e_learningse2e_varse2e_neo4jBEFORE YOU INSTALL
What to know first
Tools you get
17 tools named in the project's documentation.
INSTALLATION
Connect your client
Server setup
npm install --save-dev @matware/e2e-runnerMCP Clients
Claude Code — Plugin
claude plugin marketplace add fastslack/mtw-e2e-runner
claude plugin install e2e-runner@matwareClaude Code — MCP only
claude mcp add --transport stdio --scope user e2e-runner \
-- npx -y -p @matware/e2e-runner e2e-runner-mcpOpenCode
cp node_modules/@matware/e2e-runner/opencode.json ./
mkdir -p .opencode
cp -r node_modules/@matware/e2e-runner/.opencode/* .opencode/