Marionette MCP — агент внутри Flutter-приложения
Marionette MCP
MCP-сервер для Flutter: агент подключается к запущенному приложению, смотрит дерево виджетов, нажимает, вводит текст, прокручивает и снимает экран
- 497 ★ репозитория
- Последний коммит
- Apache-2.0
Расширенный доступ
Почему такой уровень
- Агент нажимает элементы и вводит текст в запущенном приложении, поэтому на тестовых данных он может вызвать любые действия интерфейса
- Скриншоты и логи работающего приложения попадают в контекст модели
Установка
- Работает в
Ручная установка
dart pub global activate marionette_mcpСтавит мост. Приложение заранее готовят: flutter pub add marionette_flutter и MarionetteBinding.ensureInitialized() в main.dart.
Доступ и проверки
Как мы проверяемРасширенный доступИнструмент запускает код или ходит в сеть, а внешние данные только читает.
- Агент нажимает элементы и вводит текст в запущенном приложении, поэтому на тестовых данных он может вызвать любые действия интерфейса
- Скриншоты и логи работающего приложения попадают в контекст модели
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
Marionette соединяет агента с работающим Flutter-приложением через VM-сервис. Автор называет его аналогом Playwright MCP для Flutter. Агент получает список интерактивных виджетов с типом, текстом, ключом и идентификатором семантики, а затем действует: нажимает, нажимает дважды, держит, свайпает, масштабирует щипком и прокручивает до нужного элемента. Инструментов немного, и каждый возвращает минимум данных, чтобы не раздувать контекст. Это `connect`, `disconnect`, `get_interactive_elements`, `take_screenshots`, `get_logs` и жесты `tap`, `secondary_tap`, `double_tap`, `long_press`, `swipe`, `pinch_zoom`, `press_back_button`, `scroll_to`. Скриншоты приходят в PNG, логи собирает `LogCollector`. Установка идет в два шага. В приложение добавляют пакет `marionette_flutter` и вызывают `MarionetteBinding.ensureInitialized()` в режиме отладки, а мост ставят командой `dart pub global activate marionette_mcp`. Есть и CLI-вариант того же моста.
Для кого. Для Flutter-разработчиков и тестировщиков, которые хотят, чтобы Claude Code, Cursor, Copilot или Gemini CLI проходили сценарии в запущенном приложении.
Подходит, если
- Нужно проверить экран приложения вживую: что видно, какие элементы нажимаются и как работают свайпы
- Агент должен пройти сценарий на эмуляторе или устройстве и показать скриншоты каждого шага
- Повторяющиеся ключи в сетке карточек разводят параметром `ancestor_keys`, который ограничивает поиск поддеревом
- Нужны логи работающего приложения после горячей перезагрузки через `get_logs`
- Вы хотите, чтобы агент сохранял отчет о проходе с доказательствами: в Marionette есть `session` `reports`
Не подходит, если
- Нужны поиск пакетов на pub.dev, анализ кода и управление зависимостями: этим занимается официальный сервер Dart и Flutter
- Приложение не на Flutter: сервер работает через Flutter VM-сервис
- Приложение собрано в режиме релиза: привязка Marionette включается только в режиме отладки
- Проект не готов менять код: приложение сначала нужно подготовить, добавив пакет и инициализацию
Пример запроса к агенту
Запусти мое Flutter-приложение в режиме отладки, подключись через Marionette, пройди экран входа и сделай скриншот после каждого шагаMCP
- Транспорт
- stdio
- Авторизация
- не нужна
Ограничения
- Приложение нужно подготовить: добавить `marionette_flutter` и инициализировать привязку в `main.dart`. В примере автора это делается только при `kDebugMode`.
- Перед любым другим инструментом агент вызывает `connect` с адресом VM-сервиса, например ws://127.0.0.1:9101/ws, который печатает `flutter run`.
- `get_logs` работает при установленном `LogCollector`, а `secondary_tap` доступен только на десктопе.
- `connect` сверяет версию привязки в приложении с версией сервера.
- Нужен установленный Dart SDK, потому что мост ставится через `dart pub global activate`.
Как отключить. Выполните claude mcp `remove` `marionette` и удалите зависимость командой `flutter` `pub` `remove` marionette_flutter вместе со строкой MarionetteBinding в main.dart. Мост снимается командой `dart` `pub` `global` `deactivate` marionette_mcp.
Частые вопросы
Как подключить Marionette MCP к Claude Code?
После `dart` `pub` `global` `activate` marionette_mcp выполните claude mcp `add` --transport stdio `marionette` -- marionette_mcp. Для Cursor, Gemini CLI, Copilot и Antigravity настройка описана в документации docs/mcp-tools.md.
Чем Marionette отличается от официального сервера Dart и Flutter?
Официальный сервер решает задачи разработки: ищет пакеты, управляет зависимостями, анализирует код, показывает ошибки выполнения. Интерфейс он может водить через Flutter Driver. Marionette работает с запущенным приложением напрямую и держит набор действий небольшим.
Что нужно сделать с приложением перед подключением?
Добавить `marionette_flutter`, в main.dart вызвать `MarionetteBinding.ensureInitialized()` при `kDebugMode`, запустить приложение через `flutter run` и скопировать адрес VM-сервиса из консоли.
Можно ли выбрать элемент без ключа?
Да. Нажатие ищет элемент по ключу, идентификатору семантики, тексту, типу или координатам. Ключ автор советует как самый стабильный вариант, идентификатор семантики идет следующим.
Есть ли у Marionette версия для командной строки?
Да. В репозитории есть пакет marionette_cli, а руководство по нему лежит в docs/cli.md. В папке пакета marionette_flutter есть и скилл `marionette-flutter-drive-app`.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
MCP-серверыMCP-сервер на Playwright от сообщества: браузерная автоматизация, скриншоты, эмуляция устройств и генерация тестового кода
CLI, MCP-сервер и типизированный Node.js API, чтобы агент проверял свои правки в живом мобильном приложении на iOS, Android и других платформах
MCP-сервер, который проверяет, правда ли агент закончил: гоняет реальное приложение и возвращает вердикт прошло, не прошло, неясно с указанием файла и строки
Официальный отладчик MCP-серверов: веб-интерфейс, CLI для автоматизации и терминальный интерфейс в одном пакете
MCP-сервер от Mozilla: агент управляет Firefox через WebDriver BiDi, читает консоль и сеть, делает снимки страниц и профилирует загрузку
Официальный MCP-сервер Postman: рабочие пространства, коллекции, спецификации и окружения прямо из агента
Сравнение с похожими
Записи с тем же главным запросом: чем они отличаются.
| Запись | Официальный | Авторизация | Звезды репозитория | Главное отличие |
|---|---|---|---|---|
| Marionette MCP — агент внутри Flutter-приложения (эта запись) | нет | не нужна | 497 | |
| Flutter Agent Plugins | да | 3 123 | плагин команды Flutter: скиллы и сервер Dart MCP для разработки | |
| Mobile MCP | нет | не нужна | 10 095 | универсальный сервер для симуляторов, эмуляторов и устройств iOS и Android |
| Agent Skills for Dart | да | 532 | скиллы команды Dart: тесты, анализ, CLI-приложения, FFI |
Коротко о README
README подает проект как «Playwright MCP для Flutter» и сравнивает его с официальным сервером Dart и Flutter. Быстрый старт состоит из четырех шагов: подготовка приложения, установка моста, настройка ИИ-инструмента и запуск приложения в режиме отладки. Дальше идут ссылки на видео и статью команды LeanCode, а подробности разнесены по документам: начало работы, настройка Flutter, конфигурация, логи, семантика, отчеты сеансов, пользовательские расширения и устранение неполадок.