원클릭으로
flutter-mcp-toolkit-inspect
// Read state from a running Flutter app — semantic snapshot, view details, errors, screenshots, VM info. Use when you need to understand what the app is showing.
// Read state from a running Flutter app — semantic snapshot, view details, errors, screenshots, VM info. Use when you need to understand what the app is showing.
| name | flutter-mcp-toolkit-inspect |
| description | Read state from a running Flutter app — semantic snapshot, view details, errors, screenshots, VM info. Use when you need to understand what the app is showing. |
Use this skill for read-only state inspection of a running Flutter app: what is shown on screen, recent errors, available debug targets, VM metadata, and widget tree details. Do not use for driving interaction — that is the interact skill. Start with discover_debug_apps when no connection target is established. Start with semantic_snapshot when you need to know which widgets are on screen.
batch)flutter-mcp-toolkit batch --steps '[
{"name":"semantic_snapshot"},
{"name":"get_app_errors","args":{"count":5}},
{"name":"get_screenshots","args":{"screenshotMode":"flutter_layer","compress":true}}
]'
Use screenshotMode: flutter_layer on macOS to avoid Screen Recording permission failures.
semantic_snapshot().interactionSurface: flutter_widgets (tap-by-ref works), hybrid (sparse semantics), game_canvas (use evaluate_dart_expression + screenshots).ref (s_0, s_1, …) and the response includes a snapshot_id.snapshot_id to detect staleness.Prefer hot_reload_and_capture over separate reload + snapshot + screenshot calls.
get_app_errors(count: 10).errors array — each entry has message, stack trace, and timestamp.discover_debug_apps().targetId (canonical WebSocket URI) for each active target.connection.targetId on subsequent tool calls.inspect_widget_at_point(x: 200, y: 400).get_screenshots().meta.fileUrls is non-empty, screenshots are on disk at those paths. Otherwise the response contains base64 ImageContent blocks — extract and write manually.List all active Flutter debug targets with canonical WebSocket URIs.
connection (object, optional) — accepted by schema, ignored by executor; discovery is always local.discover_debug_apps()
Returns: {"targets": [{"targetId": "ws://127.0.0.1:8181/<token>/ws", "host": "...", "port": 8181}]}
vm_service_unavailable — no debug-mode Flutter process found.tool_not_found — binary predates v3.0.0; run make build.Retrieve the most recent application errors from the Dart VM.
count (integer, optional, default: 4) — number of errors to return.connection (object, optional) — connection override.get_app_errors(count: 5)
Returns: {"message": "2 errors found", "errors": [{"message": "...", "stack": "..."}]}
vm_service_unavailable — app not reachable.connection_selection_required — multiple targets; supply connection.targetId.Capture screenshots of all views.
compress (boolean, optional, default: true) — compress PNG output.mode (string, optional, default: auto) — auto, flutter_layer, or desktop_window.permissionPolicy (string, optional, default: check_only) — check_only, auto_request_once, or request_always.connection (object, optional) — connection override.get_screenshots(mode: "flutter_layer", compress: false)
Returns: ImageContent blocks (base64 PNG) when no output dir configured, or TextContent URL refs + meta.fileUrls when file output is enabled.
permission_denied — retry with permissionPolicy: "auto_request_once".vm_service_unavailable — app not reachable.Get dimensions, device pixel ratio, and display ID for all views.
connection (object, optional) — connection override.get_view_details()
Returns: {"views": [{"id": 0, "width": 1280, "height": 800, "devicePixelRatio": 2.0}]}
vm_service_unavailable — app not running.connection_selection_required — multiple targets; supply connection.targetId.Return Dart VM metadata: version, isolates list, pid, and architecture.
connection (object, optional) — connection override.get_vm()
Returns: {"type": "VM", "name": "vm", "version": "3.x.x", "isolates": [...]}
vm_service_unavailable — app not reachable.connection_selection_required — multiple targets active.List all registered VM service extension RPCs in the running app.
isolateId (string, optional) — schema-declared but not read by executor; checks all isolates when omitted.isRawResponse (boolean, optional) — schema-declared but not read by executor.connection (object, optional) — connection override.get_extension_rpcs()
Returns: {"extensionRPCs": ["ext.flutter.inspector.getRootWidget", "ext.mcp.toolkit.semantic_snapshot"]}
vm_service_unavailable — app not running.connection_selection_required — multiple targets.Return a compact accessibility tree of interactive widgets with stable ref strings and a snapshot_id.
connection (object, optional) — connection override.semantic_snapshot()
Returns: {"snapshot_id": 3, "nodes": [{"ref": "s_0", "label": "Increment", "actions": ["tap"]}]}
vm_service_unavailable — app not running or MCPToolkitBinding.initialize() not called.connection_selection_required — multiple targets; supply connection.targetId.Identify the deepest widget and render node at a global logical coordinate.
x (integer, required) — global logical X coordinate.y (integer, required) — global logical Y coordinate.viewId (integer, optional) — FlutterView ID for multi-view apps.connection (object, optional) — connection override.inspect_widget_at_point(x: 200, y: 400)
Returns: {"widget": {"type": "ElevatedButton", "rect": {"left": 180, "top": 380, "right": 280, "bottom": 420}}}
vm_service_unavailable — app not reachable.invalid_argument — coordinates out of view bounds.Capture screenshots, view details, and app errors in one bundled response.
errorsCount (integer, optional, default: 4) — errors to include.compress (boolean, optional, default: true) — compress screenshots.includeViewDetails (boolean, optional, default: true) — include view data.includeErrors (boolean, optional, default: true) — include app errors.screenshotMode (string, optional, default: auto) — auto, flutter_layer, or desktop_window.permissionPolicy (string, optional, default: check_only) — check_only, auto_request_once, or request_always.connection (object, optional) — connection override.capture_ui_snapshot(errorsCount: 2, includeViewDetails: false)
Returns: single TextContent JSON block with screenshots, viewDetails, and errors keys.
vm_service_unavailable — app not running.permission_denied — retry with permissionPolicy: "auto_request_once".Explicitly select and connect to a Flutter debug VM target. Use when multiple apps are running or to pin a specific target for the session.
connection (object, optional) — pass connection.targetId with a WebSocket URI from discover_debug_apps.connect_debug_app(connection: {targetId: "ws://127.0.0.1:8181/<token>/ws"})
Returns: {"connected": true, "targetId": "ws://127.0.0.1:8181/<token>/ws", "isolates": [...]}
target_not_found — URI doesn't match a running app; re-run discover_debug_apps for the exact URI.connection_failed — VM refused connection; verify the app is still running in debug mode.Run Flutter MCP runtime validation from CLI in two steps (launch app, then run validate-runtime), including toolkit-extension gating, screenshot/layout capture, app error collection, optional reload verification, and retry handling for transient first-connect failures.
Diagnose problems in a running Flutter app — read logs, evaluate Dart expressions, interpret error envelopes. Use when something broke.
Maintain mcp_flutter releases, CHANGELOG, version pins, docs, and CI. Use when cutting a release, editing CHANGELOG.md, bumping VERSION, running release-please, sync-skills, check-contracts, or updating install/docs for npx skills and flutter-mcp-toolkit init.
Entry point for inspecting or driving a running Flutter app from your AI assistant — routes to the right task skill (inspect / control / debug / custom app surfaces) and runs preflight.
Verify the flutter-mcp-toolkit install, run doctor preflight, troubleshoot connection issues. Use when the toolkit isn't responding or first-time setup.
Use this skill when the agent exposes app-specific surfaces by registering custom MCP tools and resources inside the Flutter app (mcp_toolkit dynamic registry — MCPCallEntry, bootstrapFlutter additionalEntries / addEntries). Covers tool vs resource vs evaluate-expression, Map-based handlers, schema strictness, discovery via fmt_list_client_tools_and_resources, fmt_client_tool, fmt_client_resource, and lifecycle pitfalls.