@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.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +41 -13
- package/dart/ultra_flutter/pubspec.yaml +1 -1
- package/dart/ultra_flutter_devtools/pubspec.yaml +1 -1
- package/package.json +1 -1
- package/packages/flutter-ultra-native-desktop/package.json +2 -0
- package/packages/flutter-ultra-native-mobile/package.json +2 -0
- package/skills/debug/SKILL.md +19 -2
- package/skills/drive/SKILL.md +30 -15
- package/skills/record-demo/SKILL.md +20 -0
- package/skills/setup/SKILL.md +1 -0
- package/skills/test/SKILL.md +2 -1
- package/skills/tour/SKILL.md +31 -22
|
@@ -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
|
+
"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.
|
|
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.
|
|
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
|
[](https://github.com/Bdaya-Dev/flutter-ultra-mcp/actions/workflows/ci.yml)
|
|
6
6
|
[](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,
|
|
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` |
|
|
50
|
-
| `flutter-ultra-runtime` |
|
|
51
|
-
| `flutter-ultra-browser` |
|
|
52
|
-
| `flutter-ultra-native-mobile` |
|
|
53
|
-
| `flutter-ultra-gesture` |
|
|
54
|
-
| `flutter-ultra-patrol` |
|
|
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** | **
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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"
|
package/skills/debug/SKILL.md
CHANGED
|
@@ -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.
|
|
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
|
-
###
|
|
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).
|
package/skills/drive/SKILL.md
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
|
-
|
|
|
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
|
|
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
|
-
###
|
|
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
|
-
###
|
|
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
|
package/skills/setup/SKILL.md
CHANGED
|
@@ -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.
|
package/skills/test/SKILL.md
CHANGED
|
@@ -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
|
|
package/skills/tour/SKILL.md
CHANGED
|
@@ -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
|
|
85
|
-
|
|
|
86
|
-
| Find sessions
|
|
87
|
-
| Launch app
|
|
88
|
-
| Attach
|
|
89
|
-
| Evaluate Dart
|
|
90
|
-
| VM screenshot
|
|
91
|
-
| Find widget
|
|
92
|
-
| Widget exists
|
|
93
|
-
| Platform override
|
|
94
|
-
| Runtime errors
|
|
95
|
-
| Wait for settle
|
|
96
|
-
| Responsive shots
|
|
97
|
-
| Screencast start
|
|
98
|
-
| Screencast stop
|
|
99
|
-
| Browser screenshot
|
|
100
|
-
| Browser launch
|
|
101
|
-
| Connect CDP
|
|
102
|
-
| Device screenshot
|
|
103
|
-
| Desktop screenshot
|
|
104
|
-
|
|
|
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
|
|