SKILL.md
Flutter Driver Control & Screenshot
This skill outlines the process of adding flutter_driver support to a Flutter application, launching it via the Dart MCP server, controlling it (tapping, finding widgets), and capturing screenshots (handling Web/Desktop specific constraints).
Prerequisites
- Dart MCP Server: Ensure the
dart-mcp-serveris active. - Flutter Project: You need a working Flutter project.
Step 1: Add Dependency
Add flutterdriver to the devdependencies in your pubspec.yaml.
dev_dependencies:
flutter_driver:
sdk: flutter
Run dart pub get or use the mcpdart-mcp-serverpub tool.
Step 2: Create Driver Entry Point
Create a separate entry point, typically test_driver/app.dart, to enable the driver extension without polluting main.dart.
[!IMPORTANT]
Replaceyourapppackage_namewith the actual name of your package as defined inpubspec.yaml.
// test_driver/app.dart
import 'package:flutter_driver/driver_extension.dart';
import 'package:your_app_package_name/main.dart' as app; // Import your main app
void main() {
// Enable the extension
enableFlutterDriverExtension();
// Run the app
app.main();
}
Step 3: Launch App via MCP
Use the mcpdart-mcp-serverlaunch_app tool.
target:test_driver/app.dartdevice:chrome(ormacos,linux,windows)root: Absolute path to your project root.
Note: The tool returns a DTD URI (Data Tooling Daemon) and a PID. Save these.
Step 4: Connect to DTD
Use mcpdart-mcp-serverconnectdarttooling_daemon with the URI returned from the launch step.
{
"uri": "ws://127.0.0.1:..."
}
Step 5: Web Screenshot Strategy (Browser Subagent)
If running on Web (Chrome), flutterdriver's screenshot command may not work or may not be supported directly in all environments. A robust fallback is to use the browsersubagent.
- Get App URL: Use
mcpdart-mcp-servergetapplogswith the app's PID. Look for lines likeA Dart VM Service on Chrome is available at: http://127.0.0.1:XXXXX. The app logs usually contain the local HTTP URL. - Navigate & Snapshot: Call
browser_subagent.
- Task: "Navigate to [URL]. Wait for render. Take a screenshot."
Step 6: Control the App (Flutter Driver)
Use mcpdart-mcp-serverflutter_driver to interact with the app.
- Get Widget Tree:
mcpdart-mcp-servergetwidgettree(useful to find keys/labels). - Tap:
``json { "command": "tap", "finderType": "ByText", "text": "Settings" } ``
- Scroll, Enter Text, etc. are also available.
Step 7: Cleanup
Always stop the app when done to free up ports and resources.
- Use
mcpdart-mcp-serverstop_appwith the PID.
Example Workflow
- Launch
test_driver/app.dart. - Connect DTD.
- Log Check: Find localhost URL.
- Browser Subagent: Navigate & Screenshot (Home/Dashboard).
- Flutter Driver: Tap "Tasks" tab.
- Browser Subagent: Screenshot (Tasks).
- Flutter Driver: Tap "Settings" tab.
- Browser Subagent: Screenshot (Settings).
- Stop App.