ADB设备控制服务器

一个通过ADB控制Android设备的MCP服务器,专为Flutter开发、UI测试和视觉质量保证工作流设计。

  • by rahulkr
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 rahulkr/r_adb_mcp_server

使用说明

用于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位置欺骗
  • 模拟短信/通话

先决条件

  1. ADB已安装 在你的路径中

    adb version
    
  2. 安卓设备/模拟器 已启用USB调试连接

    adb devices
    
  3. 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开发技巧

  1. 加快测试速度:使用 set_animation_scale(0) 禁用动画
  2. 视觉质量保证:使用 capture_screen_for_comparison() 使用Figma MCP
  3. 调试日志: get_flutter_logs() 过滤器Flutter特定输出
  4. 热重载:保持 flutter run 终端打开,使用设备进行交互
  5. 响应式测试:使用 change_screen_size() 和 change_density()

许可证

麻省理工学院