Goal-driven Playwright browser sessions for LLMs, with full action traces and aria-snapshots.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.

A Model Context Protocol server that gives an LLM a real Chromium browser, records every action it takes toward a stated goal, and hands back a structured trace so the LLM (or a second LLM) can decide whether the goal was actually achieved.
Built on Playwright. Five tools, one binary, no cloud dependency.
Most browser-tool MCP servers are stateless β the LLM clicks, gets HTML back, repeats. There's no record of what happened, no way to grade the run after the fact, and no goal context.
cowork-qa-mcp flips that:
goto, click, fill, press, eval) is recorded with timestamps, the URL after, and the page's aria-snapshot.qa_get_trace call.The orchestrating LLM can then reason over the trace ("did this run actually fulfill the goal, or did it click the wrong button?") instead of trusting the run-time chatter.
| Tool | What it does |
|---|---|
session_start | Open a fresh tab, optional starting URL, return a session id |
session_act | Run one of: goto, click, fill, press, eval. Records the step. |
session_observe | Return current URL + full aria-snapshot of the page |
session_end | Close the tab, persist the trace to disk, return the file path |
qa_get_trace | Return the goal, every step, final URL, and final aria-snapshot β formatted for an LLM to read |
Requires Node 20+. The package is on npm β no clone needed.
The first install pulls Chromium via Playwright's postinstall (~150 MB).
To watch the browser instead of running headless:
Verify with /mcp inside a fresh claude session β you should see cowork-qa β connected and 5 tools.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
Any client that speaks the MCP stdio transport works. Point its server config at npx -y cowork-qa-mcp.
This server is also published on the official MCP Server Registry as io.github.inSideos-designs/cowork-qa β clients that auto-discover from the registry will find it without any manual config.
| Variable | Default | Purpose |
|---|---|---|
COWORK_QA_HEADED | unset (headless) | Set to 1 to launch Chromium with a visible window |
COWORK_QA_DATA | <cwd>/.cowork-qa | Directory where <session-id>.json traces are written |
A typical end-to-end loop the orchestrating LLM runs:
Each trace is a JSON file:
session_observe calls don't show up in the trace's step count β only session_act calls do. The final aria-snapshot is captured at session_end.eval runs the JS expression but doesn't return the value to the caller β only side effects on the page are observable.button:has-text("Send")), and role= selectors all work.MIT β see LICENSE.
PRs welcome. Keep it small: this is meant to stay a thin, auditable server.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/cowork-qa)<a href="https://allmcps.com/mcp/cowork-qa"><img src="https://allmcps.com/api/badge/cowork-qa?style=directory" alt="Cowork Qa on AllMCPs" /></a>