Open source · MIT licensed · v0.1.16

Aster gives your AI assistant
hands on an Android phone

Aster connects an Android phone to Claude, OpenClaw or MoltBot — AI agent clients that speak the Model Context Protocol. Run it as the copilot for the phone in your pocket, or plug a spare handset into a charger and give your AI its own device — one that calls, texts and acts on its own.

Open source, self-hosted, and published to npm as aster-mcp. Unrelated to Aster DM Healthcare or the ASTER satellite instrument.

What people ask for

you

Find duplicate photos on my phone and free up space

aster_index_media_metadata → aster_search_media

Claude

Found 47 duplicate sets taking up 1.2 GB. Want me to keep the best copy of each and delete the rest?

In one screen

Quick facts

Everything worth knowing before you install it, with nothing rounded off.

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.

The missing piece

You gave your AI a voice.
Now give it hands.

Your assistant already reads, writes and plans for you. It has been stuck behind a text box, unable to touch the one device that runs your day.

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.

You already trust AI with your email, your calendar and your code. Aster lets it touch your phone — or better yet, its own.

Give your AI its own phone

How it works

Three ways 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. Which transport you get decides which tool names your client sees — and that is the one detail worth reading twice.

  1. Default

    Remote WebSocket

    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. Standalone

    On-device MCP server

    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. Same device

    Binder IPC

    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)

The architecture page walks one command end to end through each transport, with the real latencies.

Capabilities

49 tools. Your phone, or its own.

Every tool an MCP client sees is namespaced aster_*, so nothing here collides with the other servers you have connected. Eight capability groups are below; the full list of 49 tools lives on the tools page.

  • 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.

Before you install it

What it protects, and what it does not

Handing an AI a phone is a real grant, so here is the short version with the awkward parts left in. Nothing below is a summary of a summary — each line is the heading of a section on the security page that explains it 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 the security page says how — withhold all-files access, and put the link on a private mesh before it leaves your LAN.

Read the full security page — 32 permissions with the reason for each, and 6 hardening steps.

App and dashboard

Companion apps included

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.

  • The Aster app connection screen: a server address and port field, a pairing code, and a Connect button with the current link state underneath.

    Connection setup

  • The app home screen listing the running services, the connection status, battery and storage readouts, and shortcuts to permissions and logs.

    Device dashboard

  • A chronological log of tool calls received from the assistant, each row showing the tool name, its arguments and whether it succeeded.

    Tool call logs

  • The permissions screen with each Android runtime and special-access grant listed and its state, plus the button that requests all of them in one guided pass.

    Permissions

  • The animated companion face drawn as an overlay on the home screen, mouth open mid-sentence while text to speech plays.

    Companion face

  • The on-device MCP server panel showing the local Ktor server switched on, its listening address, and the tool count it exposes.

    On-device MCP

The Android app

The phone half works 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.

Download the companion app

Version 1.7.1 for Android 8.0+ (API 26). Sideloaded from GitHub, not the Play Store.

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.

Follow the author

Aster is built by Satyajit Pradhan. Tutorials, demos and release notes go up on YouTube.

Subscribe on YouTube

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.