android-jev
MCP server that drives an Android phone over adb: it reads the screen, asks Jev the next action, acts, and reports if the goal was met.
Overview
android-jev lets any MCP client control an Android phone through a single run_task tool. You give a goal such as open the Play Store or turn on aeroplane mode; inside, it reads the phone's screen (accessibility tree, with a macOS Vision picture fallback), asks Jev what to do next, does it, checks the result and reports whether the goal was achieved and in how many steps. Everything runs over adb and nothing is installed on the phone.
It is verified only on a Pixel 8a running Android 17, so other phones are untested. It runs on macOS with Python 3.11+ and uv; on Linux the loop works with the accessibility tree but without the picture fallback. The README stresses key hygiene: the key never appears in state, logs, run folders or transcripts.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which on-screen control should be tapped or what action taken next?(inferred) | — |
| Yes / no | Has the goal been achieved?(inferred) | yes · no |
How it works
- MCP client calls run_task with a goal
- Read the screen via adb accessibility dump (or picture fallback)
- Jev picks the next action
- Perform it and check the result
- Repeat until achieved or stop, then report honestly
Strengths
- Nothing installed on the phone
- Honest achieved/not-achieved reporting
- Key never written to logs or state
Caveats
- Verified on one phone model only
- Picture fallback is macOS-only
- Needs USB debugging and a cable
Getting started
Enable USB debugging, confirm with adb devices, then clone the repo and install with uv (uvx android-jev).At a glance
- Type
- Service
- Status
- prototype
- Language
- Python
- Runtime
- MCP server (adb)
- Has code
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
Whichever way it reaches the server, the key never appears in a state, a log, a run folder or a transcript.
logicrw/awesome-jev-projects
Frequently asked questions
What does Jev decide?
The next action on the phone screen toward the goal.
Do I install anything on the phone?
No, everything runs over adb.
Which phones work?
Only a Pixel 8a on Android 17 has been measured; others are untested.
Related projects
Zero-dependency Node library with MCP and ACP adapters adding Jev decisions and gated computer use beside any LLM agent.
MCP serverbetaTypeScriptRust MCP server for desktop control via accessibility trees, with an optional decision model (Jev or compatible) for small choices.
MCP serverproductionRustRust CLI for desktop computer use via accessibility trees, with optional jev-desktop scripts letting Jev pick the control and action.
Agent skillbetaRustmacOS computer-use package: a background app driver for any agent, plus a loop where Jev picks each UI action for a bounded subtask.
ProjectbetaPythonLocal stdio MCP server that executes whole browser and macOS goals with a Jev-driven observe-decide-act loop.
MCP serverbetaTypeScriptMCP server that lets agents observe and control Android phones over ADB, with Jev picking controls and judging goal completion.
MCP serverbetaTypeScript