← 返回目录
F

Flutter Skill

社区
让 AI 代理在真实运行的应用中“看得见、动得了”,覆盖 10 个平台的端到端测试
GitHub 源仓库 ↗
★ 360 Stars 分类 · 开发工具 非常热门 源版本 de1a0081c298
54FMRS · D
可靠性
8/20
安全与权限
7/20
维护活跃度
12/20
文档质量
14/20
安装易用性
13/20

flutter-skill 是一个功能覆盖面很广的第三方 MCP 测试服务器,通过自然语言和大量工具(README 自述约 253 个)把 AI 代理接入 Flutter、React Native、iOS、Android、Web、Electron、Tauri、KMP、.NET MAUI 等 10 个平台的运行中应用,主打零测试代码与低 token 消耗(无障碍树快照)。它需要授予 AI 代理对被测应用/浏览器较广的操作与网络篡改权限(含任意 JS 执行),因此适合在受信任的本地开发或 CI 环境中使用;由于是社区维护项目且版本号未到 1.0,建议在正式采用前评估其成熟度与安全边界。

查看 FMRS 评分方法 →

flutter-skill 是一个开源 MCP 服务器(npm 包 flutter-skill,Dart 包 flutter_skill),通过 Model Context Protocol 把 Claude、Cursor、Windsurf、Copilot 等 AI 代理直接连接到正在运行的应用上。它暴露约 253 个 MCP 工具,用于截图、无障碍树快照、点击、输入、滚动、断言、可视化回归、网络 mock、覆盖率统计、多设备同步、无障碍审计、性能与录制导出等操作,声称支持 Flutter、React Native、iOS、Android、Web、Electron、Tauri、KMP、.NET MAUI 共 10 个平台,主打“零测试代码、零配置”的自然语言测试体验,并附带独立的 HTTP serve 模式与 CLI 客户端。仓库以 MIT 协议开源。

工具能力

page_summary
返回当前页面/屏幕的紧凑语义摘要(约 200 token),替代发送截图
explore_actions
在一次调用中批量执行多个探索性操作(填写、点击等)
boundary_test
对输入框执行边界/安全测试载荷
explore_report
汇总 AI 自主探索过程中的发现与问题
launch_app
按指定 flavor 启动被测应用
scan_and_connect
自动发现并连接正在运行的应用实例
connect_cdp
通过 Chrome DevTools Protocol 连接到已打开的浏览器
hot_reload
触发应用热重载
hot_restart
触发应用热重启
list_sessions
列出当前所有已连接的会话
switch_session
切换到指定的已连接会话
close_session
关闭指定会话
disconnect
断开与目标应用/浏览器的连接
stop_app
停止被测应用进程
screenshot
截取当前屏幕/页面
screenshot_region
截取屏幕指定区域
screenshot_element
截取指定元素的局部截图
native_screenshot
使用平台原生方式截图
inspect
获取当前页面/屏幕的元素信息
inspect_interactive
列出所有可点击/可输入元素及其语义引用
snapshot
获取无障碍树结构快照,token 消耗远低于截图
get_widget_tree
获取完整的组件/控件树
find_by_type
按控件类型查找元素
get_text_content
获取元素的文本内容
get_visible_text
获取当前屏幕上可见的全部文本
tap
点击指定元素
double_tap
双击指定元素
long_press
长按指定元素
enter_text
在输入框中键入文本
set_text
直接设置输入框的文本值
clear_text
清空输入框内容
swipe
在屏幕上执行滑动手势
scroll_to
滚动到指定元素或位置
drag
执行拖拽手势
go_back
返回上一屏幕/页面
press_key
按下指定按键(可带修饰键)
type_text
通过键盘输入文本
hover
将鼠标悬停在元素上
fill
填充表单字段
select_option
在下拉/选择控件中选择选项
set_checkbox
设置复选框的选中状态
focus
使元素获得焦点
blur
使元素失去焦点
native_tap
使用平台原生方式点击
native_input_text
使用平台原生方式输入文本
native_swipe
使用平台原生方式滑动
smart_tap
带模糊匹配的自愈式点击,UI 变化时仍可定位元素
smart_enter_text
带模糊匹配的自愈式文本输入
smart_assert
带模糊匹配的自愈式断言
assert_text
断言元素文本内容
assert_visible
断言元素可见
assert_not_visible
断言元素不可见
assert_element_count
断言匹配元素的数量
assert_batch
在一次调用中执行多个断言
wait_for_element
等待元素出现
wait_for_gone
等待元素消失
wait_for_idle
等待应用/页面进入空闲状态
wait_for_stable
等待界面渲染稳定
wait_for_url
等待页面 URL 满足条件
wait_for_text
等待指定文本出现
wait_for_element_count
等待元素数量满足条件
visual_baseline_save
保存视觉回归基线截图
visual_baseline_compare
将当前截图与基线比对
visual_baseline_update
更新视觉回归基线
visual_regression_report
生成视觉回归测试报告
visual_verify
校验界面视觉表现
visual_diff
计算两张截图之间的差异
compare_screenshot
比较两张截图是否一致
mock_api
对指定接口设置网络 mock 响应
mock_clear
清除已设置的网络 mock
record_network
录制网络请求流量
replay_network
回放已录制的网络请求
intercept_requests
拦截网络请求
clear_interceptions
清除已设置的请求拦截
block_urls
屏蔽指定 URL 的网络请求
http_request
发起原始 HTTP 请求
api_request
发起 API 测试请求
api_assert
对 API 响应进行断言
coverage_start
开始采集测试覆盖率
coverage_stop
停止采集测试覆盖率
coverage_report
生成覆盖率报告
coverage_gaps
定位未覆盖的功能点
retry_on_fail
失败时按策略自动重试
stability_check
检查测试结果的稳定性/易变性
test_with_data
使用数据集驱动执行测试
generate_test_data
生成测试用数据
multi_connect
同时连接多台设备/实例
multi_action
在多台已连接设备上同步执行同一操作
multi_compare
比较多台设备上的执行结果
multi_disconnect
断开所有已连接的多设备会话
parallel_snapshot
并行获取多设备的快照
parallel_tap
并行在多设备上执行点击
accessibility_audit
执行无障碍审计
a11y_full_audit
执行完整无障碍审计
a11y_tab_order
检查 Tab 键遍历顺序
a11y_color_contrast
检查颜色对比度是否达标
a11y_screen_reader
模拟屏幕阅读器进行检查
set_locale
切换应用语言/区域设置
verify_translations
校验界面文案的多语言翻译
i18n_snapshot
获取指定语言下的界面快照

安装接入

1) 全局安装:npm install -g flutter-skill(也可用 Homebrew、Scoop、Docker 镜像或 dart pub global activate flutter_skill)。2) 在 AI 客户端的 MCP 配置中加入本资料中的 install_config(如 Cursor 的 .cursor/mcp.json、Claude Desktop 的 claude_desktop_config.json、Windsurf 的 ~/.codeium/windsurf/mcp_config.json、VSCode 的 .vscode/mcp.json)。3) 在被测应用中集成对应平台的 SDK,例如 Flutter 应用添加 flutter_skill 依赖并在 main() 中调用 FlutterSkillBinding.ensureInitialized()(仅 debug 模式);React Native、Electron、iOS、Android、Tauri、KMP、.NET MAUI 各有独立 SDK 包。4) 重启 AI 客户端并用自然语言下达测试指令,如“启动我的应用并探索所有页面”。

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

选型与风险

适合谁

  • 已有可调试运行的 Flutter/React Native/Electron/Tauri/移动或 Web 应用、希望用自然语言而非编写测试脚本做端到端测试的团队
  • 在 Claude Desktop、Cursor、Windsurf、Copilot 等 MCP 客户端中直接驱动 AI 进行探索性测试的开发者
  • 希望以低 token 成本(无障碍树快照而非截图)让 AI 理解界面结构的场景

不适合谁

  • 需要官方/上游厂商(如 Flutter、Google、Anthropic)维护和支持的测试工具的团队,本项目为第三方(ai-dashboad)开源实现
  • 无法在应用中集成对应平台 SDK、或不能安装本地 npm/CLI 工具的受限环境
  • 追求已被大规模生产验证、社区体量与 Playwright/Appium 等成熟工具相当的稳定性保证的场景

所需权限

  • 本地执行权限:以 stdio 方式启动并运行 `flutter-skill` 可执行程序
  • 对被测应用/浏览器实例的连接与控制权限(点击、输入、截图、读取控件树等)
  • 读取应用日志、控制台消息、网络请求等运行时数据的权限
  • 在 HTTP `serve` 模式下需要网络端口监听权限(默认可通过 `--port`/`--host` 或环境变量配置)

风险与副作用

  • 该项目为第三方开源实现(非 Flutter/Anthropic/Google 官方维护),来源文档未说明其审计、签名或供应链安全措施
  • 工具可执行任意操作(点击、输入、执行 JavaScript `eval`、注入登录会话等),若被恶意提示词滥用,可能对被测应用做出非预期的破坏性操作
  • `eval` 等工具可在页面上下文执行任意 JavaScript,`mock_api`/`intercept_requests` 等可篡改网络行为,需仅在受信任的开发/测试环境中使用
  • manifest 中版本号(0.9.36)表明项目仍处于 1.0 之前的快速迭代阶段,接口可能变化

常见排障

  1. 确认已全局安装 `flutter-skill`(`npm install -g flutter-skill` 或对应包管理器命令)且可在命令行找到该可执行文件
  2. 确认 AI 客户端的 MCP 配置文件路径和 JSON 格式正确,并已重启客户端使配置生效
  3. 确认被测应用已按平台文档正确引入对应 SDK(如 Flutter 的 `FlutterSkillBinding.ensureInitialized()`)且运行在 debug 模式
  4. 使用 `flutter-skill tools` 命令列出可用工具、`flutter-skill call <tool> [json]` 直接调用工具以排查连接问题
  5. 如使用 HTTP `serve` 模式,检查端口/主机是否被占用,可通过 `--port=N`、`--host=H` 或 `FS_PORT`/`FS_HOST` 环境变量调整

使用场景

用自然语言驱动 AI 代理对 Flutter/React Native/Web/桌面应用执行端到端测试
AI 自主探索应用的所有页面并报告发现的问题
对登录、结算等关键流程做边界值与异常输入测试
跨平台(如 iOS 与 Android)比较同一测试流程的界面与结果
视觉回归、无障碍审计、多语言校验与性能数据采集

支持客户端

Claude Desktop完整支持
Cursor完整支持
Windsurf完整支持
VSCode Copilot完整支持
Cline完整支持
Continue.dev完整支持
OpenClaw部分支持