Selectors are where UI automation rots, and naming elements by role and label sidesteps most of it. The other thing this buys you is exploration: the agent can be told to walk every screen and report, rather than being handed a script, because it can read the interactive elements itself. Ten platforms from one tool is unusual — but most of them want a two-line SDK hook first.
An MCP server that connects an AI agent to a running application, exposing the widget or DOM tree and the interactions on it, across ten platforms.
- Seeing — screenshot, inspect_interactive for every tappable and typeable element with semantic refs, find_element, wait_for_element and get_elements for the full tree
- Interacting — tap, long_press, swipe, drag, enter_text, set_text, clear_text, scroll, go_back and press_key
- Semantic references such as button:Login and input:Email, stable across UI changes, across seven roles: button, input, toggle, slider, select, link and item
- Controlling — launch_app with flavors, hot_reload, hot_restart, get_logs, get_errors and scan_and_connect to find running apps
- Session handling — connect_cdp, list_sessions, switch_session, close_session, disconnect and stop_app
- AI exploration — page_summary, explore_actions, boundary_test and explore_report
- Ten platforms from one tool: Flutter on iOS, Android and web, React Native, Electron, Tauri, Android, KMP Desktop, .NET MAUI, iOS, web, and web over CDP with no SDK at all
Npm install -g flutter-skill, then the flutter-skill server command in your MCP client config. Most platforms need a small SDK hook in the app — for Flutter that is two lines calling FlutterSkillBinding.ensureInitialized() in debug mode. Web over CDP needs no SDK. Also available through Homebrew, Scoop, Docker, pub.dev and IDE extensions; flutter-skill init auto-detects and patches your app.
One command — npm install -g flutter-skill
