article
README
🚀 Android MCP 服务器
Android MCP 服务器是一个基于 Model Context Protocol (MCP) 的服务器,借助 Android Debug Bridge (ADB) 实现对安卓设备的程序化控制。它提供了丰富的安卓设备管理功能,可通过 MCP 客户端(如 Claude 桌面)和代码编辑器(如 Cursor)进行访问。
🚀 快速开始
在使用 Android MCP 服务器之前,你需要完成一系列的准备工作,包括安装必要的软件和配置服务器。
✨ 主要特性
- 🔧 执行 ADB 命令:可直接在服务器端对安卓设备执行各种 ADB 命令。
- 📸 截取设备屏幕截图:方便获取设备当前的屏幕画面。
- 🎯 分析用户界面布局:对设备的界面布局进行详细分析。
- 📱 管理设备软件包:实现对设备上软件包的管理操作。
📦 安装指南
先决条件
- Python 3.x
- 已安装并配置 Android Debug Bridge (ADB)
- 安卓设备或模拟器(未经过测试)
安装步骤
- 克隆仓库:
git clone https://github.com/minhalvp/android-mcp-server.git
cd android-mcp-server
- 安装依赖: 此项目使用 uv 进行项目管理,可通过多种方式安装。
uv python install 3.11
uv sync
📚 详细文档
配置
服务器使用简单的 YAML 配置文件(config.yaml)指定目标安卓设备。
自定义配置
- 创建新配置文件:
touch config.yaml
- 配置您的设备:
device:
name: "google-pixel-7-pro:5555" # 您的设备标识符,来自 'adb devices'
使用方法
需要 MCP 客户端才能使用此服务器。Claude Desktop 应用是一个例子。要与 Claude Desktop 一起使用此服务器:
- 找到您的 Claude Desktop 配置文件位置:
- Windows:%APPDATA%\Claude\claude_desktop_config.json
- macOS:~/Library/Application Support/Claude/claude_desktop_config.json
- 在
mcpServers部分添加 Android MCP 服务器配置:
{
"mcpServers": {
"android": {
"command": "path/to/uv",
"args": ["--directory", "path/to/android-mcp-server", "run", "server.py"]
}
}
}
替换以下内容:
path/to/uv为您实际的uv可执行文件路径path/to/android-mcp-server您克隆此仓库的实际绝对路径
💻 使用示例
基础用法
服务器公开了以下工具,以下是各工具的使用示例:
def get_packages() -> str:
"""
获取设备上所有已安装的软件包。
返回:
str:设备上所有已安装软件包的字符串列表
"""
def execute_adb_command(command: str) -> str:
"""
执行 ADB 命令并返回输出。
参数:
command (str):要执行的命令
返回:
str:命令的输出结果
"""
def get_window_bounds(package_name: str, activity_name: str) -> tuple[int, int, int, int]:
"""
获取指定应用程序窗口的边界坐标。
参数:
package_name (str):应用程序包名
activity_name (str):活动名称
返回:
tuple[int, int, int, int]:左上角 x,左上角 y,右下角 x,右下角 y 的元组
"""
def get_window_size(package_name: str, activity_name: str) -> tuple[int, int]:
"""
获取指定应用程序窗口的大小。
参数:
package_name (str):应用程序包名
activity_name (str):活动名称
返回:
tuple[int, int]:窗口宽度和高度的元组
"""
def get_display_metrics(package_name: str, activity_name: str) -> dict:
"""
获取指定应用程序窗口的显示指标。
参数:
package_name (str):应用程序包名
activity_name (str):活动名称
返回:
dict:包含密度、宽度和高度等信息的字典
"""
def get_views(package_name: str, activity_name: str) -> list:
"""
获取指定应用程序窗口中的所有视图。
参数:
package_name (str):应用程序包名
activity_name (str):活动名称
返回:
list:包含视图信息的列表
"""
🤝 贡献
如需贡献,请参考项目仓库 GitHub。
🙏 致谢
感谢您使用此项目!如遇问题或有任何建议,请随时提出。
微信扫一扫