{"slug": "a-native-mac-panel-for-the-android-emulator-with-an-mcp-server-built-in", "title": "A native Mac panel for the Android Emulator, with an MCP server built in", "summary": "A developer released Oh My Android, an MIT-licensed native macOS app that docks beside the Android Emulator and bundles 48 quick actions across 9 groups, including font-scale toggles, a dp-based layout inspector, a Figma overlay, a TalkBack accessibility audit, and a read-only SharedPreferences/SQLite data inspector. The app ships an embedded stdio MCP server, ohmyandroid-mcp, exposing 18 tools and 3 prompts with a 14,550-byte tool list, 1dp-per-pixel screenshots, and a user-controlled Off/Read only/Full control permission switch read on every call. It is distributed via a Homebrew tap and signed zip, requires macOS 26 Tahoe on Apple silicon, and is listed in the MCP Registry as io.github.ateymoori/oh-my-android.", "body_md": "Most of our Android work happens on a Mac with the emulator open next to Android Studio. Over time we collected a pile of adb one-liners for the small checks we run all day. Switch to dark mode. Bump the font scale. Look at spacing in dp. Peek at what an app wrote to SharedPreferences.\n\nOh My Android is what we built to stop retyping them. It is a native macOS app that docks next to the Android Emulator and puts those checks one click away. It also ships an MCP server, so a coding agent can see the emulator screen and act on it.\n\nThe code is on GitHub under the MIT license. The repo was created on September 24, 2026, and the latest release is v0.4.6 from October 19. That makes 8 releases so far.\n\nYou can install it from our own Homebrew tap:\n\n```\nbrew install --cask ateymoori/tap/oh-my-android\n```\n\nThis is our tap, not the official homebrew-cask repo. If you prefer, there is also a signed and notarized zip on the releases page.\n\nYou need macOS 26 Tahoe or later on Apple silicon, plus the Android SDK. Android Studio gives you the SDK. If you don't want the IDE, the command line tools work too:\n\n```\nbrew install --cask android-commandlinetools\n```\n\nThe panel has 48 actions in 9 groups:\n\nFont size steps through 0.85, 1.0, 1.15, 1.3, 1.5, 1.8 and 2.0. That makes it quick to see where a layout breaks at large text sizes. Android Studio's Device UI shortcuts cover some of these toggles on API 33 and up. We wanted them in one place next to the emulator window, together with the rest of the checks below.\n\nThe Layout Inspector works on any app, not only the ones you build. It reads the uiautomator tree and shows sizes and gaps in dp. You can lay an 8 dp grid over the screen and pick colors.\n\nThere is also a Figma overlay. Drop in a frame at 1x, 2x, 3x or fit, then set the opacity. Difference mode shows where the build drifts from the design, so you don't have to compare two windows by eye.\n\nPress Shift-Cmd-A to run a TalkBack audit on the current screen. It numbers each stop in approximate TalkBack order. It also flags unlabeled buttons, images without a content description, and touch targets smaller than 48x48 dp.\n\nIt is a fast first pass. It doesn't replace testing with TalkBack turned on, but it catches the common misses before a real screen reader session.\n\nFor debuggable apps, the Data Inspector shows SharedPreferences and SQLite databases. It goes through run-as and is read-only. For SQLite it loads the first 500 rows of a table. That is enough to check that a write landed without pulling files off the device.\n\nThe app bundle includes an MCP server called `ohmyandroid-mcp`. It speaks stdio, has no dependencies and makes no network calls. It exposes 18 tools and 3 prompts: `accessibility_review`, `ui_matrix` and `debug_crash`.\n\nWe kept the tool list small on purpose. The tools/list reply is 14,550 bytes, which is under 4k tokens. That is all the context an agent spends on the tool list before it does anything.\n\nScreenshots are scaled so 1 pixel equals 1 dp, using 160/dpi. When the agent measures something in a screenshot, the number it reads is already in dp. The UI tree comes back as one line per element:\n\n```\n[23] Button \"Sign in\" #sign_in @16,700 379x48 tap\n```\n\nThat line has an index, the role, the label, the resource id, the position, the size in dp and the action the agent can take. It is enough for an agent to find the Sign in button and tap it.\n\nThe app has a switch for what agents may do: Off, Read only or Full control. The server reads that setting from the app's preferences on every call, so a change applies right away without restarting anything. Tools that can lose data are marked destructive, so the agent asks you before it runs them.\n\nThere are setup commands for Claude Code, Codex and Gemini CLI, and install buttons for Cursor and VS Code. There is also a Claude Code plugin and a .mcpb extension for Claude Desktop. The server is listed in the MCP Registry as `io.github.ateymoori/oh-my-android`.\n\nThere is no telemetry and no account. The app checks for updates once a day through Sparkle, and you can turn that off. An update only installs if it carries the project's EdDSA signature and the same Developer ID as the app you have.\n\nA panel that sits open all day should not drain the battery, so the app does not poll. It listens to the `adb track-devices` stream to see devices come and go. Each refresh is one batched `adb shell` read. The only timer is a 1 Hz docking timer, and it runs only while an emulator is running and the panel is visible.\n\nThe app is built with SwiftUI and AppKit. It compiles under Swift 6 strict concurrency with warnings treated as errors. It is about 6,600 lines of Swift and has one dependency, Sparkle 2.10.0.\n\nStrict concurrency means the compiler checks how work moves between threads. With many adb calls running in the background, we wanted those mistakes to fail the build rather than show up later.\n\nTo save you a download: it runs only on Apple silicon Macs with macOS 26 or later. There is no Intel, Windows or Linux build. It does not mirror a device screen, and it does not work with iOS simulators or devices.\n\nAndroid Weekly featured it in issue #747. If you try it and something breaks or feels missing, open an issue on GitHub.\n\nOh My Android is built by [Royan AB](https://royan.se), and the code lives at [github.com/ateymoori/oh-my-android](https://github.com/ateymoori/oh-my-android).\n\nWritten with help from an AI assistant.", "url": "https://wpnews.pro/news/a-native-mac-panel-for-the-android-emulator-with-an-mcp-server-built-in", "canonical_source": "https://dev.to/royanlabs/a-native-mac-panel-for-the-android-emulator-with-an-mcp-server-built-in-3hf8", "published_at": "2026-10-31 09:35:04+00:00", "updated_at": "2026-10-31 09:49:53.412331+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "developer-tools", "ai-tools"], "entities": ["Oh My Android", "ohmyandroid-mcp", "Android Emulator", "Android Studio", "Claude Code", "Codex", "Gemini CLI", "MCP Registry"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/a-native-mac-panel-for-the-android-emulator-with-an-mcp-server-built-in", "markdown": "https://wpnews.pro/news/a-native-mac-panel-for-the-android-emulator-with-an-mcp-server-built-in.md", "text": "https://wpnews.pro/news/a-native-mac-panel-for-the-android-emulator-with-an-mcp-server-built-in.txt", "jsonld": "https://wpnews.pro/news/a-native-mac-panel-for-the-android-emulator-with-an-mcp-server-built-in.jsonld"}}