ClawSkills logoClawSkills

Skill

您在移动端的 AI 副驾驶 — 或者为您的 AI 配备一部专属手机。拨打电话、发送 SMS、通过免提电话进行 TTS 语音播报、自动化 UI、管理文件、搜索媒体,以及 40 多种其他功能。

介绍

# Aster - Your AI CoPilot on Mobile

适用于任何 Android 设备的 AI 副驾驶,使用 MCP(模型上下文协议)——或者为您的 AI 配备一台专用手机,让它自行打电话、发短信和执行操作。完全开源且优先保护隐私——您的数据绝不会离开您的网络。

**网站**: [aster.theappstack.in](https://aster.theappstack.in) | **GitHub**: [github.com/satyajiit/aster-mcp](https://github.com/satyajiit/aster-mcp)

---

如需查看 Android 应用和 Web 仪表板的屏幕截图,请访问 [aster.theappstack.in](https://aster.theappstack.in)。

---

## 设置

1. **安装并启动服务器**: ```bash npm install -g aster-mcp aster start ```

2. **安装 Aster Android 应用**:从 [Releases](https://github.com/satyajiit/aster-mcp/releases) 在任何 Android 设备(您的日常手机或给 AI 使用的备用手机)上安装该应用,并连接到终端中显示的服务器地址。

3. **配置 MCP**:在您的 `.mcp.json` 中配置: ```json { "mcpServers": { "aster": { "type": "http", "url": "http://localhost:5988/mcp" } } } ```

---

## 安全与隐私

Aster 采用**安全优先、隐私优先**的架构构建:

- **自托管** — 完全在您的本地机器上运行。无云服务器,无第三方中继。您的数据保留在您的网络中。 - **零遥测** — 无分析,无跟踪,不收集使用数据。您所做的一切仅由您自己知晓。 - **设备批准** — 每台新设备必须从仪表板手动批准,才能连接或执行命令。 - **Tailscale 集成** — 通过 Tailscale 提供可选的 WireGuard 加密网状 VPN。支持通过自动 TLS (WSS) 进行安全的远程访问——无需端口转发。 - **无需 Root** — 使用官方的 Android 无障碍服务 API(与屏幕阅读器使用相同的系统)。无需 Root,无需 ADB 破解,无漏洞利用。每个操作都受权限限制并在沙盒中运行。 - **前台透明度** — 当服务运行时,您的 Android 设备上会始终显示可见的通知。无静默后台访问。 - **仅本地存储** — 所有数据(设备信息、日志)存储在本地 SQLite 数据库中。不会向外部发送任何内容。 - **100% 开源** — MIT 许可,完全可审计的代码库。在 [GitHub](https://github.com/satyajiit/aster-mcp) 上检查每一行代码。

---

## 可用工具

### 设备与屏幕 - `aster_list_devices` - 列出已连接的设备 - `aster_get_device_info` - 获取设备详细信息(电池、存储、规格) - `aster_take_screenshot` - 截取屏幕截图 - `aster_get_screen_hierarchy` - 获取 UI 无障碍树

### 输入与交互 - `aster_input_gesture` - 点击、滑动、长按 - `aster_input_text` - 在聚焦字段中输入文本 - `aster_click_by_text` - 通过文本点击元素 - `aster_click_by_id` - 通过视图 ID 点击元素 - `aster_find_element` - 查找 UI 元素 - `aster_global_action` - 返回、主页、最近任务等

### 应用与系统 - `aster_launch_intent` - 启动应用或意图 - `aster_list_packages` - 列出已安装的应用 - `aster_read_notifications` - 读取通知 - `aster_read_sms` - 读取短信 - `aster_send_sms` - 向电话号码发送短信 - `aster_get_location` - 获取 GPS 位置 - `aster_execute_shell` - 在 Android 应用沙盒中运行 Shell 命令(无需 Root,限制于应用数据目录和用户可访问的存储,30秒超时,1MB 输出限制)

### 文件与存储 - `aster_list_files` - 列出目录内容 - `aster_read_file` - 读取文件内容 - `aster_write_file` - 写入文件 - `aster_delete_file` - 删除文件 - `aster_analyze_storage` - 存储分析 - `aster_find_large_files` - 查找大文件 - `aster_search_media` - 使用自然语言搜索照片/视频

### 设备功能 - `aster_get_battery` - 电池信息 - `aster_get_clipboard` / `aster_set_clipboard` - 剪贴板访问 - `aster_show_toast` - 显示 Toast 消息 - `aster_speak_tts` - 文本转语音 - `aster_vibrate` - 振动设备 - `aster_play_audio` - 播放音频 - `aster_post_notification` - 发布通知 - `aster_make_call` - 发起电话呼叫 - `aster_make_call_with_voice` - 拨打电话,开启免提,并在接听后通过 TTS 朗读 AI 文本 - `aster_show_overlay` - 在设备上显示 Web 覆盖层

### 媒体智能 - `aster_index_media_metadata` - 提取照片/视频 EXIF 元数据 - `aster_search_media` - 使用自然语言查询搜索照片/视频

---

## 主动事件转发

Aster 可以通过 Webhook 将手机上的实时事件推送到您的 AI 代理。启用后,这些事件作为 HTTP POST 载荷到达——您的代理无需轮询,手机会主动告诉您发生了什么。

可以通过仪表板在 `/settings/openclaw` 或 CLI 进行配置:`aster set-openclaw-callbacks`。

### Webhook 格式

事件作为 HTTP POST 发送到配置的 OpenClaw 端点(默认为 `/hooks/agent`)。AI 读取 `message` 字段。所有事件上下文都使用标准的 `[key] value` 标签打包到 `message` 中。

通知事件的原始 HTTP POST 载荷示例: ```json { "message": "[skill] aster\n[event] notification\n[device_id] 6241e40fb71c0cf7\n[model] samsung SM-S938B, Android 16\n[data-app] messaging\n[data-package] com.google.android.apps.messaging\n[data-title] John\n[data-text] Hey, are you free tonight?", "wakeMode": "now", "deliver": true, "channel": "whatsapp", "to": "+1234567890" } ```

- `message` — 包含标准标头的结构化事件文本(这是 AI 读取的内容) - `wakeMode` — 始终为 `"now"`(立即唤醒代理) - `deliver` — 对于真实事件始终为 `true`,对于测试 Ping 为 `false` - `channel` / `to` — 投递渠道和接收者,在仪表板中配置

### 事件格式

每个事件都遵循标准结构,包含 4 个固定标头和 `[data-*]` 字段:

``` [skill] aster [event] <event_name> [device_id] <device_uuid> [model] <manufacturer model, Android version> [data-key] value [data-key] value ```

- `[skill]` — 始终为 `aster` - `[event]` — 事件名称:`sms`、`notification`、`device_online`、`device_offline`、`pairing` - `[device_id]` — 设备的 UUID(使用它通过 Aster 工具定位设备) - `[model]` — 设备制造商、型号和操作系统 - `[data-*]` — 事件特定字段,每个字段以 `data-` 为前缀(例如 `[data-app]`、`[data-sender]`)

### 事件类型

**`sms`** — 收到的短信 ``` [skill] aster [event] sms [device_id] a1b2c3d4-5678-90ab [model] samsung SM-S938B, Android 15 [data-sender] +1234567890 [data-body] Hey are you free tonight? ```

**`notification`** — 应用通知(与短信去重) ``` [skill] aster [event] notification [device_id] a1b2c3d4-5678-90ab [model] samsung SM-S938B, Android 15 [data-app] whatsapp [data-package] com.whatsapp [data-title] John [data-text] Meeting moved to 3pm ```

**`device_online`** — 已批准的设备上线 ``` [skill] aster [event] device_online [device_id] a1b2c3d4-5678-90ab [model] samsung SM-S938B, Android 15 [data-status] connected ```

**`device_offline`** — 设备下线 ``` [skill] aster [event] device_offline [device_id] a1b2c3d4-5678-90ab [model] samsung SM-S938B, Android 15 [data-status] disconnected ```

**`pairing`** — 新设备需要批准(使用 `[device_id]` 进行批准) ``` [skill] aster [event] pairing [device_id] e5f6g7h8-9012-cdef [model] Samsung SM-S924B, Android 15 [data-status] pending_approval [data-action] approve this device from the Aster dashboard or via aster devices approve ```

### 如何响应事件

当您收到带有 `[skill] aster` 的消息时,解析 `[event]` 和 `[device_id]` 以确定发生了什么以及要在哪台设备上执行操作。

**短信 — 回复、提取信息或升级处理:** ``` [event] sms | [device_id] a1b2c3d4 | sender: +1234567890 | body: Running late, be there in 20 → aster_send_sms (deviceId: a1b2c3d4) to +1234567890: "No worries, see you soon!"

[event] sms | [device_id] a1b2c3d4 | sender: +1800555 | body: Your OTP is 482913 → Extract OTP "482913", use aster_input_text (deviceId: a1b2c3d4) to enter it ```

**通知 — 代表用户监控和操作:** ``` [event] notification | [device_id] a1b2c3d4 | app: driver | text: Your driver is arriving → aster_speak_tts (deviceId: a1b2c3d4) "Your Uber is almost here"

[event] notification | [device_id] a1b2c3d4 | app: mShop | text: Your package was delivered → aster_send_sms (deviceId: a1b2c3d4) to user: "Your Amazon package just arrived" ```

**设备生命周期 — 管理连接:** ``` [event] device_offline | [device_id] a1b2c3d4 → Pause pending automations for device a1b2c3d4

[event] device_online | [device_id] a1b2c3d4 → Resume queued tasks, aster_read_notifications (deviceId: a1b2c3d4) to catch up ```

**配对 — 批准或提醒:** ``` [event] pairing | [device_id] e5f6g7h8 | model: Samsung SM-S924B → If expected: approve device e5f6g7h8 via dashboard API → If unexpected: alert user "Unknown device SM-S924B trying to connect" ```

---

## 示例用法

**您的移动端副驾驶:** ``` "Open YouTube and search for cooking videos" → aster_launch_intent → aster_click_by_id → aster_input_text

"Find photos from my trip to Mumbai last month" → aster_search_media with query "photos from Mumbai last month"

"Take a screenshot and tell me what's on screen" → aster_take_screenshot → aster_get_screen_hierarchy ```

**AI 自己的手机 — 让它为您行动:** ``` "Call me and tell me my flight is delayed" → aster_make_call_with_voice with number, text "Your flight is delayed 45 min, new gate B12", waitSeconds 8

"Text me when my delivery arrives" → aster_read_notifications → aster_send_sms with number and message

"Reply to the delivery guy: Thanks, I'll be home" → aster_send_sms with number and message ```

---

## 命令

```bash aster start # Start the server aster stop # Stop the server aster status # Show server and device status aster dashboard # Open web dashboard

aster devices list # List connected devices aster devices approve # Approve a pending device aster devices reject # Reject a device aster devices remove # Remove a device

aster set-openclaw-callbacks # Configure event forwarding to OpenClaw ```

---

## 系统要求

- Node.js >= 20 - 任何已安装 Aster 应用的 Android 设备(您的手机或专用的 AI 设备) - 设备和服务器在同一网络上(或使用 [Tailscale](https://tailscale.com) 进行安全的远程访问)

---

**网站**: [aster.theappstack.in](https://aster.theappstack.in) | **GitHub**: [github.com/satyajiit/aster-mcp](https://github.com/satyajiit/aster-mcp)

更多产品