PluginBench
MCP Server
Active
MIT

Flutter MCP Toolkit MCP Server

io.github.Arenukvern/flutter-mcp-toolkit

Inspect and drive Flutter debug apps with AI: semantic snapshots, widget interaction, and custom runtime tools.

What is the Flutter MCP Toolkit MCP server?

The Flutter MCP Toolkit is a Dart MCP server and Flutter package that enables AI agents to inspect running Flutter apps, take semantic snapshots, interact with widgets, and access custom tools registered at runtime. It creates a closed feedback loop between an AI assistant and a Flutter application, allowing agents to inspect state, act like a user, hot-reload, and verify changes without leaving the conversation.

Flutter MCP Toolkit bridges AI agents (Claude, Cursor, Codex, Cline) with running Flutter apps. It exposes 30 MCP tools across inspection, interaction, debug, and lifecycle categories—semantic snapshots, widget tapping, form filling, hot-reload, log reading, and Dart expression evaluation. Apps can also register custom MCP tools dynamically at runtime, enabling domain-specific agent capabilities tailored to your app.

How to install Flutter MCP Toolkit

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "flutter-mcp-toolkit": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"
      ]
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • fmt_semantic_snapshot — Capture semantic snapshot of the running Flutter app UI
  • fmt_screenshot — Take a screenshot of the running app
  • fmt_tap — Tap a widget by identifier or coordinates
  • fmt_scroll — Scroll within a scrollable widget
  • fmt_type — Type text into a focused input field
  • fmt_fill_form — Fill form fields with provided values
  • fmt_hot_reload — Trigger hot-reload of the Flutter app
  • fmt_hot_restart — Trigger hot-restart of the Flutter app
  • fmt_navigate — Navigate to a named route
  • fmt_wait_for — Wait for a condition to be met
  • fmt_view_details — Get detailed information about a widget
  • fmt_errors — Retrieve recent errors from the app
  • fmt_logs — Read recent debug logs
  • fmt_vm_info — Get Dart VM information
  • fmt_evaluate_dart — Evaluate Dart expressions in the running app
  • fmt_discover_apps — Discover running Flutter debug apps

Use cases

  • Automate Flutter app testing by having an AI agent inspect UI, tap buttons, fill forms, and verify results in real-time
  • Debug Flutter apps interactively: take snapshots, read logs, evaluate Dart expressions, and hot-reload while the agent observes changes
  • Build custom AI-driven workflows by registering domain-specific MCP tools in your Flutter app that agents can call at runtime
  • Develop Flutter features with AI assistance: agent inspects the app, suggests changes, hot-reloads, and verifies the implementation
  • Create closed-loop agent-app feedback systems where AI can see proof of changes and adapt its next action based on actual app state

Flutter MCP Toolkit MCP server FAQ

What is the Flutter MCP Toolkit?

It's a Dart MCP server and Flutter package that lets AI agents inspect and control running Flutter debug apps. Agents can take semantic snapshots, tap widgets, type text, hot-reload, read logs, and call custom tools you register in your app—all in real-time.

Is it free?

Yes, Flutter MCP Toolkit is open-source under the MIT license.

How do I install it in Cursor or Claude?

Run `flutter-mcp-toolkit init cursor` or `flutter-mcp-toolkit init claude-code` to auto-configure your agent. Alternatively, manually add the OCI image `ghcr.io/arenukvern/flutter-mcp-toolkit:4.0.0` to your MCP server config, or use `npx skills add Arenukvern/mcp_flutter`.

Do I need to modify my Flutter app?

Yes, you must add the `mcp_toolkit` package to your Flutter app and call the bootstrap code. Run `flutter-mcp-toolkit codegen-init` in your app directory to auto-generate the required setup.

What authentication is required?

None. The toolkit communicates with your local Flutter debug app over a local connection. No external services or API keys are needed.

Can I register custom tools in my app?

Yes. Apps can register custom MCP tools and resources at runtime via the `mcp_toolkit` package, allowing agents to call domain-specific functionality without leaving the conversation.

README (reference)

Source of truth, from the repository.

<div align="center">

flutter-mcp-toolkit

MCP Toplist

Inspect and drive a running Flutter app from your AI assistant.

skills.sh pub: mcp_toolkit Contract Gates intentcall eval gates skill-assets-drift Docs Ask DeepWiki License: MIT Flutter smithery badge Official MCP Registry All Contributors <a title="Discord" href="https://discord.com/invite/y54DpJwmAn" ><img src="https://img.shields.io/discord/696688204476055592.svg" /></a> maintained with Skill Steward

</div>

flutter-mcp-toolkit is a Dart MCP server + Flutter package for AI agents (Codex, Zed, Cursor, Intent, Claude Code, Cline, and more). Agents can inspect a running Flutter app, take semantic snapshots, tap widgets, type into forms, hot-reload, and read logs. Apps can also register their own MCP tools and resources at runtime via MCP Toolkit — all without leaving the conversation. The result is a closed feedback loop between agent and app; see OpenAI Agentic Harness for an example of this pattern.

Watercolor comic infographic explaining flutter-mcp-toolkit: install fmtk, add it to a Flutter app, connect an AI agent, then inspect, tap, reload, and prove changes in a close feedback loop.

The picture's story: the toolkit gives an AI assistant a shared window and control loop into a running Flutter app, so it can inspect state, act like a user, hot reload, read proof, and use custom tools from your app instead of guessing.

View Screenshots

![NOTICE]: Version 4 is now stable. Earlier 4.0.0-dev.* builds were prerelease testing builds of the new architecture.

Get started in 4 steps

# 1. Install the binary
curl -fsSL https://raw.githubusercontent.com/Arenukvern/mcp_flutter/main/install.sh | bash
# Installs flutter-mcp-toolkit plus the short fmtk alias for repeated CLI loops.

# 2. Add the toolkit to your Flutter app
cd my-flutter-app
flutter-mcp-toolkit codegen-init   # adds mcp_toolkit + emits main.dart snippet

# 3. Install skills for your AI agent
flutter-mcp-toolkit init claude-code   # or: cursor | codex | cline | agents-skills | all
# Alternative (skills only): npx skills add Arenukvern/mcp_flutter -a cursor -y

# 4. Run
flutter run --debug

That's it. Your AI agent can now inspect and drive the running app — and your app can expose custom MCP tools at runtime (see Dynamic Tools Registration below).

📰 News

<!-- TODO(arenukvern): add tool to write news automatically -->

Install from marketplaces

PlatformCommand / link
Any agent (recommended)flutter-mcp-toolkit init <agent> — see AI agent setup
Claude Code (git catalog)/plugin marketplace add Arenukvern/mcp_flutter then install flutter-mcp-toolkit
Codex (git catalog)codex plugin marketplace add Arenukvern/mcp_flutter
Cursor (local plugin)flutter-mcp-toolkit init cursor
Skills onlynpx skills add Arenukvern/mcp_flutter -a <agent> -y (add MCP via init or manual JSON)
MCP registriesOfficial MCP Registry — server io.github.Arenukvern/flutter-mcp-toolkit (OCI image: ghcr.io/arenukvern/flutter-mcp-toolkit), Smithery, MseeP

Docker / MCP Registry install

The official registry serves an OCI image from GHCR. Point any MCP client at it:

{
  "mcpServers": {
    "flutter-mcp-toolkit": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--network=host",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:4.0.0"
      ]
    }
  }
}

See Docker guide for flags, version pinning, and networking notes.

Maintainers submitting to official stores: marketplace submission runbook. Full matrix: marketplace distribution.

Documentation

Published packages

PackagePub.devRole
mcp_toolkitpub package pub pointsFlutter app package for runtime MCP tools/resources and toolkit bootstrap.
flutter_mcp_toolkit_corepub package pub pointsPure-Dart shared command/result/capability types.
flutter_mcp_toolkit_capability_kernelpub package pub pointsCapability kernel contracts for composable MCP units.
flutter_mcp_toolkit_capability_corepub package pub pointsServer-side fmt_* capability implementation.

The server binary lives in mcp_server_dart and is shipped through GitHub Release artifacts as flutter-mcp-toolkit, fmtk, and flutter-mcp-toolkit-server; it is not a pub.dev package.

Development support

NeedStart here
Contribute code or docsCONTRIBUTING.md · Contribution guide
Add or credit contributorsContributors guide · .all-contributorsrc
Report vulnerabilitiesSECURITY.md
Validate local changessteward probe --json --profile quick · make check-contracts
Maintain releasesRelease train notes · flutter-mcp-toolkit-repo-maintainer
Install or update agent skillsAI agent setup · Marketplace distribution

What it does

The default toolkit surface exposes 30 MCP tools under the fmt_* capability prefix across four categories:

  • Inspection — semantic snapshot, view details, errors, screenshots, VM info
  • Interaction — tap, scroll, type, fill forms, hot-reload, navigate, wait_for
  • Debug — recent logs, evaluate Dart expressions
  • Lifecycle — discover apps, hot-reload, hot-restart

See the flutter-mcp-toolkit-{guide,inspect,control,debug} skills for the full reference (installed by flutter-mcp-toolkit init or npx skills add Arenukvern/mcp_flutter). Install options: AI agent setup.

Dynamic Tools Registration

Flutter apps can register custom tools and resources at runtime. See how it works in this short YouTube video. The same arguments.connection targeting is supported by the CLI's exec, batch, daemon command/execute, daemon watch/start, and snapshot step args.

[!NOTE] There is official MCP Server for Flutter from Flutter team which exposes Dart tooling. The main goal of this project is to bring power of MCP server tools by creating them in Flutter app, using dynamic MCP tools registration and close feedback loop for AI Agent. See how it works in short YouTube video. See Quick Start for more details. See original motivation behind the idea.

⚠️ Note on Dump RPCs

Dump RPC methods (like dump_render_tree) can produce huge token output and are disabled by default. Enable with --dumps. See mcp_server_dart README for the full flag surface.

🔒 Security

Generally, since you use MCP server to connect to Flutter app in Debug Mode, it should be safe to use. However, I still recommend to review how it works in ARCHITECTURE.md, how it can be modified to improve security if needed.

This MCP server is verified by MseeP.ai.

MseeP.ai Security Assessment Badge

🔧 Troubleshooting

  1. Connection Issues

    • Ensure your Flutter app is running in debug mode
    • Verify the port matches in both Flutter app and MCP server
    • Check if the port is not being used by another process
    • Safest explicit targeting: use arguments.connection.uri and paste exact Flutter machine app.debugPort.wsUri
    • If response includes connection_selection_required, retry with arguments.connection.targetId using one URI from availableTargets (or set arguments.connection.uri directly)
  2. AI Tool Not Detecting Inspector

    • Restart the AI tool after configuration changes
    • Verify the configuration JSON syntax
    • Check the tool's logs for connection errors
  3. Dynamic Tools Not Appearing

    • Ensure mcp_toolkit package is properly initialized in your Flutter app
    • Check that tools are registered using MCPToolkitBinding.instance.addEntries()
    • Use fmt_list_client_tools_and_resources to verify registration
    • Hot reload your Flutter app after adding new tools

The Flutter MCP Server is registered with Smithery's registry, making it discoverable and usable by other AI tools through a standardized interface.

Integration Architecture

┌─────────────────┐     ┌───────────────────────┐     ┌─────────────────┐
│                 │     │  Flutter App with     │     │                 │
│  Flutter App    │<--->│  mcp_toolkit          │<--->│ flutter-mcp-    │
│  (Debug Mode)   │     │  (VM Svc. Extensions  │     │ toolkit-server  │
│                 │     │  + Dynamic Tools)     │     │                 │
└─────────────────┘     └───────────────────────┘     └─────────────────┘

🤝 Contributing

Contributions are welcome! See CONTRIBUTING.md (maintainer releases, binary checksums) and the contribution guide. Pull requests and issues: GitHub.

✨ Contributors

Huge thanks to all contributors for making this project better!

This roster is maintained with all-contributors. To add someone, update .all-contributorsrc and regenerate the README table, or use the all-contributors bot/CLI from a PR. More detail: docs/contributing/contributors.mdx.

<!-- https://allcontributors.org/docs/en/bot/usage --> <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --> <!-- prettier-ignore-start --> <!-- markdownlint-disable --> <table> <tbody> <tr> <td align="center" valign="top" width="14.28%"><a href="https://calclavia.com"><img src="https://avatars.githubusercontent.com/u/1828968?v=4?s=100" width="100px;" alt="Henry Mao"/><br /><sub><b>Henry Mao</b></sub></a><br /><a href="#infra-calclavia" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/marwenbk"><img src="https://avatars.githubusercontent.com/u/18284646?v=4?s=100" width="100px;" alt="Marwen"/><br /><sub><b>Marwen</b></sub></a><br /><a href="#doc-marwenbk" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="http://eastagile.com"><img src="https://avatars.githubusercontent.com/u/2829939?v=4?s=100" width="100px;" alt="Lawrence Sinclair"/><br /><sub><b>Lawrence Sinclair</b></sub></a><br /><a href="#doc-lwsinclair" title="Documentation">📖</a> <a href="#security-lwsinclair" title="Security">🛡️</a></td> <td align="center" valign="top" width="14.28%"><a href="https://glama.ai"><img src="https://avatars.githubusercontent.com/u/108313943?v=4?s=100" width="100px;" alt="Frank Fiegel"/><br /><sub><b>Frank Fiegel</b></sub></a><br /><a href="#infra-punkpeye" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/Harishwarrior"><img src="https://avatars.githubusercontent.com/u/38380040?v=4?s=100" width="100px;" alt="Harish Anbalagan"/><br /><sub><b>Harish Anbalagan</b></sub></a><br /><a href="#userTesting-Harishwarrior" title="User Testing">📓</a> <a href="#bug-Harishwarrior" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/torbenkeller"><img src="https://avatars.githubusercontent.com/u/33001558?v=4?s=100" width="100px;" alt="Torben Keller"/><br /><sub><b>Torben Keller</b></sub></a><br /><a href="#userTesting-torbenkeller" title="User Testing">📓</a> <a href="#bug-torbenkeller" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/rednikisfun"><img src="https://avatars.githubusercontent.com/u/53967674?v=4?s=100" width="100px;" alt="Isfun"/><br /><sub><b>Isfun</b></sub></a><br /><a href="#userTesting-rednikisfun" title="User Testing">📓</a> <a href="#bug-rednikisfun" title="Bug reports">🐛</a> <a href="#research-rednikisfun" title="Research">🔬</a> <a href="#code-rednikisfun" title="Code">💻</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/cosystudio"><img src="https://avatars.githubusercontent.com/u/149987661?v=4?s=100" width="100px;" alt="Cosy Studio"/><br /><sub><b>Cosy Studio</b></sub></a><br /><a href="#userTesting-cosystudio" title="User Testing">📓</a> <a href="#bug-cosystudio" title="Bug reports">🐛</a> <a href="#research-cosystudio" title="Research">🔬</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/lukemmtt"><img src="https://avatars.githubusercontent.com/u/1598289?v=4?s=100" width="100px;" alt="Luke Memet"/><br /><sub><b>Luke Memet</b></sub></a><br /><a href="#userTesting-lukemmtt" title="User Testing">📓</a> <a href="#research-lukemmtt" title="Research">🔬</a> <a href="#maintenance-lukemmtt" title="Maintenance">🚧</a> <a href="#tutorial-lukemmtt" title="Tutorials">✅</a></td> <td align="center" valign="top" width="14.28%"><a href="https://commentatk-media.com"><img src="https://avatars.githubusercontent.com/u/70331129?v=4?s=100" width="100px;" alt="Commentatk Media"/><br /><sub><b>Commentatk Media</b></sub></a><br /><a href="#code-CommentakMedia" title="Code">💻</a> <a href="#maintenance-CommentakMedia" title="Maintenance">🚧</a> <a href="#doc-CommentakMedia" title="Documentation">📖</a></td> <td align="center" valign="top" width="14.28%"><a href="https://www.linkedin.com/in/umitarslan/"><img src="https://avatars.githubusercontent.com/u/4801240?v=4?s=100" width="100px;" alt="Umit Arslan"/><br /><sub><b>Umit Arslan</b></sub></a><br /><a href="#code-arslanmit" title="Code">💻</a> <a href="#maintenance-arslanmit" title="Maintenance">🚧</a></td> <td align="center" valign="top" width="14.28%"><a href="https://joelkitching.com/"><img src="https://avatars.githubusercontent.com/u/514199?v=4?s=100" width="100px;" alt="Joel Kitching"/><br /><sub><b>Joel Kitching</b></sub></a><br /><a href="#code-jkitching" title="Code">💻</a> <a href="#maintenance-jkitching" title="Maintenance">🚧</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/jeanlucthumm"><img src="https://avatars.githubusercontent.com/u/4934853?v=4?s=100" width="100px;" alt="Jean-Luc Thumm"/><br /><sub><b>Jean-Luc Thumm</b></sub></a><br /><a href="#maintenance-jeanlucthumm" title="Maintenance">🚧</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/tekboxs"><img src="https://avatars.githubusercontent.com/u/64443719?v=4?s=100" width="100px;" alt="Miguel Casagrande"/><br /><sub><b>Miguel Casagrande</b></sub></a><br /><a href="#code-tekboxs" title="Code">💻</a> <a href="#maintenance-tekboxs" title="Maintenance">🚧</a></td> </tr> <tr> <td align="center" valign="top" width="14.28%"><a href="https://github.com/drown0315"><img src="https://avatars.githubusercontent.com/u/108989782?v=4?s=100" width="100px;" alt="drown0315"/><br /><sub><b>drown0315</b></sub></a><br /><a href="#code-drown0315" title="Code">💻</a> <a href="#maintenance-drown0315" title="Maintenance">🚧</a> <a href="#bug-drown0315" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/druyang"><img src="https://avatars.githubusercontent.com/u/46964831?v=4?s=100" width="100px;" alt="druyang"/><br /><sub><b>druyang</b></sub></a><br /><a href="#code-druyang" title="Code">💻</a> <a href="#maintenance-druyang" title="Maintenance">🚧</a> <a href="#bug-druyang" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/dipsy"><img src="https://avatars.githubusercontent.com/u/1336665?v=4?s=100" width="100px;" alt="dipsy"/><br /><sub><b>dipsy</b></sub></a><br /><a href="#code-dipsy" title="Code">💻</a> <a href="#maintenance-dipsy" title="Maintenance">🚧</a> <a href="#bug-dipsy" title="Bug reports">🐛</a></td> <td align="center" valign="top" width="14.28%"><a href="https://github.com/wenyue"><img src="https://avatars.githubusercontent.com/u/4454019?v=4?s=100" width="100px;" alt="wenyue"/><br /><sub><b>wenyue</b></sub></a><br /><a href="#code-wenyue" title="Code">💻</a> <a href="#maintenance-wenyue" title="Maintenance">🚧</a></td> <td align="center" valign="top" width="14.28%"><a href="http://biff.ai"><img src="https://avatars.githubusercontent.com/u/10966918?v=4?s=100" width="100px;" alt="Christophe"/><br /><sub><b>Christophe</b></sub></a><br /><a href="#doc-chrstphe" title="Documentation">📖</a> <a href="#platform-chrstphe" title="Packaging/porting to new platform">📦</a></td> </tr> </tbody> </table> <!-- markdownlint-restore --> <!-- prettier-ignore-end --> <!-- ALL-CONTRIBUTORS-LIST:END -->

📖 Learn More

Star History

<a href="https://www.star-history.com/?type=date&repos=Arenukvern%2Fmcp_flutter"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=Arenukvern/mcp_flutter&type=date&theme=dark&legend=top-left" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=Arenukvern/mcp_flutter&type=date&legend=top-left" /> <img alt="Star History Chart" src="https://api.star-history.com/chart?repos=Arenukvern/mcp_flutter&type=date&legend=top-left" /> </picture> </a>

📄 License

MIT - Feel free to use in your projects!


Flutter and Dart are trademarks of Google LLC.

Related MCP servers

A secured scoped SSH MCP server for executing safe read-only diagnostic DevOps / SysOps commands

3
Python
AGPL-3.0
View repository →

MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2

0
TypeScript
MIT
View repository →

AI-powered Rosetta/PyRosetta protein modeling and Biotite translation for computational biology.

16
JavaScript
View repository →

Connect Strava training data to Claude for training load analysis and activity insights

0
TypeScript
MIT
View repository →

End-to-end tests from one sentence: an agent drives a real browser, and passing runs replay free.

2
Go
MIT
View repository →
BRBrowsegrab logo

Browsegrab

Maintained

Token-efficient browser agent for local LLMs. Playwright + accessibility tree + MarkGrab.

0
MIT
View repository →