Agent skill

Flutter MCP Toolkit Inspect

by Arenukvern in Arenukvern/mcp_flutter

Read state from a running Flutter app — semantic snapshot, view details, errors, screenshots, VM info.

MITAuto-check passedMobile

Install Flutter MCP Toolkit Inspect

skills CLI
$ npx skills add Arenukvern/mcp_flutter --skill flutter-mcp-toolkit-inspect -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Arenukvern/mcp_flutter flutter-mcp-toolkit-inspect --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Arenukvern/mcp_flutter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugin/skills/flutter-mcp-toolkit-inspect .claude/skills/flutter-mcp-toolkit-inspect && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
flutter-mcp-toolkit-inspect
GitHub stars
387
Token cost
~2.6k tokens
SKILL.md length
1,083 words
Files
1
Skills in repo
23
Repo updated
First seen
Licence
MIT

At a glance

Read state from a running Flutter app — semantic snapshot, view details, errors, screenshots, VM info.

  • Works in 4 steps: Call semantic_snapshot(). → Read interactionSurface: flutter_widgets… → Each interactive node has a stable ref… → …
  • You need to understand what the app is showing
  • SKILL.md covers When to use, Recipes and Tool reference
  • Calls make

What it does

Flutter MCP Toolkit Inspect is an agent skill from Arenukvern/mcp_flutter. 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.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile, covering Cross-platform mobile apps and MCP servers. It works with Flutter and Model Context Protocol. The repository describes itself as: MCP Toolkit for Flutter AI Agent Driven Development (MCP/CLI + custom client side tools) - via closed feedback loop (visual & semantic snapshot) and high client side… The licence is MIT.

When your agent uses it

  • You need to understand what the app is showing
  • Tasks that involve Cross-platform mobile apps
  • Tasks that involve MCP servers

Example prompts

  • “/flutter-mcp-toolkit-inspect”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Call semantic_snapshot().
  2. Read interactionSurface: flutter_widgets (tap-by-ref works), hybrid (sparse semantics), game_canvas (use evaluate_dart_expression +…
  3. Each interactive node has a stable ref (s_0, s_1, …) and the response includes a snapshot_id.
  4. Pass refs to interaction tools; pass the snapshot_id value as snapshotId to detect staleness.

What it can do on your machine

Read from SKILL.md and the folder at commit 62f3ee1. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • make

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Flutter MCP Toolkit Inspect loads about 2.6k tokens when it runs. Until then it costs about 47 tokens; SKILL.md has 1,083 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~47
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Arenukvern/mcp_flutter at commit 62f3ee1, republished under its MIT licence (© Arenukvern). 1,083 words, ~2,557 tokens.

Download SKILL.mdSave it as .claude/skills/flutter-mcp-toolkit-inspect/SKILL.md (or your agent's skills folder).
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.
<!-- @FMT_MODE_PRELUDE -->

When to use

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.

Recipes

Fast inspect cycle (prefer batch)
bash
flutter-mcp-toolkit batch --steps '[
  {"name":"semantic_snapshot"},
  {"name":"get_app_errors","args":{"count":5}},
  {"name":"get_screenshots","args":{"mode":"flutter_layer","compress":true}}
]'

Use mode: flutter_layer on get_screenshots on macOS to avoid Screen Recording permission failures. capture_ui_snapshot uses the separate screenshotMode field.

Snapshot the visible UI
  1. Call semantic_snapshot().
  2. Read interactionSurface: flutter_widgets (tap-by-ref works), hybrid (sparse semantics), game_canvas (use evaluate_dart_expression + screenshots).
  3. Each interactive node has a stable ref (s_0, s_1, …) and the response includes a snapshot_id.
  4. Pass refs to interaction tools; pass the snapshot_id value as snapshotId to detect staleness.
After a code edit

Prefer hot_reload_and_capture over separate reload + snapshot + screenshot calls.

Find an error by message
  1. Call get_app_errors(count: 10).
  2. Inspect the errors array — each entry has message, stack trace, and timestamp.
  3. Match on message text to find the source.
List debug-mode apps
  1. Call discover_debug_apps().
  2. Read the targetId (canonical WebSocket URI) for each active target.
  3. Pass the chosen URI as connection.targetId on subsequent tool calls.
Get widget at coordinates
  1. Call inspect_widget_at_point(x: 200, y: 400).
  2. The response identifies the deepest widget and render node at those global logical pixel coordinates.
Save a screenshot to a file
  1. Call get_screenshots().
  2. If meta.fileUrls is non-empty, screenshots are on disk at those paths. Otherwise the response contains base64 ImageContent blocks — extract and write manually.
  3. To force file output, configure an images output directory on the server before calling.

Tool reference

discover_debug_apps

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.
get_app_errors

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.
get_screenshots

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_view_details

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.
get_vm

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.
get_extension_rpcs

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.
Show full SKILL.md (525 more words)Show less
semantic_snapshot

Return a compact accessibility tree of interactive widgets with stable ref strings and a snapshot_id. A node is listed when it reads (label, value), acts (button, text field, tap, scroll…) or carries a Semantics(identifier:).

  • identifierPrefix (string, optional) — keep only nodes whose identifier starts with it ("nav." for one rail).
  • subtreeOf (string, optional) — keep one node and its descendants; a ref from the latest snapshot or an identifier, the ref tried first.
  • fields (array of strings, optional) — node keys to return; ref is always kept. Names: ref id type identifier label value hint enabled focused checked toggled selected bounds actions children visibleInViewport centerInViewport center.
  • connection (object, optional) — connection override.

The tree is always walked whole, so a ref read off a filtered snapshot is the same ref the full snapshot would give and works with every interaction tool. A filtered reply adds totalNodeCount and echoes filter; children lists kept refs only.

semantic_snapshot()
semantic_snapshot(identifierPrefix: "nav.", fields: ["identifier", "selected"])
semantic_snapshot(subtreeOf: "panel.tabs")

Returns: {"snapshot_id": 3, "nodeCount": 1, "viewport": {...}, "nodes": [{"ref": "s_0", "label": "Increment", "actions": ["tap"], "bounds": {...}, "visibleInViewport": true, "centerInViewport": true, "center": {...}}]} — the viewport is stated once in the envelope, not on each node.

  • subtree_root_not_found — subtreeOf is neither a ref of the latest snapshot nor an identifier in the tree; no snapshot was taken, refs and snapshot_id are unchanged.
  • unknown_field — a name in fields is not a node key; acceptedFields lists them. Over MCP and the CLI the name is refused at the boundary instead — an invalid fields argument naming the accepted keys, without spending a call on the app.
  • vm_service_unavailable — app not running or MCPToolkitBinding.initialize() not called.
  • connection_selection_required — multiple targets; supply connection.targetId.
inspect_widget_at_point

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_ui_snapshot

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: a TextContent JSON block with screenshots, viewDetails, and errors keys. When screenshots.images contains inline base64, each payload is lifted into a sibling image block and the JSON reports screenshots.imagesDeliveredAs: "image_blocks"; the emptied images list is then the normal shape, not a failed capture. Captures delivered through screenshots.fileUrls stay in the JSON and produce no image blocks.

  • vm_service_unavailable — app not running.
  • permission_denied — retry with permissionPolicy: "auto_request_once".
connect_debug_app

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.

© Arenukvern, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugin/skills/flutter-mcp-toolkit-inspect of Arenukvern/mcp_flutter.

Open the folder on GitHubat commit 62f3ee1

Compare with similar skills

Flutter MCP Toolkit Inspect next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Flutter MCP Toolkit Inspect compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Flutter MCP Toolkit Inspect this skillArenukvern/mcp_flutter387—~2.6kAutomated safety check: PassMIT
MCP Debuggerdebugmcp/mcp-debugger174—~4.2kAutomated safety check: PassMIT
Retrieving Developer Knowledgegoogle/skills21k—~2kAutomated safety check: PassApache-2.0
MCP Dart Clientleehack/mcp_dart116—~1.8kAutomated safety check: PassMIT
Appllama UsageAppllama/appllama-skills2.5k1 repos~1.6kAutomated safety check: PassMIT
Marionette Flutter Drive Appleancodepl/marionette_mcp482—~11kAutomated safety check: PassApache-2.0

Similar skills

  • MCP Debugger

    debugmcp/mcp-debugger

    A skill your agent uses when investigating a bug, failing test, or unexpected runtime behavior and the mcp-debugger MCP server is available — drives real step-through debuggers (breakpoints, stack…

    174 GitHub stars~4.2k tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    Searches, retrieves, and synthesizes official Google developer documentation across Google Cloud, AI/Gemini, Android, Chrome, Web, Flutter, Go, Firebase, and other Google developer platforms.

    21k GitHub stars~2k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • MCP Dart Client

    leehack/mcp_dart

    A skill your agent uses when connecting a Dart or Flutter app to a Model Context Protocol (MCP) server with mcpdart: creating an McpClient, launching a local server over stdio or reaching a remote…

    116 GitHub stars~1.8k tokensUpdated 5 days ago
    Agent WorkflowsAuto-check passed
  • Appllama Usage

    Appllama/appllama-skills

    Use the Appllama MCP (mcp.appllama.io) well — research real top-grossing mobile apps, their screens, flows, and UI elements, then build from what you learn.

    2.5k GitHub starsUsed in 1 repo~1.6k tokens
    MobileAuto-check passed
  • Marionette Flutter Drive App

    leancodepl/marionette_mcp

    Set up and drive a running Flutter app (debug or profile) with Marionette — an AI agent's hands and eyes for the app.

    482 GitHub stars~11k tokensUpdated 5 days ago
    MobileAuto-check passed
  • Aaalice Dev Sessions

    Aaalice233/Aaalice_NAI_Launcher

    管理 Aaalice NAI Launcher 项目专用的 Windows 与 Android Flutter 开发会话。用户提到 PC热重载、安卓热重载、启动/关闭/重建独立命令行窗口、模拟器启动异常或检查双端会话时使用。

    189 GitHub stars~902 tokensUpdated today
    MobileAuto-check passed

More from Arenukvern/mcp_flutter

All 23 skills in this repo
  • Harness Engineering Lifecycle

    Arenukvern/mcp_flutter

    Design, implement, and integrate generalized validation harnesses across a producer-consumer boundary after a local harness contract exists.

    387 GitHub stars~1.6k tokensUpdated 8 days ago
    Auto-check passed
  • Mixture Of Experts

    Arenukvern/mcp_flutter

    Run a Mixture of Experts (MoE) audit on any topic, plan, codebase, evidence archive, or process.

    387 GitHub stars~2.3k tokensUpdated 8 days ago
    Auto-check passed
  • Multi Agent Handoff

    Arenukvern/mcp_flutter

    Plan and document handoffs, parent lane contracts, and parallel batch contracts between specialized AI agents (foreman, workers, reviewers).

    387 GitHub stars~2.7k tokensUpdated 8 days ago
    Auto-check passed
  • Plugin Marketplace Setup

    Arenukvern/mcp_flutter

    Designs public or private Agent Skill and plugin marketplaces for Cursor, Claude Code, Codex, Zed, Open Plugin, and npx skills—manifest layout, install matrix, and Skill Steward vs product boundaries.

    387 GitHub stars~2.9k tokensUpdated 8 days ago
    Auto-check passed
  • Release Changelog Harness

    Arenukvern/mcp_flutter

    Chooses ecosystem-native release and changelog tooling (Changesets, Melos, release-plz) plus binary distribution (GitHub Release tarballs, install.sh) when the product is an executable.

    387 GitHub stars~2.6k tokensUpdated 8 days ago
    Auto-check passed
  • Repository Governance Lifecycle

    Arenukvern/mcp_flutter

    Master orchestration for repository governance, North Star impact, sub-Star boundaries, and repair-first or evidence-first drift checks.

    387 GitHub stars~1.5k tokensUpdated 8 days ago
    Auto-check passed

Categories

Questions about Flutter MCP Toolkit Inspect

What does Flutter MCP Toolkit Inspect do?

Read state from a running Flutter app — semantic snapshot, view details, errors, screenshots, VM info. Flutter MCP Toolkit Inspect is an agent skill from Arenukvern/mcp_flutter. Read state from a running Flutter app — semantic snapshot, view details, errors, screenshots, VM info.

When should I use Flutter MCP Toolkit Inspect?

Flutter MCP Toolkit Inspect fits situations like: you need to understand what the app is showing; tasks that involve Cross-platform mobile apps; tasks that involve MCP servers.

How do I install Flutter MCP Toolkit Inspect in Claude Code?

Run `npx skills add Arenukvern/mcp_flutter --skill flutter-mcp-toolkit-inspect -a claude-code`. Or copy the skill folder (plugin/skills/flutter-mcp-toolkit-inspect in Arenukvern/mcp_flutter) into .claude/skills/flutter-mcp-toolkit-inspect in your project. Claude Code loads it when a task matches its description.

How do I install Flutter MCP Toolkit Inspect in Codex?

Run `npx skills add Arenukvern/mcp_flutter --skill flutter-mcp-toolkit-inspect -a codex`. Or copy the skill folder (plugin/skills/flutter-mcp-toolkit-inspect in Arenukvern/mcp_flutter) into .agents/skills/flutter-mcp-toolkit-inspect in your project. Codex loads it when a task matches its description.

Can I use Flutter MCP Toolkit Inspect in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Arenukvern/mcp_flutter --skill flutter-mcp-toolkit-inspect -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/flutter-mcp-toolkit-inspect, .gemini/skills/flutter-mcp-toolkit-inspect, .github/skills/flutter-mcp-toolkit-inspect and .opencode/skills/flutter-mcp-toolkit-inspect in your project.

What does Flutter MCP Toolkit Inspect need to run?

Going by SKILL.md and its folder, Flutter MCP Toolkit Inspect needs the command-line tools its instructions call (make).

Does Flutter MCP Toolkit Inspect access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Flutter MCP Toolkit Inspect safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Flutter MCP Toolkit Inspect use?

Flutter MCP Toolkit Inspect is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Flutter MCP Toolkit Inspect use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Flutter MCP Toolkit Inspect?

Skills that share tags, products or a category with Flutter MCP Toolkit Inspect: MCP Debugger (debugmcp/mcp-debugger, 174 stars), Retrieving Developer Knowledge (google/skills, 21k stars), MCP Dart Client (leehack/mcp_dart, 116 stars) and Appllama Usage (Appllama/appllama-skills, 2.5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Flutter MCP Toolkit Inspect?

Arenukvern (a GitHub user) maintains it in Arenukvern/mcp_flutter, which has 387 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on October 3, 2026.

Source: Arenukvern/mcp_flutter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.