flutter-mcp
- Repo stars 0
- Author repo skills-registry
Flutter MCP
Golden path for agents driving a live Flutter app via the flutter-mcp-toolkit MCP server entry. Older configs may use the legacy flutter-inspector mcpServers registry id for the same binary (that id is not the Claude subagent flutter-mcp-toolkit-runtime).
When to use
- User references a running Flutter app (debug mode) and wants to inspect, screenshot, interact with, or hot-reload it.
- User pastes a VM service URI (
ws://127.0.0.1:8181/.../ws) or mentions port 8181. - You need runtime proof (before/after screenshots) that a code edit took effect.
Preflight (always first)
Before any VM-dependent call:
- Call
doctor(or runflutter-mcp-toolkit doctor --json) — parses env, ports, app reachability. - Confirm required toolkit extensions exist on the target:
ext.mcp.toolkit.app_errorsext.mcp.toolkit.view_detailsext.mcp.toolkit.view_screenshotsext.mcp.toolkit.inspect_widget_at_point
If missing, stop and report the instrumentation gap — do not guess:
- Add
mcp_toolkittopubspec.yaml. - Ensure
MCPToolkitBinding.instance..initialize()..initializeFlutterToolkit();runs beforerunApp. - Hot restart (not reload) — reload is often insufficient for extension registration.
Tool naming (v3.0.0+)
All MCP tools surface under the fmt_ capability prefix
(fmt_tap_widget, fmt_hot_reload_and_capture, etc.). The prefix is
mandatory in tools/call. Skill-local references below use the bare name
for readability — when invoking, prepend fmt_. Dynamic-registry host
tools (fmt_list_client_tools_and_resources, fmt_client_tool,
fmt_client_resource) use the same prefix for a single consistent surface.
Interaction loop (Playwright-style)
fmt_semantic_snapshot→ returnss_0..s_Nrefs +snapshot_id.fmt_tap_widget/fmt_enter_text/fmt_scroll/fmt_swipe/fmt_long_press/fmt_drag— act on a ref. Always passsnapshotId— you get a structuredstale_snapshoterror if the tree moved, instead of a silent wrong tap.fmt_evaluate_dart_expression— read state directly (e.g.AgentState.instance.counter).fmt_hot_reload_and_capture— after a code edit, returns reload status + screenshot + fresh snapshot + errors in one response. Prefer this over manual reload + separate capture.
Error envelope contract
Errors are {code, message, details, descriptor, recovery}. Parse error.descriptor (not the top-level object) for the machine-readable shape. Strict schemas default to additionalProperties: false — unknown params reject.
Common codes and recovery:
connection_selection_required— retry witharguments.connection.targetIdor exactarguments.connection.urifromapp.debugPort.wsUri.target_not_found— refresh targets, then prefer exactarguments.connection.uri.stale_snapshot— callfmt_semantic_snapshotagain, then retry the action with the newsnapshot_id.tool_not_found— confirm the prefixed name (fmt_<tool>); v3.0.0 dropped legacy unprefixed names.- Empty screenshot output — verify the server was not started with
--no-images. - Missing view resource/tool — verify the server was not started with
--no-resources.
Visual QA
- Before/after screenshots are the proof artifact for any UI claim. Capture before with
fmt_capture_ui_snapshot(or one of thevisual://localhost/...resources), edit,fmt_hot_reload_and_capture, compare. - For each reported visual issue, attach coordinate +
fmt_inspect_widget_at_pointoutput. - Map defects to source via
fmt_get_app_errorstop stack frame (file,line,column) when available. - Do not use
fmt_debug_dump_*unless explicitly requested (server must be started with--dumps; high token cost).
Permissions (macOS)
Screen Recording permission belongs to the process running flutter-mcp-toolkit (or the MCP server host). If visual capture is denied:
flutter-mcp-toolkit permissions status
flutter-mcp-toolkit permissions request
flutter-mcp-toolkit permissions open-settings
Non-modifiable apps
If the target app cannot be instrumented (third-party binary, restricted env), report flutter-mcp as unavailable for that app. Do not claim screenshot/layout/error inspection success.
Related
- For the dynamic-tools side (registering custom MCP tools from inside the Flutter app), see the
flutter-mcp-toolkit-custom-toolsskill. - For routing across setup / inspect / control / debug skills, see
flutter-mcp-toolkit-guide.
<!-- tomevault:4.0:skill_md:2026-05-22 -->Source: Arenukvern/mcp_flutter — distributed by TomeVault.
- Fluxly category
- AI
- Author-declared agents
- No explicit declaration found; this is not inferred or tested compatibility
- Static check
- 88 / 100 · heuristic scan, not runtime safety proof
- Author / version / license
- @tomevault-io · no license declared
- Fluxly token estimate
- Lean
- Fluxly setup estimate
- Plug-and-play
- External API key
- No requirement detected
- Detected OS requirements
- macOS
- Runtime requirements
- Unspecified
- Detected file/system behavior
-
- Read-only
- Write / modify
- Detected network behavior
- Local-only
- Install commands
- None (reference only)
Profile is derived at build time from SKILL.md and install vectors. Subject to drift from author intent.
Heads up: 未限定 allowed-tools,默认拥有全部工具权限。
The current SKILL.md does not define a fixed output example. User references a running Flutter app (debug mode) and wants to inspect, screenshot, interact with, or hot-reload it. User pastes a VM service URI (ws://127.0.0.1:8181/.../ws) or mentions port 8181. You need runtime proof (before/after screenshots) that a code…
Before any VM-dependent call: Call doctor (or run flutter-mcp-toolkit doctor --json) — parses env, ports, app reachability. Confirm required toolkit extensions exist on the target:
All MCP tools surface under the fmt capability prefix (fmttapwidget, fmthotreloadandcapture, etc.). The prefix is mandatory in tools/call. Skill-local references below use the bare name
fmtsemanticsnapshot → returns s0..sN refs + snapshotid. fmttapwidget / fmtentertext / fmtscroll / fmtswipe / fmtlongpress / fmtdrag — act on a ref. Always pass snapshotId — you get a structured stalesnapshot error if the tree moved, instead of a silent wrong…
Errors are {code, message, details, descriptor, recovery}. Parse error.descriptor (not the top-level object) for the machine-readable shape. Strict schemas default to additionalProperties: false — unknown params reject. Common codes and recovery:
Before/after screenshots are the proof artifact for any UI claim. Capture before with fmtcaptureuisnapshot (or one of the visual://localhost/... resources), edit, fmthotreloadandcapture, compare. For each reported visual issue, attach coordinate +…
<!-- @FMT_MODE_PRELUDE -->
# Flutter MCP
Golden path for agents driving a live Flutter app via the **`flutter-mcp-toolkit`** MCP server entry. Older configs may use the legacy **`flutter-inspector`** `mcpServers` registry id for the same binary (that id is **not** the Claude subagent **`flutter-mcp-toolkit-runtime`**).
## When to use
- User references a running Flutter app (debug mode) and wants to inspect, screenshot, interact with, or hot-reload it.
- User pastes a VM service URI (`ws://127.0.0.1:8181/.../ws`) or mentions port 8181.
- You need runtime proof (before/after screenshots) that a code edit took effect.
## Preflight (always first)
Before any VM-dependent call:
1. Call `doctor` (or run `flutter-mcp-toolkit doctor --json`) — parses env, ports, app reachability.
2. Confirm required toolkit extensions exist on the target:
- `ext.mcp.toolkit.app_errors`
- `ext.mcp.toolkit.view_details`
- `ext.mcp.toolkit.view_screenshots`
- `ext.mcp.toolkit.inspect_widget_at_point`
If missing, stop and report the instrumentation gap — do **not** guess:
- Add `mcp_toolkit` to `pubspec.yaml`.
- Ensure `MCPToolkitBinding.instance..initialize()..initializeFlutterToolkit();` runs before `runApp`.
- Hot **restart** (not reload) — reload is often insufficient for extension registration.
## Tool naming (v3.0.0+)
All MCP tools surface under the `fmt_` capability prefix
(`fmt_tap_widget`, `fmt_hot_reload_and_capture`, etc.). The prefix is
mandatory in `tools/call`. Skill-local references below use the bare name
for readability — when invoking, prepend `fmt_`. Dynamic-registry host
tools (`fmt_list_client_tools_and_resources`, `fmt_client_tool`,
`fmt_client_resource`) use the same prefix for a single consistent surface.
## Interaction loop (Playwright-style)
… Author text anchors workflow facts; Fluxly only indexes current sections, terms, files, and commands.
sections -> When to use → Preflight (always first) → Tool naming (v3.0.0+) → Interaction loop (Playwright-style) → Error envelope contract → Visual QA
terms -> flutter-mcp-toolkit · flutter-inspector · not · flutter-mcp-toolkit-runtime · restart · Always pass snapshotId
files/cmd -> flutter-mcp-toolkit · flutter-inspector · mcpServers · flutter-mcp-toolkit-runtime · ws://127.0.0.1:8181/.../ws · doctor · flutter-mcp-toolkit doctor --json · ext.mcp.toolkit.apperrors
body sha256 -> a0fb1692e5c3
Decide Fit First
Design Intent
How To Use It
Boundaries And Review