from typing import Optional
from maa.toolkit import Toolkit
from maa.controller import AdbController
from maa_mcp.core import (
mcp,
object_registry,
controller_info_registry,
ControllerInfo,
ControllerType,
)
@mcp.tool(
name="find_adb_device_list",
description="""
扫描并枚举当前系统中所有可用的 ADB 设备。
返回值类型:
- 设备名称列表
重要约束:
当返回多个设备时,必须立即暂停执行流程,向用户展示设备列表并等待用户明确选择。
严禁在未获得用户确认的情况下自动选择设备。
""",
)
def find_adb_device_list() -> list[str]:
device_list = Toolkit.find_adb_devices()
for device in device_list:
object_registry.register_by_name(device.name, device)
return [device.name for device in device_list]
@mcp.tool(
name="connect_adb_device",
description="""
建立与指定 ADB 设备的连接,创建控制器实例。
参数:
- device_name: 目标设备名称,需通过 find_adb_device_list() 获取
返回值:
- 成功:返回控制器 ID(字符串),用于后续所有设备操作
- 失败:返回 None
说明:
控制器 ID 将用于后续的点击、滑动、截图等操作,请妥善保存。
""",
)
def connect_adb_device(device_name: str) -> Optional[str]:
device = object_registry.get(device_name)
if not device:
return None
adb_controller = AdbController(
device.adb_path,
device.address,
device.screencap_methods,
device.input_methods,
device.config,
)
# 设置默认截图短边为 720p
# 手机上文字/图标通常较大,不需要太高清
adb_controller.set_screenshot_target_short_side(720)
if not adb_controller.post_connection().wait().succeeded:
return None
controller_id = object_registry.register(adb_controller)
controller_info_registry[controller_id] = ControllerInfo(
controller_type=ControllerType.ADB
)
return controller_id