PackageTrack
Sign in Get early access

marionette_cli

CLI that lets AI agents (Claude, Copilot, Cursor) inspect and interact with running Flutter apps — tap, scroll, type, and screenshot.

0.6.0 3.3K downloads/mo #4470 most downloaded on pub.dev leancodepl/marionette_mcp

What this package is like to depend on

Last release 2 months ago

23 Jun 2026

Ships fairly regularly

a new release about every 2 months

Nearly every release is documented

notes for 3 of 3 stable releases

Nothing withdrawn

no release was ever pulled

5 months old

3 releases · first in 2026

3 releases in the last 12 months

see the full history below

Release timeline

3 releases · Mar 2026 to Jun 2026
Release Pre-release

Releases

latest 3
  1. 0.6.0 23 Jun 2026
    Release notes

    See changelog on pub.dev

    What's Changed

    • chore: bump mcp_dart to v2.1.0 by @jakubfijalkowski with @Copilot in #71
    • feat: surface Semantics(label) and Semantics(value) in get_interactive_elements by @sthefanoss in #72
    • refactor: split VM service context and Marionette binding into themed files by @MatejLNCD in #73
    • feat: add support for secondary tap by @lukaszgarstecki in #77
    • feat: promote schema-bearing custom extensions to first-class MCP tools by @MatejLNCD in #78
    • docs: restructure README into slim landing page + docs/ guides by @mchudy in #80
    • feat: add swipe command to the CLI by @mchudy in #82
    • feat: add hot restart support by @mchudy in #81
    • fix: exit stdio server on stdin EOF; drop custom Copilot transport by @mchudy in #86
    • fix: sanitize custom-extension tool names for strict MCP clients by @mchudy in #87
    • Add Dockerfile for Docker MCP Registry submission by @mchudy in #83
    • feat: add keyboard input support (press_key) by @mchudy in #88
    • chore: prepare 0.6.0 release by @mchudy in #91
    • fix: declare meta as a direct dependency of marionette_flutter by @mchudy in #92

    New Contributors

    Full Changelog: v0.5.0...v0.6.0

    Open source →
    Release notes
    • Promote schema-bearing custom extensions to first-class MCP tools via the new ExtensionInputSchema/ExtensionParam DSL
    • Add press_key tool for dispatching hardware key events with modifiers
    • Add hot_restart tool for fully restarting the app from main()
    • Add secondary_tap tool for right mouse button clicks on desktop
    • Add swipe CLI command for element- and coordinate-based swipe/drag gestures
    • Surface Semantics(label:) and Semantics(value:) in get_interactive_elements
    • Exit the stdio MCP server on stdin EOF to prevent orphaned processes
    • Bump mcp_dart to ^2.1.0 and drop the bespoke Copilot-compat stdio transport
    • Add a Dockerfile for building marionette_mcp as a container image
    Open source →
    Release notes
    • Promote schema-bearing custom extensions to first-class MCP tools. Registering an extension with an inputSchema (declared via the new typed ExtensionInputSchema / ExtensionParam DSL) now surfaces it as an individually-named, discoverable tool with a validated input schema — the agent gets argument hints and enum autocomplete, invalid arguments are rejected before reaching your app, and declared defaults are applied before the callback runs. Promoted tool names are sanitized for strict clients (e.g. VS Code Copilot's [a-z0-9_-] -only rule) while the extension is still invoked by its real name. Schema-less extensions stay supported through the generic call_custom_extension tool.

    • Add the press_key tool (plus the press-key CLI command) for dispatching real hardware key events to the focused element — named keys ( enter , tab , escape , arrows, etc.) and single characters, with optional control/shift/alt/meta modifiers. Unlike enter_text , which rewrites a field's value, this drives form submission, focus traversal, dismiss, and app shortcuts.

    • Add the hot_restart tool (plus the hot-restart CLI command), mirroring hot reload but fully restarting the app from main() and resetting all state. Requires the app to be launched via flutter run ; the connector re-resolves the new root isolate and re-registers its extensions after the restart.

    • Add a swipe CLI command, wiring the existing swipe/drag gesture into the CLI in both element-based ( --key / --text / --type + --direction ) and coordinate-based ( --start-x / --start-y / --end-x / --end-y ) modes.

    • Add the secondary_tap tool (plus the secondary-tap CLI command) for right mouse button clicks on desktop. It dispatches a mouse pointer with the secondary button pressed, triggering Flutter's onSecondaryTap (e.g. context menus). Touch tap is unchanged.

    • Surface Semantics(label:) and Semantics(value:) in get_interactive_elements . Widgets that render via inline-span trees ( Text.rich , custom-painted text, etc.) where toPlainText() loses structure can now be made fully readable by agents through an explicit accessibility annotation, without altering the rendered widget.

    • Bump the mcp_dart dependency to ^2.1.0 .

    • Exit the stdio MCP server when its stdin reaches EOF (e.g. the MCP host crashes or disconnects without sending a signal), preventing orphaned marionette_mcp processes from accumulating. Removed the bespoke Copilot-compat stdio transport in favour of mcp_dart 's built-in StdioServerTransport — mcp_dart 2.1.0 parses GitHub Copilot's object-typed tasks capabilities natively, so the workaround is no longer needed.

    • Add a Dockerfile so marionette_mcp can be built as a container image and submitted to the Docker MCP Registry; the image installs the published package from pub.dev and runs the server over stdio.

    Open source →
  2. 0.5.0 09 Apr 2026
    Release notes

    See changelog on pub.dev

    What's Changed

    New Contributors

    Full Changelog: v0.4.0...v0.5.0

    Open source →
    Release notes
    • Breaking: Pass Element instead of Widget to the extractText configuration callback, giving access to the full element context. Migration: change (widget) to (element) and use element.widget to access the widget.
    • Add gesture support across all layers: swipe/drag, long_press, double_tap, pinch_zoom, and press_back_button.
    • Add video recording with TCP/WS transport and Android auto-fallback.
    • Improve screencast stability with broken-pipe race handling, concurrent stop safety, and orphaned session cleanup.
    • Improve runtime robustness around input validation, resource cleanup, and non-monotonic timestamp handling.
    • Strengthen release CI with explicit minimum-version compatibility checks and Flutter version sourced from .fvmrc.
    Open source →
    Release notes
    • Breaking: Pass Element instead of Widget to the extractText configuration callback, giving access to the full element context. Migration: change (widget) to (element) and use element.widget to access the widget.

    • Add gesture support across all layers: swipe/drag , long_press , double_tap , pinch_zoom , and press_back_button .

    • Add video recording with TCP/WS transport and Android auto-fallback.

    • Improve screencast stability with broken-pipe race handling, concurrent stop safety, and orphaned session cleanup.

    • Improve runtime robustness around input validation, resource cleanup, and non-monotonic timestamp handling.

    • Strengthen release CI with explicit minimum-version compatibility checks and Flutter version sourced from .fvmrc .

    Open source →
  3. 0.4.0 16 Mar 2026
    Release notes

    See changelog on pub.dev

    What's Changed

    New Contributors

    Open source →
    Release notes
    • Add marionette_cli package with multi-instance CLI support
    • Add call_custom_extension tool for arbitrary VM service extensions
    • Add custom extension registry with registerMarionetteExtension
    • Add focused selector to enter_text
    • Add version compatibility check on connect
    • Decouple logging from marionette_flutter into marionette_logger and marionette_logging
    • Improve ScrollSimulator with reverse scrolling direction and configurable max scroll attempts
    • Fix tap matching widgets behind modal route barriers
    • Fix onChanged not being called on enter_text
    • Fix pointer device collision with macOS mouse cursor
    • Fix extracted text not being exposed in interactive elements
    • Ensure correct status code range in MarionetteExtensionError
    Open source →
    Release notes
    • Add marionette_cli package with multi-instance CLI support

    • Add call_custom_extension tool for arbitrary VM service extensions

    • Add custom extension registry with registerMarionetteExtension

    • Add focused selector to enter_text

    • Add version compatibility check on connect

    • Decouple logging from marionette_flutter into marionette_logger and marionette_logging

    • Improve ScrollSimulator with reverse scrolling direction and configurable max scroll attempts

    • Fix tap matching widgets behind modal route barriers

    • Fix onChanged not being called on enter_text

    • Fix pointer device collision with macOS mouse cursor

    • Fix extracted text not being exposed in interactive elements

    • Ensure correct status code range in MarionetteExtensionError

    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive