使用说明
MCP安卓服务器
用于Android自动化的多设备MCP服务器,内置Python adbutils 和 uiautomator2.
它做什么
- 将Android自动化功能作为MCP工具公开。
- 支持并行连接多个设备。
- 使用每个设备的会话缓存和UI锁来避免在同一设备上发生冲突的操作。
- 使用
stdio,streamable-http,以及sse运输。
技术栈
- python
>=3.11 uv用于依赖性和环境管理mcp(快速MCP)adbutilsuiautomator2Pillow
先决条件
adb已安装并可用PATH- 一个或多个已连接并授权的Android设备/模拟器(
adb devices) uv安装
安装
uv sync
如果您使用现有的虚拟环境:
source .venv/bin/activate
uv sync
运行服务器
标准输入输出传输
uv run mcp-android-server --mode stdio
可流式HTTP传输
uv run mcp-android-server --mode streamable-http --port 3001
MCP端点URL:
http://127.0.0.1:3001/mcp
SSE运输
uv run mcp-android-server --mode sse --port 3001
CLI选项
--mode {stdio,streamable-http,sse}
--port PORT
--default-serial SERIAL
--max-workers N
--session-ttl-s SECONDS
--healthcheck-interval-s SECONDS
--connect-retries N
--connect-backoff-s SECONDS
环境变量(相当于CLI默认值):
MCP_TRANSPORTMCP_PORTMCP_DEFAULT_SERIALMCP_MAX_WORKERSMCP_SESSION_TTL_SMCP_HEALTHCHECK_INTERVAL_SMCP_CONNECT_RETRIESMCP_CONNECT_BACKOFF_S
MCP客户端配置
基于HTTP的编解码器API
将此添加到 ~/.codex/config.toml:
[mcp_servers.android]
url = "http://127.0.0.1:3001/mcp"
Codex通过本地STDIO命令
[mcp_servers.android]
command = "uv"
args = ["run", "mcp-android-server", "--mode", "stdio"]
cwd = "/absolute/path/to/mcp_android"
[mcp_servers.android.env]
PYTHONPATH = "src"
刀具目录
所有设备专用工具均可接受 serial.
如果 serial 省略,解析顺序为:
--default-serial/MCP_DEFAULT_SERIAL- 唯一连接的设备
- 连接多个设备时出错
设备工具
list_devices()get_device_status(serial)clear_device_session(serial)list_active_sessions()
日志记录
get_logcat_output(serial?, app_package, log_level="DEBUG", max_lines=100)
log_level 值:
DEBUGINFOWARNINGERROR
屏幕和UI检查
get_screenshot(serial?, scale_factor=0.4)get_ui_dump(serial?, returned_attributes)
允许 returned_attributes 值:
index,text,resource-id,class,package,content-desccheckable,checked,clickable,enabled,focusable,focusedscrollable,long-clickable,password,selected,boundsdrawing-order,hint
UI交互
click_ui_element(serial?, text?, resource_id?, content_desc?, timeout_s=10.0)
对于 click_ui_element,在以下选项中只提供一个选择器:
textresource_idcontent_desc
输入和系统动作
tap_screen(serial?, x, y)swipe_screen(serial?, x1, y1, x2, y2, duration_ms=300)send_text(serial?, text_to_send, clear_existing=false)perform_system_action(serial?, action)哪里action是:BACKHOMERECENT_APPS
示例流程
- 呼叫
list_devices. - 呼叫
get_screenshot检查当前状态。 - 呼叫
get_ui_dump查找选择器。 - 呼叫
click_ui_element或tap_screen. - 呼叫
get_logcat_output用于应用程序诊断。
测试
运行单元测试:
uv run python -m unittest discover -s tests/unit -v
故障排除
Device not found:- 检查序列号
list_devices.
- 检查序列号
Multiple devices connected. Please specify serial:- 通过
serial显式或设置--default-serial.
- 通过
- 找不到UI元素:
- 使用
get_ui_dump并验证确切的选择器文本/资源id/内容描述。
- 使用
- 没有返回的日志
get_logcat_output:- 确保应用程序进程正在运行
app_package是正确的。
- 确保应用程序进程正在运行
- 亚行授权问题:
- 重新连接设备并接受RSA授权提示。
