Expo Android MCP について
Expo Android MCP は、ADB 経由で Android エミュレーターや接続済みデバイスを調査・操作する MCP サーバーです。UI 要素の認識、スクリーンショット、デバイス選択を備え、Android アプリのテストに使えます。
主な機能
- 01接続デバイスの一覧表示と選択
- 02UI 要素の検査とスクリーンショット撮影
- 03UI 要素の検索・待機・検証
- 04タップ、スワイプ、長押し、テキスト入力
- 05アプリの起動とインストール済みパッケージの一覧表示
- 06指定された Expo Go APK のインストール
活用シーン
- 01テスト中の Android アプリ操作の自動化
- 02エミュレーター画面の確認とコントロールの特定
- 03操作前後の UI 状態の検証
MCP 対応
MCP クライアントに、検査、スクリーンショット、入力、アプリ起動など、ADB ベースの Android デバイス・UI 操作用ツールを公開します。ツールのアノテーションで、読み取り専用の検査とデバイスを操作する処理を区別します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @fndchagas/expo-androidADB_PATHPath to adb executable.ADB_SERIALDevice serial to target (optional, use 'auto' to clear and auto-detect).ADB_TIMEOUT_MSTimeout for adb commands in milliseconds.ADB_MAX_BUFFER_MBMax buffer size for adb output in MB.ADB_DEBUGEnable adb debug logs (set to 1).MCP_TRANSPORTTransport: stdio, http, or both.PORTHTTP port when MCP_TRANSPORT is http or both.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
17掲載時のツール一覧 · 3 週間前に更新
このツールにパラメーターはありません。
詳細
expo-android
ADB 経由で Android エミュレーターを自動操作する MCP サーバーです。
要件
- Node 18+
- Android SDK platform-tools(adb)が使用可能であること
- Android エミュレーターまたはデバイスが接続されていること
adb を確認します:
adb devices
インストール
Claude Desktop、ワンクリック: 最新リリースから expo-android.mcpb をダウンロードし、Settings → Extensions にドラッグします。両方のフィールドは空のままでかまいません。adb は自動検出され、接続されているデバイスが1台だけの場合は、そのデバイスがデフォルトで使用されます。
npm 経由:
npm install -g @fndchagas/expo-android
# or
npx -y @fndchagas/expo-android
クイックスタート
- エミュレーターを起動するか、デバイスを接続します。
doctorを実行して、adb とデバイスの選択を検証します。inspect、tapElement、inputTextなどを使用します。
例:
await client.callTool({ name: 'expo-android.doctor', arguments: {} });
await client.callTool({
name: 'expo-android.inspect',
arguments: { onlyInteractive: true, maxElements: 200 },
});
Claude Code CLI で使用する
claude mcp add expo-android \
--env ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb" \
--env ADB_SERIAL="auto" \
-- npx -y @fndchagas/expo-android
OpenAI Codex CLI で使用する
codex mcp add expo-android \
--env ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb" \
--env ADB_SERIAL="auto" \
-- npx -y @fndchagas/expo-android
または、~/.codex/config.toml を編集します:
[mcp_servers.expo-android]
command = "npx"
args = ["-y", "@fndchagas/expo-android"]
env = { ADB_PATH = "/Users/you/Library/Android/sdk/platform-tools/adb", ADB_SERIAL = "emulator-5554" }
シリアル番号の選択優先順位:
serial パラメーター(ツール呼び出しごと)→ setDevice による上書き → ADB_SERIAL 環境変数 → 自動(デバイスが1台だけの場合)。
環境変数
| 変数 | デフォルト | 説明 |
|---|---|---|
ADB_PATH | adb | adb 実行ファイルのパス |
ADB_SERIAL | 任意 | 対象デバイスのシリアル番号(クリアして自動検出する場合は auto) |
ADB_TIMEOUT_MS | 15000 | adb コマンドのタイムアウト |
ADB_MAX_BUFFER_MB | 10 | 出力バッファーの最大サイズ |
ADB_DEBUG | 0 | adb の診断情報を stderr に記録 |
MCP_TRANSPORT | stdio | トランスポート:stdio、http、または both |
PORT | 7332 | http/both 使用時の HTTP ポート |
トラブルシューティング
adb が見つからない(spawn adb ENOENT)
adb が見つからない場合でもサーバーは起動します。adb が使用可能になるまで、ツールは ADB executable not found
エラーを返します(診断には doctor を実行してください)。解決するには、ADB_PATH
を設定するか、SDK のパスをエクスポートします:
export ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb"
# or
export ANDROID_HOME="$HOME/Library/Android/sdk"
複数のデバイスが接続されている場合は、対象デバイスを ADB_SERIAL に設定します。
実行中に setDevice を実行することもできます:
await client.callTool({
name: 'expo-android.setDevice',
arguments: { serial: 'emulator-5554' },
});
PATH または SDK の環境変数を更新した場合は、新しい環境を読み込めるように MCP プロセスを再起動してください。
テスト
npm run build
npm test
ツール
ツール名は単純な識別子(例:tap)です。MCP クライアントは、登録したサーバー名をプレフィックスとして付加します。
devices— 接続されているデバイスとエミュレーターを一覧表示します。doctor— adb が利用可能かを検証し、接続されているデバイスを表示します。setDevice— この MCP プロセスで使用するアクティブなデバイスのシリアル番号を上書きします。inspect— UI ダンプを要約付きで解析し、要素を表示します(スクリーンショットは任意です)。screenshot— スクリーンショットのみをキャプチャします(base64 またはファイルパス)。findElement— 検索条件に一致する要素を返します。tapElement— 要素を検索し、その中央をタップします。waitForElement— 要素が表示されるまで待機します(状態チェックは任意です)。assertElement— 要素の存在と状態を確認します。tap— x/y 座標をタップします。swipe— 座標間をスワイプします。longPress— 座標を長押しします。inputText— フォーカスされているフィールドにテキストを入力します。keyEvent— Android のキーイベントを送信します(例:BACK、HOME)。openApp— パッケージ名を指定してアプリを起動します。listPackages— インストール済みのパッケージ名を一覧表示します。installExpoGo— 固定された Expo Go APK をダウンロードし、adb install -rでインストールします(urlの上書きで指定できるのは、公式のgithub.com/expo/expo-go-releasesURL のみです)。
すべてのツールは MCP アノテーション(readOnlyHint/destructiveHint)を宣言しているため、クライアントは検査ツールを自動承認し、デバイスを操作するツールには承認を求めることができます。
検索条件
次のツールは柔軟な検索入力を受け付けます:findElement、tapElement、
waitForElement、assertElement。
共通フィールド:
text、textContainscontentDesc、contentDescContainsresourceId、resourceIdContainsclassnormalizeWhitespace、caseInsensitive
MCP の使用例
検査
const result = await client.callTool({
name: 'expo-android.inspect',
arguments: { onlyInteractive: true, includeScreenshot: false, maxElements: 200 },
});
検査オプション:
includeScreenshot(デフォルト:false)screenshotMode:base64またはpathscreenshotPath:path使用時の任意のファイルパスmaxElements:返す要素数の上限includeElements:要素を返すか、要約のみを返すか
Doctor
await client.callTool({
name: 'expo-android.doctor',
arguments: {},
});
呼び出しごとにシリアル番号を上書き
await client.callTool({
name: 'expo-android.tapElement',
arguments: { text: 'Search', serial: 'emulator-5554' },
});
要素をタップ
await client.callTool({
name: 'expo-android.tapElement',
arguments: { text: 'Private account' },
});
待機+確認
await client.callTool({
name: 'expo-android.waitForElement',
arguments: { text: 'Save', timeout: 10000, shouldBeClickable: true },
});
await client.callTool({
name: 'expo-android.assertElement',
arguments: { text: 'Private account', shouldBeChecked: true },
});
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。