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

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

+1 this week 51 Trust /100

Last scanned (2 hours ago)

Scores higher than 81% of OCI servers

Category Developer Tools

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
  • No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
  • Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
Provenance & Transparency35
Schema Quality & AI Usability83
  • 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 4186 tokens (~113/item across 37 items; 34 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 Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage86
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 59% 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 36 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.

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.

  • 1 Nov 26 0
    • Stability: 0.97 → pass security
  • 31 Oct 26 +1

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

  • 28 Oct 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.

  • 26 Oct 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.

  • 24 Oct 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.

  • 22 Oct 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.

  • 20 Oct 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.

  • 18 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 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 5 Nov 2026 · Analysed oci/ghcr.io/arenukvern/flutter-mcp-toolkit@7.0.1

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 · 34 exposed · ~3,616 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
compressboolean–Whether screenshots should be compressed (default: true).
connectionobject––
errorsCountinteger–Number of recent errors to include (default: 4).
includeErrorsboolean–Include app errors (default: true).
includeViewDetailsboolean–Include detailed view/widget data (default: true).
permissionPolicystring–Permission policy: check_only, auto_request_once, or request_always (default: check_only).
screenshotModestring–Screenshot 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
argumentsobject–Arguments 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.
kindstring–Pointer 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…
snapshotIdinteger–Optional: 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.
snapshotIdinteger–Optional: 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").
libraryUristring–Optional 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–
snapshotIdinteger–Optional: 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_widget ~141

Give keyboard focus to the widget identified by a semantic snapshot ref, so the press_key that follows reaches it. Performs the node's semantic focus action when it exposes one, otherwise asks the focusable widget inside the ref's bounds; the result proves where focus landed. Leaves a parked hover in place. Pass snapshotId to detect staleness.

NameTypeReqDescription
connectionobject––
refstringyesWidget ref from semantic_snapshot (e.g. "s_0").
snapshotIdinteger–Optional: 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_focus_window ~49

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

NameTypeReqDescription
connectionobject––
targetPidinteger–Optional 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––
countinteger–Number 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––
isRawResponseboolean–If true, returns the raw VM response without post-processing.
isolateIdstring–Optional 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––
countinteger–Number 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
compressboolean–Whether to compress the images (default: true).
connectionobject––
modestring–Screenshot mode: auto, flutter_layer, or desktop_window (default: auto).
permissionPolicystring–Permission 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
compressboolean–Compress screenshots (default: true).
connectionobject––
errorsCountinteger–Number of errors to include (default: 4).
includeErrorsboolean–Include app errors (default: true).
includeSemanticsboolean–Include semantic snapshot (default: true).

No output schema declared.

No examples provided.

fmt_hot_reload_flutter ~45

Hot reloads the Flutter app.

NameTypeReqDescription
connectionobject––
forceboolean–If 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––
viewIdinteger–Optional 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.
snapshotIdinteger–Optional: 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
applyboolean–When true, apply migrations. Default false (report-only).
namespacestring–Default 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––
directionstring–Scroll direction between snapshots.
distancenumber–Scroll distance in logical pixels between attempts.
matchBystring–Bounded selector field. "text" searches label, value, and hint.
maxAttemptsinteger–Maximum 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 ~157

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.
distancenumber–Scroll distance in logical pixels (default: 300).
refstring–Optional: the list to scroll, or any node inside it. Without it, the list under the screen centre scrolls.
snapshotIdinteger–Optional: 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 ~203

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––
fieldsarray–Node fields to return; "ref" is always included. Omit for every field. A name outside the list is refused before the call reaches the app.
identifierPrefixstring–Return only nodes whose Semantics identifier starts with this prefix ("nav." for one navigation rail). Refs are those of the full tree, so a ref from a filtered snapshot works everywhere.
subtreeOfstring–Return only this node and its descendants. A ref from the latest snapshot ("s_12") or a Semantics identifier; a ref is tried first. Fails with subtree_root_not_found without spending a snapshot when…

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.
distancenumber–Swipe distance in logical pixels (default: 300).
refstring–Optional ref to swipe from.
snapshotIdinteger–Optional: 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").
snapshotIdinteger–Optional: 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 ~267

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}…
timeoutMsinteger–Timeout in ms (default 5000, max 30000).

No output schema declared.

No examples provided.

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:7.0.1. 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

# add to Claude Code
claude mcp add arenukvern-flutter-mcp-toolkit -- docker run --rm -i ghcr.io/arenukvern/flutter-mcp-toolkit:7.0.1
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).

Is the Flutter MCP Toolkit server safe to use?

Flutter MCP Toolkit scores 51 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 34 tools: fmt_hot_reload_flutter, fmt_hot_restart_flutter, fmt_connect_debug_app, fmt_discover_debug_apps, fmt_get_vm, and 29 more. Their descriptions and schemas cost roughly 3,616 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 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.