Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Flutter MCP Toolkit

OCI · GHCR.IO/ARENUKVERN/FLUTTER-MCP-TOOLKIT:5.1.0 · SCANNED SEP 20

Inspect and drive Flutter debug apps/games: semantic snapshots, search, and custom client tools

+3 this week 50 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security0
  • Malware scan not yet available for this package.Unverified
  • Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
Provenance & Transparency35
Schema Quality & AI Usability84
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 3836 tokens (~106/item across 36 items; 33 tools + 3 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management90
  • Stability observed for 27 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage86
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 57% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "fmt_client_tool" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 35 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Install

How do I install the Flutter MCP Toolkit server?

Flutter MCP Toolkit runs locally as a container image, launched with docker run --rm -i ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

oci · ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0

# add to Claude Code
claude mcp add arenukvern-flutter-mcp-toolkit -- docker run --rm -i ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0
// .cursor/mcp.json
{
  "mcpServers": {
    "arenukvern-flutter-mcp-toolkit": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "arenukvern-flutter-mcp-toolkit": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add arenukvern-flutter-mcp-toolkit -- docker run --rm -i ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "arenukvern-flutter-mcp-toolkit": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"
      ],
      "enabled": true
    }
  }
}
# ~/.hermes/config.yaml
mcp_servers:
  arenukvern-flutter-mcp-toolkit:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "arenukvern-flutter-mcp-toolkit": {
      "Transport": "stdio",
      "Command": "docker",
      "Arguments": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"
      ]
    }
  }
}
// mcp.json
{
  "mcpServers": {
    "arenukvern-flutter-mcp-toolkit": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 77 to 80. That category is still filling its 30-day observation window: 23 days of observed history at the previous scan, 24 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.

  • 13 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

  • 11 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

  • 8 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

  • 6 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

  • 4 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed oci/ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem oci
Reason No attestation published

Background: How many MCP packages publish verified provenance →

MCP tools · 33 exposed · ~3,266 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
fmt_capture_ui_snapshot ~148

Capture screenshots, view details, and app errors in one response.

NameTypeReqDescription
compressbooleanWhether screenshots should be compressed (default: true).
connectionobject
errorsCountintegerNumber of recent errors to include (default: 4).
includeErrorsbooleanInclude app errors (default: true).
includeViewDetailsbooleanInclude detailed view/widget data (default: true).
permissionPolicystringPermission policy: check_only, auto_request_once, or request_always (default: check_only).
screenshotModestringScreenshot mode: auto, flutter_layer, or desktop_window (default: auto).

No output schema declared.

No examples provided.

fmt_client_resource ~240

Read content from a dynamically registered resource in the Flutter application. Resources provide structured data like app state, view details, or configuration information. Use this to access read-only information that doesn't require tool execution. Names/URIs must match exactly what appears in fmt_list_client_tools_and_resources. Typically used for getting current app state snapshots or accessing structured data. For custom resources: To create new tools/resources: 1) Define AgentCallEntry.tool() or AgentCallEntry.resource() (namespace, name, description, inputSchema, handler returning AgentResult), 2) Register in the Flutter app (main.dart or bootstrap) via MCPToolkitBinding.addEntries() or addMcpTool(), 3) Use fmt_list_client_tools_and_resources to verify registration, 4) Hot restart the app to activate. 5) Use fmt_client_tool or fmt_client_resource to execute. Example: AgentCallEntry.resource(namespace: "app", name: "my_resource", ...) then addEntries; hot restart.

NameTypeReqDescription
connectionobject
resourceUristringyesExact URI of the resource to read (from fmt_list_client_tools_and_resources)

No output schema declared.

No examples provided.

fmt_client_tool ~267

Execute a specific dynamically registered tool from the Flutter application. Use this to run debugging tools, inspect app state, take screenshots, analyze errors, or execute custom tools. Names/URIs must match exactly what appears in fmt_list_client_tools_and_resources. Arguments should conform to the tool's inputSchema requirements. This is your primary way to interact with Flutter app functionality beyond static MCP server tools. For custom tools: To create new tools/resources: 1) Define AgentCallEntry.tool() or AgentCallEntry.resource() (namespace, name, description, inputSchema, handler returning AgentResult), 2) Register in the Flutter app (main.dart or bootstrap) via MCPToolkitBinding.addEntries() or addMcpTool(), 3) Use fmt_list_client_tools_and_resources to verify registration, 4) Hot restart the app to activate. 5) Use fmt_client_tool or fmt_client_resource to execute. Example: AgentCallEntry.tool(namespace: "app", name: "my_tool", ...) then addEntries; hot restart.

NameTypeReqDescription
argumentsobjectArguments to pass to the tool, matching its inputSchema requirements
connectionobject
toolNamestringyesExact name of the tool to execute (from fmt_list_client_tools_and_resources)

No output schema declared.

No examples provided.

fmt_connect_debug_app ~35

Connect to a Flutter debug VM. Use this to select an app when multiple are running.

NameTypeReqDescription
connectionobject

No output schema declared.

No examples provided.

fmt_discover_debug_apps ~29

Discover Flutter debug targets with canonical ws target URIs.

NameTypeReqDescription
connectionobject

No output schema declared.

No examples provided.

fmt_drag ~152

Drag from one widget to another, identified by refs.

NameTypeReqDescription
connectionobject
fromRefstringyesSource widget ref.
kindstringPointer device to synthesize. Defaults to mouse on desktop targets and touch elsewhere. Mouse keeps scrollables out of the gesture arena, so the drag lands on the target's drag/pan recognizer (drag-a…
snapshotIdintegerOptional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.
toRefstringyesTarget widget ref.

No output schema declared.

No examples provided.

fmt_enter_text ~94

Enter text into a text field identified by ref from semantic_snapshot. Taps the field to focus before typing.

NameTypeReqDescription
connectionobject
refstringyesText field ref.
snapshotIdintegerOptional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.
textstringyesText to enter.

No output schema declared.

No examples provided.

fmt_evaluate_dart_expression ~87

Evaluate a Dart expression in the running app isolate. Returns the result of the expression as text.

NameTypeReqDescription
connectionobject
expressionstringyesDart expression to evaluate (e.g. "MyClass.instance.value").
libraryUristringOptional library URI for evaluation scope (e.g. package:myapp/main.dart). Defaults to root library.

No output schema declared.

No examples provided.

fmt_fill_form ~99

Batch text entry: enters text into multiple fields in one call. Stops on first failure. Each field: {ref, text}. Pass snapshotId to validate against the most recent semantic_snapshot (checked on the first field only).

NameTypeReqDescription
connectionobject
fieldsarrayyes
snapshotIdintegerOptional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. Checked on the first field only.

No output schema declared.

No examples provided.

fmt_focus_window ~49

Focus the host macOS app window or iOS Simulator before desktop capture.

NameTypeReqDescription
connectionobject
targetPidintegerOptional VM process id (defaults to the connected VM).

No output schema declared.

No examples provided.

fmt_get_app_errors ~45

Get the most recent application errors from Dart VM.

NameTypeReqDescription
connectionobject
countintegerNumber of recent errors to retrieve (default: 4).

No output schema declared.

No examples provided.

fmt_get_extension_rpcs ~72

Utility: List all available extension RPCs in the Flutter app.

NameTypeReqDescription
connectionobject
isRawResponsebooleanIf true, returns the raw VM response without post-processing.
isolateIdstringOptional specific isolate ID to inspect. If omitted, checks all isolates.

No output schema declared.

No examples provided.

fmt_get_recent_logs ~47

Get recent print() and log output from the running Flutter app.

NameTypeReqDescription
connectionobject
countintegerNumber of recent log entries (default: 50).

No output schema declared.

No examples provided.

fmt_get_screenshots ~92

Get screenshots of all views in the application.

NameTypeReqDescription
compressbooleanWhether to compress the images (default: true).
connectionobject
modestringScreenshot mode: auto, flutter_layer, or desktop_window (default: auto).
permissionPolicystringPermission policy: check_only, auto_request_once, or request_always (default: check_only).

No output schema declared.

No examples provided.

fmt_get_view_details ~26

Get details for all views in the application.

NameTypeReqDescription
connectionobject

No output schema declared.

No examples provided.

fmt_get_vm ~38

Utility: Get VM information from a Flutter app. This is a VM service method, not a Flutter RPC.

NameTypeReqDescription
connectionobject

No output schema declared.

No examples provided.

fmt_handle_dialog ~63

Dismiss the topmost popup/dialog route on the registered Navigator. Currently only action="dismiss" is supported. Requires MCPToolkitBinding.instance.navigatorKey = key on the app.

NameTypeReqDescription
actionstringyesCurrently must be "dismiss".
connectionobject

No output schema declared.

No examples provided.

fmt_hot_reload_and_capture ~103

Hot reload then capture screenshot + semantic snapshot + errors in a single call. Tight edit-preview cycle for AI iteration.

NameTypeReqDescription
compressbooleanCompress screenshots (default: true).
connectionobject
errorsCountintegerNumber of errors to include (default: 4).
includeErrorsbooleanInclude app errors (default: true).
includeSemanticsbooleanInclude semantic snapshot (default: true).

No output schema declared.

No examples provided.

fmt_hot_reload_flutter ~45

Hot reloads the Flutter app.

NameTypeReqDescription
connectionobject
forcebooleanIf true, forces a hot reload even if there are no source changes

No output schema declared.

No examples provided.

fmt_hot_restart_flutter ~31

Hot restarts the Flutter app (full restart; state not preserved).

NameTypeReqDescription
connectionobject

No output schema declared.

No examples provided.

fmt_hover ~110

Synthesize a mouse hover at the centre of a widget identified by a semantic snapshot ref, driving MouseRegion.onEnter/onExit. Desktop and web only. The hover stays parked, so an affordance it reveals survives the next semantic_snapshot; act on it with your next call — any other interaction releases the hover, and the affordance goes with it. Pass snapshotId to detect staleness.

NameTypeReqDescription
connectionobject
refstringyes
snapshotIdinteger

No output schema declared.

No examples provided.

fmt_inspect_widget_at_point ~70

Inspect the deepest widget at global logical coordinates (x, y).

NameTypeReqDescription
connectionobject
viewIdintegerOptional FlutterView id for multi-view apps.
xintegeryesGlobal logical X coordinate.
yintegeryesGlobal logical Y coordinate.

No output schema declared.

No examples provided.

fmt_list_client_tools_and_resources ~200

Discover all dynamically registered tools and resources from the connected Flutter application. Use this as your first step to understand what debugging and inspection capabilities are available. Returns tool definitions with names, descriptions, and input schemas, plus available resources with URIs. Essential for planning your debugging workflow and understanding the app's current MCP toolkit setup. To create new tools/resources: 1) Define AgentCallEntry.tool() or AgentCallEntry.resource() (namespace, name, description, inputSchema, handler returning AgentResult), 2) Register in the Flutter app (main.dart or bootstrap) via MCPToolkitBinding.addEntries() or addMcpTool(), 3) Use fmt_list_client_tools_and_resources to verify registration, 4) Hot restart the app to activate. 5) Use fmt_client_tool or fmt_client_resource to execute. See flutter-mcp-toolkit-custom-tools skill for AgentCallEntry examples.

NameTypeReqDescription
connectionobject

No output schema declared.

No examples provided.

fmt_long_press ~70

Long-press a widget identified by ref.

NameTypeReqDescription
connectionobject
refstringyesWidget ref.
snapshotIdintegerOptional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.

No output schema declared.

No examples provided.

fmt_migrate_agent_entries ~92

Scan Dart sources for legacy MCPCallEntry and return a migration report. Set apply=true to rewrite files in place (host filesystem paths only).

NameTypeReqDescription
applybooleanWhen true, apply migrations. Default false (report-only).
namespacestringDefault AgentCallEntry namespace (default: app).
projectRootstringyesFlutter/Dart project root or single .dart file path.

No output schema declared.

No examples provided.

fmt_navigate ~76

Drive the registered Navigator: action=push|pop|popUntil. push and popUntil require route. push accepts arguments map. Requires MCPToolkitBinding.instance.navigatorKey = key on the app.

NameTypeReqDescription
actionstringyes
argumentsobject
connectionobject
routestring

No output schema declared.

No examples provided.

fmt_press_key ~111

Synthesize a keyboard key press (down + up). Accepted keys: Enter, Escape, Tab, Backspace, Delete, Space, ArrowUp/Down/Left/Right, and single ASCII chars (a-z, 0-9). Optional modifiers: ctrl, shift, alt, meta.

NameTypeReqDescription
altboolean
connectionobject
ctrlboolean
keystringyes
metaboolean
shiftboolean

No output schema declared.

No examples provided.

fmt_reveal_search ~136

Find a semantic target that may be off-screen by taking a snapshot, matching one bounded selector, scrolling up to maxAttempts, and returning a fresh ref/snapshotId plus trace.

NameTypeReqDescription
connectionobject
directionstringScroll direction between snapshots.
distancenumberScroll distance in logical pixels between attempts.
matchBystringBounded selector field. "text" searches label, value, and hint.
maxAttemptsintegerMaximum scroll attempts after the initial snapshot (default 5).
querystringyesTarget text or identifier to find in semantic snapshots.

No output schema declared.

No examples provided.

fmt_scroll ~138

Scroll to reveal content in a direction. "down" reveals content below (finger swipes up); "up" reveals content above. Matches Playwright and user language ("scroll down to see the footer").

NameTypeReqDescription
connectionobject
directionstringyesScroll direction: up, down, left, right.
distancenumberScroll distance in logical pixels (default: 300).
refstringOptional ref to scroll from.
snapshotIdintegerOptional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.

No output schema declared.

No examples provided.

fmt_semantic_snapshot ~67

Get compact semantic tree of interactive widgets with refs usable by interaction tools (tap_widget, enter_text, etc.). A control that appears only under the pointer is absent here: on desktop and web, hover the element that should own it and snapshot again.

NameTypeReqDescription
connectionobject

No output schema declared.

No examples provided.

fmt_swipe ~124

Swipe to reveal content in a direction (higher pointer velocity than scroll; used for flings). "down" reveals content below.

NameTypeReqDescription
connectionobject
directionstringyesSwipe direction: up, down, left, right.
distancenumberSwipe distance in logical pixels (default: 300).
refstringOptional ref to swipe from.
snapshotIdintegerOptional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.

No output schema declared.

No examples provided.

fmt_tap_widget ~97

Tap a widget identified by ref from semantic_snapshot. Refs are session-scoped to the most recent semantic_snapshot call.

NameTypeReqDescription
connectionobject
refstringyesWidget ref from semantic_snapshot (e.g. "s_0").
snapshotIdintegerOptional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.

No output schema declared.

No examples provided.

fmt_wait_for ~213

Wait for a UI predicate (text/noText/node/time/stable/noError) and return a fresh semantic snapshot. Replaces sleep+snapshot polling. text matches any string in the tree, including the label of a tab that is not open — wait on state with node: {"kind":"node","identifier":"…","selected":true}, or add "absent":true to wait for it to go away. Default timeout 5000 ms, max 30000 ms.

NameTypeReqDescription
connectionobject
predicateobjectyesPredicate map. Shapes: {kind:"time", ms:int} | {kind:"text", text:String} | {kind:"noText", text:String} | {kind:"node", identifier:String, selected/enabled/focused/checked/toggled:bool, absent:bool}…
timeoutMsintegerTimeout in ms (default 5000, max 30000).

No output schema declared.

No examples provided.

Common questions

What is the Flutter MCP Toolkit server?

Flutter MCP Toolkit is listed in the public MCP registry as io.github.Arenukvern/flutter-mcp-toolkit. Inspect and drive Flutter debug apps/games: semantic snapshots, search, and custom client tools. This page covers its container image (ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0).

Is the Flutter MCP Toolkit server safe to use?

Flutter MCP Toolkit scores 50 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Flutter MCP Toolkit server expose?

Flutter MCP Toolkit exposes 33 tools: fmt_hot_reload_flutter, fmt_hot_restart_flutter, fmt_connect_debug_app, fmt_discover_debug_apps, fmt_get_vm, and 28 more. Their descriptions and schemas cost roughly 3,266 tokens of context every time the server is loaded.

Is the Flutter MCP Toolkit server still maintained?

Flutter MCP Toolkit is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.