Skip to content

leancodepl/marionette_mcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

227 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

marionette_mcp

Marionette MCP

License marionette_mcp pub.dev badge

"Playwright MCP/Cursor Browser, but for Flutter apps"

Marionette MCP enables AI agents (Claude Code, Copilot, Cursor, Gemini CLI, and more) to inspect and interact with running Flutter applications. It connects your AI agent directly to a running app via the Model Context Protocol (MCP), so it can see the widget tree, tap elements, enter text, scroll, and capture screenshots for automated AI-driven smoke testing and interaction.

Marionette MCP keeps the surface area intentionally small. It exposes only a handful of high-signal actions and returns the minimum actionable data, which helps keep prompts focused and context sizes under control.

Marionette MCP vs Flutter MCP

The official Dart & Flutter MCP server focuses on development-time tasks: searching pub.dev, managing dependencies, analyzing code, and inspecting runtime errors. It can also drive the UI, but it does so through Flutter Driver, which introduces extra instrumentation in your app. Marionette MCP focuses solely (and in an opinionated way) on runtime interaction: tapping buttons, entering text, scrolling, and taking screenshots, while requiring minimal changes to your app. Use Flutter MCP to build your app, use Marionette MCP to test and interact with it with minimal code changes.

Quick Start

Note

Your Flutter app must be prepared to be compatible with Marionette. The steps below are the short version — the Getting Started guide walks through each one.

  1. Prepare your app — add marionette_flutter and initialize MarionetteBinding in main.dart:

    flutter pub add marionette_flutter
    void main() {
      if (kDebugMode) {
        MarionetteBinding.ensureInitialized();
      } else {
        WidgetsFlutterBinding.ensureInitialized();
      }
      runApp(const MyApp());
    }
  2. Install the bridge — activate the MCP server (for the CLI alternative, see the CLI guide):

    dart pub global activate marionette_mcp
  3. Configure your AI tool — e.g. for Claude Code:

    claude mcp add --transport stdio marionette -- marionette_mcp

    Other tools (Cursor, Gemini CLI, Copilot, Antigravity): see Configuring your AI tool.

  4. Run your app in debug modeflutter run, then copy the VM service URI from the console (e.g. ws://127.0.0.1:9101/ws).

  5. Connect and interact — ask your agent to connect using that URI and start driving the app.

Important

Standard Material widgets work out of the box. If your app uses a custom design system, configuration is required — otherwise the agent can't see or tap your custom buttons and fields. Start with the Production Setup Checklist.

What you can do

Once connected, an agent can drive your app with a small, focused toolset: inspect the widget tree (get_interactive_elements), tap / secondary_tap / double_tap / long_press / swipe / pinch_zoom / scroll_to, enter_text, press_back_button, take_screenshots, read get_logs, and hot_reload. Full list: MCP Tools.

Your app can also expose its own actions to the agent via Custom Extensions — navigate by route name, seed test data, toggle feature flags, and more.

Some real-world prompts:

"I implemented the Forgot Password screen — connect, navigate to login, tap 'Forgot Password', enter a valid email, submit, and check the logs that the API call fired."

"I refactored the routing. Run a smoke test: cycle through all bottom-nav tabs and verify each screen loads without exceptions in the logs."

"Investigate the unresponsive 'Clear Cache' button on Settings — find it via get_interactive_elements, tap it, and analyze the logs."

Documentation

Guide What's inside
Getting Started Zero-to-driving in 5 steps.
Flutter Setup The binding, debug-only init, the single-binding rule.
Configuration Custom design systems, production checklist, complete main.dart.
Log Collection Wire up get_logs (logging, logger, or custom).
Semantics Make custom-painted / rich content readable to agents.
MCP Tools Full tool reference + AI-tool configuration.
Custom Extensions Expose app-specific actions as agent tools via registerMarionetteExtension.
CLI Drive Marionette from any shell-capable agent.
Troubleshooting Common gotchas and limitations.

Packages

Package Role
marionette_flutter The binding you add to your Flutter app. Required.
marionette_mcp MCP server bridging AI agents to your running app.
marionette_cli CLI alternative for shell-only / restricted environments.
marionette_logging LogCollector adapter for the logging package.
marionette_logger LogCollector adapter for the logger package.

🛠️ Maintained by LeanCode

This package is built with 💙 by LeanCode. We are top-tier experts focused on Flutter Enterprise solutions.

Why LeanCode?

  • Creators of Patrol – the next-gen testing framework for Flutter.

  • Production-Ready – We use this package in apps with millions of users.

  • Full-Cycle Product Development – We take your product from scratch to long-term maintenance.


Need help with your Flutter project?

👉 Hire our team   •   Check our other packages

About

MCP server enabling AI agents to interact with Flutter apps at runtime - let them inspect widgets, simulate taps, enter text, scroll, and take screenshots.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors