使用说明
用于Flutter/Android开发的增强型ADB MCP服务器
一个全面的MCP服务器,用于通过ADB控制Android设备,专为Flutter开发、UI测试和可视化QA工作流程而设计。
快速开始
# Install from PyPI
pip install r-adb-mcp-server
# Or run directly with uvx (no installation needed)
uvx r-adb-mcp-server
注: 包名和命令都是 r-adb-mcp-server.
然后添加到您的MCP客户端配置(Claude Desktop、Cursor等)-请参阅 配置 下面的部分。
特性
📱 设备管理
- 列出连接的设备及其详细信息
- 获取全面的设备信息(型号、Android版本、电池等)
- 带有DP计算的屏幕规格
📸 视觉捕捉
- 截图(base64或文件)
- 带启动/停止控制的屏幕录制
- 使用元数据捕获以进行Figma比较
🔍 UI检查
- 完整UI层次结构转储(XML)
- 按文本或资源ID查找元素
- 获取所有带有坐标的可点击元素
- 提取所有可见文本进行验证
🎯 输入与交互
- 轻击、双击、长按
- 滑动和滚动(向上/向下/到文本)
- 文本输入和清除
- 关键事件(主页、后退、回车等)
- 按文本或ID点击元素
📦 应用管理
- 启动/停止/清除应用程序
- 安装/卸载APK
- 列出具有过滤功能的包
- 获取当前活动
- 应用程序信息(版本、安装日期等)
🐛 调试和日志
- 带过滤的Logcat(标签、级别、包)
- Flutter特定日志
- 崩溃日志提取
- ANR痕迹
⚡ 性能分析
- 每个应用程序的内存使用情况
- CPU监控
- GPU渲染信息
- 用于检测jank的帧统计信息
- 电池统计
🌐 网络控制
- 网络信息(WiFi状态、IP)
- 切换WiFi/飞行模式
- 设置/清除HTTP代理
⚙️ 开发人员选项
- 动画比例(加速测试)
- 显示轻击(用于录制)
- 显示布局边界
- 屏幕旋转控制
- 更改分辨率/密度
♿ 可访问性测试
- 字体比例调整
- TalkBack切换
- 高对比度模式
- 颜色反转
📍 仿真器功能
- GPS位置欺骗
- 模拟短信/通话
先决条件
-
ADB已安装 在你的路径中
adb version -
安卓设备/模拟器 已启用USB调试连接
adb devices -
Python 3.10+ 并且可选
uv用于跑步uvx安装
uv(可选,用于uvx命令):# macOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Or with Homebrew (macOS) brew install uv # Or with pip pip install uv
安装
来自PyPI(推荐)
# Install globally with pip
pip install r-adb-mcp-server
# Or use with uvx (no installation needed)
uvx r-adb-mcp-server
来源
cd adb-mcp-server
# Using uv (recommended)
uv sync
# Or using pip
pip install -e .
配置
克劳德桌面版
使用已安装的软件包(推荐):
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"adb": {
"command": "uvx",
"args": ["r-adb-mcp-server"]
}
}
}
或者,如果安装了pip:
{
"mcpServers": {
"adb": {
"command": "r-adb-mcp-server"
}
}
}
使用来源:
{
"mcpServers": {
"adb": {
"command": "uv",
"args": ["--directory", "/path/to/adb-mcp-server", "run", "python", "src/adb_mcp_server/server.py"]
}
}
}
光标IDE
添加到 .cursor/mcp.json:
使用已安装的软件包(推荐):
{
"mcpServers": {
"adb": {
"command": "uvx",
"args": ["r-adb-mcp-server"]
}
}
}
使用来源:
{
"mcpServers": {
"adb": {
"command": "uv",
"args": ["--directory", "/path/to/adb-mcp-server", "run", "python", "src/adb_mcp_server/server.py"]
}
}
}
克劳德代码
使用已安装的软件包(推荐):
claude mcp add adb -- uvx r-adb-mcp-server
使用来源:
claude mcp add adb -- uv --directory /path/to/adb-mcp-server run python src/adb_mcp_server/server.py
GitHub Copilot
使用已安装的软件包(推荐):
添加到您的VS代码设置(.vscode/settings.json 或用户设置):
{
"github.copilot.chat.mcp.servers": {
"adb": {
"command": "uvx",
"args": ["r-adb-mcp-server"]
}
}
}
或者,如果安装了pip:
{
"github.copilot.chat.mcp.servers": {
"adb": {
"command": "r-adb-mcp-server"
}
}
}
使用来源:
{
"github.copilot.chat.mcp.servers": {
"adb": {
"command": "uv",
"args": ["--directory", "/path/to/adb-mcp-server", "run", "python", "src/adb_mcp_server/server.py"]
}
}
}
注: 确保您安装了GitHub Copilot Chat扩展,并在VS Code中启用了MCP支持。
可用工具(60+)
设备管理
| 工具 | 说明 |
|---|---|
list_devices() |
列出所有连接的设备 |
get_device_info() |
全面的设备详细信息 |
get_screen_specs() |
屏幕尺寸、密度、DP值 |
视觉捕捉
| 工具 | 说明 |
|---|---|
screenshot() |
以base64 PNG格式捕获 |
screenshot_to_file(filename) |
将屏幕截图保存到文件 |
start_screen_record(duration, filename) |
开始录制(最长180秒) |
stop_screen_record() |
停止录制 |
pull_recordings(local_dir) |
下载录音 |
capture_screen_for_comparison(name) |
带有元数据的屏幕截图 |
UI检查
| 工具 | 说明 |
|---|---|
get_ui_hierarchy() |
XML格式的完整UI树 |
get_clickable_elements() |
所有具有坐标的可点击元素 |
find_element_by_text(text) |
按文本内容查找 |
find_element_by_id(resource_id) |
按资源ID查找 |
get_all_text_on_screen() |
提取所有可见文本 |
输入与交互
| 工具 | 说明 |
|---|---|
tap(x, y) |
点击坐标 |
tap_element(text, resource_id) |
按元素标识符点击 |
double_tap(x, y) |
双击 |
long_press(x, y, duration) |
长按 |
swipe(x1, y1, x2, y2, duration) |
滑动手势 |
scroll_down() / scroll_up() |
滚动屏幕 |
scroll_to_text(text) |
滚动直到文本可见 |
input_text(text) |
键入文本 |
clear_text_field(length) |
清除当前字段 |
press_key(keycode) |
按任意键 |
press_back() / press_home() |
导航按钮 |
应用管理
| 工具 | 说明 |
|---|---|
get_current_activity() |
当前前台应用程序 |
launch_app(package) |
按包名启动 |
launch_activity(package, activity) |
启动特定活动 |
force_stop_app(package) |
强制停止应用程序 |
clear_app_data(package) |
清除应用程序数据 |
list_packages(filter, include_system) |
列出已安装的应用程序 |
get_app_info(package) |
应用程序详细信息 |
install_apk(path) |
安装APK |
uninstall_app(package) |
卸载应用程序 |
调试和日志
| 工具 | 说明 |
|---|---|
get_logcat(lines, filter_tag, level) |
获取日志 |
clear_logcat() |
清除日志缓冲区 |
get_flutter_logs(lines) |
Flutter特定日志 |
get_crash_logs(package) |
崩溃/异常日志 |
get_anr_traces() |
ANR痕迹 |
演出
| 工具 | 说明 |
|---|---|
get_memory_info(package) |
内存使用情况 |
get_cpu_info() |
CPU使用率 |
get_battery_stats() |
电池详细信息 |
get_gpu_info() |
GPU渲染信息 |
get_frame_stats(package) |
帧定时统计 |
网络
| 工具 | 说明 |
|---|---|
get_network_info() |
WiFi状态、IP |
toggle_wifi(enable) |
启用/禁用WiFi |
toggle_airplane_mode(enable) |
切换飞行模式 |
set_proxy(host, port) |
设置HTTP代理 |
clear_proxy() |
清除代理 |
开发人员选项
| 工具 | 说明 |
|---|---|
toggle_show_taps(enable) |
视觉点击反馈 |
toggle_show_layout_bounds(enable) |
显示布局边界 |
set_animation_scale(scale) |
动画速度(0-1) |
rotate_screen(orientation) |
肖像/风景/汽车 |
change_screen_size(w, h) |
覆盖分辨率 |
reset_screen_size() |
重置为默认值 |
change_density(dpi) |
覆盖DPI |
reset_density() |
重置为默认值 |
无障碍
| 工具 | 说明 |
|---|---|
set_font_scale(scale) |
系统字体大小 |
toggle_talkback(enable) |
屏幕阅读器 |
toggle_high_contrast(enable) |
高对比度文本 |
toggle_color_inversion(enable) |
反转颜色 |
文件和外壳
| 工具 | 说明 |
|---|---|
push_file(local, remote) |
复制到设备 |
pull_file(remote, local) |
从设备复制 |
list_files(path) |
列表目录 |
read_file(path) |
读取文本文件 |
shell_command(cmd) |
运行任何shell命令 |
reboot_device(mode) |
重新启动设备 |
仅限模拟器
| 工具 | 说明 |
|---|---|
set_location(lat, lng) |
虚假GPS定位 |
send_sms(number, message) |
模拟短信 |
simulate_call(number) |
模拟来电 |
示例提示
基本用法
- “截取我手机的屏幕截图”
- “当前的屏幕分辨率和密度是多少?”
- “列出所有已安装的包含'flutter'的应用程序”
- “当前屏幕上显示什么?获取所有文本”
用户界面测试
- “找到登录按钮并点击它”
- “向下滚动,直到找到‘设置’”
- “获取所有可点击元素及其位置”
- “类型”test@email.com'进入当前领域”
调试
- “显示最后50个Flutter日志”
- “我的应用程序有崩溃日志吗?”
- “com.myapp的内存使用情况如何?”
视觉质量保证
- “捕获此屏幕以与Figma进行比较”
- “截图并告诉我UI结构”
- “将字体比例设置为1.3,并截图进行可访问性测试”
性能测试
- “将动画比例设置为0并运行应用程序”
- “获取我的应用程序的帧统计数据-有什么问题吗?”
- “GPU渲染性能如何?”
设备仿真
- “将屏幕更改为1080x1920以模拟较小的手机”
- “旋转到横向模式”
- “将位置设置为旧金山(37.7749,-122.4194)”
延伸
轻松添加新工具:
@mcp.tool()
def my_custom_tool(param: str, device_serial: str | None = None) -> str:
"""Description shown to AI"""
return run_adb(["shell", "your-command", param], device_serial)
Flutter开发技巧
- 加快测试速度:使用
set_animation_scale(0)禁用动画 - 视觉质量保证:使用
capture_screen_for_comparison()使用Figma MCP - 调试日志:
get_flutter_logs()过滤器Flutter特定输出 - 热重载:保持
flutter run终端打开,使用设备进行交互 - 响应式测试:使用
change_screen_size()和change_density()
许可证
麻省理工学院