@bdayadev/flutter-ultra-mcp 1.13.0 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "name": "flutter",
12
12
  "description": "Durable cross-platform Flutter automation via 8 specialized MCP servers, in-app mixin binding, and an optional DevTools panel. Replaces marionette_mcp and the official dart mcp-server for Claude Code.",
13
- "version": "1.13.0",
13
+ "version": "1.14.0",
14
14
  "author": {
15
15
  "name": "Bdaya-Dev",
16
16
  "url": "https://github.com/Bdaya-Dev"
@@ -23,5 +23,5 @@
23
23
  "tags": ["flutter", "dart", "mcp", "testing", "automation", "patrol", "cross-platform"]
24
24
  }
25
25
  ],
26
- "version": "1.13.0"
26
+ "version": "1.14.0"
27
27
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "flutter",
4
- "version": "1.13.0",
4
+ "version": "1.14.0",
5
5
  "description": "Durable cross-platform Flutter automation via 8 specialized MCP servers, in-app mixin binding, and an optional DevTools panel. Replaces marionette_mcp and the official dart mcp-server for Claude Code.",
6
6
  "author": {
7
7
  "name": "Bdaya-Dev",
package/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  [![CI](https://github.com/Bdaya-Dev/flutter-ultra-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/Bdaya-Dev/flutter-ultra-mcp/actions/workflows/ci.yml)
6
6
  [![License](https://img.shields.io/github/license/Bdaya-Dev/flutter-ultra-mcp)](LICENSE)
7
7
 
8
- A Claude Code plugin that gives your AI agent full control over Flutter apps across all platforms. 8 isolated MCP servers, 248 tools, 2 Dart packages, and 12 built-in skills — installed with a single command.
8
+ A Claude Code plugin that gives your AI agent full control over Flutter apps across all platforms. 8 isolated MCP servers, 295 tools, 2 Dart packages, and 31 built-in skills — installed with a single command.
9
9
 
10
10
  ## Why
11
11
 
@@ -44,17 +44,17 @@ Start a debug session (`flutter run -d chrome`), open Claude Code, and ask it to
44
44
 
45
45
  Each server runs as its own Node.js process. Crash isolation means a bug in one server cannot affect the others. Servers share session state through small JSON files on disk — if a server restarts, it picks up where it left off.
46
46
 
47
- | Server | Tools | What it does |
48
- | ------------------------------ | ------: | --------------------------------------------------------------------------------------------------------- |
49
- | `flutter-ultra-build` | 96 | Pub dependencies, code generation, analysis, formatting, tests, platform builds, l10n, assets, signing |
50
- | `flutter-ultra-runtime` | 55 | Attach to debug sessions, widget tree inspection, performance profiling, design audit, logs, HTTP capture |
51
- | `flutter-ultra-browser` | 26 | Playwright-driven web automation — OAuth flows, popups, console, network, storage, JS evaluation |
52
- | `flutter-ultra-native-mobile` | 24 | Android (UIAutomator) + iOS (XCUITest) — permissions, OAuth tabs, accessibility tree, device recording |
53
- | `flutter-ultra-gesture` | 18 | Tap, swipe, scroll, text input, screenshots, screencast via the in-app `ultra_flutter` mixin |
54
- | `flutter-ultra-patrol` | 15 | Orchestrate `patrol_cli` for E2E tests across web, Android, and iOS — run, poll, record, screenshot |
55
- | `flutter-ultra-native-desktop` | 9 | Windows (UIA), macOS (Accessibility), Linux (AT-SPI) — window listing, a11y tree, clicks, file dialogs |
56
- | `flutter-ultra-devtools` | 5 | Live MCP activity panel inside Flutter DevTools — sessions, tool calls, errors, screenshot grid |
57
- | **Total** | **248** | |
47
+ | Server | Tools | What it does |
48
+ | ------------------------------ | ------: | ------------------------------------------------------------------------------------------------------------------------ |
49
+ | `flutter-ultra-build` | 97 | Pub dependencies, code generation, analysis, formatting, tests, platform builds, l10n, assets, signing, project creation |
50
+ | `flutter-ultra-runtime` | 56 | Attach to debug sessions, widget tree, VM service method calls, performance profiling, design audit, logs, HTTP capture |
51
+ | `flutter-ultra-browser` | 35 | Playwright web automation — network mocking, offline sim, OAuth, drag-drop, dialogs, tracing, console, storage |
52
+ | `flutter-ultra-native-mobile` | 43 | Android + iOS — a11y tree, permissions, file picker, notifications, share sheet, CCT/SVC, GPS, deep links, app mgmt |
53
+ | `flutter-ultra-gesture` | 19 | Tap, swipe, scroll, text input, multi-touch W3C Actions, screenshots, screencast via `ultra_flutter` mixin |
54
+ | `flutter-ultra-patrol` | 31 | Orchestrate `patrol_cli` for E2E tests across web, Android, and iOS — run, poll, record, screenshot |
55
+ | `flutter-ultra-native-desktop` | 9 | Windows (UIA), macOS (Accessibility), Linux (AT-SPI) — window listing, a11y tree, clicks, file dialogs, remote SSH |
56
+ | `flutter-ultra-devtools` | 5 | Live MCP activity panel inside Flutter DevTools — sessions, tool calls, errors, screenshot grid |
57
+ | **Total** | **295** | |
58
58
 
59
59
  See [docs/architecture.md](docs/architecture.md) for the full design.
60
60
 
@@ -62,6 +62,8 @@ See [docs/architecture.md](docs/architecture.md) for the full design.
62
62
 
63
63
  Skills teach Claude the correct tool call sequences for common workflows. Invoke them with `/flutter:<name>`.
64
64
 
65
+ ### Workflow skills (12)
66
+
65
67
  | Skill | Description |
66
68
  | ------------------------ | -------------------------------------------------------------------------------------------- |
67
69
  | `/flutter:setup` | One-command setup of flutter-ultra in an existing codebase |
@@ -77,6 +79,32 @@ Skills teach Claude the correct tool call sequences for common workflows. Invoke
77
79
  | `/flutter:record-demo` | Record a video or GIF demo of an app flow (web browser or native device) |
78
80
  | `/flutter:devtools` | Wire up and use the DevTools panel for live MCP activity inspection |
79
81
 
82
+ ### Teaching skills (19 — vendored from [flutter/skills](https://github.com/flutter/skills) + [dart-lang/skills](https://github.com/dart-lang/skills))
83
+
84
+ Each teaching skill includes a **Flutter Ultra Integration** section mapping to the MCP tools that execute the workflow it teaches.
85
+
86
+ | Skill | Description |
87
+ | -------------------------------------------- | -------------------------------------------------------------------- |
88
+ | `/flutter:add-integration-test` | Configure Flutter Driver and write integration tests |
89
+ | `/flutter:add-widget-preview` | Add `@Preview` annotations for real-time widget previewing |
90
+ | `/flutter:add-widget-test` | Write component-level tests with `WidgetTester` |
91
+ | `/flutter:apply-architecture-best-practices` | Structure apps with MVVM + Repository layered architecture |
92
+ | `/flutter:build-responsive-layout` | Build adaptive layouts with `LayoutBuilder` and `MediaQuery` |
93
+ | `/flutter:fix-layout-issues` | Diagnose and fix RenderFlex overflow and unbounded constraint errors |
94
+ | `/flutter:implement-json-serialization` | Manual JSON mapping with `fromJson`/`toJson` |
95
+ | `/flutter:setup-declarative-routing` | Configure `go_router` with deep linking and nested navigation |
96
+ | `/flutter:setup-localization` | Set up `flutter_localizations` with ARB files |
97
+ | `/flutter:use-http-package` | Execute HTTP requests with the `http` package |
98
+ | `/flutter:add-unit-test` | Write unit tests with `package:test` |
99
+ | `/flutter:build-cli-app` | Build Dart CLI apps with argument parsing and compilation |
100
+ | `/flutter:collect-coverage` | Collect LCOV coverage reports |
101
+ | `/flutter:fix-runtime-errors` | Resolve type system, null safety, and static analysis errors |
102
+ | `/flutter:generate-test-mocks` | Generate mock objects with `package:mockito` + `build_runner` |
103
+ | `/flutter:migrate-to-checks-package` | Migrate from `expect`/`matcher` to `package:checks` |
104
+ | `/flutter:resolve-package-conflicts` | Fix `pub get` version conflicts |
105
+ | `/flutter:run-static-analysis` | Run `dart analyze` and `dart fix` |
106
+ | `/flutter:use-pattern-matching` | Apply switch expressions and Dart 3 pattern matching |
107
+
80
108
  ## Installation
81
109
 
82
110
  ### Plugin (required)
@@ -85,7 +113,7 @@ Skills teach Claude the correct tool call sequences for common workflows. Invoke
85
113
  /plugin install Bdaya-Dev/flutter-ultra-mcp
86
114
  ```
87
115
 
88
- This registers all 8 MCP servers and 12 skills automatically. No manual configuration needed.
116
+ This registers all 8 MCP servers and 31 skills automatically. No manual configuration needed.
89
117
 
90
118
  ### Dart package (required for gesture and screencast tools)
91
119
 
@@ -4,7 +4,7 @@ description: >-
4
4
  extensions (gesture, screenshot, inspector, screencast, log collection)
5
5
  for the flutter-ultra-mcp Claude Code plugin. Composable with Sentry and
6
6
  other WidgetsFlutterBinding subclasses via the mixin form.
7
- version: 1.13.0
7
+ version: 1.14.0
8
8
  homepage: https://github.com/Bdaya-Dev/flutter-ultra-mcp
9
9
  repository: https://github.com/Bdaya-Dev/flutter-ultra-mcp
10
10
  issue_tracker: https://github.com/Bdaya-Dev/flutter-ultra-mcp/issues
@@ -2,7 +2,7 @@ name: ultra_flutter_devtools
2
2
  description: >-
3
3
  Flutter DevTools extension showing live MCP activity for the flutter-ultra-mcp
4
4
  Claude Code plugin (sessions, recent tool calls, errors, screenshot grid).
5
- version: 1.13.0
5
+ version: 1.14.0
6
6
  homepage: https://github.com/Bdaya-Dev/flutter-ultra-mcp
7
7
  repository: https://github.com/Bdaya-Dev/flutter-ultra-mcp
8
8
  issue_tracker: https://github.com/Bdaya-Dev/flutter-ultra-mcp/issues
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bdayadev/flutter-ultra-mcp",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "description": "Flutter Ultra MCP plugin monorepo — 8 MCP servers + ultra_flutter Dart packages + skills for Claude Code.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/Bdaya-Dev/flutter-ultra-mcp",
@@ -65,9 +65,11 @@
65
65
  "dependencies": {
66
66
  "@flutter-ultra/mcp-runtime": "^0.0.1",
67
67
  "@modelcontextprotocol/sdk": "^1.29.0",
68
+ "ssh2": "^1.16.0",
68
69
  "zod": "^3.23.8"
69
70
  },
70
71
  "devDependencies": {
72
+ "@types/ssh2": "^1.15.0",
71
73
  "rimraf": "^6.0.0",
72
74
  "typescript": "^5.6.0",
73
75
  "vitest": "^2.1.0"
@@ -56,9 +56,11 @@
56
56
  "@modelcontextprotocol/sdk": "^1.29.0",
57
57
  "fast-xml-parser": "^4.5.0",
58
58
  "playwright-core": "^1.49.0",
59
+ "ssh2": "^1.16.0",
59
60
  "zod": "^3.23.8"
60
61
  },
61
62
  "devDependencies": {
63
+ "@types/ssh2": "^1.15.0",
62
64
  "rimraf": "^6.0.0",
63
65
  "typescript": "^5.6.0",
64
66
  "vitest": "^2.1.0"
@@ -96,7 +96,24 @@ Collect live evidence before diagnosing. Propose code fixes only after inspectin
96
96
  - `mcp__plugin_flutter_flutter-ultra-runtime__count_widget_tree_nodes` to gauge tree complexity.
97
97
  - `mcp__plugin_flutter_flutter-ultra-runtime__start_tail_logs` + `mcp__plugin_flutter_flutter-ultra-runtime__poll_tail_logs` for live log streaming during reproduction.
98
98
 
99
- ### 5. Evaluate in-app expressions
99
+ ### 5. Advanced VM service access
100
+
101
+ For low-level inspection beyond the standard helpers, use `mcp__plugin_flutter_flutter-ultra-runtime__call_vm_service_method` to call raw VM Service protocol methods directly:
102
+
103
+ - `getStack` — full isolate stack frames at any moment (useful when `get_runtime_errors` doesn't capture a synchronous deadlock).
104
+ - `getObject` — inspect any live Dart object by its VM object ID retrieved from `evaluate`.
105
+ - `evaluate` with full params — pass `disableBreakpoints: true` or `scope` overrides that the wrapper `evaluate` tool does not expose.
106
+
107
+ ```
108
+ call_vm_service_method(
109
+ method: "getStack",
110
+ params: { "isolateId": "<id>", "limit": 20 }
111
+ )
112
+ ```
113
+
114
+ Use this when `evaluate` and `get_runtime_errors` are insufficient to explain observed behaviour.
115
+
116
+ ### 6. Evaluate in-app expressions
100
117
 
101
118
  `mcp__plugin_flutter_flutter-ultra-runtime__evaluate` freely to inspect live objects:
102
119
 
@@ -104,7 +121,7 @@ Collect live evidence before diagnosing. Propose code fixes only after inspectin
104
121
  - `context.read<MyBloc>().state.toString()`
105
122
  - `ProviderScope.containerOf(context).read(myProvider).toString()`
106
123
 
107
- ### 6. Test the fix
124
+ ### 7. Test the fix
108
125
 
109
126
  1. Apply the code change.
110
127
  2. `mcp__plugin_flutter_flutter-ultra-runtime__hot_reload` (or `mcp__plugin_flutter_flutter-ultra-runtime__hot_restart` if `initState` changed).
@@ -30,18 +30,22 @@ Break the user's request into discrete, verifiable steps. Announce the plan befo
30
30
 
31
31
  **Perform the action:**
32
32
 
33
- | Action | Tool |
34
- | ------------------------- | ----------------------------------------------------------------- |
35
- | Tap by key/text/coords | `mcp__plugin_flutter_flutter-ultra-gesture__tap` |
36
- | Double tap | `mcp__plugin_flutter_flutter-ultra-gesture__double_tap` |
37
- | Long press | `mcp__plugin_flutter_flutter-ultra-gesture__long_press` |
38
- | Enter text | `mcp__plugin_flutter_flutter-ultra-gesture__enter_text` |
39
- | Clear text field | `mcp__plugin_flutter_flutter-ultra-gesture__clear_text` |
40
- | Scroll to element | `mcp__plugin_flutter_flutter-ultra-gesture__scroll_to` |
41
- | Scroll until visible | `mcp__plugin_flutter_flutter-ultra-gesture__scroll_until_visible` |
42
- | Swipe gesture | `mcp__plugin_flutter_flutter-ultra-gesture__swipe` |
43
- | Pinch zoom | `mcp__plugin_flutter_flutter-ultra-gesture__pinch_zoom` |
44
- | Navigate programmatically | `mcp__plugin_flutter_flutter-ultra-runtime__evaluate` |
33
+ | Action | Tool |
34
+ | ------------------------- | ---------------------------------------------------------------------- |
35
+ | Tap by key/text/coords | `mcp__plugin_flutter_flutter-ultra-gesture__tap` |
36
+ | Double tap | `mcp__plugin_flutter_flutter-ultra-gesture__double_tap` |
37
+ | Long press | `mcp__plugin_flutter_flutter-ultra-gesture__long_press` |
38
+ | Enter text | `mcp__plugin_flutter_flutter-ultra-gesture__enter_text` |
39
+ | Clear text field | `mcp__plugin_flutter_flutter-ultra-gesture__clear_text` |
40
+ | Scroll to element | `mcp__plugin_flutter_flutter-ultra-gesture__scroll_to` |
41
+ | Scroll until visible | `mcp__plugin_flutter_flutter-ultra-gesture__scroll_until_visible` |
42
+ | Swipe gesture | `mcp__plugin_flutter_flutter-ultra-gesture__swipe` |
43
+ | Pinch zoom | `mcp__plugin_flutter_flutter-ultra-gesture__pinch_zoom` |
44
+ | Drag and drop | `mcp__plugin_flutter_flutter-ultra-browser__drag` |
45
+ | Multi-touch gesture | `mcp__plugin_flutter_flutter-ultra-gesture__perform_actions` |
46
+ | Open deep link | `mcp__plugin_flutter_flutter-ultra-native-mobile__dispatch_deep_link` |
47
+ | Set location | `mcp__plugin_flutter_flutter-ultra-native-mobile__set_device_location` |
48
+ | Navigate programmatically | `mcp__plugin_flutter_flutter-ultra-runtime__evaluate` |
45
49
 
46
50
  **Wait for the UI to settle:**
47
51
 
@@ -77,8 +81,19 @@ When a flow involves an external OAuth consent screen:
77
81
  3. `mcp__plugin_flutter_flutter-ultra-browser__fill` for username/password fields.
78
82
  4. `mcp__plugin_flutter_flutter-ultra-browser__click` on the submit button.
79
83
  5. `mcp__plugin_flutter_flutter-ultra-browser__wait_for_url` matching the app's redirect URI.
84
+ 6. Use `mcp__plugin_flutter_flutter-ultra-browser__mock_network_route` to stub API responses during the flow when deterministic data is needed.
85
+ 7. Use `mcp__plugin_flutter_flutter-ultra-browser__network_state_set` to simulate offline/slow-network conditions and verify the app handles connectivity loss gracefully.
80
86
 
81
- ### 6. Native mobile system dialogs (mobile targets)
87
+ ### 6. Native OS interactions (mobile targets)
88
+
89
+ For flows that leave the Flutter layer and interact with the host OS:
90
+
91
+ - **Share sheet**: `mcp__plugin_flutter_flutter-ultra-native-mobile__handle_share_sheet` to detect the OS share sheet after triggering a share action, then select an app or dismiss.
92
+ - **Notification flows**: `mcp__plugin_flutter_flutter-ultra-native-mobile__open_notification_tray` to expand the shade, `mcp__plugin_flutter_flutter-ultra-native-mobile__list_notifications` to find the target notification, `mcp__plugin_flutter_flutter-ultra-native-mobile__tap_notification` to open it and return to the app.
93
+ - **Chrome Custom Tab / SFSafariViewController flows**: `mcp__plugin_flutter_flutter-ultra-native-mobile__detect_in_app_browser` to confirm the CCT/SVC is open, `mcp__plugin_flutter_flutter-ultra-native-mobile__interact_in_app_browser` to type/tap within it (e.g., OAuth consent), then wait for the app to resume.
94
+ - **File picker**: `mcp__plugin_flutter_flutter-ultra-native-mobile__pick_file_native` to select a file from the OS file picker dialog that Flutter cannot drive with gesture tools.
95
+
96
+ ### 7. Native mobile system dialogs (mobile targets)
82
97
 
83
98
  - `mcp__plugin_flutter_flutter-ultra-native-mobile__wait_for_native_element` to detect OS dialogs.
84
99
  - `mcp__plugin_flutter_flutter-ultra-native-mobile__native_permission_grant` or `mcp__plugin_flutter_flutter-ultra-native-mobile__native_permission_deny`.
@@ -87,7 +102,7 @@ When a flow involves an external OAuth consent screen:
87
102
  - `mcp__plugin_flutter_flutter-ultra-native-mobile__native_home` to press Home.
88
103
  - `mcp__plugin_flutter_flutter-ultra-native-mobile__solve_oauth_cct` for Chrome Custom Tab OAuth flows.
89
104
 
90
- ### 7. Native desktop dialogs (desktop targets)
105
+ ### 8. Native desktop dialogs (desktop targets)
91
106
 
92
107
  - `mcp__plugin_flutter_flutter-ultra-native-desktop__wait_for_window` to detect native dialogs.
93
108
  - `mcp__plugin_flutter_flutter-ultra-native-desktop__desktop_click` to interact with dialog buttons.
@@ -95,7 +110,7 @@ When a flow involves an external OAuth consent screen:
95
110
  - `mcp__plugin_flutter_flutter-ultra-native-desktop__select_file_in_dialog` for file picker dialogs.
96
111
  - `mcp__plugin_flutter_flutter-ultra-native-desktop__confirm_dialog` to accept/dismiss confirmation dialogs.
97
112
 
98
- ### 8. Report the flow result
113
+ ### 9. Report the flow result
99
114
 
100
115
  Produce a numbered summary: steps taken, pass/fail status per step, screenshot paths, and any errors from `mcp__plugin_flutter_flutter-ultra-runtime__get_runtime_errors`.
101
116
 
@@ -68,6 +68,26 @@ For responsive demos, resize the viewport between key interactions:
68
68
 
69
69
  Take screenshots at key moments for verification alongside the recording.
70
70
 
71
+ ### 3b. Web performance trace (optional, alongside video)
72
+
73
+ For web demos where you also want a Chrome DevTools trace alongside the video:
74
+
75
+ ```
76
+ mcp__plugin_flutter_flutter-ultra-browser__start_tracing
77
+ contextId: <id>
78
+ categories: ["blink", "v8", "disabled-by-default-devtools.timeline"]
79
+ outputPath: /tmp/flutter-demo-trace.json
80
+ ```
81
+
82
+ Drive the UI flow, then stop:
83
+
84
+ ```
85
+ mcp__plugin_flutter_flutter-ultra-browser__stop_tracing
86
+ contextId: <id>
87
+ ```
88
+
89
+ Returns the trace JSON path. Open in `chrome://tracing` or Perfetto for frame-level analysis alongside the recorded video.
90
+
71
91
  ### 4. Stop recording
72
92
 
73
93
  #### Web
@@ -12,6 +12,7 @@ Expected end state: `UltraFlutterBinding` initialized in the app entry point, `u
12
12
  ### 1. Verify the environment
13
13
 
14
14
  - `mcp__plugin_flutter_flutter-ultra-build__flutter_doctor` — stop if Flutter SDK, devices, or Dart show `[x]`.
15
+ - `mcp__plugin_flutter_flutter-ultra-build__list_projects` — check if the target project already exists. If not, use `mcp__plugin_flutter_flutter-ultra-build__create_project` to scaffold it (an alternative to running `flutter create` manually), then proceed with setup steps below.
15
16
  - `mcp__plugin_flutter_flutter-ultra-build__project_info` — note entry points, `hasSentry`, `hasPatrol`, `hasUltraBinding`.
16
17
  - `mcp__plugin_flutter_flutter-ultra-runtime__list_devices` — verify at least one target device is available.
17
18
  - `mcp__plugin_flutter_flutter-ultra-build__list_dart_defines` — discover required dart-defines for launch.
@@ -11,7 +11,7 @@ Covers all Flutter test layers: unit, widget, golden, and patrol E2E. For ad-hoc
11
11
 
12
12
  ### 1. Identify project and scope
13
13
 
14
- - `mcp__plugin_flutter_flutter-ultra-build__list_projects` to find available projects.
14
+ - `mcp__plugin_flutter_flutter-ultra-build__list_projects` to find available projects. If the target project does not yet exist, use `mcp__plugin_flutter_flutter-ultra-build__create_project` to scaffold it before proceeding.
15
15
  - `mcp__plugin_flutter_flutter-ultra-build__project_info` for the target project path, flavors, and entry points.
16
16
  - `mcp__plugin_flutter_flutter-ultra-build__test_filter` to discover test files matching a name pattern before running.
17
17
  - Determine scope from the user's request: unit only, widget only, patrol E2E only, golden only, full suite, or coverage.
@@ -107,6 +107,7 @@ After unit tests with `coverage: true`:
107
107
  4. **Patrol E2E failures**: read `logContext` from `get_patrol_result`. Cross-reference with `get_patrol_browser_errors` for web.
108
108
  5. **Screenshot on failure**: patrol captures screenshots automatically. For unit/widget failures, call `mcp__plugin_flutter_flutter-ultra-runtime__screenshot` if the app is running.
109
109
  6. **Network issues during E2E**: use `mcp__plugin_flutter_flutter-ultra-runtime__start_http_capture` + `mcp__plugin_flutter_flutter-ultra-runtime__get_http_events` to check API calls.
110
+ 7. **Flaky tests due to external API responses**: use `mcp__plugin_flutter_flutter-ultra-browser__mock_network_route` before running patrol web tests to stub non-deterministic endpoints and isolate the test from network variance.
110
111
 
111
112
  ## Output format
112
113
 
@@ -49,6 +49,7 @@ If the user supplied a route list, use that directly.
49
49
  - Browser screenshot (web): `mcp__plugin_flutter_flutter-ultra-browser__screenshot`
50
50
  - Device screenshot (mobile): `mcp__plugin_flutter_flutter-ultra-native-mobile__take_device_screenshot`
51
51
  - Desktop screenshot: `mcp__plugin_flutter_flutter-ultra-native-desktop__desktop_screenshot`
52
+ - For auth-gated mobile routes that open a CCT/SVC: call `mcp__plugin_flutter_flutter-ultra-native-mobile__detect_in_app_browser` first; if detected, screenshot the in-app browser before dismissing it.
52
53
  5. **Responsive captures** (when requested): `mcp__plugin_flutter_flutter-ultra-gesture__take_responsive_screenshots` to capture at phone/tablet/desktop breakpoints in one call.
53
54
  6. Record `{ route, file, timestamp }` for the report.
54
55
 
@@ -68,12 +69,15 @@ Push live progress to a connected DevTools panel:
68
69
 
69
70
  ### 6. Handle edge cases
70
71
 
71
- - **Auth-gated routes**: after navigation, check for a login widget via `mcp__plugin_flutter_flutter-ultra-runtime__find_widget`. Authenticate via `mcp__plugin_flutter_flutter-ultra-runtime__evaluate` or gesture tools, then retry.
72
+ - **Auth-gated routes**: after navigation, check for a login widget via `mcp__plugin_flutter_flutter-ultra-runtime__find_widget`. Authenticate via `mcp__plugin_flutter_flutter-ultra-runtime__evaluate` or gesture tools, then retry. For CCT/SVC-based auth on mobile, use `mcp__plugin_flutter_flutter-ultra-native-mobile__detect_in_app_browser` to detect the Custom Tab and interact with it before returning to the app.
72
73
  - **Parameterized routes** (`/item/:id`): substitute a known test ID. Ask the user for sample IDs if none are obvious.
73
74
  - **Routes that crash**: catch errors from `mcp__plugin_flutter_flutter-ultra-runtime__get_runtime_errors`, log in the report, continue to the next route.
74
75
  - **Async data loading**: poll `mcp__plugin_flutter_flutter-ultra-runtime__widget_exists` for loading indicators; wait up to 5s in 500ms increments.
75
76
  - **Bottom sheets / dialogs**: trigger via `mcp__plugin_flutter_flutter-ultra-runtime__evaluate` on the parent route, screenshot, dismiss.
77
+ - **Unexpected browser dialogs** (web tours): use `mcp__plugin_flutter_flutter-ultra-browser__handle_dialog` to dismiss alert/confirm/prompt dialogs that block screenshot capture.
76
78
  - **Platform rendering**: use `mcp__plugin_flutter_flutter-ultra-runtime__set_platform_override` to capture iOS-style UI on a non-iOS device.
79
+ - **Notification state screenshots**: use `mcp__plugin_flutter_flutter-ultra-native-mobile__open_notification_tray` to expand the notification shade, then `mcp__plugin_flutter_flutter-ultra-native-mobile__list_notifications` to enumerate visible notifications before capturing a screenshot.
80
+ - **Consistent API responses**: use `mcp__plugin_flutter_flutter-ultra-browser__mock_network_route` (web) to stub API responses before navigating to data-dependent routes, ensuring reproducible screenshots across runs.
77
81
 
78
82
  ### 7. Compile the report
79
83
 
@@ -81,27 +85,32 @@ Write `tour-report.md` with a markdown table of all routes, screenshot paths, an
81
85
 
82
86
  ## Tool reference
83
87
 
84
- | Action | Tool |
85
- | ------------------- | ------------------------------------------------------------------------- |
86
- | Find sessions | `mcp__plugin_flutter_flutter-ultra-runtime__discover_sessions` |
87
- | Launch app | `mcp__plugin_flutter_flutter-ultra-runtime__launch_app` |
88
- | Attach | `mcp__plugin_flutter_flutter-ultra-runtime__attach` |
89
- | Evaluate Dart | `mcp__plugin_flutter_flutter-ultra-runtime__evaluate` |
90
- | VM screenshot | `mcp__plugin_flutter_flutter-ultra-runtime__screenshot` |
91
- | Find widget | `mcp__plugin_flutter_flutter-ultra-runtime__find_widget` |
92
- | Widget exists | `mcp__plugin_flutter_flutter-ultra-runtime__widget_exists` |
93
- | Platform override | `mcp__plugin_flutter_flutter-ultra-runtime__set_platform_override` |
94
- | Runtime errors | `mcp__plugin_flutter_flutter-ultra-runtime__get_runtime_errors` |
95
- | Wait for settle | `mcp__plugin_flutter_flutter-ultra-gesture__wait_for` |
96
- | Responsive shots | `mcp__plugin_flutter_flutter-ultra-gesture__take_responsive_screenshots` |
97
- | Screencast start | `mcp__plugin_flutter_flutter-ultra-gesture__start_screencast` |
98
- | Screencast stop | `mcp__plugin_flutter_flutter-ultra-gesture__stop_screencast` |
99
- | Browser screenshot | `mcp__plugin_flutter_flutter-ultra-browser__screenshot` |
100
- | Browser launch | `mcp__plugin_flutter_flutter-ultra-browser__launch_browser` |
101
- | Connect CDP | `mcp__plugin_flutter_flutter-ultra-browser__connect_over_cdp` |
102
- | Device screenshot | `mcp__plugin_flutter_flutter-ultra-native-mobile__take_device_screenshot` |
103
- | Desktop screenshot | `mcp__plugin_flutter_flutter-ultra-native-desktop__desktop_screenshot` |
104
- | Push DevTools event | `mcp__plugin_flutter_flutter-ultra-devtools__push_event` |
88
+ | Action | Tool |
89
+ | ---------------------- | ------------------------------------------------------------------------- |
90
+ | Find sessions | `mcp__plugin_flutter_flutter-ultra-runtime__discover_sessions` |
91
+ | Launch app | `mcp__plugin_flutter_flutter-ultra-runtime__launch_app` |
92
+ | Attach | `mcp__plugin_flutter_flutter-ultra-runtime__attach` |
93
+ | Evaluate Dart | `mcp__plugin_flutter_flutter-ultra-runtime__evaluate` |
94
+ | VM screenshot | `mcp__plugin_flutter_flutter-ultra-runtime__screenshot` |
95
+ | Find widget | `mcp__plugin_flutter_flutter-ultra-runtime__find_widget` |
96
+ | Widget exists | `mcp__plugin_flutter_flutter-ultra-runtime__widget_exists` |
97
+ | Platform override | `mcp__plugin_flutter_flutter-ultra-runtime__set_platform_override` |
98
+ | Runtime errors | `mcp__plugin_flutter_flutter-ultra-runtime__get_runtime_errors` |
99
+ | Wait for settle | `mcp__plugin_flutter_flutter-ultra-gesture__wait_for` |
100
+ | Responsive shots | `mcp__plugin_flutter_flutter-ultra-gesture__take_responsive_screenshots` |
101
+ | Screencast start | `mcp__plugin_flutter_flutter-ultra-gesture__start_screencast` |
102
+ | Screencast stop | `mcp__plugin_flutter_flutter-ultra-gesture__stop_screencast` |
103
+ | Browser screenshot | `mcp__plugin_flutter_flutter-ultra-browser__screenshot` |
104
+ | Browser launch | `mcp__plugin_flutter_flutter-ultra-browser__launch_browser` |
105
+ | Connect CDP | `mcp__plugin_flutter_flutter-ultra-browser__connect_over_cdp` |
106
+ | Device screenshot | `mcp__plugin_flutter_flutter-ultra-native-mobile__take_device_screenshot` |
107
+ | Desktop screenshot | `mcp__plugin_flutter_flutter-ultra-native-desktop__desktop_screenshot` |
108
+ | Detect CCT/SVC | `mcp__plugin_flutter_flutter-ultra-native-mobile__detect_in_app_browser` |
109
+ | Open notif tray | `mcp__plugin_flutter_flutter-ultra-native-mobile__open_notification_tray` |
110
+ | List notifications | `mcp__plugin_flutter_flutter-ultra-native-mobile__list_notifications` |
111
+ | Dismiss browser dialog | `mcp__plugin_flutter_flutter-ultra-browser__handle_dialog` |
112
+ | Mock API response | `mcp__plugin_flutter_flutter-ultra-browser__mock_network_route` |
113
+ | Push DevTools event | `mcp__plugin_flutter_flutter-ultra-devtools__push_event` |
105
114
 
106
115
  ## Example
107
116