<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Alon N</title>
    <description>The latest articles on DEV Community by Alon N (@alon_n_ecceca6aa868e0761d).</description>
    <link>https://dev.to/alon_n_ecceca6aa868e0761d</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4117879%2Fd7bc84bf-2d19-450b-964d-b72add1b1fd1.png</url>
      <title>DEV Community: Alon N</title>
      <link>https://dev.to/alon_n_ecceca6aa868e0761d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alon_n_ecceca6aa868e0761d"/>
    <language>en</language>
    <item>
      <title>How an AI agent can use Android apps that have no API (five routes in 2026)</title>
      <dc:creator>Alon N</dc:creator>
      <pubDate>Sun, 18 Oct 2026 16:53:42 +0000</pubDate>
      <link>https://dev.to/alon_n_ecceca6aa868e0761d/how-an-ai-agent-can-use-android-apps-that-have-no-api-five-routes-in-2026-2gfe</link>
      <guid>https://dev.to/alon_n_ecceca6aa868e0761d/how-an-ai-agent-can-use-android-apps-that-have-no-api-five-routes-in-2026-2gfe</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I work on &lt;a href="https://phonebox.dev" rel="noopener noreferrer"&gt;Phonebox&lt;/a&gt;, which is the fifth option below. The other four are Google's or open source, and I've tried to be straight about what each can and can't do.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A lot of the apps people want an agent to use have no API: food delivery, rides, banking, most of what's on your phone. So how does an AI agent actually get work done in them? In October 2026 there are five routes, and which one works depends on who you are and which app it is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five ways, best first
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Works when&lt;/th&gt;
&lt;th&gt;Who can use it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. The app's API or MCP server&lt;/td&gt;
&lt;td&gt;The app publishes one&lt;/td&gt;
&lt;td&gt;Anyone with access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Android AppFunctions&lt;/td&gt;
&lt;td&gt;The app adopted it; Android 16+; experimental&lt;/td&gt;
&lt;td&gt;System agents such as Gemini; Gemini support in private preview&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Gemini doing it for you&lt;/td&gt;
&lt;td&gt;Select food, grocery and ride apps; Pixel 10, Galaxy S26; US and Korea&lt;/td&gt;
&lt;td&gt;The phone's owner, who taps the final order button&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. An agent framework on your own phone&lt;/td&gt;
&lt;td&gt;You connect a phone or emulator over ADB&lt;/td&gt;
&lt;td&gt;Developers; Play bans autonomous agents built on accessibility&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5. An agent on its own cloud phone&lt;/td&gt;
&lt;td&gt;Any app a person can use&lt;/td&gt;
&lt;td&gt;Any agent over MCP, CLI or API&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://developer.android.com/ai/appfunctions" rel="noopener noreferrer"&gt;AppFunctions&lt;/a&gt;&lt;/strong&gt; is the clean future: apps annotate functions with &lt;code&gt;@AppFunction&lt;/code&gt;, and agents call them directly, on the device. Google calls it "the mobile equivalent of tools within the Model Context Protocol". But it's experimental, needs Android 16, and only works for apps that adopted it, called by a limited set of system agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.google/innovation-and-ai/products/gemini-app/android-multi-step-tasks/" rel="noopener noreferrer"&gt;Gemini's in-app tasks&lt;/a&gt;&lt;/strong&gt; (beta since February 2026) can run multi-step tasks in DoorDash, Uber, Lyft, Instacart and a few others, in a virtual window on the phone. It stops before the buy button and asks you to tap it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accessibility-based agents&lt;/strong&gt; like &lt;a href="https://github.com/droidrun/mobilerun" rel="noopener noreferrer"&gt;Mobilerun&lt;/a&gt;, &lt;a href="https://github.com/minitap-ai/mobile-use" rel="noopener noreferrer"&gt;mobile-use&lt;/a&gt; and &lt;a href="https://github.com/TencentQQGYLab/AppAgent" rel="noopener noreferrer"&gt;AppAgent&lt;/a&gt; run an observe-act loop on a phone you connect over ADB. Great for experiments. Note that &lt;a href="https://support.google.com/googleplay/android-developer/answer/10964491" rel="noopener noreferrer"&gt;Google Play's policy&lt;/a&gt; prohibits shipping an app that uses AccessibilityService to autonomously plan and execute actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  How an agent uses the screen
&lt;/h2&gt;

&lt;p&gt;Whatever runs the phone, the loop is the same:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Observe.&lt;/strong&gt; Read the screen as a list of elements with their labels (plus a screenshot).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Act.&lt;/strong&gt; Tap by visible text, type, swipe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check.&lt;/strong&gt; Read the new screen and confirm the result before the next step.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Reading text rather than pixels is what makes it hold up: "tap Sign in" still works after a redesign moves the button. This is what an agent reads on a Phonebox phone:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;snapshot snp_4f2k7m3q6z3a
app com.android.launcher3
keyboard hidden
screen 1080x2400
[1] EditText "Search apps" #search clickable editable (540,250)
[2] TextView "Chrome" #icon clickable (200,1900)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Where the common tasks draw the line
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Food and rides.&lt;/strong&gt; Let the agent build the order, then confirm and pay yourself. Gemini works the same way: it stops before the buy button.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp.&lt;/strong&gt; Messaging customers belongs on the &lt;a href="https://developers.facebook.com/docs/whatsapp/messaging-limits" rel="noopener noreferrer"&gt;WhatsApp Business Platform&lt;/a&gt;: opt-in, templates outside the 24-hour window, and a limit that starts at 250 people a day. &lt;a href="https://www.whatsapp.com/legal/terms-of-service" rel="noopener noreferrer"&gt;WhatsApp's Terms&lt;/a&gt; prohibit "bulk messaging, auto-messaging, auto-dialing, and the like" from regular and Business app accounts, and it bans accounts for it. An agent doing a few user-directed things in your own account isn't explicitly addressed; treat that as a grey area, never as a way to send in bulk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accounts.&lt;/strong&gt; Sign in only to accounts you own or may use. When an app wants a one-time code, a person should enter it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The fifth route
&lt;/h2&gt;

&lt;p&gt;That's the gap Phonebox fills: a cloud Android phone the agent drives over MCP, CLI or API, which keeps its apps and sign-ins between sessions, with nothing attached to your machine. When a step needs a person, such as a code or a payment, the agent sends a live view link and waits.&lt;/p&gt;




&lt;p&gt;Originally published on &lt;a href="https://phonebox.dev/guides/android-automation-with-ai" rel="noopener noreferrer"&gt;phonebox.dev&lt;/a&gt;. If you've found another route that works for apps with no API, I'd like to hear it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>android</category>
      <category>automation</category>
      <category>agents</category>
    </item>
    <item>
      <title>What is agentic testing? A practical definition for mobile app teams</title>
      <dc:creator>Alon N</dc:creator>
      <pubDate>Sun, 18 Oct 2026 16:52:54 +0000</pubDate>
      <link>https://dev.to/alon_n_ecceca6aa868e0761d/what-is-agentic-testing-a-practical-definition-for-mobile-app-teams-5a8j</link>
      <guid>https://dev.to/alon_n_ecceca6aa868e0761d/what-is-agentic-testing-a-practical-definition-for-mobile-app-teams-5a8j</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I work on &lt;a href="https://phonebox.dev" rel="noopener noreferrer"&gt;Phonebox&lt;/a&gt;, which gives AI agents cloud Android phones. This post is about the testing approach, not the product; the last section shows one way to try it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Agentic testing" is on every testing vendor's homepage this year, and the definitions don't quite agree. Here's a practical one, from a mobile point of view.&lt;/p&gt;

&lt;h2&gt;
  
  
  The definition
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Agentic testing&lt;/strong&gt; means an AI agent runs the test: you state a goal in plain language, and the agent decides each next action from what it observes on screen, acts, checks the result and adapts until the goal passes or fails.&lt;/p&gt;

&lt;p&gt;That separates it from two things it often gets confused with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scripted testing:&lt;/strong&gt; the steps are fixed in advance, in Espresso, UI Automator, Appium or Maestro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-assisted testing:&lt;/strong&gt; AI writes or repairs a script (Copilot writing Espresso, self-healing locators), and the script then runs as usual.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.tricentis.com/learn/agentic-testing" rel="noopener noreferrer"&gt;Tricentis&lt;/a&gt;, &lt;a href="https://momentic.ai/blog/agentic-testing-guide" rel="noopener noreferrer"&gt;Momentic&lt;/a&gt;, &lt;a href="https://katalon.com/resources-center/blog/what-is-agentic-qa-the-complete-guide-for-2026" rel="noopener noreferrer"&gt;Katalon&lt;/a&gt; and &lt;a href="https://autify.com/blog/agentic-testing" rel="noopener noreferrer"&gt;Autify&lt;/a&gt; all draw the line roughly here. &lt;a href="https://www.forrester.com/blogs/the-autonomous-testing-platform-wave-q4-2025-is-out/" rel="noopener noreferrer"&gt;Forrester&lt;/a&gt; calls the category "autonomous testing platforms" and doesn't use the word "agentic" at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three ways to automate a UI test
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Scripted&lt;/th&gt;
&lt;th&gt;AI-assisted&lt;/th&gt;
&lt;th&gt;Agentic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who decides the steps&lt;/td&gt;
&lt;td&gt;The engineer, in code&lt;/td&gt;
&lt;td&gt;AI writes the code; it runs like any script&lt;/td&gt;
&lt;td&gt;The agent, at run time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When the UI changes&lt;/td&gt;
&lt;td&gt;The test breaks&lt;/td&gt;
&lt;td&gt;AI repairs the locator&lt;/td&gt;
&lt;td&gt;The agent finds another way&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeatability&lt;/td&gt;
&lt;td&gt;Exact&lt;/td&gt;
&lt;td&gt;Exact&lt;/td&gt;
&lt;td&gt;Different paths to the same goal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mobile examples&lt;/td&gt;
&lt;td&gt;Espresso, UI Automator, Appium, Maestro&lt;/td&gt;
&lt;td&gt;Copilot writing Espresso, self-healing locators&lt;/td&gt;
&lt;td&gt;Claude Code on a cloud phone, Journeys in Android Studio&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Where it falls short
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Non-determinism:&lt;/strong&gt; two runs can take different paths, so a failure can't always be replayed step for step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost and speed:&lt;/strong&gt; every step is a model call, so it's slower and dearer than a script.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gestures:&lt;/strong&gt; Google lists long-press, double tap, multi-finger gestures and rotation among the gaps in its own &lt;a href="https://developer.android.com/studio/gemini/journeys" rel="noopener noreferrer"&gt;Journeys preview&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Judgment:&lt;/strong&gt; the agent only knows the business rules you write down.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So it isn't a replacement for the suite that gates your merges. It's good at the things scripts are bad at: new screens, exploratory passes and reproducing bug reports.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trying it on an Android app
&lt;/h2&gt;

&lt;p&gt;The agent needs a device it can read and act on. On a laptop that's an emulator plus a local MCP server like mobile-mcp. If the agent runs somewhere without an emulator, a hosted one works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http phonebox https://phonebox.dev/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$PHONEBOX_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then give it a goal, not steps:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install the debug APK on my Phonebox phone and open it.
Sign in with the test account from TEST_ACCOUNTS.md, open each tab
in the bottom bar once, then sign out. Read the screen before every
action. Report any crash, error message or empty screen, quoting the
screen text. Park the phone when you finish.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The two habits that matter most: tell it to read the screen before every action, and ask for evidence (the exact screen text, or a recording) so the report can be checked.&lt;/p&gt;




&lt;p&gt;Originally published on &lt;a href="https://phonebox.dev/guides/what-is-agentic-testing" rel="noopener noreferrer"&gt;phonebox.dev&lt;/a&gt;. Curious how others are drawing the line between agent runs and scripted suites.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>ai</category>
      <category>android</category>
      <category>qa</category>
    </item>
    <item>
      <title>The best Android MCP servers in 2026: twelve compared, local and hosted</title>
      <dc:creator>Alon N</dc:creator>
      <pubDate>Sun, 18 Oct 2026 16:52:04 +0000</pubDate>
      <link>https://dev.to/alon_n_ecceca6aa868e0761d/the-best-android-mcp-servers-in-2026-twelve-compared-local-and-hosted-3om</link>
      <guid>https://dev.to/alon_n_ecceca6aa868e0761d/the-best-android-mcp-servers-in-2026-twelve-compared-local-and-hosted-3om</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I work on &lt;a href="https://phonebox.dev" rel="noopener noreferrer"&gt;Phonebox&lt;/a&gt;, one of the twelve servers below. Most of the others are free and open source, and I've tried to be fair about when each is the better pick.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you want an AI agent (Claude Code, Codex, Cursor, your own) to see and control an Android device, you need an MCP server for it. There are a lot of them now, and the lists that rank for "android mcp server" are mostly directory pages with stale star counts. So here is a comparison of twelve, with GitHub numbers checked on October 16, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  All twelve at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Server&lt;/th&gt;
&lt;th&gt;Stars&lt;/th&gt;
&lt;th&gt;Runs&lt;/th&gt;
&lt;th&gt;Phone included&lt;/th&gt;
&lt;th&gt;iOS&lt;/th&gt;
&lt;th&gt;Agent reads the screen as&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/mobile-next/mobile-mcp" rel="noopener noreferrer"&gt;mobile-mcp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;9,669&lt;/td&gt;
&lt;td&gt;Local (stdio or HTTP)&lt;/td&gt;
&lt;td&gt;No; optional paid cloud&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Accessibility tree, screenshot fallback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/appium/appium-mcp" rel="noopener noreferrer"&gt;Appium MCP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;498&lt;/td&gt;
&lt;td&gt;Local, or your Appium grid&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Page source XML and locators&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.maestro.dev/getting-started/maestro-mcp" rel="noopener noreferrer"&gt;Maestro MCP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;16,088 (Maestro)&lt;/td&gt;
&lt;td&gt;Local, in the Maestro CLI&lt;/td&gt;
&lt;td&gt;Maestro Cloud for runs&lt;/td&gt;
&lt;td&gt;Simulators&lt;/td&gt;
&lt;td&gt;View hierarchy JSON and screenshot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="https://github.com/callstack/agent-device" rel="noopener noreferrer"&gt;agent-device&lt;/a&gt; (Callstack)&lt;/td&gt;
&lt;td&gt;5,051&lt;/td&gt;
&lt;td&gt;Local CLI and MCP&lt;/td&gt;
&lt;td&gt;No; device-cloud proxy&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Accessibility snapshot with refs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://patrol.leancode.co/documentation/other/patrol-mcp" rel="noopener noreferrer"&gt;Patrol MCP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;1,447 (Patrol)&lt;/td&gt;
&lt;td&gt;Local, Flutter projects&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Native UI tree and screenshot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="https://github.com/CursorTouch/Android-MCP" rel="noopener noreferrer"&gt;Android-MCP&lt;/a&gt; (CursorTouch)&lt;/td&gt;
&lt;td&gt;895&lt;/td&gt;
&lt;td&gt;Local (uvx, Python 3.13)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Interactive elements, optional screenshot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="https://github.com/minhalvp/android-mcp-server" rel="noopener noreferrer"&gt;android-mcp-server&lt;/a&gt; (minhalvp)&lt;/td&gt;
&lt;td&gt;811&lt;/td&gt;
&lt;td&gt;Local (Python, adb)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Clickable-element text and screenshot; no commits since May 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/danielealbano/android-remote-control-mcp" rel="noopener noreferrer"&gt;android-remote-control-mcp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;718&lt;/td&gt;
&lt;td&gt;An app on the phone itself&lt;/td&gt;
&lt;td&gt;Your own phone&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Compact accessibility tree and screenshot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.mobilerun.ai/mcp-server" rel="noopener noreferrer"&gt;Mobilerun MCP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;New (Mobilerun: 9,675)&lt;/td&gt;
&lt;td&gt;Mobilerun Cloud&lt;/td&gt;
&lt;td&gt;Yes, Mobilerun Cloud phones&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Accessibility tree via the Portal app&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/browserstack/mcp-server" rel="noopener noreferrer"&gt;BrowserStack MCP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;155&lt;/td&gt;
&lt;td&gt;Local or hosted (OAuth)&lt;/td&gt;
&lt;td&gt;Yes, real devices&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Session screenshots; sessions and test runs, not step control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.saucelabs.com/sauce-ai/sauce-mcp/" rel="noopener noreferrer"&gt;Sauce Labs MCP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Hosted&lt;/td&gt;
&lt;td&gt;Hosted (username and key)&lt;/td&gt;
&lt;td&gt;Private devices, paid add-on&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;UI source and screenshot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://phonebox.dev/guides/android-mcp-server" rel="noopener noreferrer"&gt;Phonebox&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Hosted&lt;/td&gt;
&lt;td&gt;Hosted (API key)&lt;/td&gt;
&lt;td&gt;Yes, cloud Android phones&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Numbered text list of elements and screenshot&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Which one to use
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The default, on your own machine:&lt;/strong&gt; mobile-mcp. Free, active, Android and iOS, with logs, screen recording and location built in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your team already runs Appium:&lt;/strong&gt; Appium MCP, which can also generate Appium test code from what the agent did.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your tests are Maestro flows:&lt;/strong&gt; Maestro MCP, built into the CLI you already have.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;React Native or Expo:&lt;/strong&gt; agent-device, with replayable sessions and Maestro export.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flutter:&lt;/strong&gt; Patrol MCP, to write and run Patrol tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The agent runs in CI, a cloud sandbox or a teammate's laptop:&lt;/strong&gt; a hosted server. Phonebox needs only an API key and keeps the phone signed in between sessions; Mobilerun Cloud and the device-farm servers need their platform accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Driving your own personal phone remotely:&lt;/strong&gt; android-remote-control-mcp, which runs on the phone.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Local or hosted: the real difference
&lt;/h2&gt;

&lt;p&gt;Every local server needs an emulator or a USB phone that adb can see, on the same machine as the agent. That's free and fast on a workstation, and impossible on most CI runners and cloud sandboxes. A hosted server moves the phone to the cloud: the agent needs a URL and a key, and any machine can use the same phone.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Local servers: they drive an emulator or USB device on this machine&lt;/span&gt;
claude mcp add appium-mcp &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; appium-mcp@latest
claude mcp add mobile-mcp &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; @mobilenext/mobile-mcp@latest
claude mcp add maestro &lt;span class="nt"&gt;--&lt;/span&gt; maestro mcp

&lt;span class="c"&gt;# Hosted: the phone comes with it&lt;/span&gt;
claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http phonebox https://phonebox.dev/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$PHONEBOX_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Not device control
&lt;/h2&gt;

&lt;p&gt;Two names that show up in searches do something else. Google's Android Management API MCP manages enterprise device policies, not the screen. &lt;code&gt;mikechambers/adb-mcp&lt;/code&gt; controls Adobe apps, not Android.&lt;/p&gt;




&lt;p&gt;The full comparison, kept up to date, is on &lt;a href="https://phonebox.dev/guides/best-android-mcp-servers" rel="noopener noreferrer"&gt;phonebox.dev&lt;/a&gt;. If I missed a server you use, tell me in the comments and I'll check it.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>android</category>
      <category>ai</category>
      <category>testing</category>
    </item>
    <item>
      <title>How to give Claude Code an Android phone: ADB, an emulator, or a cloud phone</title>
      <dc:creator>Alon N</dc:creator>
      <pubDate>Sun, 11 Oct 2026 12:25:20 +0000</pubDate>
      <link>https://dev.to/alon_n_ecceca6aa868e0761d/how-to-give-claude-code-an-android-phone-adb-an-emulator-or-a-cloud-phone-35nn</link>
      <guid>https://dev.to/alon_n_ecceca6aa868e0761d/how-to-give-claude-code-an-android-phone-adb-an-emulator-or-a-cloud-phone-35nn</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I work on &lt;a href="https://phonebox.dev" rel="noopener noreferrer"&gt;Phonebox&lt;/a&gt;, one of the options below. The other three are free, and I've tried to be fair about when each is the better fit.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You can give &lt;strong&gt;Claude Code&lt;/strong&gt; an Android phone four ways: a USB phone it drives with &lt;strong&gt;ADB&lt;/strong&gt;, the same phone mirrored with &lt;strong&gt;scrcpy&lt;/strong&gt;, a local &lt;strong&gt;emulator&lt;/strong&gt;, or a &lt;strong&gt;cloud phone&lt;/strong&gt; through a hosted MCP server. ADB is free if the phone is on your desk. A cloud phone is one command, works from any machine, and gives Claude Code the screen as text, so it taps by label instead of by coordinates.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four options
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Needs&lt;/th&gt;
&lt;th&gt;Claude Code sees&lt;/th&gt;
&lt;th&gt;Works in CI / sandboxes&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;USB phone + ADB&lt;/td&gt;
&lt;td&gt;A phone, a cable, USB debugging, platform-tools&lt;/td&gt;
&lt;td&gt;Screenshots and UI dumps it parses itself&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ADB + scrcpy&lt;/td&gt;
&lt;td&gt;The same, plus scrcpy&lt;/td&gt;
&lt;td&gt;The same; scrcpy is for you to watch&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local emulator&lt;/td&gt;
&lt;td&gt;Android Studio, a system image, hardware acceleration&lt;/td&gt;
&lt;td&gt;Screenshots and UI dumps through adb&lt;/td&gt;
&lt;td&gt;Rarely (needs nested virtualization)&lt;/td&gt;
&lt;td&gt;Free; uses your RAM and CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud phone over MCP&lt;/td&gt;
&lt;td&gt;One command and an API key&lt;/td&gt;
&lt;td&gt;A numbered list of on-screen elements, plus a screenshot&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Paid per minute&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Option 1: a USB phone and ADB
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Turn on developer options.&lt;/strong&gt; Settings &amp;gt; About phone, tap Build number seven times, then turn on USB debugging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install platform-tools&lt;/strong&gt;, plug the phone in, accept the prompt, and check that &lt;code&gt;adb devices&lt;/code&gt; lists it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tell Claude Code to use adb.&lt;/strong&gt; It can run &lt;code&gt;adb install&lt;/code&gt;, &lt;code&gt;adb shell input tap x y&lt;/code&gt;, &lt;code&gt;adb shell input text&lt;/code&gt; and &lt;code&gt;adb exec-out screencap -p&lt;/code&gt; in its terminal.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It works, and it's free. The limits show up quickly: Claude Code has to work out tap coordinates from screenshots, the phone has to stay plugged into the machine Claude Code runs on, and a dropped connection or a locked screen stops the run. ADB-based MCP servers wrap the same commands in tools, with the same requirement of a device next to the agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: add scrcpy to watch
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Genymobile/scrcpy" rel="noopener noreferrer"&gt;scrcpy&lt;/a&gt; mirrors the phone to a window on your desktop and lets you control it with your mouse. It doesn't give Claude Code anything new, since the agent still acts through adb, but it's useful for watching the agent and stepping in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 3: a local emulator
&lt;/h2&gt;

&lt;p&gt;An emulator from Android Studio avoids the cable and can be reset. It needs gigabytes of SDK and system images and hardware acceleration, and it competes with your IDE for memory. Most CI runners and cloud sandboxes can't run it, because they don't offer nested virtualization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 4: a cloud phone through MCP
&lt;/h2&gt;

&lt;p&gt;A hosted Android MCP server runs the phone in the cloud. With &lt;a href="https://phonebox.dev/guides/android-mcp-server" rel="noopener noreferrer"&gt;Phonebox&lt;/a&gt; it's one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http phonebox https://phonebox.dev/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$PHONEBOX_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code then gets 13 tools: &lt;code&gt;observe&lt;/code&gt; returns the screen as numbered elements with their labels, &lt;code&gt;act&lt;/code&gt; taps and types by label, &lt;code&gt;install_app&lt;/code&gt; installs the APK it just built, &lt;code&gt;live_view_url&lt;/code&gt; hands the phone to you for a one-time code, and &lt;code&gt;park_phone&lt;/code&gt; stops billing while keeping the apps and sign-ins. This is what the agent reads:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;snapshot snp_4f2k7m3q6z3a
app com.android.launcher3
keyboard hidden
screen 1080x2400
[1] EditText "Search apps" #search clickable editable (540,250)
[2] TextView "Chrome" #icon clickable (200,1900)
[3] TextView "Settings" #icon clickable (500,1900)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It costs $0.06 per phone-minute while running and nothing while parked. There's a &lt;a href="https://phonebox.dev/guides/give-claude-code-an-android-phone" rel="noopener noreferrer"&gt;56-second demo&lt;/a&gt; and a &lt;a href="https://phonebox.dev/guides/claude-code-android-mcp-server-setup" rel="noopener noreferrer"&gt;3-minute setup video&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which to choose
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;USB and ADB&lt;/strong&gt; if a spare phone sits on your desk and Claude Code runs on that machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A local emulator&lt;/strong&gt; for repeatable tests on a workstation that can run one well.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A cloud phone&lt;/strong&gt; when Claude Code runs remotely, in CI or in a sandbox, when the phone has to stay signed in between sessions, or when you'd rather not set anything up.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The full comparison, kept up to date, is at &lt;a href="https://phonebox.dev/guides/how-to-give-claude-code-an-android-phone" rel="noopener noreferrer"&gt;phonebox.dev/guides/how-to-give-claude-code-an-android-phone&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>android</category>
      <category>mcp</category>
      <category>claude</category>
    </item>
    <item>
      <title>Give Claude Code business context through MCP</title>
      <dc:creator>Alon N</dc:creator>
      <pubDate>Wed, 09 Sep 2026 17:03:18 +0000</pubDate>
      <link>https://dev.to/alon_n_ecceca6aa868e0761d/give-claude-code-business-context-through-mcp-4oe6</link>
      <guid>https://dev.to/alon_n_ecceca6aa868e0761d/give-claude-code-business-context-through-mcp-4oe6</guid>
      <description>&lt;p&gt;Claude Code can do more with company context than another spreadsheet export. Connect it to the business records it needs, give it a clear question, and let it query those records through MCP.&lt;/p&gt;

&lt;p&gt;We build Combined, a managed data layer for this workflow. Combined connects to business applications, keeps selected data synced, and exposes scoped, read-only access to compatible agents. Here is the setup path for Claude Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare one useful dataset
&lt;/h2&gt;

&lt;p&gt;Start with one source and a question you already care about: open pipeline by stage, for example. In Combined, choose a Ready connector, complete authorization, select the relevant datasets and fields, and run the first sync. Check the records in Explore.&lt;/p&gt;

&lt;p&gt;Give the agent access to those datasets through the onboarding or Access workflow. The scope should match the question. You can expand it when a later question needs another dataset.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect Claude Code
&lt;/h2&gt;

&lt;p&gt;Use the account-specific instructions supplied by Combined. Replace ACCOUNT_UUID below with your account ID, then add the HTTP server in Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http combined-context &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://platform.trycombined.com/mcp?account_id=ACCOUNT_UUID"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open /mcp in Claude Code and follow authentication. The account ID selects the account; authentication provides access. Keep credentials in the supported setup flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask the agent to discover the data
&lt;/h2&gt;

&lt;p&gt;Business systems differ, so let the agent inspect the available source, logical dataset, and field names before writing SQL. A useful first instruction is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use the combined-context MCP server.
List my permitted sources and use the one I select.
List its datasets and describe the dataset needed for my question.
Check freshness, then run a read-only query returning at most five rows.
Report the source, freshness, query receipt ID, and any truncation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once that works, ask a precise business question. For pipeline, specify the pipeline, time boundary, stages, and currency treatment. Have the agent aggregate the relevant records rather than infer a total from a small row sample.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the answer useful
&lt;/h2&gt;

&lt;p&gt;The best answer gives you the result and enough context to act on it: which source it used, when that data last synced, and any missing coverage. If a record just changed in the source, sync the change before expecting it in the result.&lt;/p&gt;

&lt;p&gt;Start with one question you would otherwise answer manually. Connect its source once, then keep the question inside your existing agent workflow.&lt;/p&gt;

&lt;p&gt;Combined includes an initial 5 million MAR without a card. Follow the &lt;a href="https://www.trycombined.com/resources/connect-claude-code-to-business-data" rel="noopener noreferrer"&gt;full connection guide&lt;/a&gt; or see the &lt;a href="https://www.trycombined.com/resources/connect-hubspot-to-ai-agents" rel="noopener noreferrer"&gt;HubSpot pipeline example&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install the reusable workflows
&lt;/h2&gt;

&lt;p&gt;We have also published six free, open-source agent skills for setup, business-data questions, customer context, read-only SQL, revenue analysis, and HubSpot–Stripe reconciliation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add sqrr-ai/combined-agent-kit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Select the skills and agent you want in the installer. The skills guide the workflow; the MCP connection and your dataset grants provide access.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/sqrr-ai/combined-agent-kit" rel="noopener noreferrer"&gt;public agent kit&lt;/a&gt; includes a runnable SQL example showing how a naive CRM-to-invoice join doubles totals, plus the corrected aggregation. Its fixture uses synthetic data and can be explored before connecting an account. Browse the &lt;a href="https://www.trycombined.com/connectors" rel="noopener noreferrer"&gt;471 connector guides&lt;/a&gt; for source-specific setup and dataset references, or &lt;a href="https://www.trycombined.com/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=agent_kit"&gt;start with Combined&lt;/a&gt; to connect your own business data.&lt;/p&gt;

&lt;p&gt;References: &lt;a href="https://www.trycombined.com/docs/integrations/mcp" rel="noopener noreferrer"&gt;Combined MCP documentation&lt;/a&gt; and &lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;Claude Code MCP documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>mcp</category>
    </item>
  </channel>
</rss>
