AI-powered E2E testing for 10 platforms. 253 MCP tools. Zero config. Works with Claude, Cursor, Windsurf, Copilot. Test Flutter, React Native, iOS, Android, Web, Electron, Tauri, KMP, .NET MAUI — all from natural language.
SaferSkills independently audited flutter-skill (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Control running Flutter applications for testing, debugging, and automation. Connects AI agents to Flutter apps via the Dart VM Service Protocol, exposing tools for UI inspection, gestures, state validation, screenshots, and log access.
{
"mcpServers": {
"flutter-skill": {
"command": "npx",
"args": ["flutter-skill"]
}
}
}dart pub global activate flutter_skill{
"mcpServers": {
"flutter-skill": {
"command": "flutter_skill",
"args": ["server"]
}
}
}| Category | Tools | Purpose |
|---|---|---|
| Connection | launch_app, connect_app | Start or attach to a Flutter app |
| Inspection | inspect, get_widget_tree, find_by_type | Discover UI elements and widget structure |
| Interaction | tap, enter_text, swipe, scroll_to, long_press, drag | Perform gestures and input |
| Validation | wait_for_element, wait_for_gone, get_text_value, get_checkbox_state | Assert UI state |
| Screenshots | screenshot, screenshot_element | Capture visual state |
| Navigation | go_back, get_current_route, get_navigation_stack | Control and inspect navigation |
| Debug | get_logs, get_errors, hot_reload, get_performance | Diagnose issues |
launch_app(project_path: "/path/to/app")
→ screenshot()
→ inspect()
→ tap(key: "element_key") / enter_text(key: "field_key", text: "value")
→ screenshot()
→ verify with wait_for_element / get_text_valuelaunch_app(project_path: "/path/to/app")
screenshot()
inspect()
enter_text(key: "email_field", text: "[email protected]")
enter_text(key: "password_field", text: "password123")
tap(key: "login_button")
wait_for_element(key: "home_screen", timeout: 5000)
screenshot()If `wait_for_element` times out: Call screenshot() to see the current state, then get_errors() to check for crashes or failed network requests.
connect_app(uri: "ws://127.0.0.1:50000/ws")
get_errors()
get_logs()
screenshot()
inspect()screenshot() and retry.tap, enter_text, swipe): Call screenshot() to confirm the UI updated as expected.wait_for_element(key: "target") with a timeout. On timeout, call get_errors() to diagnose.ValueKeyfind_by_type (may match multiple elements)For reliable targeting, apps should use ValueKey on interactive elements:
ElevatedButton(
key: const ValueKey('submit_button'),
onPressed: _submit,
child: const Text('Submit'),
)~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.