Pixel-Perfect Flutter UIs with Figma, Maestro, and Dart MCPs

Use the Figma, Maestro, and Dart MCPs to translate Figma designs into Flutter UIs, hot-reload changes, and verify the results without leaving your agent session.

4 min read

Building a Flutter screen from a Figma design is a tedious squint-and-compare cycle. So are tracking down UI bugs or refactoring screens that have drifted from their designs. Read the design, write or adjust the widget, run it, eyeball the result, tweak, and repeat. Now, AI agents can now run that whole loop themselves. They read Figma’s structured design data, change the code, hot-reload, and visually verify the rendered result against the design with precision.

The Figma, Maestro, and Dart MCPs are what make it work. If you’re new to how MCP servers fit into the Flutter developer toolkit, see 7 MCP servers every Dart and Flutter developer should know.

How the loop works

Together, these MCPs enable a five-step loop: read, write, reload, capture, and compare.

The five-step agentic loop: Read, Write, Reload, Capture, Compare

Figma

The Figma MCP enables an agent to read directly from Figma files - extracting components, variables, layout data, and other design details. See the official Figma MCP guide.

Maestro

With the Maestro MCP, agents can interact with a running device - scrolling, tapping, entering text, and even taking screenshots. See the official docs.

Heads up: The Maestro MCP currently has some rough edges on Flutter web — several core interactions don't behave reliably with a browser window. For now, run your app on an iOS or Android emulator, a physical device, or a desktop target. Track progress in the Maestro issue tracker.

Dart

Finally, the Dart MCP allows agents to interact with the Dart VM and the running Dart process. This allows agents to hot-reload after making changes, enabling a lightning-fast validation path.

Setting up the MCPs

Using the Very Good AI Flutter Plugin?

You already have all three! Skip ahead to the next section.

Figma

Install

Install the Figma Plugin for Claude Code:

claude plugin install figma@claude-plugins-official

Configure

Authenticate with your Claude.ai account:

  1. Launch a claude session and open the /mcp menu
  2. Find the figma MCP server
  3. If necessary, authenticate and connect to enable the server

See the official remote server installation guide.

Maestro

Install

Install the Maestro CLI:

curl -Ls "https://get.maestro.mobile.dev" | bash

The MCP server is bundled with the CLI - no separate install is needed.

Configure

Add the Maestro MCP to Claude Code:

claude mcp add maestro -- maestro mcp

For full details, see the official Maestro installation guide.

Dart

Install

The Dart MCP server ships with the Dart SDK (Dart 3.9+) - no separate installation needed.

Configure

Add the Dart MCP to Claude Code:

claude mcp add dart -- dart mcp-server

Connecting

The Dart MCP connects via the Dart Tooling Daemon (DTD).

Run your Flutter app with the --print-dtd flag so the DTD URI is printed to the console:

flutter run --print-dtd

Look for a URI like: ws://127.0.0.1:<port>/<token>

Tip: You can use the bang (!) prefix to run the command directly in a Claude conversation; the output, including the DTD URI, will land in the conversation automatically:

! flutter run --print-dtd

Running the loop

For new UI, prompt your agent. Something like:

Implement the component(s) from this Figma design: [link]. Use the Figma MCP to read the design. Once you’ve written the widget(s), hot-reload the app with the Dart MCP and take a screenshot with Maestro, then verify it matches the design. Iterate until they are pixel-perfect.

For an existing screen that has drifted from its design:

The [screen/component name] no longer matches this Figma design: [link]. Use the Figma MCP to read the design and the Maestro MCP to screenshot the current state. Identify the discrepancies, fix the widget(s), hot-reload, and verify. Iterate until pixel-perfect.

From here, Claude Code runs the loop autonomously:

  1. Read - The Figma MCP pulls the component tree, spacing, color values, and typography directly from the Figma file. No copying and pasting design specs.
  2. Write - Claude generates and/or modifies your Flutter code.
  3. Reload - The Dart MCP triggers a hot reload, applying the changes to the running app immediately and without losing app state.
  4. Capture - The Maestro MCP interacts with the app to locate the elements, then captures a screenshot.
  5. Compare - Claude compares the screenshot against the Figma design, identifies discrepancies, and goes back to step 2.

In practice, the loop converges in two or three iterations for straightforward screens. The agent catches obvious mismatches - wrong padding, an off-brand color, a font weight that didn’t apply - whether it’s building a screen from scratch or fixing one that has slipped out of sync.

Wrapping up

The Figma, Maestro, and Dart MCPs turn what was a tedious manual process into a tight agentic loop. Figma eliminates the guesswork on the designs. Dart keeps iteration fast. And Maestro closes the loop with visual verification, letting your agent confirm its own output.

The result is less time shuttling between tools and more time on the work that actually requires your judgment.

Further reading

Check out our article on Maestro MCP test automation.

Frequently Asked Questions

What does the Flutter UI agentic loop do?

It reads a Figma design, writes Dart code, hot-reloads the running app, captures a screenshot, and compares it against the source design. The agent iterates until the implementation matches.

Do I need to install the three MCPs separately?

If you use the Very Good AI Flutter Plugin, all three come bundled. Otherwise, install each one and register it with claude mcp add as shown in the setup section.

Does this workflow support Flutter web?

Not reliably yet. The Maestro MCP has rough edges on Flutter web and several core interactions misbehave inside a browser window. Run your app on an iOS or Android emulator, a physical device, or a desktop target until web support improves.

How does the Dart MCP connect to my running Flutter app?

Through the Dart Tooling Daemon. Start your app with flutter run --print-dtd and the DTD URI prints to the console so the agent can attach to the running process and trigger hot reloads.

Can the loop fix screens that have drifted from their design?

Yes. Point the agent at the existing screen and the Figma link. It screenshots the current state, identifies the discrepancies, fixes the widgets, hot-reloads, and verifies the result. The same loop covers new components and existing ones.

What Dart SDK version is required for the Dart MCP?

Dart 3.9 or later. The MCP server ships with the SDK, so no separate install is needed once your toolchain is up to date.