OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  aster:你的移动端AI副驾驶

aster:你的移动端AI副驾驶

 
  neon ·  2026-02-01 22:21:06 · 19 次点击  · 0 条评论  

名称: aster
版本: 0.1.13
描述: 您的移动 AI 副驾驶 —— 或为您的 AI 配备专属手机。通过 MCP 实现通话、发送短信、TTS 扬声器语音、自动化 UI、管理文件、搜索媒体等 40 多种工具。开源、自托管、隐私优先。
主页: https://aster.theappstack.in
元数据: {"aster":{"category":"device-control","requires":{"bins":["node"]},"mcp":{"type":"http","url":"http://localhost:5988/mcp"}}}


Aster - 您的移动 AI 副驾驶

基于 MCP(模型上下文协议)的 Android 设备 AI 副驾驶 —— 或为您的 AI 配备一部专属手机,让它能自主拨打电话、发送短信并执行操作。完全开源且隐私优先 —— 您的数据永不离开您的网络。

官网: aster.theappstack.in | GitHub: github.com/satyajiit/aster-mcp


如需查看 Android 应用和网页控制台的截图,请访问 aster.theappstack.in


安装设置

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

  2. 在任意 Android 设备上安装 Aster 应用(可以是您的日常手机,也可以是 AI 的备用机),从 Releases 下载,并根据终端显示的服务器地址进行连接。

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


安全与隐私

Aster 采用 安全优先、隐私优先 的架构设计:

  • 自托管 —— 完全在您的本地机器上运行。无需云服务器,无第三方中转。您的数据始终留在您的网络中。
  • 零遥测 —— 无分析、无追踪、无使用数据收集。您的操作仅您可见。
  • 设备审批 —— 每台新设备必须先在控制台中手动批准,才能连接或执行命令。
  • Tailscale 集成 —— 可通过 Tailscale 使用可选的加密网状 VPN(基于 WireGuard)。实现安全的远程访问,并自动启用 TLS (WSS) —— 无需端口转发。
  • 无需 Root —— 使用官方的 Android 无障碍服务 API(与屏幕阅读器同源)。无需 Root、无需 ADB 破解、无漏洞利用。每个操作都受权限控制并在沙箱中运行。
  • 前台透明性 —— 服务运行时,您的 Android 设备上会始终显示可见的通知。无静默后台访问。
  • 仅本地存储 —— 所有数据(设备信息、日志)均存储在本地 SQLite 数据库中。不会发送任何外部数据。
  • 100% 开源 —— MIT 许可证,代码库完全可审计。可在 GitHub 上检查每一行代码。

可用工具

设备与屏幕

  • 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 - 启动应用或 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 - 在设备上显示网页叠加层

媒体智能

  • aster_index_media_metadata - 提取照片/视频的 EXIF 元数据
  • aster_search_media - 使用自然语言查询搜索照片/视频

主动事件推送 (OpenClaw 回调)

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 负载示例:

{
  "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] <事件名称>
[device_id] <设备 UUID>
[model] <制造商 型号, Android 版本>
[data-key] 值
[data-key] 值
  • [skill] —— 始终为 aster
  • [event] —— 事件名称:smsnotificationdevice_onlinedevice_offlinepairing
  • [device_id] —— 设备的 UUID(使用此 ID 通过 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 | 发件人: +1234567890 | 内容: 要晚点到,大约 20 分钟后
→ 使用 aster_send_sms (deviceId: a1b2c3d4) 向 +1234567890 发送:"没关系,一会儿见!"

[event] sms | [device_id] a1b2c3d4 | 发件人: +1800555 | 内容: 您的验证码是 482913
→ 提取验证码 "482913",使用 aster_input_text (deviceId: a1b2c3d4) 输入

通知 —— 监控并代表用户操作:

[event] notification | [device_id] a1b2c3d4 | 应用: driver | 文本: 您的司机即将到达
→ 使用 aster_speak_tts (deviceId: a1b2c3d4) 说出:"您的 Uber 快到了"

[event] notification | [device_id] a1b2c3d4 | 应用: mShop | 文本: 您的包裹已送达
→ 使用 aster_send_sms (deviceId: a1b2c3d4) 向用户发送:"您的亚马逊包裹刚刚送达"

设备生命周期 —— 管理连接:

[event] device_offline | [device_id] a1b2c3d4
→ 暂停设备 a1b2c3d4 的待处理自动化任务

[event] device_online | [device_id] a1b2c3d4
→ 恢复排队的任务,使用 aster_read_notifications (deviceId: a1b2c3d4) 获取最新通知

配对 —— 批准或告警:

[event] pairing | [device_id] e5f6g7h8 | 型号: Samsung SM-S924B
→ 如果是预期设备:通过控制台 API 批准设备 e5f6g7h8
→ 如果是非预期设备:提醒用户 "未知设备 SM-S924B 正尝试连接"

使用示例

您的移动副驾驶:

"打开 YouTube 并搜索烹饪视频"
→ aster_launch_intent → aster_click_by_id → aster_input_text

"查找我上个月去孟买的照片"
→ 使用 aster_search_media,查询词为 "photos from Mumbai last month"

"截屏并告诉我屏幕上有什么"
→ aster_take_screenshot → aster_get_screen_hierarchy

AI 的专属手机 —— 让它为您代劳:

"给我打电话,告诉我我的航班延误了"
→ 使用 aster_make_call_with_voice,指定号码和文本 "您的航班延误 45 分钟,新登机口 B12",等待 8 秒

"我的快递到了发短信告诉我"
→ aster_read_notifications → aster_send_sms,指定号码和消息

"回复快递员:谢谢,我会在家"
→ aster_send_sms,指定号码和消息

命令

aster start              # 启动服务器
aster stop               # 停止服务器
aster status             # 显示服务器和设备状态
aster dashboard          # 打开网页控制台

aster devices list       # 列出已连接的设备
aster devices approve    # 批准待处理的设备
aster devices reject     # 拒绝设备
aster devices remove     # 移除设备

aster set-openclaw-callbacks  # 配置事件转发到 OpenClaw

系统要求

  • Node.js >= 20
  • 已安装 Aster 应用的任意 Android 设备(您的手机或专用的 AI 设备)
  • 设备和服务器在同一网络(或使用 Tailscale 实现安全的远程访问)

官网: aster.theappstack.in | GitHub: github.com/satyajiit/aster-mcp

19 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 19 ms
Developed with Cursor