本文将介绍如何让 AI Agent 通过云手机提供的 MCP 服务控制云手机里的 Android App。客户只需获取服务地址、访问凭证和可用实例;无需部署服务或了解后台实现。
前提条件
1. 已开通 云手机服务,并且有购买云手机实例。
2. 已在 API 密钥管理 获取 SecretId 和 SecretKey。
3. 您的 Agent 框架支持 MCP 远程服务(Streamable HTTP 传输)并能自定义请求头,例如 WorkBuddy、CodeBuddy、Cursor,或基于 MCP 官方 SDK 自研的 Agent。
适用场景
场景 | 说明 |
Agent 自动化操作 Android App | Agent 根据自然语言任务,读取 App 界面并执行点击、滑动、输入、按键等操作。 |
App 功能验证与巡检 | 先观察当前界面,再执行操作并检查结果;适用于重复性的 UI 流程。 |
人工接管 | 必要时获取短时体验链接,由授权人员查看并操作同一台云手机。 |

整体架构
架构可参考下图:

基本概念
概念 | 说明 |
MCP | Model Context Protocol,AI Agent 调用外部工具的开放协议。Agent 作为 MCP Client,发现并调用云手机工具。 |
云手机 MCP Server | 已由服务提供方部署的远程 MCP 服务。Agent 通过统一地址连接,获得可用的云手机操作工具。 |
云手机实例 | 运行 Android 系统及目标 App 的云端手机;调用具体工具时通常需指定实例 ID。 |
通用交互工具 | 读取 UI 控件、截图、点击、长按、滑动、按键、文本输入等工具;无需为每个 Android App 单独开发 MCP。 |
MCP Token | 访问云手机 MCP 服务的凭证。由服务提供方签发并交付,用于限制可访问的云手机实例及有效期。 |
注意:
Agent 只持有 MCP Token,绝不持有腾讯云 API 密钥(SecretId / SecretKey)。并发申请、会话创建、Token 签发都应在业务后台完成。
操作步骤
步骤1:调用 CreateAndroidInstanceMCPToken 创建访问凭证
云手机 MCP Server 采用 Bearer Token 鉴权。调用方需要先获取由腾讯云签发的 MCP Token,之后才能与服务建立连接、发现并调用云手机工具。本步骤在业务后台完成:后台使用自身的 SecretId / SecretKey 调用云 API CreateAndroidInstanceMCPToken 签发 Token,再按需下发给 Agent。
注意:
Token 仅在创建成功时返回一次,服务端不留存副本,也不提供再次查看 Token 明文的接口。请务必在收到响应后妥善保管;一旦丢失,只能重新签发。
步骤2:Agent 接入云手机 MCP Server
在支持 Streamable HTTP 的 Agent 客户端中,添加远程 MCP 服务。
{"mcpServers": {"tencent-cvp": {"type": "streamableHttp","url": "https://mcp-server.crtrcloud.com/mcp","headers": {"Authorization": "Bearer <CreateMCPToken 返回的 Token>"}}}}
说明:
该方式适合调试。生产环境中 Token 有有效期且与会话绑定,建议由业务后台动态下发,而非写死在配置文件中。
连接后,Agent 可自动发现当前服务开放的云手机 MCP 工具。先给出目标实例 ID,再提出要执行的任务,例如:请在指定云手机上打开待办 App,查看有哪些任务,点击进入并确认页面已打开。
可用工具
连接成功后,Agent 可自动发现并调用以下工具。工具名称统一以 android_instance_ 开头;除 android_instance_list 外,调用时均需指定目标实例 ID。
实例与设备状态
工具名称 | 说明 |
android_instance_list | 列出当前凭证可访问的云手机实例,含实例 ID、名称、状态、分辨率与地域。 |
android_instance_get_resolution | 获取实例当前屏幕分辨率与像素密度。 |
android_instance_get_orientation | 获取屏幕方向(竖屏或横屏)及旋转角度。 |
android_instance_get_foreground_app | 获取当前前台应用的包名与 Activity。 |
android_instance_get_logcat | 读取实例已有的 logcat 日志,用于排障。 |
android_instance_get_task | 查询安装、重启等异步任务的执行状态。 |
android_instance_get_experience_url | 获取实例的短时体验链接,供人工接管查看和操作。 |
android_instance_get_clipboard | 读取实例剪贴板中的文本内容。 |
android_instance_reboot | 重启云手机实例。 |
android_instance_open_url | 在实例中打开公网 HTTP 或 HTTPS 链接。 |
界面感知
工具名称 | 说明 |
android_instance_screenshot | 截取当前屏幕画面,并返回该图的宽高作为坐标基准。 |
android_instance_dump_ui | 导出当前屏幕的 UI 控件层级,用于按文本或控件定位元素。 |
交互操作
工具名称 | 说明 |
android_instance_click | 单击屏幕上的指定位置。 |
android_instance_long_press | 长按屏幕上的指定位置。 |
android_instance_swipe | 在屏幕上按指定方向滑动。 |
android_instance_key | 模拟按下系统按键,如 Home、Back、Enter。 |
android_instance_input_raw | 按顺序执行一组原始输入事件,用于多指等复杂操作。 |
android_instance_input_text | 在当前焦点输入框中输入 ASCII 文本。 |
android_instance_paste_text | 向当前焦点输入框粘贴文本,支持中文等非 ASCII 字符。 |
应用管理
工具名称 | 说明 |
android_instance_list_apps | 查询实例上已安装的应用列表。 |
android_instance_install_app | 从公网下载地址为实例安装 APK。 |
android_instance_start_app | 启动实例上的指定应用。 |
android_instance_stop_app | 强制停止指定应用。 |
android_instance_clear_app_data | 清除指定应用的数据,使其恢复到刚安装的状态。 |
android_instance_uninstall_app | 卸载实例上的指定应用。 |
注意:
定位界面元素优先使用 android_instance_dump_ui;游戏、视频等自绘界面无控件信息时,改用截图。
点击、长按与滑动的坐标基准应与截图或控件树返回的尺寸一致;横屏时请先获取屏幕方向与实际分辨率。
安装应用与重启实例为异步任务,可通过 android_instance_get_task 查询进度。
清除应用数据与卸载应用不可逆,请确认影响范围后再执行。
安全建议
1. 优先使用 USER Key,并只授权必要实例。
2. 优先设置有限有效期。
3. 体验链接等同于临时实例控制权,避免公开传播。
4. 卸载应用和清理应用数据前确认影响范围。
5. Key 疑似泄露时,先创建并切换新 Key,再立即吊销旧 Key。
6. 体验链接可控制实例,勿向无关人员转发。
常见问题
调用工具返回鉴权失败
检查请求头格式是否为 Authorization: Bearer <MCP Token>,并确认使用本云手机 MCP 服务签发的有效 Token;过期时通过接口重新创建。若提示实例无权访问,请核对实例是否在该 Token 的授权范围内。
User Key 无法操作实例
请检查实例白名单是否包含目标实例、实例 ID 是否正确,以及实例是否处于可操作状态。
体验链接无法打开
请检查链接是否超过1小时有效期、实例是否可操作,以及网络和实时音视频通道是否可达。
安装或重启长时间未完成
安装和重启为异步任务,耗时较长,请使用 android_instance_get_task 查询状态;安装 APK 应使用云端可直接访问的公网 HTTP 或 HTTPS 地址。
点击位置不准确
优先通过 android_instance_dump_ui 获取实时元素位置;使用截图坐标时,应确保坐标基准与截图尺寸一致。