npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mlab817/flutter-skill

v0.9.38

Published

MCP Server for app automation - Give your AI Agent eyes and hands inside any app (Flutter, React, Web, Native)

Downloads

493

Readme

Flutter Skill

Give your AI Agent eyes and hands inside your Flutter app.

Version npm License Platform

Flutter Skill is a bridge that connects AI Agents (like Claude Code, Cursor, Windsurf) directly to running Flutter applications via the MCP (Model Context Protocol). It provides 30+ tools for UI automation, inspection, and testing.

Quick Start

1. Install (choose one)

# npm (recommended - includes native binary for instant startup)
npm install -g flutter-skill

# Homebrew (macOS/Linux)
brew tap ai-dashboad/flutter-skill
brew install flutter-skill

# Dart
dart pub global activate flutter_skill

# IDE Extensions
# - VSCode: Search "Flutter Skill" in Extensions
# - IntelliJ/Android Studio: Search "Flutter Skill" in Plugins

2. Configure AI Agent

Add to your AI agent's MCP config:

Claude Code (~/.claude/settings.json):

{
  "mcpServers": {
    "flutter-skill": {
      "command": "flutter-skill",
      "args": ["server"]
    }
  }
}

Cursor (~/.cursor/mcp.json):

{
  "mcpServers": {
    "flutter-skill": {
      "command": "flutter-skill",
      "args": ["server"]
    }
  }
}

3. Use

// Option 1: Launch app with environment variables
flutter-skill.launch_app({
  project_path: "/path/to/flutter/project",
  dart_defines: ["ENV=staging", "DEBUG=true"],
  flavor: "staging"
})

// Option 2: Connect to already running app (auto-detect)
flutter-skill.scan_and_connect()

// Now use any tool
flutter-skill.screenshot()
flutter-skill.tap({ text: "Login" })
flutter-skill.inspect()

Features

App Lifecycle Management

| Tool | Description | |------|-------------| | launch_app | Launch Flutter app with dart_defines, flavor, target, extra_args | | scan_and_connect | Auto-scan ports and connect to first running Flutter app | | list_running_apps | List all running Flutter apps (VM Services) | | connect_app | Connect to specific VM Service URI | | stop_app | Stop the currently running app | | disconnect | Disconnect without stopping the app | | get_connection_status | Get connection info and suggestions | | hot_reload | Fast reload (keeps state) | | hot_restart | Full restart (resets state) |

UI Inspection

| Tool | Description | |------|-------------| | inspect | Get interactive elements (buttons, text fields, etc.) | | get_widget_tree | Get widget tree structure with depth control | | get_widget_properties | Get properties of a widget (size, position, visibility) | | get_text_content | Extract all visible text from the screen | | find_by_type | Find widgets by type (e.g., ElevatedButton) |

Interactions

| Tool | Description | |------|-------------| | tap | Tap a widget by Key or Text | | double_tap | Double tap a widget | | long_press | Long press with configurable duration | | swipe | Swipe gesture (up/down/left/right) | | drag | Drag from one element to another | | scroll_to | Scroll to make an element visible | | enter_text | Enter text into a text field |

State & Validation

| Tool | Description | |------|-------------| | get_text_value | Get current value of a text field | | get_checkbox_state | Get checked state of a checkbox/switch | | get_slider_value | Get current value of a slider | | wait_for_element | Wait for an element to appear (with timeout) | | wait_for_gone | Wait for an element to disappear |

Screenshots

| Tool | Description | |------|-------------| | screenshot | Take full app screenshot (returns base64) | | screenshot_element | Take screenshot of specific element |

Navigation

| Tool | Description | |------|-------------| | get_current_route | Get the current route name | | go_back | Navigate back | | get_navigation_stack | Get the navigation stack |

Debug & Logs

| Tool | Description | |------|-------------| | get_logs | Get application logs | | get_errors | Get application errors | | clear_logs | Clear logs and errors | | get_performance | Get performance metrics |

Utilities

| Tool | Description | |------|-------------| | pub_search | Search Flutter packages on pub.dev |


Installation Methods

| Method | Command | Auto-Update | Native Binary | |--------|---------|-------------|---------------| | npm | npm install -g flutter-skill | Manual | Auto-download | | Homebrew | brew install ai-dashboad/flutter-skill/flutter-skill | brew upgrade | Pre-compiled | | VSCode | Extensions → "Flutter Skill" | Auto | Auto-download | | IntelliJ | Plugins → "Flutter Skill" | Auto | Auto-download | | pub.dev | dart pub global activate flutter_skill | Manual | Dart runtime |

Native Binary Performance

| Version | Startup Time | |---------|--------------| | Dart JIT | ~1 second | | Native Binary | ~0.01 second |

Native binaries are automatically downloaded on first use for supported platforms:

  • macOS (Apple Silicon & Intel)
  • Linux (x64)
  • Windows (x64)

Flutter App Setup

For the MCP tools to work, your Flutter app needs the flutter_skill package:

Automatic Setup (Recommended)

flutter-skill launch /path/to/project
# Automatically adds dependency and initializes

Manual Setup

  1. Add dependency:
dependencies:
  flutter_skill: ^0.2.13
  1. Initialize in main.dart:
import 'package:flutter_skill/flutter_skill.dart';

void main() {
  FlutterSkillBinding.ensureInitialized();
  runApp(MyApp());
}

Example Workflows

E2E Testing with Environment Variables

// Launch staging environment
flutter-skill.launch_app({
  project_path: "./",
  dart_defines: ["ENV=staging", "API_URL=https://staging.api.com"],
  flavor: "staging",
  target: "lib/main_staging.dart"
})

// Wait for app to load
flutter-skill.wait_for_element({ text: "Welcome" })

// Take screenshot
flutter-skill.screenshot()

// Perform login
flutter-skill.tap({ text: "Login" })
flutter-skill.enter_text({ key: "email_field", text: "[email protected]" })
flutter-skill.enter_text({ key: "password_field", text: "password123" })
flutter-skill.tap({ text: "Submit" })

// Verify success
flutter-skill.wait_for_element({ text: "Dashboard" })

Connect to Running App

// List all running Flutter apps
flutter-skill.list_running_apps()
// Returns: { apps: ["ws://127.0.0.1:50123/ws", ...], count: 2 }

// Auto-connect to first one
flutter-skill.scan_and_connect()

// Or connect to specific one
flutter-skill.connect_app({ uri: "ws://127.0.0.1:50123/ws" })

Debug a UI Issue

// Get widget tree
flutter-skill.get_widget_tree({ max_depth: 5 })

// Find specific widgets
flutter-skill.find_by_type({ type: "ElevatedButton" })

// Inspect interactive elements
flutter-skill.inspect()

// Check if element is visible
flutter-skill.wait_for_element({ key: "submit_button", timeout: 3000 })

IDE Extensions

VSCode Extension

  • Auto-detects Flutter projects
  • Prompts to add flutter_skill dependency
  • Auto-downloads native binary
  • Status bar shows connection state
  • Commands: Launch, Inspect, Screenshot

IntelliJ/Android Studio Plugin

  • Same features as VSCode
  • Integrates with IDE notifications
  • Tool window for status

Troubleshooting

"Not connected to Flutter app"

// Check status and get suggestions
flutter-skill.get_connection_status()

// This returns:
// - Current connection state
// - List of available apps
// - Actionable suggestions

"Unknown method ext.flutter.flutter_skill.xxx"

Your Flutter app doesn't have the flutter_skill package. Add it:

flutter pub add flutter_skill

Then restart the app (hot reload is not enough).

MCP server slow to start

The native binary should auto-download. If not:

# For npm
npm update -g flutter-skill

# For Homebrew
brew upgrade flutter-skill

Links

License

MIT