@tomisakae/accessibility-service-mcp
Version:
MCP server for Android Accessibility Service API automation
235 lines (166 loc) • 6.49 kB
Markdown
# Android Accessibility Service MCP
## Giới thiệu
MCP Server để điều khiển thiết bị Android thông qua Accessibility Service API. Cho phép AI tương tác với giao diện Android: click, nhập text, cuộn, tìm elements, v.v.
## Yêu cầu hệ thống
- **Node.js** 18+
- **Android device** với Accessibility Service API đã cài đặt và chạy
- **Cùng mạng WiFi** giữa máy tính và thiết bị Android
## Cài đặt và Cấu hình
### 1. Cài đặt dependencies
```bash
npm install
```
### 2. Build TypeScript
```bash
npm run build
```
### 3. Cấu hình IP thiết bị Android
Chỉnh sửa file `.mcp.json` và cập nhật IP của thiết bị Android:
```json
{
"mcpServers": {
"android-accessibility": {
"command": "node",
"args": ["path/to/build/index.js"],
"env": {
"ACCESSIBILITY_API_HOST": "192.168.1.5" // 👈 Thay bằng IP thiết bị Android
}
}
}
}
```
**Cách tìm IP thiết bị Android:**
- Vào **Settings > Wi-Fi > Chọn mạng đang kết nối**
- Hoặc xem trong app **Accessibility Service API**
- Hoặc dùng lệnh: `adb shell ip route`
## Sử dụng với Claude Desktop
### 1. Bật Developer Mode
1. Mở **Claude Desktop** → **Settings**
2. Chọn **Developer** → Bật **Developer Mode**
### 2. Cấu hình MCP Server
Tìm file cấu hình Claude Desktop:
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
Thêm cấu hình vào file:
```json
{
"mcpServers": {
"android-accessibility": {
"command": "node",
"args": ["/full/path/to/AccessibilityServiceMCP/build/index.js"],
"env": {
"ACCESSIBILITY_API_HOST": "192.168.1.5"
}
}
}
}
```
### 3. Restart Claude Desktop
Sau khi cấu hình xong, restart Claude Desktop để áp dụng thay đổi.
## Các Tools có sẵn
### 🏥 System & Health
- `health_check` - Kiểm tra trạng thái API server
- `get_device_info` - Lấy thông tin thiết bị Android
- `get_screenshot` - Chụp ảnh màn hình
- `set_volume` - Điều chỉnh âm lượng
- `open_notifications` - Mở panel thông báo
- `open_quick_settings` - Mở quick settings
### 🔍 UI Operations
- `find_elements` - **🎯 TOOL CHÍNH** - AI sẽ dùng tool này để tìm elements trước khi thực hiện bất kỳ action nào. Có smart fallback system khi không tìm thấy elements
- `get_ui_tree` - Lấy cây UI đầy đủ (chỉ dùng khi cần debug hoặc phân tích chi tiết)
### 👆 Touch Interactions
- `click` - Click tại tọa độ
- `long_click` - Long click (nhấn giữ)
- `double_click` - Double click
- `swipe` - Vuốt từ điểm này đến điểm khác
- `scroll` - Cuộn màn hình
### ⌨️ Input
- `input_text` - Nhập text vào field
### 🧭 Navigation
- `navigate_home` - Về màn hình chính
- `navigate_back` - Quay lại
- `open_recent_apps` - Mở danh sách app gần đây
### 📱 App Management
- `click_app` - Click vào app trên home screen
- `launch_app` - Mở app bằng package name
- `close_app` - Đóng app
- `get_recent_apps` - Lấy danh sách app gần đây
## Ví dụ sử dụng
```typescript
// Tìm và click button
await find_elements({
text: "Submit",
actionType: "click",
});
// Nhập text vào input field
await find_elements({
text: "search",
actionType: "input",
});
await input_text({
text: "Hello World",
clearFirst: true,
});
// Automation workflow
await navigate_home();
await click_app({ appName: "YouTube" });
await find_elements({ text: "AI video", actionType: "click" });
```
## Cách AI sử dụng MCP Tools
### 🎯 `find_elements` - Tool chính cho AI
**AI sẽ ưu tiên sử dụng `find_elements` để tìm kiếm UI elements trước khi thực hiện bất kỳ action nào:**
```typescript
// AI workflow chuẩn:
1. find_elements() → Tìm element cần tương tác
2. click() / input_text() / scroll() → Thực hiện action với tọa độ từ bước 1
```
**Tại sao `find_elements` là tool quan trọng nhất:**
- ✅ **Tìm chính xác** elements theo text, contentDescription, className
- ✅ **Smart fallback** khi không tìm thấy → trả về alternatives
- ✅ **Cung cấp tọa độ** để AI có thể click chính xác
- ✅ **Hiểu context** thông qua `actionType` parameter
### 🧠 Smart Fallback System
API `find_elements` có hệ thống fallback thông minh:
- **Tìm thấy elements** → Trả về kết quả chính xác với tọa độ
- **Không tìm thấy** → Tự động fallback dựa trên `actionType`:
- `actionType: "click"` → Trả về tất cả clickable elements
- `actionType: "input"` → Trả về tất cả editable elements
- `actionType: "scroll"` → Trả về tất cả scrollable elements
- `actionType: "check"` → Trả về checkable/switch elements
- `actionType: "read"` → Trả về text elements
**Lợi ích cho AI:**
- 🤖 **Một API call duy nhất** thay vì gọi nhiều tools
- 🎯 **Luôn có thông tin** để tiếp tục workflow
- 📍 **Tọa độ chính xác** cho các action tiếp theo
- 🔄 **Tự động adapt** khi UI thay đổi
## Troubleshooting
### ❌ Không kết nối được API
```
Error: Không thể kết nối đến API server
```
**Giải pháp:**
1. Kiểm tra thiết bị Android đã bật API server
2. Xác nhận IP address trong `.mcp.json` đúng
3. Đảm bảo cùng mạng WiFi
4. Test bằng: `curl http://[IP]:8080/health`
### ❌ MCP Server không khởi động
```
Error: Cannot find module 'build/index.js'
```
**Giải pháp:**
1. Chạy `npm run build` để build TypeScript
2. Kiểm tra đường dẫn trong `.mcp.json` đúng
3. Đảm bảo Node.js 18+
### ❌ Elements không tìm thấy
**Giải pháp:**
1. Sử dụng `get_screenshot` để xem màn hình hiện tại
2. Thử `get_ui_tree` để xem cấu trúc UI
3. Sử dụng `actionType` để kích hoạt fallback
4. Thử tìm bằng `contentDescription` thay vì `text`
## Thông tin bổ sung
- **Port mặc định**: 8080 (có thể thay đổi trong Android app)
- **Timeout**: 15 giây cho mỗi API call
- **Supported Android**: API 24+ (Android 7.0+)
- **Network**: Chỉ hoạt động trong cùng mạng LAN
## License
MIT License - Xem file LICENSE để biết thêm chi tiết.