Mobile Device Mcp について
Mobile Device MCP は、AI エージェントが iOS と Android のデバイスを操作できるようにする MCP サーバーです。複数のデバイスを同時に扱え、デバイス上の UIAutomator や XCUITest のサーバーを通じて UI ツリーの取得と操作を行います。モバイルアプリの自動テストや操作を行う開発者を対象としています。
主な機能
- 01複数の iOS および Android デバイスの同時対応
- 02検索と件数制限に対応したフラットな UI 要素ツリー
- 03タップ、ダブルタップ、長押し、スワイプ、テキスト入力
- 04デバイス画面の JPEG スクリーンショット
- 05デバイス上のサンドボックスでの JavaScript 実行
活用シーン
- 01実機やシミュレーターでエージェントにアプリを操作させる
- 02ネイティブ画面と WebView の要素を読み取り自動検証を行う
- 03複数デバイスへのアプリインストールと操作の実行
MCP 対応
本プロジェクトは MCP サーバーであり、list_devices、tap、uitree などのツールを MCP クライアントに公開してモバイルデバイスの操作を可能にします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
14掲載時のツール一覧 · 3 週間前に更新
このツールにパラメーターはありません。
詳細
Mobile Device MCP
AI エージェントが iOS および Android デバイスを操作できる MCP サーバーです(タップ、スクロール、テキスト入力、スクリーンショットの撮影、UI ツリーの読み取り、コードの実行)。複数のデバイスを同時に使用できます。
仕組み
3 層アーキテクチャです。
- デバイス上のサーバー — 各モバイルデバイス上で動作する軽量な HTTP サーバーです(Android では UIAutomator、iOS では XCUITest)。アクセシビリティツリーを公開し、操作コマンドを受け付けます。
- UI ツリーフィルター — 両プラットフォームの未加工の UI ツリーを、統一されたフラットな要素リストに正規化します。
- MCP サーバー — 外部インターフェースです。デバイスの検出、ブートストラップ、ポートの割り当てを処理し、デバイス上のサーバーにリクエストをプロキシします。
デバイスは初回使用時にブートストラップされます。サーバーはドライバーアプリをインストールし、ポートを割り当て、デバイス上のサーバーを起動して、正常に動作するまでポーリングします。その後のすべてのツール呼び出しは、デバイスごとのベアラートークン認証を使用して localhost の HTTP 経由でプロキシされます。
ツール
| ツール | 説明 |
|---|---|
list_devices | 利用可能な iOS および Android デバイスを一覧表示します |
screenshot | デバイスの画面をキャプチャします(JPEG) |
uitree | UI 要素ツリーをフラットなリストとして取得します。検索と件数制限を任意で指定できます。include_invisible: true を指定しない限り、画面外の要素は除外されます |
tap | 画面座標をタップします |
double_tap | 画面座標をダブルタップします |
long_press | 画面座標を長押しします(継続時間を設定可能) |
scroll | 始点から終点の座標までスワイプします |
type_text | フォーカス中の要素にテキストを入力します |
press_button | ハードウェアボタンまたはナビゲーションボタンを押します(home、back、enter、volumeUp/Down、dpadUp/Down/Left/Right/Center) |
launch_app | バンドル ID またはパッケージ名でアプリを起動します |
terminate_app | アプリを強制終了します |
list_apps | インストール済みアプリを一覧表示します |
install_app | ホスト上のローカルファイルからアプリをインストールします(Android は .apk、iOS シミュレーターは .app、iOS デバイスは .app/.ipa)。既存のインストールを置き換えます |
run_code | デバイス上でサンドボックス化された JavaScript を実行します(下記の run_code を参照) |
run_code
エージェントは、内部ではどちらも JavaScript である UIAutomator または XCUITest のように_見える_コードを渡せます。 サンドボックスでは、Android で危険性のある Java 操作を制限し、iOS では一部の XCUITest 風コマンドのみを許可します。
- Android: UIAutomator バインディングを備えた Rhino エンジン —
uiDevice(クリック、スワイプ、要素の検索、キーの押下、ディスプレイ情報の読み取り)、By(セレクター)、Until(待機条件)、console.log() - iOS: XCUITest バインディングを備えた JavaScriptCore —
app(要素の検索、タップ、テキスト入力、スワイプ)、springboard、device、openApp(bundleId)、sleep(ms)、console.log()
どちらのプラットフォームでも、実行が止まらないスクリプト(無限ループ)は自動的に終了し、呼び出しごとに新しいサンドボックスが作成されます。
前提条件
- Node.js 18 以降(
npx経由で実行する場合) - Android: PATH に
adbが設定された Android SDK - iOS シミュレーター:
xcrunとsimctlを含む Xcode - iOS 実機:
xcodebuild、devicectl、および libimobiledevice のiproxyを含む Xcode - ソースからビルドする場合: Bun ランタイム、Gradle(Android)、Xcode(iOS)
インストール
Claude Code
claude mcp add mobile-device-mcp -- npx -y @srmorete/mobile-device-mcp@latest
または、カスタムポートを使用する場合:
claude mcp add mobile-device-mcp -e MDMS_PORT_ANDROID=20000 -e MDMS_PORT_IOS=21000 -- npx -y @srmorete/mobile-device-mcp@latest
.mcp.json の変更(Cursor、Claude Desktop など)
{
"mcpServers": {
"mobile-device-mcp": {
"command": "npx",
"args": ["-y", "@srmorete/mobile-device-mcp@latest"],
"env": {
"MDMS_PORT_ANDROID": "18000", # optional
"MDMS_PORT_IOS": "19000" # optional
}
}
}
}
ソースからのビルド
git clone <repo-url>
cd mobile-device-mcp
bun install
# Build drivers for both platforms and pack tarball
./scripts/build.sh
ビルドスクリプトはデバイス上のドライバーをコンパイルし(Gradle で Android APK、xcodebuild で iOS テストバンドル)、それらを drivers/ にコピーして npm tarball を作成します。
開発中にローカルで実行するには:
bun run start # Start the MCP server
bun test # Run the test suite
設定
| 環境変数 | デフォルト | 説明 |
|---|---|---|
MDMS_PORT_ANDROID | 18000 | Android のデバイス上サーバーの基準ポート |
MDMS_PORT_IOS | 19000 | iOS のデバイス上サーバーの基準ポート |
ポートは順番に割り当てられます。Android デバイスの 1 台目には 18000、2 台目には 18001 が割り当てられ、以降も同様です。iOS も 19000 から同様に割り当てられます。
謝辞
Mobile Device MCP server は、mobile-mcp や Maestro のような先駆者の成果を基盤としています。 これらを参考にしつつ、複数デバイスに対応し、Native/WebView をシームレスにサポートする現在のアプローチへと再構成しました(特に Android)。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。