A Claude Code plugin that gives your AI agent full control over Flutter apps across all platforms. 8 isolated MCP servers, 295 tools, 2 Dart packages, and 31 built-in skills — installed with a single command.
A monolithic Flutter MCP server crashes badly: a malformed pubspec.yaml or a flaky AT-SPI binding takes down hot reload, gestures, browser, and native automation in one shot. flutter-ultra-mcp splits the surface across 8 independent processes so a Playwright timeout can't kill your hot reload, and a broken pubspec can't block your running test.
# 1. Install the Claude Code plugin
/plugin install Bdaya-Dev/flutter-ultra-mcp
# 2. Add the Dart package to your Flutter project
flutter pub add ultra_flutter
# 3. Initialize the binding in main.dartimport 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:ultra_flutter/ultra_flutter.dart';
void main() {
if (!kReleaseMode) {
UltraFlutterBinding.ensureInitialized();
} else {
WidgetsFlutterBinding.ensureInitialized();
}
runApp(const MyApp());
}Start a debug session (flutter run -d chrome), open Claude Code, and ask it to take a screenshot or run /flutter:tour.
Each server runs as its own Node.js process. Crash isolation means a bug in one server cannot affect the others. Servers share session state through small JSON files on disk — if a server restarts, it picks up where it left off.
| Server | Tools | What it does |
|---|---|---|
flutter-ultra-build |
97 | Pub dependencies, code generation, analysis, formatting, tests, platform builds, l10n, assets, signing, project creation |
flutter-ultra-runtime |
56 | Attach to debug sessions, widget tree, VM service method calls, performance profiling, design audit, logs, HTTP capture |
flutter-ultra-browser |
35 | Playwright web automation — network mocking, offline sim, OAuth, drag-drop, dialogs, tracing, console, storage |
flutter-ultra-native-mobile |
43 | Android + iOS — a11y tree, permissions, file picker, notifications, share sheet, CCT/SVC, GPS, deep links, app mgmt |
flutter-ultra-gesture |
19 | Tap, swipe, scroll, text input, multi-touch W3C Actions, screenshots, screencast via ultra_flutter mixin |
flutter-ultra-patrol |
31 | Orchestrate patrol_cli for E2E tests across web, Android, and iOS — run, poll, record, screenshot |
flutter-ultra-native-desktop |
9 | Windows (UIA), macOS (Accessibility), Linux (AT-SPI) — window listing, a11y tree, clicks, file dialogs, remote SSH |
flutter-ultra-devtools |
5 | Live MCP activity panel inside Flutter DevTools — sessions, tool calls, errors, screenshot grid |
| Total | 295 |
See docs/architecture.md for the full design.
Skills teach Claude the correct tool call sequences for common workflows. Invoke them with /flutter:<name>.
| Skill | Description |
|---|---|
/flutter:setup |
One-command setup of flutter-ultra in an existing codebase |
/flutter:tour |
Route-by-route screenshot sweep for visual documentation and regression checks |
/flutter:drive |
Multi-step user flow automation (login, checkout, onboarding) |
/flutter:debug |
Attach to a running app and triage errors from stack trace, widget tree, and network traffic |
/flutter:test |
Orchestrate unit, widget, golden, and patrol E2E tests with focused reporting |
/flutter:bisect |
Automated git bisect using test results as the oracle |
/flutter:scaffold |
Generate project boilerplate following conventions detected in the existing codebase |
/flutter:design-audit |
Audit the live app for accessibility, layout, spacing, and design-system conformance |
/flutter:design-verify |
Compare the running app against Figma mockups for design-implementation drift |
/flutter:figma-push |
Push Flutter web app UI to Figma as editable layers from live screenshots |
/flutter:record-demo |
Record a video or GIF demo of an app flow (web browser or native device) |
/flutter:devtools |
Wire up and use the DevTools panel for live MCP activity inspection |
Teaching skills (19 — vendored from flutter/skills + dart-lang/skills)
Each teaching skill includes a Flutter Ultra Integration section mapping to the MCP tools that execute the workflow it teaches.
| Skill | Description |
|---|---|
/flutter:add-integration-test |
Configure Flutter Driver and write integration tests |
/flutter:add-widget-preview |
Add @Preview annotations for real-time widget previewing |
/flutter:add-widget-test |
Write component-level tests with WidgetTester |
/flutter:apply-architecture-best-practices |
Structure apps with MVVM + Repository layered architecture |
/flutter:build-responsive-layout |
Build adaptive layouts with LayoutBuilder and MediaQuery |
/flutter:fix-layout-issues |
Diagnose and fix RenderFlex overflow and unbounded constraint errors |
/flutter:implement-json-serialization |
Manual JSON mapping with fromJson/toJson |
/flutter:setup-declarative-routing |
Configure go_router with deep linking and nested navigation |
/flutter:setup-localization |
Set up flutter_localizations with ARB files |
/flutter:use-http-package |
Execute HTTP requests with the http package |
/flutter:add-unit-test |
Write unit tests with package:test |
/flutter:build-cli-app |
Build Dart CLI apps with argument parsing and compilation |
/flutter:collect-coverage |
Collect LCOV coverage reports |
/flutter:fix-runtime-errors |
Resolve type system, null safety, and static analysis errors |
/flutter:generate-test-mocks |
Generate mock objects with package:mockito + build_runner |
/flutter:migrate-to-checks-package |
Migrate from expect/matcher to package:checks |
/flutter:resolve-package-conflicts |
Fix pub get version conflicts |
/flutter:run-static-analysis |
Run dart analyze and dart fix |
/flutter:use-pattern-matching |
Apply switch expressions and Dart 3 pattern matching |
/plugin install Bdaya-Dev/flutter-ultra-mcpThis registers all 8 MCP servers and 31 skills automatically. No manual configuration needed.
Add ultra_flutter to your app's dependencies (not dev_dependencies — the binding must be present in the compiled app):
flutter pub add ultra_flutterThen initialize the binding in your main.dart:
import 'package:flutter/foundation.dart';
import 'package:ultra_flutter/ultra_flutter.dart';
void main() {
if (!kReleaseMode) {
UltraFlutterBinding.ensureInitialized();
} else {
WidgetsFlutterBinding.ensureInitialized();
}
runApp(const MyApp());
}UltraFlutterBinding is a mixin on WidgetsBinding, not a subclass. It composes with other binding mixins like Sentry's:
// ignore: implementation_imports
import 'package:sentry_flutter/src/binding_wrapper.dart';
import 'package:ultra_flutter/ultra_flutter.dart';
class AppBinding extends WidgetsFlutterBinding
with SentryWidgetsBindingMixin, UltraFlutterBinding {}
void main() {
if (!kReleaseMode) {
AppBinding();
} else {
WidgetsFlutterBinding.ensureInitialized();
}
// SentryFlutter.init(...) then runApp(...)
}For the live activity panel inside Flutter DevTools:
flutter pub add ultra_flutter_devtoolsThis adds a DevTools tab showing active sessions, recent tool calls, errors, and a screenshot grid.
| Dependency | Version | Required |
|---|---|---|
| Flutter SDK | >= 3.27.0 | Yes |
| Dart SDK | >= 3.6.0 | Yes |
| Node.js | >= 20 | Yes (plugin runtime) |
| Claude Code | latest | Yes |
ffmpeg |
any | Optional — video/GIF recording and conversion |
| Android SDK | any | Optional — native mobile tools for Android |
| Xcode | any | Optional — native mobile tools for iOS |
| Capability | Web | Android | iOS | Windows | macOS | Linux |
|---|---|---|---|---|---|---|
| Build | x | x | x (macOS only) | x (Windows only) | x (macOS only) | x (Linux only) |
| Runtime attach | x | x | x | x | x | x |
| Gesture / screenshot | x | x | x | x | x | x |
| Browser automation | x | - | - | - | - | - |
| Native UI automation | - | x | x | x | x | x |
| Patrol E2E tests | x | x | x | - | - | - |
| DevTools panel | x | x | x | x | x | x |
In-app binding mixin that registers ext.flutter.ultra.* VM service extensions for gesture dispatch, screenshots, screencast streaming, widget matching, and log collection. The mixin form (on WidgetsBinding) composes with any existing binding — Sentry, Firebase, or custom subclasses.
SDK requirements: Flutter >= 3.27.0, Dart >= 3.6.0
Flutter DevTools extension that renders a live activity panel: active MCP sessions, recent tool calls with timing, error log, and a screenshot grid from tour/drive runs.
SDK requirements: Flutter >= 3.24.0, Dart >= 3.5.0
git clone https://github.com/Bdaya-Dev/flutter-ultra-mcp.git
cd flutter-ultra-mcp
npm install
npm run build
npm testThe repo is a monorepo managed by Turborepo. Each server is a separate package under packages/. Dart packages live under dart/. Shared TypeScript utilities live under shared/.
packages/
flutter-ultra-build/ # pubspec, codegen, tests, builds
flutter-ultra-runtime/ # VM service, widget tree, performance
flutter-ultra-gesture/ # tap, scroll, screenshot via mixin
flutter-ultra-browser/ # Playwright web automation
flutter-ultra-native-mobile/ # Android + iOS native
flutter-ultra-native-desktop/# Windows + macOS + Linux native
flutter-ultra-patrol/ # patrol_cli orchestration
flutter-ultra-devtools/ # DevTools panel server
shared/
mcp-runtime/ # Shared server base, state, watchdog
dart/
ultra_flutter/ # In-app binding mixin (pub.dev)
ultra_flutter_devtools/ # DevTools extension (pub.dev)
skills/ # Skill markdown files for Claude
examples/
counter-app/ # Minimal example
oidc-app/ # OIDC auth flow example
| Command | What it does |
|---|---|
npm run build |
Build all packages via Turborepo |
npm run test |
Run all unit tests |
npm run lint |
Lint all packages |
npm run typecheck |
TypeScript type checking |
npm run format |
Format all files with Prettier |
npm run format:check |
Check formatting without writing |
npm run test:e2e:web |
End-to-end tests (web) |
npm run test:e2e:oidc |
End-to-end tests (OIDC flow) |
See CONTRIBUTING.md for the development workflow, commit message format, and local test instructions.
See SECURITY.md for the loopback-only network design and vulnerability reporting process.
Apache-2.0 — see LICENSE.