# android-adb-mcp **Repository Path**: shrri/android-adb-mcp ## Basic Information - **Project Name**: android-adb-mcp - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-07 - **Last Updated**: 2026-01-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ADB MCP Server [![Build Status](https://github.com/qinxiandiqi/android-adb-mcp/workflows/CI/badge.svg)](https://github.com/qinxiandiqi/android-adb-mcp/actions) [![codecov](https://codecov.io/gh/qinxiandiqi/android-adb-mcp/branch/main/graph/badge.svg)](https://codecov.io/gh/qinxiandiqi/android-adb-mcp) [![npm version](https://badge.fury.io/js/android-adb-mcp.svg)](https://badge.fury.io/js/android-adb-mcp) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) > 🚀 **Production-Ready MCP Server for Android Device Management** 一个功能完整、生产就绪的 Model Context Protocol (MCP) 服务器,将 Android Debug Bridge (ADB) 功能封装为现代化的 AI 助手工具。提供 35 个专业工具,覆盖 Android 设备管理的所有核心场景。 ## ⚡ 快速体验 ### 直接运行(无需安装) ```bash npx android-adb-mcp ``` ### Claude Desktop 配置 将以下配置添加到 Claude Desktop 的 `claude_desktop_config.json` 文件: ```json { "mcpServers": { "android-devices": { "command": "npx", "args": ["android-adb-mcp"], "env": { "ADB_PATH": "/usr/local/bin/adb" } } } } ``` 重启 Claude Desktop,即可开始使用 AI 助手管理您的 Android 设备! ### 💡 使用示例 配置完成后,您可以在 Claude Desktop 中使用自然语言管理 Android 设备: ``` 用户: 列出所有连接的 Android 设备 助手: 我来为您检查连接的设备... [调用 list_devices 工具] 找到 1 个设备:4745ca3b (Redmi Note 7 Pro) 用户: 获取设备的详细信息 助手: 正在获取设备详细信息... [调用 get_device_info 工具] 设备信息: - 型号:Redmi Note 7 Pro - Android 版本:10 - 内存:6GB - 存储:128GB 用户: 截取一张屏幕截图 助手: 正在为您截取屏幕... [调用 capture_screenshot 工具] ✅ 截图已保存到:/tmp/screenshot_20241106.png 用户: 安装一个 APK 文件 助手: 请提供 APK 文件路径,我来帮您安装... [调用 install_app 工具] ``` ## ✨ 核心特性 ### 🎯 **全面的设备管理** - **设备发现**: 自动识别并列出所有连接的 Android 设备 - **设备信息**: 获取详细的设备规格、系统版本、硬件信息 - **连接管理**: 支持USB和无线TCP/IP连接 - **状态监控**: 实时检查设备连接状态和健康度 ### 🛡️ **安全的Shell执行** - **命令白名单**: 严格的安全命令验证机制 - **沙箱执行**: 防止恶意命令执行的安全沙箱 - **权限控制**: 基于命令类型的细粒度权限管理 - **审计日志**: 完整的命令执行审计追踪 ### 📁 **强大的文件操作** - **批量传输**: 支持大文件的分块传输 - **目录管理**: 完整的目录创建、删除、浏览功能 - **文件信息**: 详细的文件属性和元数据获取 - **安全验证**: 路径遍历攻击防护 ### 📱 **完整的应用管理** - **应用生命周期**: 安装、卸载、启动、停止、清除数据 - **应用信息**: 详细的包信息、权限、版本信息 - **批量操作**: 支持多应用的批量管理操作 - **系统应用**: 区分系统和用户应用的管理策略 ### 🎬 **专业的媒体操作** - **屏幕捕获**: 高质量屏幕截图和录制 - **显示管理**: 屏幕密度、分辨率动态调整 - **媒体格式**: 支持多种截图和视频格式 - **实时预览**: 屏幕内容的实时获取 ### 📊 **高级日志分析** - **多源日志**: logcat、崩溃日志、ANR日志、内核日志 - **智能过滤**: 基于标签、级别、时间的智能过滤 - **流式处理**: 实时日志流式传输 - **诊断分析**: 自动化的错误诊断和问题定位 ### ⚡ **高级功能** - **批量执行**: 多命令序列化执行,支持条件分支 - **性能监控**: CPU、内存、磁盘、网络、电池实时监控 - **无线管理**: 无线ADB连接的自动发现和管理 - **流式传输**: 大文件的分块流式传输 ## 🚀 快速开始 ### 前置要求 - **Node.js**: >= 18.0.0 - **Android SDK**: 配置完整的 ADB 工具 - **设备权限**: 启用 USB 调试的 Android 设备 ### 📦 安装方式 #### 方式一:直接使用 npx(推荐) ```bash # 直接运行(无需安装) npx android-adb-mcp # 或者指定 ADB 路径 ADB_PATH=/path/to/adb npx android-adb-mcp ``` #### 方式二:全局安装 ```bash # 全局安装 npm install -g android-adb-mcp # 启动服务 android-adb-mcp # 或者使用 npx npx android-adb-mcp ``` #### 方式三:项目本地安装 ```bash # 本地安装 npm install android-adb-mcp # 启动服务 npx android-adb-mcp ``` #### 方式四:从源码构建 ```bash # 克隆项目 git clone https://github.com/qinxiandiqi/android-adb-mcp.git cd adb-mcp # 安装依赖 pnpm install # 构建项目 pnpm build # 启动服务器 pnpm start ``` ### 🐳 Docker 部署 ```bash # 使用预构建镜像 docker run -d --name adb-mcp --privileged -v /dev/bus/usb:/dev/bus/usb qinxiandiqi/android-adb-mcp # 或者从源码构建 docker build -t adb-mcp . docker run -d --name adb-mcp --privileged -v /dev/bus/usb:/dev/bus/usb adb-mcp ``` ## 📋 工具清单 ### 🔧 设备工具 (6个) | 工具名称 | 功能描述 | 参数 | |---------|---------|------| | `list_devices` | 列出所有连接的设备 | - | | `get_device_info` | 获取设备详细信息 | `deviceId` | | `connect_device` | 连接TCP/IP设备 | `host`, `port` | | `disconnect_device` | 断开设备连接 | `host`, `port` | | `wait_for_device` | 等待设备连接 | `deviceId`, `timeout` | | `check_device_status` | 检查设备状态 | `deviceId` | ### 🐚 Shell工具 (5个) | 工具名称 | 功能描述 | 参数 | |---------|---------|------| | `execute_shell` | 执行安全shell命令 | `command`, `deviceId` | | `get_system_properties` | 获取系统属性 | `property`, `deviceId` | | `list_processes` | 列出运行进程 | `deviceId` | | `get_memory_info` | 获取内存信息 | `deviceId` | | `get_disk_usage` | 获取磁盘使用情况 | `path`, `deviceId` | ### 📁 文件工具 (6个) | 工具名称 | 功能描述 | 参数 | |---------|---------|------| | `list_files` | 列出文件和目录 | `path`, `deviceId` | | `push_file` | 推送文件到设备 | `localPath`, `remotePath`, `deviceId` | | `pull_file` | 从设备拉取文件 | `remotePath`, `localPath`, `deviceId` | | `create_directory` | 创建目录 | `path`, `deviceId` | | `remove_file` | 删除文件或目录 | `path`, `deviceId` | | `get_file_info` | 获取文件信息 | `path`, `deviceId` | ### 📱 应用工具 (7个) | 工具名称 | 功能描述 | 参数 | |---------|---------|------| | `list_apps` | 列出已安装应用 | `filter`, `deviceId` | | `get_app_info` | 获取应用信息 | `packageName`, `deviceId` | | `install_app` | 安装APK | `apkPath`, `deviceId` | | `uninstall_app` | 卸载应用 | `packageName`, `deviceId` | | `start_app` | 启动应用 | `packageName`, `deviceId` | | `stop_app` | 停止应用 | `packageName`, `deviceId` | | `clear_app_data` | 清除应用数据 | `packageName`, `deviceId` | ### 📸 媒体工具 (6个) | 工具名称 | 功能描述 | 参数 | |---------|---------|------| | `capture_screenshot` | 截取屏幕截图 | `savePath`, `deviceId` | | `record_screen` | 录制屏幕 | `duration`, `savePath`, `deviceId` | | `get_screen_info` | 获取屏幕信息 | `deviceId` | | `set_screen_density` | 设置屏幕密度 | `density`, `deviceId` | | `reset_screen_density` | 重置屏幕密度 | `deviceId` | | `get_display_modes` | 获取显示模式 | `deviceId` | ### 📋 日志工具 (6个) | 工具名称 | 功能描述 | 参数 | |---------|---------|------| | `get_logs` | 获取logcat日志 | `level`, `tag`, `count`, `deviceId` | | `clear_logs` | 清除日志缓冲区 | `buffer`, `deviceId` | | `get_crash_logs` | 获取崩溃日志 | `packageName`, `count`, `deviceId` | | `get_anr_logs` | 获取ANR日志 | `packageName`, `count`, `deviceId` | | `get_kernel_logs` | 获取内核日志 | `count`, `deviceId` | | `stream_logs` | 流式获取日志 | `filters`, `deviceId` | ### 🚀 高级工具 (5个) | 工具名称 | 功能描述 | 参数 | |---------|---------|------| | `execute_batch` | 批量执行命令 | `commands`, `errorStrategy` | | `get_performance_metrics` | 获取性能指标 | `metrics`, `deviceId` | | `manage_wireless_connection` | 管理无线连接 | `action`, `host`, `port` | | `stream_file` | 流式传输文件 | `source`, `destination`, `chunkSize` | | `analyze_storage` | 分析存储使用 | `path`, `deviceId` | ## ⚙️ 配置 ### 环境变量 | 变量名 | 描述 | 默认值 | |-------|------|--------| | `ADB_PATH` | ADB可执行文件路径 | `adb` | | `ADB_HOST` | ADB服务器主机 | `localhost` | | `ADB_PORT` | ADB服务器端口 | `5037` | | `ADB_TIMEOUT` | 命令执行超时(秒) | `30` | | `LOG_LEVEL` | 日志级别 | `info` | ### ⚙️ MCP 客户端配置 #### 方式一:使用 npx(推荐) ```json { "mcpServers": { "android-devices": { "command": "npx", "args": ["android-adb-mcp"], "env": { "ADB_PATH": "/path/to/platform-tools/adb", "LOG_LEVEL": "debug" } } } } ``` #### 方式二:全局安装 ```json { "mcpServers": { "android-devices": { "command": "android-adb-mcp", "args": [], "env": { "ADB_PATH": "/path/to/platform-tools/adb", "LOG_LEVEL": "debug" } } } } ``` #### 方式三:本地安装 ```json { "mcpServers": { "android-devices": { "command": "node", "args": ["./node_modules/android-adb-mcp/dist/src/index.js"], "env": { "ADB_PATH": "/path/to/platform-tools/adb", "LOG_LEVEL": "debug" } } } } ``` #### 方式四:从源码运行 ```json { "mcpServers": { "android-devices": { "command": "node", "args": ["/absolute/path/to/adb-mcp/dist/src/index.js"], "env": { "ADB_PATH": "/path/to/platform-tools/adb", "LOG_LEVEL": "debug" } } } } ``` ### 🖥️ Claude Desktop 配置示例 #### 快速配置(npx 方式) ```json { "mcpServers": { "android-devices": { "command": "npx", "args": ["android-adb-mcp"], "env": { "ADB_PATH": "/usr/local/bin/adb" } } } } ``` #### 完整配置示例 ```json { "mcpServers": { "android-devices": { "command": "npx", "args": ["android-adb-mcp"], "env": { "ADB_PATH": "/usr/local/bin/adb", "ADB_HOST": "localhost", "ADB_PORT": "5037", "ADB_TIMEOUT": "30", "LOG_LEVEL": "info" } } } } ``` ## 🛡️ 安全特性 ### 多层安全防护 1. **命令验证**: 基于白名单的安全命令验证 2. **路径安全**: 防止路径遍历和目录逃逸攻击 3. **输入验证**: 使用Zod进行严格的类型和数据验证 4. **权限控制**: 细粒度的操作权限管理 5. **审计日志**: 完整的操作审计和安全日志 ### 安全命令列表 允许执行的Shell命令类别: - 系统信息获取 (`getprop`, `dumpsys`, `wm`, `am`) - 文件操作 (`ls`, `cat`, `stat`, `mkdir`, `rm`) - 进程管理 (`ps`, `top`) - 网络诊断 (`ping`, `ip`, `netstat`) - 日志管理 (`logcat`, `dmesg`) ## 🏗️ 项目架构 ### 技术栈 - **运行时**: Node.js 18+ - **语言**: TypeScript 5.9+ - **协议**: Model Context Protocol (MCP) 2024-11-05 - **验证**: Zod 4.x - **测试**: Jest 30+ - **构建**: TypeScript + tsc-alias - **代码质量**: ESLint 9.x + TypeScript ESLint ### 架构设计 ``` ┌─────────────────────────────────────┐ │ MCP Protocol Layer │ │ ┌─────────────┐ ┌───────────────┐ │ │ │ JSON-RPC │ │ Tool Registry │ │ │ │ Handler │ │ & Discovery │ │ │ └─────────────┘ └───────────────┘ │ └─────────────────────────────────────┘ ┌─────────────────────────────────────┐ │ Business Layer │ │ ┌─────────────┐ ┌───────────────┐ │ │ │ Tool │ │ Input │ │ │ │ Modules │ │ Validation │ │ │ │ (35 tools) │ │ (Zod) │ │ │ └─────────────┘ └───────────────┘ │ └─────────────────────────────────────┘ ┌─────────────────────────────────────┐ │ Infrastructure Layer │ │ ┌─────────────┐ ┌───────────────┐ │ │ │ ADB │ │ Utility │ │ │ │ Client │ │ Functions │ │ │ └─────────────┘ └───────────────┘ │ └─────────────────────────────────────┘ ``` ### 目录结构 ``` adb-mcp/ ├── src/ # 源代码 │ ├── adb/ # ADB客户端实现 │ │ ├── client.ts # 主要ADB客户端类 │ │ └── types.ts # 类型定义 │ ├── tools/ # MCP工具模块 (35个工具) │ │ ├── device-tools.ts # 设备管理 (6个) │ │ ├── shell-tools.ts # Shell命令 (5个) │ │ ├── file-tools.ts # 文件操作 (6个) │ │ ├── app-tools.ts # 应用管理 (7个) │ │ ├── media-tools.ts # 媒体操作 (6个) │ │ ├── log-tools.ts # 日志访问 (6个) │ │ └── advanced-tools.ts # 高级功能 (5个) │ ├── utils/ # 工具函数 │ │ └── validation.ts # 输入验证和安全 │ └── index.ts # MCP服务器入口 ├── tests/ # 测试文件 │ ├── unit/ # 单元测试 (35+ 测试文件) │ ├── integration/ # 集成测试 │ ├── mocks/ # 测试模拟 │ └── benchmark/ # 性能基准测试 ├── .github/workflows/ # CI/CD 配置 ├── docs/ # 文档 ├── scripts/ # 构建脚本 └── dist/ # 构建输出 ``` ## 🧪 测试 ### 运行测试 ```bash # 运行所有测试 pnpm test # 运行测试并生成覆盖率报告 pnpm test:coverage # 监听模式运行测试 pnpm test:watch # 运行特定测试 pnpm test device-tools ``` ### 测试覆盖 - **单元测试**: 100% 工具模块覆盖 - **集成测试**: 完整的ADB客户端测试 - **安全测试**: 输入验证和安全检查测试 - **性能测试**: 基准测试和性能回归测试 ### 测试统计 ``` ----------|---------|----------|---------|---------|------------------- File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ----------|---------|----------|---------|---------|------------------- All files | 100 | 100 | 100 | 100 | src | 100 | 100 | 100 | 100 | adb | 100 | 100 | 100 | 100 | tools | 100 | 100 | 100 | 100 | utils | 100 | 100 | 100 | 100 | ----------|---------|----------|---------|---------|------------------- ``` ## 🚀 部署 ### 生产部署 ```bash # 构建生产版本 pnpm build # 启动生产服务器 NODE_ENV=production node dist/src/index.js ``` ### PM2 部署 ```bash # 安装 PM2 npm install -g pm2 # 启动服务 pm2 start ecosystem.config.js # 监控状态 pm2 monit ``` ### Docker 部署 ```dockerfile FROM node:18-alpine # 安装 ADB RUN apk add --no-cache android-tools WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY dist ./dist EXPOSE 3000 CMD ["node", "dist/src/index.js"] ``` ## 📊 性能 ### 基准测试结果 | 操作类型 | 平均响应时间 | QPS | 内存占用 | |---------|-------------|-----|----------| | 设备列表 | 45ms | 22/s | 12MB | | Shell命令 | 120ms | 8/s | 15MB | | 文件传输 | 250ms | 4/s | 20MB | | 截图操作 | 800ms | 1.2/s | 25MB | ### 性能优化 - **连接池**: ADB连接复用和池化 - **缓存机制**: 设备信息和系统属性缓存 - **并发控制**: 合理的并发限制和队列管理 - **内存管理**: 及时释放大文件和临时数据 ## 🔧 开发 ### 开发环境设置 ```bash # 克隆项目 git clone https://github.com/qinxiandiqi/android-adb-mcp.git cd adb-mcp # 安装依赖 pnpm install # 开发模式 (热重载) pnpm dev # 类型检查 pnpm type-check # 代码检查 pnpm lint # 格式化代码 pnpm format ``` ### 添加新工具 1. **创建工具文件**: ```typescript // src/tools/my-tool.ts import { z } from 'zod'; import { AdbClient } from '../adb/client.js'; export const myTool = { name: 'my_tool', description: 'Tool description', inputSchema: { type: 'object', properties: { param1: { type: 'string', description: 'Parameter description' } }, required: ['param1'] }, handler: async (args) => { const client = new AdbClient(); // 实现工具逻辑 return { success: true, data: result }; } }; ``` 2. **注册工具**: ```typescript // src/index.ts import { myTool } from './tools/my-tool.js'; // 在工具注册中添加 const allTools = { ...deviceTools, ...myTool, // 添加新工具 }; ``` 3. **添加测试**: ```typescript // tests/unit/tools/my-tool.test.ts import { myTool } from '../../../src/tools/my-tool.js'; describe('myTool', () => { it('should execute successfully', async () => { const result = await myTool.handler({ param1: 'test' }); expect(result.success).toBe(true); }); }); ``` ### 贡献指南 1. Fork 项目 2. 创建功能分支: `git checkout -b feature/amazing-feature` 3. 提交更改: `git commit -m 'Add amazing feature'` 4. 推送分支: `git push origin feature/amazing-feature` 5. 创建 Pull Request ### 代码规范 - 使用 TypeScript 严格模式 - 遵循 ESLint 和 Prettier 配置 - 编写完整的单元测试 - 添加 JSDoc 注释 - 遵循语义化版本控制 ## 🔍 故障排除 ### 常见问题 #### ADB 连接问题 ```bash # 检查 ADB 服务状态 adb devices # 重启 ADB 服务 adb kill-server adb start-server # 检查设备授权 adb devices -l ``` #### 权限问题 ```bash # Linux/Mac: 检查 USB 权限 sudo usermod -aG plugdev $USER # 重新加载 udev 规则 sudo udevadm control --reload-rules ``` #### 网络连接问题 ```bash # 检查防火墙设置 sudo ufw status # 测试端口连通性 telnet localhost 5037 ``` ### 调试模式 ```bash # 启用详细日志 DEBUG=adb-mcp:* pnpm start # 启用 ADB 调试 ADB_TRACE=1 pnpm start # 启用网络调试 NODE_DEBUG=net pnpm start ``` ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 🤝 贡献者 感谢所有为这个项目做出贡献的开发者! ## 🙏 致谢 - [Model Context Protocol](https://modelcontextprotocol.io/) - 提供了强大的AI工具集成框架 - [Android Debug Bridge](https://developer.android.com/tools/adb) - 核心的设备管理工具 - [Zod](https://zod.dev/) - 优秀的数据验证库 - [TypeScript](https://www.typescriptlang.org/) - 类型安全的JavaScript超集 ## 📞 支持 - 🐛 [报告Bug](https://github.com/qinxiandiqi/android-adb-mcp/issues) - 💡 [功能请求](https://github.com/qinxiandiqi/android-adb-mcp/issues) - 💬 [讨论区](https://github.com/qinxiandiqi/android-adb-mcp/discussions) ---
**[⬆ 回到顶部](#adb-mcp-server)** Made with ❤️ by the ADB MCP Team