# Flutter MCP Toolkit (oci · ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0)

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

- Trust score: 51/100 (low)
- Change this week: +4
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- oci · `ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0`: 51/100 (this document), [markdown](https://verifymcp.io/servers/arenukvern-flutter-mcp-toolkit/ghcr-io-arenukvern-flutter-mcp-toolkit-5-1-0.md), [page](https://verifymcp.io/servers/arenukvern-flutter-mcp-toolkit/ghcr-io-arenukvern-flutter-mcp-toolkit-5-1-0)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-21.

- **Supply Chain Security**: 0/100
  - Malware scan not yet available for this package.
  - 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.
  - Install-script risk not yet assessed.
  - 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.
- **Provenance & Transparency**: 35/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 28 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 84/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - 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.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 93/100
  - Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 86/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 57% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 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.
  - An AI judge read all 35 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

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

### Claude

```bash
claude mcp add arenukvern-flutter-mcp-toolkit -- docker run --rm -i ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0
```

### Cursor

```json
{
  "mcpServers": {
    "arenukvern-flutter-mcp-toolkit": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "arenukvern-flutter-mcp-toolkit": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"
      ]
    }
  }
}
```

### Codex

```bash
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

```yaml
mcp_servers:
  arenukvern-flutter-mcp-toolkit:
    command: "docker"
    args: ["run", "--rm", "-i", "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"]
```

### Netclaw

```json
{
  "McpServers": {
    "arenukvern-flutter-mcp-toolkit": {
      "Transport": "stdio",
      "Command": "docker",
      "Arguments": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"
      ]
    }
  }
}
```

### Other

```json
{
  "mcpServers": {
    "arenukvern-flutter-mcp-toolkit": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "ghcr.io/arenukvern/flutter-mcp-toolkit:5.1.0"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-21 (score 51, +1)

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

### 2026-09-19 (score 50, +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.

### 2026-09-17 (score 49, +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.

### 2026-09-15 (score 48, +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.

### 2026-09-13 (score 47, +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.

### 2026-09-11 (score 46, +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.

### 2026-09-08 (score 45, +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.

### 2026-09-06 (score 44, +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.

## MCP tools (33)

### `fmt_hot_reload_flutter` (~45 tokens)

Hot reloads the Flutter app.

Input parameters:

- `connection` (object)
- `force` (boolean): If true, forces a hot reload even if there are no source changes

### `fmt_hot_restart_flutter` (~31 tokens)

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

Input parameters:

- `connection` (object)

### `fmt_connect_debug_app` (~35 tokens)

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

Input parameters:

- `connection` (object)

### `fmt_discover_debug_apps` (~29 tokens)

Discover Flutter debug targets with canonical ws target URIs.

Input parameters:

- `connection` (object)

### `fmt_get_vm` (~38 tokens)

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

Input parameters:

- `connection` (object)

### `fmt_get_extension_rpcs` (~72 tokens)

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

Input parameters:

- `connection` (object)
- `isRawResponse` (boolean): If true, returns the raw VM response without post-processing.
- `isolateId` (string): Optional specific isolate ID to inspect. If omitted, checks all isolates.

### `fmt_tap_widget` (~97 tokens)

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

Input parameters:

- `connection` (object)
- `ref` (string, required): Widget ref from semantic_snapshot (e.g. "s_0").
- `snapshotId` (integer): Optional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.

### `fmt_enter_text` (~94 tokens)

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

Input parameters:

- `connection` (object)
- `ref` (string, required): Text field ref.
- `snapshotId` (integer): Optional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.
- `text` (string, required): Text to enter.

### `fmt_reveal_search` (~136 tokens)

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.

Input parameters:

- `connection` (object)
- `direction` (string): Scroll direction between snapshots.
- `distance` (number): Scroll distance in logical pixels between attempts.
- `matchBy` (string): Bounded selector field. "text" searches label, value, and hint.
- `maxAttempts` (integer): Maximum scroll attempts after the initial snapshot (default 5).
- `query` (string, required): Target text or identifier to find in semantic snapshots.

### `fmt_scroll` (~138 tokens)

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").

Input parameters:

- `connection` (object)
- `direction` (string, required): Scroll direction: up, down, left, right.
- `distance` (number): Scroll distance in logical pixels (default: 300).
- `ref` (string): Optional ref to scroll from.
- `snapshotId` (integer): Optional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.

### `fmt_long_press` (~70 tokens)

Long-press a widget identified by ref.

Input parameters:

- `connection` (object)
- `ref` (string, required): Widget ref.
- `snapshotId` (integer): Optional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.

### `fmt_swipe` (~124 tokens)

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

Input parameters:

- `connection` (object)
- `direction` (string, required): Swipe direction: up, down, left, right.
- `distance` (number): Swipe distance in logical pixels (default: 300).
- `ref` (string): Optional ref to swipe from.
- `snapshotId` (integer): Optional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.

### `fmt_drag` (~152 tokens)

Drag from one widget to another, identified by refs.

Input parameters:

- `connection` (object)
- `fromRef` (string, required): Source widget ref.
- `kind` (string): 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…
- `snapshotId` (integer): Optional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. If provided and stale, the call fails with stale_snapshot.
- `toRef` (string, required): Target widget ref.

### `fmt_hover` (~110 tokens)

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.

Input parameters:

- `connection` (object)
- `ref` (string, required)
- `snapshotId` (integer)

### `fmt_press_key` (~111 tokens)

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.

Input parameters:

- `alt` (boolean)
- `connection` (object)
- `ctrl` (boolean)
- `key` (string, required)
- `meta` (boolean)
- `shift` (boolean)

### `fmt_evaluate_dart_expression` (~87 tokens)

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

Input parameters:

- `connection` (object)
- `expression` (string, required): Dart expression to evaluate (e.g. "MyClass.instance.value").
- `libraryUri` (string): Optional library URI for evaluation scope (e.g. package:myapp/main.dart). Defaults to root library.

### `fmt_hot_reload_and_capture` (~103 tokens)

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

Input parameters:

- `compress` (boolean): Compress screenshots (default: true).
- `connection` (object)
- `errorsCount` (integer): Number of errors to include (default: 4).
- `includeErrors` (boolean): Include app errors (default: true).
- `includeSemantics` (boolean): Include semantic snapshot (default: true).

### `fmt_handle_dialog` (~63 tokens)

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

Input parameters:

- `action` (string, required): Currently must be "dismiss".
- `connection` (object)

### `fmt_navigate` (~76 tokens)

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.

Input parameters:

- `action` (string, required)
- `arguments` (object)
- `connection` (object)
- `route` (string)

### `fmt_get_recent_logs` (~47 tokens)

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

Input parameters:

- `connection` (object)
- `count` (integer): Number of recent log entries (default: 50).

### `fmt_migrate_agent_entries` (~92 tokens)

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

Input parameters:

- `apply` (boolean): When true, apply migrations. Default false (report-only).
- `namespace` (string): Default AgentCallEntry namespace (default: app).
- `projectRoot` (string, required): Flutter/Dart project root or single .dart file path.

### `fmt_semantic_snapshot` (~67 tokens)

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.

Input parameters:

- `connection` (object)

### `fmt_get_view_details` (~26 tokens)

Get details for all views in the application.

Input parameters:

- `connection` (object)

### `fmt_inspect_widget_at_point` (~70 tokens)

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

Input parameters:

- `connection` (object)
- `viewId` (integer): Optional FlutterView id for multi-view apps.
- `x` (integer, required): Global logical X coordinate.
- `y` (integer, required): Global logical Y coordinate.

### `fmt_get_app_errors` (~45 tokens)

Get the most recent application errors from Dart VM.

Input parameters:

- `connection` (object)
- `count` (integer): Number of recent errors to retrieve (default: 4).

### `fmt_get_screenshots` (~92 tokens)

Get screenshots of all views in the application.

Input parameters:

- `compress` (boolean): Whether to compress the images (default: true).
- `connection` (object)
- `mode` (string): Screenshot mode: auto, flutter_layer, or desktop_window (default: auto).
- `permissionPolicy` (string): Permission policy: check_only, auto_request_once, or request_always (default: check_only).

### `fmt_capture_ui_snapshot` (~148 tokens)

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

Input parameters:

- `compress` (boolean): Whether screenshots should be compressed (default: true).
- `connection` (object)
- `errorsCount` (integer): Number of recent errors to include (default: 4).
- `includeErrors` (boolean): Include app errors (default: true).
- `includeViewDetails` (boolean): Include detailed view/widget data (default: true).
- `permissionPolicy` (string): Permission policy: check_only, auto_request_once, or request_always (default: check_only).
- `screenshotMode` (string): Screenshot mode: auto, flutter_layer, or desktop_window (default: auto).

### `fmt_focus_window` (~49 tokens)

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

Input parameters:

- `connection` (object)
- `targetPid` (integer): Optional VM process id (defaults to the connected VM).

### `fmt_wait_for` (~213 tokens)

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.

Input parameters:

- `connection` (object)
- `predicate` (object, required): Predicate 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}…
- `timeoutMs` (integer): Timeout in ms (default 5000, max 30000).

### `fmt_fill_form` (~99 tokens)

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

Input parameters:

- `connection` (object)
- `fields` (array, required)
- `snapshotId` (integer): Optional: snapshotId input. Use the snapshot_id returned by most recent semantic_snapshot. Checked on the first field only.

### `fmt_list_client_tools_and_resources` (~200 tokens)

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.

Input parameters:

- `connection` (object)

### `fmt_client_tool` (~267 tokens)

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.

Input parameters:

- `arguments` (object): Arguments to pass to the tool, matching its inputSchema requirements
- `connection` (object)
- `toolName` (string, required): Exact name of the tool to execute (from fmt_list_client_tools_and_resources)

### `fmt_client_resource` (~240 tokens)

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.

Input parameters:

- `connection` (object)
- `resourceUri` (string, required): Exact URI of the resource to read (from fmt_list_client_tools_and_resources)

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/arenukvern-flutter-mcp-toolkit/ghcr-io-arenukvern-flutter-mcp-toolkit-5-1-0#diagnostics

## Score history

- 2026-09-21: 51
- 2026-09-20: 50
- 2026-09-19: 50
- 2026-09-18: 49
- 2026-09-17: 49
- 2026-09-16: 48
- 2026-09-15: 48
- 2026-09-14: 47
- 2026-09-13: 47
- 2026-09-12: 46
- 2026-09-11: 46
- 2026-09-10: 45
- 2026-09-09: 45
- 2026-09-08: 45
- 2026-09-07: 44
- 2026-09-06: 44
- 2026-09-05: 43
- 2026-09-04: 43
- 2026-09-03: 42
- 2026-09-02: 42
- 2026-09-01: 41
- 2026-08-31: 41
- 2026-08-30: 38
- 2026-08-29: 38
- 2026-08-28: 38
- 2026-08-27: 38
- 2026-08-26: 38
- 2026-08-25: 37
- 2026-08-24: 37

## 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 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 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 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Repository: https://github.com/Arenukvern/mcp_flutter
- Website: https://docs.page/arenukvern/mcp_flutter
- Changelog RSS feed: https://verifymcp.io/servers/arenukvern-flutter-mcp-toolkit/ghcr-io-arenukvern-flutter-mcp-toolkit-5-1-0.xml
- Changelog JSON feed: https://verifymcp.io/servers/arenukvern-flutter-mcp-toolkit/ghcr-io-arenukvern-flutter-mcp-toolkit-5-1-0.json
- HTML version of this page: https://verifymcp.io/servers/arenukvern-flutter-mcp-toolkit/ghcr-io-arenukvern-flutter-mcp-toolkit-5-1-0
