
Security News
PHP Foundation Says Chainguard Broke Security Embargo Ahead of Emergency Patches
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.
playwright-mcp-tabbed
Advanced tools
Playwright MCP server with per-tool tab_index support for parallel agent use

A tab-aware Playwright MCP server for parallel agent workflows.
playwright-mcp-tabbed adds explicit tab_index support to Playwright MCP tools so multiple agents can operate on different tabs while sharing a single browser context and login session.
The official @playwright/mcp model is centered around a shared active page. That is perfectly fine for single-agent flows, but it becomes fragile in concurrent workflows:
This project removes that shared active-tab assumption. Instead, each tool call can target a tab directly.
playwright-mcp-tabbed is especially useful when browser automation is part of a larger agent workflow.
One main agent logs in once, opens several tabs, and assigns one tab_index to each bug-fixing sub-agent. Every sub-agent can reproduce and verify its own issue in parallel without losing authentication state.
After a refactor, different agents can validate /orders, /wallet, /settings, and /users at the same time while staying inside the same logged-in admin session.
One tab points to the old app, another to the migrated app, and another to a staging environment. Agents can compare behavior or styling in parallel without repeatedly logging in.
Instead of forcing one agent to serialize a long browser journey, you can split related subflows into dedicated tabs and assign them to separate agents.
tab_indexThis gives you:
tab_index (and stable tab_id) to nearly all browser toolsbrowser_context_info explains open tabs and reminds that localhost vs 127.0.0.1 use different cookiesPLAYWRIGHT_MCP_BASE_URL plus browser_navigate.base_url for relative paths like /dashboardbrowser_snapshot supports root_selector and max_chars to limit MCP payload sizebrowser_click supports force, trial, and timeout (Playwright semantics)browser_network_requests supports limit and url_containsbrowser_tabs
Supports action: "list" | "new" | "close"; new accepts optional label; list includes tab_id per tabbrowser_context_info
JSON summary of tabs, origins, and per-origin storage notebrowser_navigatebrowser_snapshotbrowser_take_screenshotbrowser_run_codebrowser_clickbrowser_typebrowser_fill_formbrowser_file_uploadbrowser_hoverbrowser_select_optionbrowser_press_keybrowser_wait_forbrowser_evaluatebrowser_navigate_backbrowser_network_requestsbrowser_console_messagesbrowser_resizebrowser_dragbrowser_handle_dialogbrowser_closebrowser_installTools that target a page accept either tab_index or tab_id (mutually exclusive). Prefer tab_id when sub-agents might race on tab creation order.
{ "tab_index": 1 }
{ "tab_id": "550e8400-e29b-41d4-a716-446655440000" }
Exceptions (no tab argument): browser_tabs, browser_close, browser_install, browser_context_info.
PLAYWRIGHT_MCP_BASE_URL — optional default origin for relative URLs in browser_navigate (e.g. http://127.0.0.1:3000).PLAYWRIGHT_MCP_RECORD_VIDEO_DIR — optional writable directory for Playwright video recording. When set, each tab/page created in the shared browser context records a video. Video files are finalized when the page or browser context closes.@playwright/mcpbrowser_tabs.select is intentionally not implementedtab_index routingnpm install playwright-mcp-tabbed
git clone https://github.com/songofhawk/playwright-mcp-tabbed
cd playwright-mcp-tabbed && npm install
Add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"playwright-tabbed": {
"command": "node",
"args": ["/absolute/path/to/playwright-mcp-tabbed/dist/index.js"],
"env": {
"PLAYWRIGHT_MCP_RECORD_VIDEO_DIR": "/absolute/path/to/recordings"
}
}
}
}
You can keep the official playwright server alongside it and only use playwright-tabbed for concurrent browser tasks.
If you do not need recording, omit env or leave PLAYWRIGHT_MCP_RECORD_VIDEO_DIR unset.
This repository includes an optional Agent Skill (for Cursor, Claude Code, and similar hosts) that documents how a main agent should create tabs, assign stable tab_ids to parallel sub-agents, and merge results—aligned with this MCP server.
skills/playwright-tabbed-orchestration/ — contains SKILL.md and helper script scripts/resolve-base-url.js.playwright-tabbed MCP server in your client (see Add to Cursor).dist/ and skills/; you can copy from node_modules/playwright-mcp-tabbed/skills/playwright-tabbed-orchestration after install, or clone / use GitHub subpath (below) so paths stay stable.Resolve PLAYWRIGHT_BASE_URL, open N tabs, split URL/scenario lists, spawn N sub-agents (each scoped to one tab_id), then summarize. Full steps, guardrails, and a sub-agent prompt template are in SKILL.md.
Cursor — copy the folder into a skills directory your Cursor version recognizes, for example:
<your-project>/.cursor/skills/playwright-tabbed-orchestration/Claude Code — copy to:
<repo>/.claude/skills/playwright-tabbed-orchestration/ (or the global skills location described in Anthropic’s docs).OpenAI Codex — use the Codex skill-installer helper against this repository and the subpath below (adjust --ref if not on main):
python scripts/install-skill-from-github.py \
--repo songofhawk/playwright-mcp-tabbed \
--path skills/playwright-tabbed-orchestration
Equivalent tree URL:
https://github.com/songofhawk/playwright-mcp-tabbed/tree/main/skills/playwright-tabbed-orchestration
Restart Cursor / Codex (or reload skills) after copying or installing.
resolve-base-url.jsFrom the skill root:
cd skills/playwright-tabbed-orchestration
node scripts/resolve-base-url.js --help
Prints the site root URL from PLAYWRIGHT_BASE_URL (environment variable and/or git-root .env.local / .env / playwright.env.local). When resolving from project files, run with your terminal cwd on the application repository, or set PLAYWRIGHT_BASE_URL explicitly.
Use playwright-mcp-tabbed when:
Stay with the official @playwright/mcp when:
This project intentionally favors explicit tab routing over active-tab semantics. If your tooling depends on browser_tabs.select, this server is not a drop-in replacement for that specific behavior.
MIT
FAQs
Playwright MCP server with per-tool tab_index support for parallel agent use
The npm package playwright-mcp-tabbed receives a total of 0 weekly downloads. As such, playwright-mcp-tabbed popularity was classified as not popular.
We found that playwright-mcp-tabbed demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.

Security News
PHP releases emergency patches for two critical RCE vulnerabilities as agencies urge organizations to take unpatched sites offline.

Threat Research
/Security News
A supply chain attack compromised LiteLLM 1.107.0 on PyPI and Docker, spreading malware that steals cloud credentials, developer secrets, and AI provider keys.