# Aster — AI copilot for Android, or give your AI its own phone

> Aster connects any Android to Claude, OpenClaw or MoltBot over MCP. 49 MCP tools, open source, self-hosted — your AI copilot on mobile, or its own phone.

Aster here is the open-source Model Context Protocol server and Android companion app for AI-driven phone control, published on npm as aster-mcp. It is unrelated to Aster DM Healthcare, Aster Data Systems or the ASTER instrument on NASA’s Terra satellite.

Source: https://aster.matterwardlabs.com/ · Part of Aster (https://github.com/satyajiit/aster-mcp) · Last generated 2026-09-13

## What Aster is

Aster is an MCP server plus an Android companion app. It gives an AI assistant — Claude, OpenClaw, MoltBot, ClawdBot, or any MCP client — the ability to see and control an Android phone: take screenshots, read the UI tree, tap and type, read notifications and SMS, send SMS, place calls, take photos, search media, and manage files.

Aster here is the open-source Model Context Protocol server and Android companion app for AI-driven phone control, published on npm as aster-mcp. It is unrelated to Aster DM Healthcare, Aster Data Systems or the ASTER instrument on NASA’s Terra satellite.

Two ways people run it:

1. **Copilot on your own phone.** Your assistant acts on the device you already carry.
2. **A phone of its own.** Plug a spare Android into a charger. The AI watches it, calls you, texts you, and acts without being asked.

## What people ask it

Five example prompts and the tools each one runs. The replies these produce are illustrative; the tool names are exact.

- "Find duplicate photos on my phone and free up space" — `aster_index_media_metadata` → `aster_search_media`
- "Read my notifications — anything urgent?" — `aster_read_notifications`
- "My storage is full. What is eating all the space?" — `aster_analyze_storage` → `aster_find_large_files`
- "Open Maps and find the nearest coffee shop" — `aster_launch_intent` → `aster_input_text` → `aster_click_by_text`
- "If my flight is delayed, call me and tell me the new time" — event forwarding, then `aster_make_call_with_voice`

## What changes when your AI can act

### Today — your AI can talk

- **Chats on WhatsApp and Telegram** — It reads and answers messages for you
- **Drafts email and documents** — It writes on your behalf
- **Schedules and organises** — It keeps track of your time
- **Writes and reviews code** — It builds software alongside you

"Set an alarm for 6 AM" — and then you pick up the phone and do it yourself.

### With Aster — your AI can act

- **Taps, swipes and types on the phone** — Full screen control through the accessibility service
- **Takes photos and records video** — Either camera, on request or when an event fires
- **Reacts to events as they happen** — New SMS, notifications and device status, pushed to your agent
- **Reads notifications, sends SMS, places calls** — Including a call that speaks a message out loud

"Set an alarm for 6 AM" — and it just does it.

## What it can do

The eight capability groups the home route leads with. Tool names are the callable, prefixed ones; the app-automation and companion-face rows are on-device actions an MCP client cannot call — see https://aster.matterwardlabs.com/tools.md.

### Screen control

Read the live UI tree with aster_get_screen_hierarchy, then tap, swipe, type and navigate. aster_take_screenshot sends back what the phone is showing right now.

### App automations, with a human in the loop

When an automation run hits something only you should do, Aster puts it on screen and waits: a choice, an approve-or-deny card, a sign-in wall, a payment hand-off. These are on-device actions over Binder IPC — the runner is OpenAlly, not an MCP client.

### Media intelligence

aster_index_media_metadata builds a local index of the camera roll; aster_search_media queries it by date, place and content without uploading a single photo.

### Files and storage

List, read, write and delete any path the app can reach — the file tools are not folder-scoped, and withholding all-files access is what bounds them (see /security). aster_analyze_storage and aster_find_large_files explain where the free space went.

### Calls, SMS and voice

aster_send_sms and aster_make_call do the obvious thing. aster_make_call_with_voice dials a number, turns on the speaker and speaks a message through text to speech.

### Notifications and events

aster_read_notifications reads the shade on demand. Event forwarding pushes new SMS, notifications, calls and device-status changes to a webhook, so the assistant acts without being asked.

### Camera and video

aster_take_photo and aster_record_video run either camera on request or on an event. A charging spare phone becomes a pet cam, a doorbell or a parcel watch.

### Companion face

An animated on-screen companion that lip-syncs to text-to-speech and reacts to whatever is playing, driven by an on-device event classifier that never sends audio anywhere. Like App automations, this is driven on-device by OpenAlly over Binder IPC — the companion_overlay_* verbs are not among the 49 aster_* tools.

## Quick facts

- **What it is**: An MCP server plus an Android companion app that lets an AI assistant see and control a phone.
- **Server**: npm `aster-mcp`, Node.js >= 20
- **Phone**: Android 8.0+ (API 26), no root required
- **Tools**: 49 MCP tools, all namespaced `aster_*`
- **Clients**: Any MCP client: Claude Code, Claude Desktop, AnythingLLM, and the open-source agent clients OpenClaw, MoltBot and ClawdBot
- **Ports**: 5987 device websocket, 5988 api + mcp http, 5989 web dashboard
- **Licence**: MIT, free and open source
- **Hosting**: Self-hosted on your own machine. No account, no telemetry, no vendor relay.

## How a command reaches the phone

The phone never accepts a connection — it dials out and holds the socket open, which is why Aster works behind a home router with nothing forwarded. Three transports, and which one you use decides which tool names your client sees.

1. **Remote WebSocket** (Default) — The phone holds a WebSocket to the Node server on your machine; your AI client speaks MCP over HTTP to that same server. Tools it sees: aster_* (49 tools).
2. **On-device MCP server** (Standalone) — The app runs its own Streamable-HTTP MCP server (Ktor, default port 8080) on the phone. No desktop server involved. Tools it sees: unprefixed actions (77 in the on-device catalog).
3. **Binder IPC** (Same device) — An agent running on the same phone — such as OpenAlly — calls Aster directly over Android Binder IPC, with no network hop. Tools it sees: unprefixed actions (77 in the on-device catalog).

Each transport is walked end to end, with measured latencies, at https://aster.matterwardlabs.com/architecture.md.

## What it protects, and what it does not

Aster's own security claims, protections and admitted limits in one list. Each line is a section heading at https://aster.matterwardlabs.com/security.md, where it is explained in full.

**What it protects:**

- No root, no ADB exploit
- Self-hosted, no account, no telemetry
- An unapproved device connects, but cannot be commanded
- A kill switch you can always reach
- Banking and payment apps are refused by default

**What it does not:**

- The file tools are not path-scoped — know this before you approve
- The device link is plain ws:// by default

Both limits are fixable, and https://aster.matterwardlabs.com/security.md carries the 6 hardening steps plus the reason for each of the 32 Android permissions.

## The Android app on its own

The companion is a normal Android app, and it does not need the server to be useful. Sideload it and the phone can serve MCP on its own: the app embeds a Streamable-HTTP MCP server and exposes 77 on-device actions to any client that can reach it. The Node server is what adds multi-device management, the approval gate and the 49 prefixed `aster_*` tools — it is not what makes the phone controllable.

### Serves MCP from the phone

An embedded Ktor server speaks Streamable-HTTP MCP on port 8080 by default. Point a client on your LAN at the handset and it sees 77 unprefixed actions — no desktop, no Node, no account.

### Answers apps on the same device

An agent already running on the phone binds the service directly over Android Binder IPC. No network hop at all, so it keeps working with the radio off.

### Runs its own console

The app carries a device dashboard, a guided pass that requests every permission in one go, a live log of each tool call with its arguments and result, and a panel for the on-device server.

- **Version**: 1.7.1, the current GitHub release
- **Requires**: Android 8.0+ (API 26). Root is not required and is not used.
- **Distribution**: A signed APK on GitHub Releases. It is not on the Google Play Store, so Android will ask you to allow installs from your browser or file manager the first time.
- **Licence**: MIT, same as the server. The Android source is in the same repository.

Download: https://github.com/satyajiit/aster-mcp/releases/latest

## What ships with it

Aster ships an Android companion app and a web dashboard at http://localhost:5989 for device approval, file browsing, live screen control and MCP tool testing. Both ship in a dark and a light theme.

## Installing it

Three commands and a sideload. Install aster-mcp from npm on any machine running Node >= 20, start the server, install the companion app on Android 8.0+ (API 26), approve the device, and point your MCP client at http://localhost:5988/mcp. MIT licensed, self-hosted, no account and no telemetry. Root is not required.

## Where to go next

- [Use cases — what people actually ask their AI to do](https://aster.matterwardlabs.com/use-cases/) — Real prompts people give Aster: free up storage, find duplicate photos, read notifications, call someone and speak a message, auto-reply while driving.
- [Give your AI its own phone](https://aster.matterwardlabs.com/ai-phone/) — Plug a spare Android into a charger and give your AI its own number. It watches notifications, calls you, texts you and acts without being asked.
- [All 49 Aster MCP tools, with arguments](https://aster.matterwardlabs.com/tools/) — All 49 aster_* MCP tools with their exact names and arguments, plus the separate catalogue of 77 unprefixed actions the Android app dispatches on-device.
- [Architecture — how a command reaches the phone](https://aster.matterwardlabs.com/architecture/) — How one command travels from your AI to the phone, and the three transports Aster speaks: remote WebSocket, on-device Ktor MCP server, and Binder IPC.
- [Is Aster safe? No root, self-hosted, zero telemetry](https://aster.matterwardlabs.com/security/) — Self-hosted with zero telemetry and no root: device approval gate, screen-control kill switch, banking apps blocked, and where the link is not encrypted.
- [Set up Aster — MCP server, Android app, AI client](https://aster.matterwardlabs.com/setup/) — Install aster-mcp from npm, run aster start, sideload the Android app, approve the device and point Claude Code at http://localhost:5988/mcp.
- [FAQ and troubleshooting](https://aster.matterwardlabs.com/faq/) — Device stuck on pending, ws:// versus wss://, which ports to open, no audio on a voice call, why Aster has no chat screen, and how it compares to scrcpy.
