Give Your AI Agent Hands: Android Automation via MCP A developer has released app-automating, an open-source MCP server that gives AI agents direct control over Android emulators and physical devices. The project exposes 28 tools across three modules — device lifecycle, screen interaction via Appium and uiautomator2, and a persistent navigation memory backed by SQLite — positioning itself as a capability layer rather than a testing framework. Its navigation memory is described as the piece that distinguishes it from existing adb wrappers, which the developer says give a model hands but no memory. 🔗 github.com/dkmostafa/app-automating https://github.com/dkmostafa/app-automating app-automating is an open-source MCP server that gives an AI agent real control over Android — emulators and physical devices alike. It does three things: That third one is the part that doesn't exist elsewhere. Most tooling in this space is a thin wrapper over adb — it gives a model hands but no memory, so every session starts from zero. 28 tools, three modules: android 10 for the device lifecycle, appium 13 for the screen, navigation memory 5 for the map. It's deliberately not a testing framework. It's a capability layer — the agent decides what the job is. | You want to | The agent does | |---|---| | Test an app | Boots a clean emulator, installs the build, walks the flows, screenshots what broke | | Scrape a mobile-only app | Navigates to the data, reads the view hierarchy, pages through results | | Reproduce a bug | Replays a recorded route to the exact screen, every time | | Explore an unfamiliar app | Maps the screens it finds and builds a navigation graph as it goes | | Automate a repetitive chore | Anything you'd otherwise do by hand, thirty times | If the task involves an Android screen and you'd rather describe it than script it, this is the layer underneath. Pure Python at the core — the server itself is a remote control for other people's tools, and it stays out of their way. | Layer | Stack | |---|---| | MCP server | FastMCP https://github.com/jlowin/fastmcp over STDIO — no sockets, deliberately | | Device control | Appium + the uiautomator2 driver | | Emulator control | The Android SDK directly: adb , emulator , avdmanager , sdkmanager | | Navigation memory | SQLAlchemy + aiosqlite — one local SQLite file, no service to run | | Schemas & config | Pydantic v2 + pydantic-settings | | Tooling | Python 3.12+, uv , pytest , ruff | Under that, the codebase is four-layer Clean Architecture — one vertical slice per module, dependencies pointing inward, and an architecture test in every module that walks the AST and fails the build on a layer violation. More on that later in the post.