Multi-agent browser MCP runtime for isolated, persistent, parallel Playwright sessions. Run multiple AI agents without shared tabs or browser state.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 35 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
browser_action_and_wait
-
browser_back
-
browser_check
-
browser_click
-
browser_double_click
-
browser_drag_and_drop
-
browser_fill
-
browser_focus
-
browser_forward
-
browser_get_title
-
browser_get_url
-
browser_hover
-
browser_navigate
-
browser_observe
-
browser_page_close
-
browser_page_create
-
browser_page_list
-
browser_press
-
browser_reload
-
browser_runtime_info
-
browser_screenshot
-
browser_scroll
-
browser_scroll_into_view
-
browser_select_option
-
browser_session_close
-
browser_session_create
-
browser_session_get
-
browser_session_list
-
browser_snapshot
-
browser_state_list
-
browser_state_remove
-
browser_state_save
-
browser_uncheck
-
browser_visible_text
-
browser_wait
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 80
filesystem 12
- fs (weak) scrollDynasty-BrowserMesh-8d85176/scripts/generate-version.ts :1
import { readFile, writeFile } from 'node:fs/promises'; - fs (weak) scrollDynasty-BrowserMesh-8d85176/scripts/verify-package.ts :8
import { constants } from 'node:fs'; - fs scrollDynasty-BrowserMesh-8d85176/src/adapters/diagnostics/data-directory-probe.ts :1
import { constants } from 'node:fs'; - fs scrollDynasty-BrowserMesh-8d85176/src/adapters/persistence/filesystem-state-repository.ts :1
import { mkdir, open, readdir, rename, rm, stat, writeFile } from 'node:fs/promises'; - fs scrollDynasty-BrowserMesh-8d85176/src/adapters/playwright/playwright-browser-engine.ts :15
import { constants } from 'node:fs'; - fs (weak) scrollDynasty-BrowserMesh-8d85176/tests/integration/doctor-cli.test.ts :2
import { mkdtemp, rm, writeFile } from 'node:fs/promises'; - fs (weak) scrollDynasty-BrowserMesh-8d85176/tests/integration/fatal-process.test.ts :2
import { mkdtemp, readFile, rm } from 'node:fs/promises'; - fs (weak) scrollDynasty-BrowserMesh-8d85176/tests/integration/stdio.test.ts :3
import { mkdtemp, rm } from 'node:fs/promises'; - fs (weak) scrollDynasty-BrowserMesh-8d85176/tests/support/real-runtime.ts :1
import { mkdtemp, rm } from 'node:fs/promises'; - fs (weak) scrollDynasty-BrowserMesh-8d85176/tests/unit/architecture.test.ts :1
import { readFile, readdir } from 'node:fs/promises'; - fs (weak) scrollDynasty-BrowserMesh-8d85176/tests/unit/persistence.test.ts :1
import { mkdtemp, readdir, rm, writeFile } from 'node:fs/promises'; - fs (weak) scrollDynasty-BrowserMesh-8d85176/tests/unit/publish-workflow.test.ts :2
import { readFile } from 'node:fs/promises';
shell / exec 5
- shell (weak) scrollDynasty-BrowserMesh-8d85176/scripts/verify-package.ts :6
import { execFile } from 'node:child_process'; - shell scrollDynasty-BrowserMesh-8d85176/src/install-browser.ts :1
import { spawn } from 'node:child_process'; - shell (weak) scrollDynasty-BrowserMesh-8d85176/tests/integration/doctor-cli.test.ts :1
import { execFile } from 'node:child_process'; - shell (weak) scrollDynasty-BrowserMesh-8d85176/tests/integration/fatal-process.test.ts :1
import { execFile } from 'node:child_process'; - shell (weak) scrollDynasty-BrowserMesh-8d85176/tests/unit/publish-workflow.test.ts :1
import { execFile } from 'node:child_process';
network 4
- net (weak) scrollDynasty-BrowserMesh-8d85176/scripts/verify-package.ts :10
import { createServer, type Server } from 'node:http'; - net (weak) scrollDynasty-BrowserMesh-8d85176/tests/integration/browser-runtime.test.ts :2
import { createServer } from 'node:net'; - net (weak) scrollDynasty-BrowserMesh-8d85176/tests/support/test-web-server.ts :1
import { createServer, type Server } from 'node:http'; - net (weak) scrollDynasty-BrowserMesh-8d85176/tests/unit/test-web-server.test.ts :18
const response = await fetch(`${server.baseUrl}/delay?ms=${delay}`);
secrets 1
- secrets (weak) scrollDynasty-BrowserMesh-8d85176/tests/integration/fatal-process.test.ts :18
const secret = process.env.BROWSERMESH_FATAL_TEST_SECRET;
tool registrations 35
- browser_runtime_info scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :317
- browser_session_create scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :342
- browser_session_list scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :365
- browser_session_get scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :378
- browser_session_close scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :392
- browser_page_create scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :407
- browser_page_list scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :426
- browser_page_close scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :440
- browser_navigate scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :455
- browser_back scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :465
- browser_forward scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :475
- browser_reload scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :485
- browser_get_url scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :495
- browser_get_title scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :505
- browser_snapshot scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :515
- browser_visible_text scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :548
- browser_observe scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :571
- browser_click scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :595
- browser_double_click scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :610
- browser_hover scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :625
- browser_focus scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :640
- browser_check scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :655
- browser_uncheck scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :670
- browser_scroll_into_view scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :685
- browser_scroll scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :700
- browser_drag_and_drop scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :711
- browser_fill scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :728
- browser_press scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :743
- browser_select_option scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :758
- browser_screenshot scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :773
- browser_wait scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :812
- browser_action_and_wait scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :834
- browser_state_save scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :858
- browser_state_list scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :872
- browser_state_remove scrollDynasty-BrowserMesh-8d85176/src/adapters/mcp/server.ts :885
install hooks 1
- prepack scrollDynasty-BrowserMesh-8d85176/package.json :52
npm run generate:version
declared dependencies 20
- @modelcontextprotocol/sdk@^1.30.0
- playwright@1.62.1
- yaml@^2.9.0
- zod@^4.4.3
- @eslint/js@^10.0.1
- @fontsource-variable/geist@^5.3.0
- @fontsource-variable/geist-mono@^5.3.0
- @types/escape-html@^1.0.4
- @types/node@^22.20.1
- @vitest/coverage-v8@^4.1.10
- ajv@^8.20.0
- escape-html@^1.0.3
- eslint@^10.0.2
- prettier@^3.9.0
- tsx@^4.23.0
- typescript@^6.0.3
- typescript-eslint@^8.56.1
- vite@^8.2.1
- vitepress@2.0.0-alpha.19
- vitest@^4.1.0