android-phone-mcp-server
MCP server for controlling Android devices via semantic actions with verification, enabling any MCP client to interact with phones through natural language and structured tools.
README
android-phone-mcp
代码 Agent 无关的 Android 控制 MCP Server:语义动作 + 验证闭环 + 融合感知。 Any MCP client (Claude Code / Cursor / Cline / 自研 Agent) can control an Android device through semantic tools — no coordinate guessing, every action returns verification evidence.
⚠️ Phase 0 MVP:Phase 0(语义动作 + 验证闭环)已完成真机验收。完整设计见
android-phone-mcp-server-设计文档.md与openspec/。
快速开始(开发环境)
# 1. 创建虚拟环境并安装(uv;国内网络请配置镜像)
uv venv .venv
export UV_DEFAULT_INDEX=https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple # 可选
uv pip install -e ".[dev]"
# 2. 连接 WiFi adb 设备
adb connect <phone-ip>:<port> # 例如 192.168.1.15:39455
adb devices # 确认 device 状态
# 3. 启用开发写权限(默认只读!)
cp .env.example .env
# 4. 启动 MCP server(stdio)
.venv/bin/android-phone-mcp --stdio
# 5. 常用检查
.venv/bin/android-phone-mcp --show-config # 查看生效配置
.venv/bin/android-phone-mcp --list-tools # 列出全部 11 个工具
作为 MCP 客户端接入(Python 示例)
import asyncio
from fastmcp import Client
from android_phone_mcp.config import Config
from android_phone_mcp.server import create_server
async def main():
server = create_server(config=Config(allow_write=True)) # 开发期开写
async with Client(server) as client:
r = await client.call_tool("open_settings", {"panel": "about_phone"})
print(r.data) # {executed, screen_changed, changed_elements[], screen_hash}
asyncio.run(main())
任意 MCP 客户端(Claude Code / Cursor / Cline / 自研 Agent)均可通过 MCP 协议接入;错误以结构化 JSON 返回(如 WRITE_DISABLED / SELECTOR_AMBIGUOUS + candidates[]),模型可直接读取提示继续操作。
安全模型
| 开关 | 环境变量 | 默认 |
|---|---|---|
| 写操作(tap/输入/安装等) | ANDROID_MCP_ALLOW_WRITE |
off(只读) |
任意 adb shell |
ANDROID_MCP_ALLOW_SHELL |
off |
| 每动作超时 | ANDROID_MCP_ACTION_TIMEOUT |
30s |
配置优先级:环境变量 > config.yaml > 内置默认。.env 仅用于本地开发一键开写。
工具清单(Phase 0 目标 12 个)
| 类别 | 工具 |
|---|---|
| 设备 | list_devices、get_device_info |
| 观察 | get_screen、get_screen_hash |
| 动作 | tap、swipe、scroll_page、type_text、scroll_until、open_app、open_settings、press_key |
(verify_element / wait_for / diff_state / smart_scroll 属阶段 1)
WiFi adb 注意事项与重连流程
- 调试设备通过 WiFi adb 连接时,请勿在测试中切换 Wi-Fi 开关——关闭瞬间手机会断网,adb 连接随之断开
- IP:端口会随重连变化;灭屏/省电可能导致连接离线
重连流程:
# 1. 确认离线
adb devices # 设备消失或显示 offline
# 2. 断开旧连接并重新 connect(手机端需保持"无线调试"开启)
adb disconnect
adb connect <phone-ip>:<port>
# 3. 验证
adb devices # 应显示 device(非 offline)
adb -s <serial> shell getprop ro.product.model # 输出模型号即正常
- 若
connect后反复 offline:检查手机无线调试端口是否变化、与电脑是否同网段、防火墙是否放行 5555 段端口 - 设备池在每次工具调用前做 health check,连接失效时返回结构化错误,不会卡死调用
验收用例(Phase 0 三用例,均为网络无关操作)
| 用例 | 操作链 | 断言 |
|---|---|---|
| ① 关于手机 | open_settings(panel="about_phone") → get_screen |
读到设备信息元素(手机名称/存储空间/运行内存/电池) |
| ② 打开 App | open_app("设置") |
screen_changed=true,首页出现搜索框等关键元素 |
| ③ 表单填写 | 定位输入框 → type_text → press_key("enter") → get_screen |
搜索结果出现(如输入 wifi 出现 WLAN 相关项) |
验收用例固化为 tests/test_integration.py,通过 MCP Client 边界端到端执行(ANDROID_TEST_DEVICE=<serial> 时启用)。 |
开发与测试
.venv/bin/pytest # 单测(无设备,集成用例自动跳过)
.venv/bin/pytest tests/test_integration.py -v # 三验收用例(需设备)
ANDROID_TEST_DEVICE=192.168.1.15:39455 .venv/bin/pytest # 全量含真机探针
路线图
- 阶段 0 MVP:FastMCP + uiautomator2 + 语义 tap/scroll_until + 屏幕哈希 + 动作后校验 ← 当前
- 阶段 1:OCR 通道 + Flutter/Unity 兜底 + 多设备池 + wait_for/verify
- 阶段 2:VLM 视觉融合(SoM) + 执行预算 + 端侧 companion 免电脑
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。