使用说明
安卓MCP🤖✨
友好的MCP stdio服务器,通过ADB与Android设备聊天 @devicefarmer/adbkit,通过使用换行符分隔的JSON-RPC @modelcontextprotocol/sdk (没有 Content-Length 需要标题)。将其插入Cursor/Claude MCP并开始戳设备。
✨ 这是什么?
- MCP传输,转发方便的ADB操作(点击、文本、截图、UI转储等)。
- 在stdin/stdout上使用换行符分隔的JSON;每行一请求,每行一响应。
- 原型友好:如果你愿意,可以在以后将最小的JSON-RPC循环换成完整的MCP SDK。
📦 需求
- Node.js 18+和npm。
- PATH上的ADB(例如,Android SDK平台工具)。保持
adb start-server跑步。 - 至少连接了一个设备或模拟器(
adb devices). - 可选:仅当您计划构建演示应用程序时,才使用Android SDK/Gradle;MCP服务器本身不需要。
🚀 设置(本地)
git clone <repo-url> android-mcp
cd android-mcp
npm ci # or npm install
npm test # stdio + tsconfig smoke tests
npm run dev # start MCP server with tsx
# or explicitly:
npx --yes tsx src/server.ts
要生成输出,请执行以下操作: npm run build (发射 dist/).保持 adb devices 在调用工具之前感到高兴。
🧰 MCP配置(光标/克劳德)
示例 ~/.cursor/mcp.json 条目:
{
"mcpServers": {
"android-mcp": {
"type": "stdio",
"command": "npx",
"args": ["--yes", "tsx", "/home/ivan/code/android-mcp/src/server.ts"],
"cwd": "/home/ivan/code/android-mcp"
}
}
}
🎮 暴露的工具
selectDevice{ serial }→ 为后续通话设置默认设备。keyEvent{ keyCode, serial? }→ sendinput keyevent.tap{ x, y, serial? }text{ text, serial? }→ usesinput text(空格变成%s).startActivity{ component, serial? }→ e.g."org.example/.MainActivity".screenshot{ serial? }→{ mimeType: "image/png", base64 }.uiDump{ serial? }→ 已解析uiautomator dump树(文本、内容描述、资源ID、边界)。findAndTap{ text?, contentDesc?, serial? }→ 找到第一个匹配节点并点击其中心。listDevicesDetailed→ 列出带有型号/制造商/sdk信息的附加设备。
📸 注释和限制
- 屏幕截图和UI转储是周期性快照(尚未流式传输)。
- UI转储取决于
uiautomator存在于设备上。 - 原型运输;您可以在不更改ADB帮助程序的情况下连接更丰富的MCP SDK。
🧪 测试
npm test
📱 可选:构建/安装演示应用程序
只有当你想练习示例Android UI时才需要:
# from the parent monorepo that contains the Android app
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apk
adb shell am start -n org.dronix.android.kindlegratis/.MainActivity
🛠️ CI提示
- 节点工作流:签出→ 设置节点18+→
npm ci→npm test. - 如果在CI中构建Android应用程序,请添加Java 17+Android SDK设置并运行
./gradlew assembleDebug.