今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

mobile-next/mobile-mcp

AIエージェントとLLMのためにiOS・Androidアプリとデバイスを自動操作できるMCPサーバーです。

mobile-mcpを起動すると、LLMエージェントがスクリーンショットを延々と読ませなくても、アクセシビリティツリーだけでアプリの検索・会員登録・購入・コメント投稿まで自力でこなす様子を目にできます。XCUITestやEspressoのコードを一切書かず、iOSとAndroidを同じAPIで動かせるので、実機・シミュレータ・エミュレータどれでも同じ手順で試せます。android.tsやcoordinate-mapping.tsのテストコードとDocker環境が揃っているため、CI/CDに組み込んでクラウド実機でリリーステストを並列実行する構成も、今日そのまま手元で組んでみたくなります。

01 / 概要
何をするものか一文で言うと
ひとことでAIエージェントとLLMのためにiOS・Androidアプリとデバイスを自動操作できるMCPサーバーです。

mobile-mcpは、iOS/Androidのシミュレータ・エミュレータ・実機をMCP(Model Context Protocol)経由でLLMエージェントから操作するサーバーです。タップ・スワイプ・アプリ起動・要素一覧取得などのツールをClaude CodeやCodexなどのMCPクライアントに公開します。画像処理ではなくアクセシビリティツリーを優先的に読み取り、必要な場合のみスクリーンショットと座標に切り替える設計です。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

src/server.tsがzodスキーマ付きのMCPツールを登録し、src/robot.tsで定義したRobotインターフェースをAndroidRobot(src/android.ts)とiOS実装(src/ios.ts、iphone-simulator.ts、webdriver-agent.ts)がそれぞれ実装します。Android側はexecFileSyncでadbを直接呼び出し、uiautomator dumpのXMLをfast-xml-parserで解析して画面要素を取得します。iOS側はxcrun simctlやWebDriverAgentのHTTP APIを叩きます。取得した要素はformat-elements.tsで「@ref Type text= label= at=x,y size=WxH」という1行テキストかJSONに整形され、LLMが読みやすい形になります。スクリーンショットを使う操作では、coordinate-mapping.tsがスクリーンショットのピクセルサイズと実画面サイズの比率を文章化し、LLMがタップ座標を正しい倍率に換算できるよう案内します。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    npx -y @mobilenext/mobile-mcp@latestでMCPクライアントに登録すると、サーバーが起動しstdioで待ち受けます。

  2. STEP 02

    mobile_list_available_devicesを呼ぶと接続中のシミュレータ・エミュレータ・実機の一覧が返りますが、何も繋がっていなければ空になります。

  3. STEP 03

    Android機を使う場合は事前にadb devicesで端末が認識されている必要があり、未認識だとAndroidRobotのadb呼び出しがエラーで止まります。

  4. STEP 04

    mobile_list_elements_on_screenを呼ぶと、uiautomator dumpのXMLを解析した結果が「@ref Type text= label= at=x,y size=WxH」という1行形式で返ってきます。

  5. STEP 05

    mobile_take_screenshotとmobile_click_on_screen_at_coordinatesを組み合わせると、coordinate-mapping.tsが算出した倍率の説明文が添えられ、LLMはその倍率でタップ座標を換算します。

  6. STEP 06

    Docker版ではコンテナ内にadbクライアントだけが入っており、ADB_SERVER_SOCKET経由でホスト側のadbサーバーに接続するため、ホスト側のUSBデバッグ設定は省略できません。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

手に入るのは、LLMエージェントがiOS/Android端末をタップ・スワイプ・アプリ起動・要素取得などで操作できるMCPツール群一式です。test/android.tsなどのテストコードを見ると、検証は実機やエミュレータの接続を前提としたPlaywrightテストで行われており、デバイス未接続時はtest.skipされる構成です。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

実機・エミュレータ・シミュレータが手元になければ何も試せず、クラウド関連ツール(mobile_login_to_cloud_providerなど)はMobile Next Cloudという別サービスとの連携が前提です。

02

Android側はexecFileSyncでadbコマンドを直接呼ぶ設計のため、adbのバージョンやPATH、ANDROID_HOME設定に動作が左右されます。

03

iOS実機やWebDriverAgent周りはmacOSとXcode環境が必須で、Windows・Linuxホスト単体では動かせません。

04

テストスイート自体が「デバイスが正確に1台接続されている場合のみ実行」という条件付きのため、リポジトリのコードだけでは実機での再現性までは保証できません。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

エージェントベースのモバイルQAやスクリプト操作を試したいチームに向いています。Android/iOSのロボット分離、座標換算ロジック、要素フォーマットなど実装レベルで筋が通っており設計は信頼できますが、効果は接続する端末環境に強く依存するため、導入前にadbやsimctlの環境整備が必要です。この判断はソースコードとテストの条件分岐から読み取れる内容に基づいており、実機を用意しなくても構成の妥当性は確認できます。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する