用于Flutter/Android开发的增强型ADB MCP服务器
](https://badge.fury.io/py/r-adb-mcp-server)  
一个全面的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.pyGitHub 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()
许可证
麻省理工学院
