Mobile Device Mcp について
Mobile Device Mcpは、AIコーディングアシスタントからAndroid端末やiOSシミュレーターを確認・操作できるMCPサーバーです。スクリーンショット、UI操作、AIによる画面分析、Flutterウィジェット検査、録画、テストスクリプト生成に対応します。
主な機能
- 01スクリーンショットとUIツリーの確認
- 02座標や説明による操作
- 03ClaudeとGeminiによる画面分析
- 04Flutterウィジェットツリーとソース対応付け
- 05画面録画とテスト生成
活用シーン
- 01アシスタントとモバイルUIの問題を再現
- 02Flutterウィジェットとソース位置の確認
- 03操作をテストスクリプトとして記録
- 04AndroidやiOSシミュレーターで画面を検証
MCP 対応
MCPサーバーは互換性のあるコーディングアシスタントにモバイル端末用ツールを提供し、アシスタントがバックグラウンドプロセスとして起動・管理します。ツールには端末操作、画面分析、Flutter検査、テスト生成があります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y mobile-device-mcpGOOGLE_API_KEYシークレットGoogle API key for AI visual analysis tools. Get a free key at aistudio.google.com/apikeyMOBILE_MCP_LICENSE_KEYシークレットPro license key to unlock all 49 tools (format: MDMCP-XXXXX-XXXXX-XXXXX-XXXXX). Get Pro at rzp.io/rzp/r4ijQsJYMCP_ADB_PATHCustom path to ADB binary. Auto-detected from PATH if not set.MCP_DEFAULT_DEVICEDevice serial number to use when multiple devices are connected. Auto-detected if only one device is connected.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mobile-device-mcp
AI コーディングアシスタント(Claude Code、Cursor、Windsurf)に、モバイルデバイスを見て操作する機能を提供する MCP サーバーです。スクリーンショット、UI の検査、タッチ操作、AI による視覚分析、Flutter ウィジェットツリーの検査、動画録画、テスト生成に対応する 49 個のツールを備えています。
AI アシスタントはコードを読めても、スマートフォンの画面を見ることはできません。このサーバーがその問題を解決します。
このサーバーを選ぶ理由
| 機能 | mobile-device-mcp | mobile-next/mobile-mcp | appium/appium-mcp |
|---|---|---|---|
| ツールの合計 | 49 | 20 | 約15 |
| セットアップ | npx(30秒) | npx | Appium サーバーが必要 |
| AI 視覚分析 | 12 個のツール(Claude + Gemini) | なし | 視覚ベースの検出 |
| Flutter ウィジェットツリー | 10 個のツール(Dart VM Service) | なし | なし |
| スマートな要素検索 | 4 段階(ローカル検索は1ミリ秒未満) | アクセシビリティツリーのみ | XPath/セレクター |
| コンパニオンアプリ(UI ツリーが23倍高速) | あり | なし | なし |
| 動画録画 | あり | なし | なし |
| テストスクリプト生成 | TS、Python、JSON | なし | Java/TestNG のみ |
| iOS シミュレーターのサポート | あり | あり | あり |
| iOS 実機 | 予定 | あり | あり |
| スクリーンショット圧縮 | 89%(251KB->28KB) | なし | 50~80% |
| 複数プロバイダーの AI | Claude + Gemini | 該当なし | 単一プロバイダー |
| 価格 | 無料 + Pro(₹499/月) | 無料 | 無料 |
問題点
ウェブ開発者にはブラウザーの DevTools、Playwright、Puppeteer があり、AI アシスタントは画面をクリックして、スクリーンショットを撮り、修正を検証できます。一方、モバイル開発者は手作業でスクリーンショットを撮り、ログをコピーし、画面に何が表示されているかを説明せざるを得ません。AI とデバイスの間を取り持つ人間の仲介役になっています。
このサーバーでできること
Developer: "The login button doesn't work"
Without this tool: With this tool:
1. Manually screenshot 1. AI calls take_screenshot -> sees the screen
2. Paste into AI chat 2. AI calls smart_tap("login button") -> taps it
3. AI guesses what's wrong 3. AI calls verify_screen("error message shown") -> sees result
4. Apply fix, rebuild 4. AI calls visual_diff -> confirms fix worked
5. Repeat 4-5 times 5. Done.
クイックスタート
インストール
npx mobile-device-mcp
グローバルインストールは不要です。npx から直接実行できます。
前提条件
- Node.js 18 以降
- ADB 経由で接続された Android デバイス/エミュレーター
- ADB がインストールされていること(Android SDK Platform Tools)
セットアップ(初回のみ、30秒)
-
Google AI キーを取得します(無料枠あり):aistudio.google.com/apikey
-
プロジェクトのルートに
.mcp.jsonを追加します:
macOS / Linux:
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key"
}
}
}
}
Windows:
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "cmd",
"args": ["/c", "npx", "-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key"
}
}
}
}
Pro ライセンスキーを使用する場合(Pro の購入後):
macOS / Linux(Pro)
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key",
"MOBILE_MCP_LICENSE_KEY": "MDMCP-XXXXX-XXXXX-XXXXX-XXXXX"
}
}
}
}
Windows(Pro)
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "cmd",
"args": ["/c", "npx", "-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key",
"MOBILE_MCP_LICENSE_KEY": "MDMCP-XXXXX-XXXXX-XXXXX-XXXXX"
}
}
}
}
- そのディレクトリからAI コーディングアシスタントを開きます。これで完了です。
サーバーは自動的に起動・停止するため、手動で実行する必要はありません。AI アシスタントが MCP プロトコルを介してバックグラウンドプロセスとして管理します。
動作確認
Claude Code: /mcp と入力すると、mobile-device: Connected と表示されます。
Cursor: 設定の MCP パネルを確認してください。
あとはスマートフォンに話しかけるだけです。
You: "Open my app, tap the login button, type [email protected] in the email field"
AI: [takes screenshot -> sees the screen -> smart_tap("login button") -> smart_type("email field", "[email protected]")]
You: "Find all the bugs on this screen"
AI: [analyze_screen -> inspects layout, checks for overflow, missing labels, broken states]
You: "Navigate to settings and verify dark mode works"
AI: [smart_tap("settings") -> take_screenshot -> smart_tap("dark mode toggle") -> visual_diff -> reports result]
テストスクリプトも、手動のスクリーンショットも不要です。やりたいことを自然な言葉で伝えるだけです。
あらゆる AI コーディングアシスタントに対応
| ツール | 設定ファイル | ドキュメント |
|---|---|---|
| Claude Code | プロジェクトルートの .mcp.json | claude.ai/docs |
| Cursor | .cursor/mcp.json | cursor.com/docs |
| VS Code + Copilot | MCP の設定 | code.visualstudio.com |
| Windsurf | MCP の設定 | windsurf.com |
いずれも同じ JSON 設定を使います。エディターに対応するファイルに配置するだけです。
あらゆるプロジェクトに導入
.mcp.json を Flutter、React Native、Kotlin、Swift など、任意のモバイルプロジェクトにコピーすると、そのディレクトリ内で AI アシスタントがデバイスの機能を活用できるようになります。グローバルインストールは不要です。
Free と Pro の比較
Free(14 個のツール)-- ライセンスキーは不要
| ツール | 機能 |
|---|---|
list_devices | 接続されている Android デバイス/エミュレーターをすべて一覧表示します |
get_device_info | モデル、メーカー、Android バージョン、SDK レベルを取得します |
get_screen_size | 画面解像度をピクセル単位で取得します |
take_screenshot | スクリーンショットを撮影します(PNG または JPEG、画質とサイズ変更の設定が可能) |
get_ui_elements | アクセシビリティ/UI 要素のツリーを構造化 JSON として取得します |
tap | 指定した座標をタップします |
double_tap | 指定した座標をダブルタップします |
long_press | 指定した座標を長押しします |
swipe | 2 点間をスワイプします |
type_text | フォーカス中のフィールドにテキストを入力します |
press_key | キーを押します(ホーム、戻る、Enter、音量など) |
list_apps | インストール済みアプリを一覧表示します |
get_current_app | フォアグラウンドのアプリを取得します |
get_logs | フィルタリングした logcat エントリーを取得します |
Pro(追加で 35 個のツール)-- ₹499/月
Pro ライセンスを取得 -- 49 個すべてのツールを利用できます。お支払い後、1 時間以内にライセンスキーがメールで届きます。.mcp.json に追加してください。
{
"mcpServers": {
"mobile-device": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mobile-device-mcp"],
"env": {
"GOOGLE_API_KEY": "your-google-api-key",
"MOBILE_MCP_LICENSE_KEY": "your-license-key"
}
}
}
}
AI による視覚分析(12 個のツール)
AI の視覚認識(Claude または Gemini)を使って、画面上の内容を理解します。
| ツール | 機能 |
|---|---|
analyze_screen | AI が画面を説明します:アプリ名、画面の種類、操作可能な要素、表示テキスト、提案 |
find_element | 説明をもとに UI 要素を検索します:「ログインボタン」、「メールアドレス入力フィールド」 |
smart_tap | 説明をもとに要素を検索し、1 ステップでタップします |
smart_type | 説明をもとに入力フィールドを検索し、フォーカスしてテキストを入力します |
suggest_actions | 目標を達成するための操作を計画します:「アプリにログインする」、「商品をカートに追加する」 |
visual_diff | 現在の画面と以前のスクリーンショットを比較し、変更点を確認します |
extract_text | 画面上に表示されているすべてのテキストを抽出します(AI による OCR) |
verify_screen | 「ログインに成功した」、「エラーメッセージが表示されている」 といった条件を確認します |
wait_for_settle | 画面の変化が止まるまで待機します |
wait_for_element | 特定の要素が画面に表示されるまで待機します |
handle_popup | ポップアップ、ダイアログ、権限リクエストを検出して閉じます |
fill_form | 複数のフォームフィールドに 1 ステップで入力します |
Flutter ウィジェットツリー(10 個のツール)
Dart VM Service Protocol 経由で、実行中の Flutter アプリに接続します。すべてのウィジェットをソースコード上の位置(file:line)に対応付けます。
| ツール | 機能 |
|---|---|
flutter_connect | デバイス上で実行中の Flutter アプリを検出して接続します |
flutter_disconnect | Flutter アプリとの接続を切断し、リソースをクリーンアップします |
flutter_get_widget_tree | ウィジェットツリー全体を取得します(概要または詳細) |
flutter_get_widget_details | ID を指定して、特定のウィジェットのプロパティを詳しく取得します |
flutter_find_widget | 型、テキスト、説明でウィジェットツリーを検索します |
flutter_get_source_map | すべてのウィジェットをソースコード上の位置(file:line:column)に対応付けます |
flutter_screenshot_widget | 特定のウィジェットを切り離した状態でスクリーンショットを撮影します |
flutter_debug_paint | デバッグ用のペイントオーバーレイを切り替えます(ウィジェットの境界とパディングを表示) |
flutter_hot_reload | Flutter アプリをホットリロードします(状態を保持) |
flutter_hot_restart | Flutter アプリをホットリスタートします(状態をリセット) |
iOS シミュレーター(4 個のツール)
macOS 専用です。xcrun simctl 経由で iOS シミュレーターを操作します。
| ツール | 機能 |
|---|---|
ios_list_simulators | 利用可能な iOS シミュレーターを一覧表示します |
ios_boot_simulator | 名前または UDID を指定してシミュレーターを起動します |
ios_shutdown_simulator | 実行中のシミュレーターをシャットダウンします |
ios_screenshot | シミュレーターのスクリーンショットを撮影します |
動画録画(2 個のツール)
| ツール | 機能 |
|---|---|
record_screen | デバイス画面の録画を開始します |
stop_recording | 録画を停止して動画を保存します |
テスト生成(3 個のツール)
| ツール | 機能 |
|---|---|
start_test_recording | MCP ツールの呼び出しの記録を開始します |
stop_test_recording | 記録を停止してテストスクリプトを生成します |
get_recorded_actions | 記録されたアクションを TypeScript、Python、または JSON 形式で取得します |
アプリ管理(4 個のツール)
| ツール | 機能 |
|---|---|
launch_app | パッケージ名を指定してアプリを起動します |
stop_app | アプリを強制停止します |
install_app | APK をインストールします |
uninstall_app | アプリをアンインストールします |
パフォーマンス
このサーバーは、レイテンシーと AI トークンコストを最小限に抑えるよう最適化されています。
- 4 段階の要素検索:コンパニオンアプリ(即時) -> ローカルのテキスト一致(1 ミリ秒未満) -> キャッシュ済み AI -> 新規 AI。
smart_tapは、単純な AI 呼び出しより 35 倍高速です(205 ミリ秒対 7.6 秒)。 - コンパニオンアプリ:AccessibilityService ベースの Android アプリが、UIAutomator の 2448 ミリ秒に対して 105 ミリ秒(23 倍高速)で UI ツリーを提供します。初回使用時に自動インストールされます。
- スクリーンショット圧縮:AI ツールは JPEG q=60、400w に自動圧縮します。AI の品質を損なうことなく 89% 小さくなります(251KB -> 28KB)。
- 並列キャプチャ:スクリーンショットと UI ツリーを
Promise.all()で同時に取得します。 - TTL キャッシュ:5 秒間のキャッシュにより、ツールを連続して使用した際の重複した ADB 呼び出しを回避します。
環境変数
| 変数 | 説明 | デフォルト |
|---|---|---|
GOOGLE_API_KEY or GEMINI_API_KEY | Gemini の視覚認識用 Google API キー(推奨) | -- |
ANTHROPIC_API_KEY | Claude の視覚認識用 Anthropic API キー | -- |
MOBILE_MCP_LICENSE_KEY | Pro ツールのロックを解除するライセンスキー | -- |
MCP_AI_PROVIDER | AI プロバイダーを指定します:"anthropic" または "google" | 自動検出 |
MCP_AI_MODEL | AI モデルを上書きします | gemini-2.5-flash / claude-sonnet-4-20250514 |
MCP_ADB_PATH | カスタム ADB バイナリのパス | 自動検出 |
MCP_DEFAULT_DEVICE | デフォルトのデバイスシリアル | 自動検出 |
MCP_SCREENSHOT_FORMAT | "png" または "jpeg" | jpeg |
MCP_SCREENSHOT_QUALITY | JPEG 品質(1~100) | 80 |
MCP_SCREENSHOT_MAX_WIDTH | スクリーンショットの最大幅 | 720 |
アーキテクチャ
src/
|-- index.ts # CLI entry point (auto-discovery, env config)
|-- server.ts # MCP server factory
|-- license.ts # License validation and tier gating
|-- types.ts # Shared interfaces
|-- drivers/android/ # ADB driver (DeviceDriver implementation)
| |-- adb.ts # Low-level ADB command wrapper
| |-- companion-client.ts # TCP client for companion app
| +-- index.ts # AndroidDriver class (4-strategy UI element retrieval)
|-- drivers/flutter/ # Dart VM Service driver
| |-- index.ts # FlutterDriver (discovery, inspection, source mapping, hot reload)
| +-- vm-service.ts # JSON-RPC 2.0 WebSocket client (DDS redirect handling)
|-- drivers/ios/ # iOS Simulator driver (macOS only)
| |-- index.ts # IOSSimulatorDriver via xcrun simctl
| +-- simctl.ts # Low-level simctl command wrapper
|-- tools/ # MCP tool registrations (free + pro gating)
| |-- device-tools.ts # Device management
| |-- screen-tools.ts # Screenshots & UI inspection
| |-- interaction-tools.ts # Touch, type, keys
| |-- app-tools.ts # App management
| |-- log-tools.ts # Logcat
| |-- ai-tools.ts # AI-powered tools
| |-- flutter-tools.ts # Flutter widget inspection
| |-- ios-tools.ts # iOS simulator tools
| |-- video-tools.ts # Screen recording
| +-- recording-tools.ts # Test generation
|-- recording/ # Test script generation
| |-- recorder.ts # ActionRecorder (records MCP tool calls)
| +-- generator.ts # TestGenerator (TypeScript/Python/JSON output)
|-- ai/ # AI visual analysis engine
| |-- client.ts # Multi-provider client (Anthropic + Google)
| |-- prompts.ts # System prompts & UI element summarizer
| |-- analyzer.ts # ScreenAnalyzer orchestrator (caching, parallel capture)
| +-- element-search.ts # Local element search (text/alias matching, no AI needed)
+-- utils/
|-- discovery.ts # ADB auto-discovery
+-- image.ts # PNG parsing, JPEG compression, bilinear resize
companion-app/ # Android companion app (Kotlin)
# AccessibilityService + TCP JSON-RPC for fast UI tree
ロードマップ
- iOS 物理デバイスのサポート
- マルチデバイスのオーケストレーション
- CI/CD 統合
- クラウドデバイスファームのサポート
テスト済み環境
- デバイス:Pixel 8(Android 16)、Samsung Galaxy シリーズ、Android エミュレーター
- アプリ:Telegram、Instagram、Spotify、WhatsApp、YouTube、Chrome、Settings、Flutter アプリ
- AI プロバイダー:Google Gemini 2.5 Flash、Anthropic Claude
- プラットフォーム:Windows 11、macOS(iOS シミュレーター)
- 接続:USB およびワイヤレス ADB
ライセンス
- 個人利用および非商用利用は無料です
- 商用利用には有料ライセンスが必要です
- 2030年3月23日に Apache 2.0 に切り替わります
詳細な条件については、LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。