内容
# adb-mcp
基于Go语言的MCP服务器框架,用于编排Android `adb`命令。初始版本专注于配置、日志记录和生命周期管理,以便后续添加新的MCP工具和资源。
## 快速入门
```bash
go build ./cmd/adb-mcp
./adb-mcp -config path/to/config.json
```
二进制文件作为一个长寿命进程运行(stdio MCP传输占位符),并通过`Ctrl+C`/`SIGTERM`终止。
### 使用stdio MCP传输
服务器现在通过标准输入/输出上的换行分隔JSON来支持模型上下文协议:
1. 启动 `./adb-mcp` (可选地将其输送到监督IDE/工具)。
2. 发送一个 `initialize` 请求(JSON-RPC 2.0),指定协议版本 `2025-03-26` (或 `2024-11-05` 用于旧客户端)。
3. 在接收到 `initialize` 结果后,发送 `tools/list` 和 `tools/call` 请求,以枚举和调用下面描述的内置adb助手。
传输强制执行MCP握手,响应 `ping`,并为每个工具调用返回结构化的 `content` 数组。所有请求都必须是JSON-RPC对象,以换行符分隔;当客户端发送数组时,支持批处理。
## 配置
配置是可选的JSON文件;未指定的值会回落到合理的默认值。
```json
{
"adb_path": "/usr/local/bin/adb",
"command_timeout": "45s",
"logging": {
"directory": "~/adb-mcp/logs",
"file_name": "adb-mcp.log",
"level": "debug",
"also_console": true
},
"mcp": {
"transport": "stdio"
}
}
```
关键默认值:
- `adb_path`: `adb` (通过PATH解析)
- `logging.directory`: `$HOME/.adb-mcp/logs`
- `logging.file_name`: `adb-mcp.log`
- `logging.also_console`: `false` (默认情况下,日志仅写入文件)
- `command_timeout`: `30s`
- `mcp.transport`: `stdio`
## 日志记录
服务器使用 `zerolog` 记录结构化JSON日志条目。默认情况下,日志写入 `$HOME/.adb-mcp/logs/adb-mcp.log`,以便长期运行的命令可以刷新丰富的内容而不会阻塞标准输出。启用控制台镜像,使用 `"also_console": true`,如果您需要交互式反馈。
## 内置工具
MCP注册表预先填充了高价值的设备管理和UI自动化助手。这些助手表现为MCP工具(并且已经可以通过 `Server.InvokeTool` 在stdio传输构建期间进行测试):
- `device.list` — 列出 `adb devices -l` 输出,并带有可选的状态筛选。
- `device.connect` / `device.disconnect` — 管理TCP/IP或Wi-Fi调试端点(主机:端口)。
- `device.reboot` — 重启到系统、引导程序、恢复或快速启动。
- `ui.tap` / `ui.swipe` — 模拟触摸交互;滑动接受毫秒可选时长。
- `ui.text` — 通过 `adb shell input text` 输入任意文本,编码空格以确保可靠性。
- `ui.keyevent` — 触发按键码(例如, `3` 代表 `KEYCODE_HOME`)。
所有长时间运行的命令都会将其标准输出/标准错误流式写入zerolog文件,以便Codex/Claude集成可以检索工件而不会阻塞标准输入/标准输出。