asterYour AI CoPilot on Mobile ā or give your AI its own phone. Make calls, send SMS, speak via TTS on speakerphone, automate UI, manage files, search media, and 40+ more tools via MCP. Open source, self-hosted, privacy-first.
Install via ClawdBot CLI:
clawdbot install satyajiit/asterYour AI CoPilot for any Android device using MCP (Model Context Protocol) ā or give your AI a dedicated phone and let it call, text, and act on its own. Fully open source and privacy-first ā your data never leaves your network.
Website: aster.theappstack.in | GitHub: github.com/satyajiit/aster-mcp
For screenshots of the Android app and web dashboard, visit aster.theappstack.in.
npm install -g aster-mcp
aster start
.mcp.json:{
"mcpServers": {
"aster": {
"type": "http",
"url": "http://localhost:5988/mcp"
}
}
}
Aster is built with a security-first, privacy-first architecture:
aster_list_devices - List connected devicesaster_get_device_info - Get device details (battery, storage, specs)aster_take_screenshot - Capture screenshotsaster_get_screen_hierarchy - Get UI accessibility treeaster_input_gesture - Tap, swipe, long pressaster_input_text - Type text into focused fieldaster_click_by_text - Click element by textaster_click_by_id - Click element by view IDaster_find_element - Find UI elementsaster_global_action - Back, Home, Recents, etc.aster_launch_intent - Launch apps or intentsaster_list_packages - List installed appsaster_read_notifications - Read notificationsaster_read_sms - Read SMS messagesaster_send_sms - Send an SMS text message to a phone numberaster_get_location - Get GPS locationaster_execute_shell - Run shell commands in Android app sandbox (no root, restricted to app data directory and user-accessible storage, 30s timeout, 1MB output limit)aster_list_files - List directory contentsaster_read_file - Read file contentaster_write_file - Write to fileaster_delete_file - Delete fileaster_analyze_storage - Storage analysisaster_find_large_files - Find large filesaster_search_media - Search photos/videos with natural languageaster_get_battery - Battery infoaster_get_clipboard / aster_set_clipboard - Clipboard accessaster_show_toast - Show toast messageaster_speak_tts - Text-to-speechaster_vibrate - Vibrate deviceaster_play_audio - Play audioaster_post_notification - Post notificationaster_make_call - Initiate phone callaster_make_call_with_voice - Make a call, enable speakerphone, and speak AI text via TTS after pickupaster_show_overlay - Show web overlay on deviceaster_index_media_metadata - Extract photo/video EXIF metadataaster_search_media - Search photos/videos with natural language queriesAster can push real-time events from the phone to your AI agent via webhook. When enabled, these events arrive as HTTP POST payloads ā your agent doesn't need to poll, the phone tells you what's happening.
Configure via the dashboard at /settings/openclaw or CLI: aster set-openclaw-callbacks.
Events are sent as HTTP POST to the configured OpenClaw endpoint (/hooks/agent by default). The AI reads the message field. All event context is packed into message using standardized [key] value tags.
Example raw HTTP POST payload for a notification event:
{
"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 ā structured event text with standard headers (this is what the AI reads)wakeMode ā always "now" (wake the agent immediately)deliver ā always true for real events, false for test pingschannel / to ā delivery channel and recipient, configured in the dashboardEvery event follows a standardized structure with 4 fixed headers and [data-*] fields:
[skill] aster
[event] <event_name>
[device_id] <device_uuid>
[model] <manufacturer model, Android version>
[data-key] value
[data-key] value
[skill] ā always aster[event] ā event name: sms, notification, device_online, device_offline, pairing[device_id] ā UUID of the device (use this to target the device with Aster tools)[model] ā device manufacturer, model, and OS[data-*] ā event-specific fields, each prefixed with data- (e.g. [data-app], [data-sender])sms ā Incoming 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 ā App notification (deduplicated against SMS)
[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 ā Approved device came online
[skill] aster
[event] device_online
[device_id] a1b2c3d4-5678-90ab
[model] samsung SM-S938B, Android 15
[data-status] connected
device_offline ā Device went offline
[skill] aster
[event] device_offline
[device_id] a1b2c3d4-5678-90ab
[model] samsung SM-S938B, Android 15
[data-status] disconnected
pairing ā New device needs approval (use [device_id] to approve)
[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
When you receive a message with [skill] aster, parse the [event] and [device_id] to determine what happened and which device to act on.
SMS ā reply, extract info, or escalate:
[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
Notifications ā monitor and act on behalf of user:
[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"
Device lifecycle ā manage connectivity:
[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
Pairing ā approve or alert:
[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"
Your CoPilot on Mobile:
"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's own phone ā let it act for you:
"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
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
Website: aster.theappstack.in | GitHub: github.com/satyajiit/aster-mcp
Generated Feb 24, 2026
Aster can send and read SMS messages, enabling AI agents to handle customer inquiries or appointment reminders. Businesses can automate responses to common questions, confirm bookings, or send updates without manual intervention, improving efficiency and response times.
Using tools like aster_list_devices and aster_get_device_info, IT teams can remotely monitor company-owned Android devices for battery health, storage usage, and installed apps. This helps in proactive maintenance, ensuring devices are secure and operational for employees.
Developers can leverage Aster's input and interaction tools to automate UI testing on Android apps. By simulating taps, swipes, and text input, it reduces manual testing efforts, catches bugs early, and ensures app functionality across different devices and screen hierarchies.
Aster's TTS, call-making, and notification reading capabilities allow AI agents to act as personal assistants. They can help users with tasks like making phone calls, reading messages aloud, or managing daily reminders, enhancing accessibility and independence for those with mobility or vision impairments.
Content creators can use Aster to search and organize photos/videos on Android devices using natural language queries. Tools like aster_search_media and aster_index_media_metadata help quickly find specific media files, streamline editing workflows, and manage storage efficiently.
Offer Aster as a hosted service with added features like analytics dashboards and premium support. Small businesses pay a monthly fee to automate customer interactions via SMS and calls, reducing labor costs and improving customer engagement.
Provide consulting to enterprises for integrating Aster into their existing systems, such as CRM or IoT platforms. Revenue comes from project-based fees for setup, customization, and ongoing maintenance, targeting industries needing tailored mobile automation solutions.
Monetize by offering enterprise licenses with advanced security features, priority updates, and dedicated support. This model appeals to large organizations requiring compliance and reliability, while the core remains open source to foster community adoption and contributions.
š¬ Integration Tip
Ensure the Aster server is running locally and MCP is configured in .mcp.json before attempting to use tools, and manually approve devices via the dashboard for security.
Manage torrents with qBittorrent. Use when the user asks to "list torrents", "add torrent", "pause torrent", "resume torrent", "delete torrent", "check download status", "torrent speed", "qBittorrent stats", or mentions qBittorrent/qbit torrent management.
Search indexers and manage Prowlarr. Use when the user asks to "search for a torrent", "search indexers", "find a release", "check indexer status", "list indexers", "prowlarr search", "sync indexers", or mentions Prowlarr/indexer management.
Interact with Uptime Kuma monitoring server. Use for checking monitor status, adding/removing monitors, pausing/resuming checks, viewing heartbeat history. Triggers on mentions of Uptime Kuma, server monitoring, uptime checks, or service health monitoring.
Backup Clawdbot workspace and config to GitHub with git-crypt encryption. Use for daily automated backups or manual backup/restore operations.
Query and monitor Unraid servers via the GraphQL API. Use when the user asks to 'check Unraid', 'monitor Unraid', 'Unraid API', 'get Unraid status', 'check disk temperatures', 'read Unraid logs', 'list Unraid shares', 'Unraid array status', 'Unraid containers', 'Unraid VMs', or mentions Unraid system monitoring, disk health, parity checks, or server status.
Manage TrueNAS SCALE via API. Check pool health, manage datasets and snapshots, monitor alerts, control services, manage apps, orchestrate Dockge container stacks, and manage bookmarks. Use when the user asks about their NAS, storage, backups, containers, bookmarks, or homelab services.