@@ -15,65 +15,22 @@ npm start # Run built server from lib/server.js
1515
1616```
1717src/
18- ├── server.ts # MCP server entry, registers all tools + MCP resources
19- ├── session/
20- │ ├── state.ts # Session state maps, getBrowser(), getState(), SessionMetadata
21- │ └── lifecycle.ts # registerSession(), handleSessionTransition(), closeSession()
22- ├── providers/
23- │ ├── types.ts # SessionProvider interface, ConnectionConfig
24- │ ├── local-browser.provider.ts # Chrome/Firefox/Edge/Safari capability building
25- │ └── local-appium.provider.ts # iOS/Android via appium.config.ts
26- ├── tools/
27- │ ├── session.tool.ts # start_session (browser+mobile), close_session
28- │ ├── tabs.tool.ts # switch_tab
29- │ ├── launch-chrome.tool.ts # launch_chrome (remote debugging)
30- │ ├── navigate.tool.ts # navigateAction() + navigateTool
31- │ ├── click.tool.ts # clickAction() + clickTool
32- │ ├── set-value.tool.ts # setValueAction() + setValueTool
33- │ ├── scroll.tool.ts # scrollAction() + scrollTool
34- │ ├── gestures.tool.ts # tapAction(), swipeAction(), dragAndDropAction()
35- │ ├── context.tool.ts # switch_context (native/webview)
36- │ ├── device.tool.ts # rotate_device, hide_keyboard
37- │ ├── emulate-device.tool.ts # emulate_device (viewport/UA)
38- │ ├── cookies.tool.ts # set_cookie, delete_cookies
39- │ ├── execute-script.tool.ts # execute_script
40- │ ├── get-elements.tool.ts # get_elements (all elements, incl. below fold)
41- │ └── ... # Other tools follow same pattern
42- ├── resources/
43- │ ├── index.ts # ResourceDefinition exports
44- │ ├── sessions.resource.ts # wdio://sessions, wdio://session/*/steps, wdio://session/*/code
45- │ ├── elements.resource.ts # wdio://session/current/elements
46- │ ├── accessibility.resource.ts# wdio://session/current/accessibility
47- │ ├── screenshot.resource.ts # wdio://session/current/screenshot
48- │ ├── cookies.resource.ts # wdio://session/current/cookies
49- │ ├── tabs.resource.ts # wdio://session/current/tabs
50- │ ├── contexts.resource.ts # wdio://session/current/contexts
51- │ ├── app-state.resource.ts # wdio://session/current/app-state
52- │ └── geolocation.resource.ts # wdio://session/current/geolocation
53- ├── recording/
54- │ ├── step-recorder.ts # withRecording HOF, appendStep, session history access
55- │ └── code-generator.ts # SessionHistory → WebdriverIO JS code
56- ├── scripts/
57- │ ├── get-interactable-browser-elements.ts # Browser-context element detection
58- │ ├── get-browser-accessibility-tree.ts # Browser-context accessibility tree
59- │ ├── get-visible-mobile-elements.ts # Mobile visible element detection
60- │ └── get-elements.ts # Filter + paginate elements (used by tool + resource)
61- ├── locators/
62- │ ├── element-filter.ts # Platform-specific element classification
63- │ ├── locator-generation.ts # Multi-strategy selector generation
64- │ ├── xml-parsing.ts # XML page source parsing for mobile
65- │ ├── constants.ts # Shared locator constants
66- │ ├── types.ts # Locator type definitions
67- │ └── index.ts # Public exports
68- ├── config/
69- │ └── appium.config.ts # iOS/Android capability builders (used by local-appium.provider)
70- ├── utils/
71- │ ├── parse-variables.ts # URI template variable parsing (parseBool, parseNumber, etc.)
72- │ └── zod-helpers.ts # coerceBoolean and other Zod utilities
73- └── types/
74- ├── tool.ts # ToolDefinition interface
75- ├── resource.ts # ResourceDefinition interface
76- └── recording.ts # RecordedStep, SessionHistory interfaces
18+ ├── server.ts # MCP server entry — registers all tools + resources
19+ ├── session/ # Session state (state.ts) + lifecycle (lifecycle.ts)
20+ ├── providers/ # SessionProvider implementations
21+ │ ├── registry.ts # getProvider() — routes to local or cloud provider
22+ │ ├── local-browser.provider.ts # Chrome/Firefox/Edge/Safari
23+ │ ├── local-appium.provider.ts # iOS/Android via Appium
24+ │ └── cloud/
25+ │ └── browserstack.provider.ts # BrowserStack (browser + App Automate)
26+ ├── tools/ # One file per MCP tool (see Tool Pattern below)
27+ ├── resources/ # One file per MCP resource (see Recording below)
28+ ├── recording/ # step-recorder.ts (withRecording HOF) + code-generator.ts
29+ ├── scripts/ # Browser/mobile scripts executed via browser.execute() — no try/catch, raw data only
30+ ├── locators/ # Element detection, selector generation, XML parsing (mobile)
31+ ├── config/ # appium.config.ts — iOS/Android capability builders
32+ ├── utils/ # parse-variables.ts, zod-helpers.ts (coerceBoolean)
33+ └── types/ # ToolDefinition, ResourceDefinition, RecordedStep interfaces
7734```
7835
7936### Session State
@@ -157,12 +114,12 @@ MCP resources expose live session data — all at fixed URIs discoverable via Li
157114| ` src/server.ts ` | MCP server init, tool + resource registration |
158115| ` src/session/state.ts ` | Session state maps, ` getBrowser() ` , ` getState() ` |
159116| ` src/session/lifecycle.ts ` | ` registerSession() ` , ` closeSession() ` , session transitions |
117+ | ` src/providers/registry.ts ` | ` getProvider() ` — routes to local or cloud provider |
118+ | ` src/providers/cloud/browserstack.provider.ts ` | BrowserStack session provider |
160119| ` src/tools/session.tool.ts ` | ` start_session ` (browser + mobile), ` close_session ` |
161- | ` src/tools/tabs.tool.ts ` | ` switch_tab ` |
162120| ` src/tools/get-elements.tool.ts ` | ` get_elements ` — all elements with filtering + pagination |
163- | ` src/resources/ ` | All MCP resource definitions (10 files) |
164- | ` src/providers/local-browser.provider.ts ` | Chrome/Firefox/Edge/Safari capability building |
165- | ` src/providers/local-appium.provider.ts ` | iOS/Android capabilities via appium.config.ts |
121+ | ` src/tools/browserstack.tool.ts ` | ` list_apps ` , ` upload_app ` — BrowserStack App Automate |
122+ | ` src/resources/ ` | All MCP resource definitions (12 files) |
166123| ` src/scripts/get-interactable-browser-elements.ts ` | Browser-context element detection |
167124| ` src/locators/ ` | Mobile element detection + locator generation |
168125| ` src/recording/step-recorder.ts ` | ` withRecording(toolName, cb) ` HOF — wraps tools for step logging |
@@ -234,9 +191,17 @@ catch (e) {
234191- iOS Predicate: ` -ios predicate string:label == "Login" `
235192- XPath: ` //XCUIElementTypeButton[@label="Login"] `
236193
194+ ## Environment
195+
196+ | Variable | Required for |
197+ | ----------| -------------|
198+ | ` BROWSERSTACK_USERNAME ` | BrowserStack sessions + tools |
199+ | ` BROWSERSTACK_ACCESS_KEY ` | BrowserStack sessions + tools |
200+
237201## Planned Improvements
238202
239203See ` docs/architecture/ ` for proposals:
240204
241- - ` session-configuration-proposal.md ` — Cloud provider pattern (BrowserStack, SauceLabs) — providers/types.ts is the extension point
242- - ` multi-session-proposal.md ` — Parallel sessions for sub-agent coordination
205+ - ` session-configuration-proposal.md ` — Cloud provider pattern (SauceLabs etc.) — BrowserStack already implemented; ` providers/registry.ts ` + ` providers/cloud/ ` is the extension point
206+ - ` multi-session-proposal.md ` — Parallel sessions for sub-agent coordination
207+ - ` interaction-sequencing-proposal.md ` — Sequencing model for tool interactions
0 commit comments