Skill
Your 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-h
Your 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-h
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Your 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
Install the Aster Android app on any Android device — your daily phone or a spare one for your AI — from Releases and connect to the server address shown in terminal.
Configure MCP in your
.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])
— Incoming SMSsms
[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?
— App notification (deduplicated against SMS)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
— Approved device came onlinedevice_online
[skill] aster [event] device_online [device_id] a1b2c3d4-5678-90ab [model] samsung SM-S938B, Android 15 [data-status] connected
— Device went offlinedevice_offline
[skill] aster [event] device_offline [device_id] a1b2c3d4-5678-90ab [model] samsung SM-S938B, Android 15 [data-status] disconnected
— New device needs approval (use pairing
[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 dashboardaster 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
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.