screenwright
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@screenwrightRecord a tutorial for setting up a new user account"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π¬ Screenwright
Subtitled tutorial videos, scripted. An MCP server that turns a list of steps into a narrated screen recording by driving a real browser with Playwright β captions burned into the video and exported as an
.srt.
The name is a play on Playwright (the engine under the hood) + screen.
steps[] βββΊ Playwright drives the browser βββΊ caption overlay synced per step
βββΊ video recorded βββΊ ffmpeg β .mp4 + .srt sidecarβ¨ Features
Scripted walkthroughs β
goto,click,fill,type,press,hover,scroll,wait.Synced subtitles β attach a
captionto any step; it's burned into the video and written to a timed.srt.Self-contained output β bundled
ffmpeg(viaffmpeg-static) produces a clean H.264.mp4.Robust β per-action timeouts; mark a step
optionalso a missing selector doesn't abort the take.Use it from an AI (MCP tool) or straight from Node.
Related MCP server: Playwright MCP Automation
π¦ Requirements
Node.js 18+
A Chromium build for Playwright:
npx playwright install chromium(run automatically onnpm install).
π Install
# from GitHub
npm install -g github:0xjesus/screenwright
# or clone
git clone https://github.com/0xjesus/screenwright.git
cd screenwright && npm installπ Use as an MCP server
Add it to your MCP client. Claude Desktop / Claude Code (claude_desktop_config.json or .mcp.json):
{
"mcpServers": {
"screenwright": {
"command": "node",
"args": ["/absolute/path/to/screenwright/src/index.js"]
}
}
}(If installed globally, you can use "command": "screenwright" with no args.)
Then just ask your assistant to record a tutorial β it calls the record_tutorial tool.
Tool: record_tutorial
Field | Type | Notes |
| string | Path to the output |
| step[] | Ordered steps (below). |
| string? | So |
|
| Default |
| bool? | Default |
| string? | e.g. |
| bool? | Burn captions into the video. Default |
| string? | Custom |
| object? |
|
Step = { caption?, action, url?, selector?, text?, key?, deltaY?, delayMs?, timeoutMs?, dwellMs?, optional? }.
selector is any Playwright selector β CSS, text=β¦, xpath=β¦, or :has-text(β¦).
π§ͺ Use from Node (no MCP)
node scripts/run-example.js # records examples/demo.json
node scripts/run-example.js examples/capleton.jsonimport { recordTutorial } from 'screenwright/recorder';
await recordTutorial({
output: 'out/tour.mp4',
baseUrl: 'https://playwright.dev',
steps: [
{ action: 'goto', url: '/', caption: 'Welcome to the tour π¬', dwellMs: 2600 },
{ action: 'scroll', deltaY: 600, caption: 'Each step can carry a synced subtitleβ¦', dwellMs: 2400 },
{ action: 'goto', url: '/docs/intro', caption: 'β¦burned into the video and exported as .srt', dwellMs: 3000 },
],
});
// β { mp4, srt, durationMs, steps, captions }π‘ Tips
Don't double your subtitles. The
.mp4already has burned-in captions. Players like VLC auto-load an.srtthat shares the video's name and draw it on top. Screenwright defaults the sidecar to*.captions.srt(a non-matching name) so that doesn't happen β keep it that way, or disable the subtitle track in your player. Want selectable-only subs? PassburnIn: falsefor a clean video + the.srt.Black video in VLC on Linux? That's a GPU/output glitch, not the file. Launch with
vlc --avcodec-hw=none --vout=xcb_x11, or set those in VLC β Preferences.Headless still records β no display needed.
π License
MIT Β© 0xjesus
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.
Latest Blog Posts
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/0xjesus/screenwright'
If you have feedback or need assistance with the MCP directory API, please join our Discord server