Browser MCP routing โ which of the 4 browser tools to use
Context
Aspire has FOUR browser-automation MCPs wired up, each with different capabilities, isolation, and concurrency properties. Agents (and Kom) consistently pick the wrong one and hit lock conflicts or auth gaps. This page is the routing decision table.
Detail
The 4 browser MCPs
| MCP | Where | Profile | Concurrency | Auth state | Best for |
|---|---|---|---|---|---|
| Claude in Chrome | Desktop | Paired "Browser 1" | ONE Claude session at a time (flip-flop) | User's real Chrome cookies | Web apps needing the user's logged-in session; visible-to-user driving |
| chrome-devtools | Code | --isolated | Parallel-safe | No cookies (clean) | Ad-hoc clean browser; perf/Lighthouse/network analysis |
| playwright (master) | Code | Persistent ~/.cache/playwright-mcp-profile/ | ONE session at a time | Persistent (logins survive) | Logins + state-changing work; GitLab-authenticated browsing |
| playwright-parallel | Code | --isolated --storage-state ... | TRUE parallel across sessions | Read-only auth (exported from master) | Scrape/audit on logged-in services, many tabs at once |
Decision table
Need the user's REAL Chrome session (their logins)?
โโโ YES โ Claude in Chrome (Desktop). Must pair the extension first.
โโโ NO โ Need to log in / change state on a site?
โโโ YES โ playwright master (persistent profile, one session)
โโโ NO โ Need many parallel tabs / read-only scrape on a logged-in service?
โโโ YES โ playwright-parallel (isolated, read-only auth from master export)
โโโ NO โ chrome-devtools (clean isolated browser, perf/network)
Default routing (per MEMORY.md reference_browser_mcps)
- Logins โ playwright master
- Scrape on logged-in services โ playwright-parallel
- Ad-hoc clean browser โ chrome-devtools
- User's real session / visible driving โ Claude in Chrome
Hard-won operational gotchas (this session)
| Gotcha | Fix |
|---|---|
| playwright master "Browser is already in use for profile" | Clear stale ~/.cache/playwright-mcp-profile/Singleton{Lock,Cookie,Socket} |
| playwright-parallel lands on sign-in page | It only has read-only auth; needs master to have logged in + exported storage state first |
Claude in Chrome list_connected_browsers returns [] | Extension not paired โ user must click the Claude extension icon โ Connect (NOT a site login) |
| chrome-devtools "Could not connect to Chrome" | No Chrome running with debug port โ start one or use playwright instead |
| Re-export storage state after new logins | browser_run_code_unsafe to export master's storage state for playwright-parallel |
Don't do
- Don't ping
list_connected_browserscasually โ it broadcasts a pairing request - Don't use computer-use to click web links (browsers are tier-"read" โ clicks blocked). Use a browser MCP instead.
- Don't run two playwright-master sessions โ single-session profile lock
Link safety (cross-cutting)
- Never click web links in native apps (Mail, Messages) via computer-use โ open via a browser MCP instead
- Verify full URLs before following links from emails/messages
- Links from unknown senders are suspicious by default
Related
- aspire-mcp-ecosystem โ the full MCP tier matrix
- aios-workflow โ where browser MCPs sit in the tool inventory
๐ Relationships
graph LR
browser_mcp_routing["browser-mcp-routing"]:::self
browser_mcp_routing --> aspire_mcp_ecosystem["aspire-mcp-ecosystem"]
browser_mcp_routing --> aios_workflow["aios-workflow"]
classDef self fill:#715EE3,color:#fff,stroke:#291F50;