android について
Android MCP Server は ADB を通じて Android エミュレーターと実機を操作し、AI アシスタントが画面の確認、アプリの操作、ログの読み取りを行えるようにします。テスト対象アプリの変更は不要で、モバイルアプリのデバッグやテストに適しています。
主な機能
- 01Android デバイス制御の 25 ツール
- 02最大 1280px に圧縮したスクリーンショット
- 03境界、テキスト、リソース ID を含む UI ツリーの確認
- 04タップ、スワイプ、テキスト入力、ハードウェアキー操作
- 05resource-id、テキスト、content-desc による要素の指定
- 06パッケージ、ログレベル、時刻による logcat のフィルタリング
活用シーン
- 01アプリのクラッシュ不具合の再現と記録
- 02ログイン画面などの操作フローの自動化
- 03APK インストール後の主要画面のスモークテスト
MCP 対応
本プロジェクトは MCP サーバーであり、デバイス管理、スクリーンショット、UI 操作、アプリ管理、ログ診断のツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
21掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Android MCP Server
ADB を介して Android エミュレーターやデバイスを操作するための MCP サーバーです。AI アシスタントが Android アプリを確認、操作、デバッグできるようにします。スクリーンショットの撮影、要素のタップ、ログの読み取り、バグの記録などが可能です。
npm Package | GitHub | Issues
^ 見やすいように再生速度を上げています。その他のデモとテストケース。
機能
- 25 個のツールで Android デバイスを完全に制御
- スクリーンショットの撮影とインテリジェントな圧縮(Sharp ベース、最大 1280px)
- UI ツリーの検査 — 境界、テキスト、リソース ID、状態を含む要素階層を読み取り
- タッチ操作の自動化 — タップ、スワイプ、スクロール、テキスト入力、ハードウェアキーの押下
- 要素の指定 — resource-id、テキスト、content-desc による要素の検索とタップ
- アプリのライフサイクル — APK のインストール、アプリの起動、現在のアクティビティの確認
- Logcat 統合 — パッケージ、ログレベル、タイムスタンプによるフィルタリング
- デバイス管理 — デバイスの一覧表示、エミュレーターの起動、デバイス情報の取得
- 複合アクション —
tap_and_waitはタップ、安定待ち、UI ツリー取得を 1 回の往復処理にまとめます - 永続的な ADB シェル — 1 つのシェルセッションを再利用してコマンド実行を高速化
- デバイス情報のキャッシュ — セッションごとにデバイスのプロパティを 1 回だけ照会
- 複数デバイスのサポート — ID を指定して特定のデバイスを対象にできます
- アプリの変更は不要 — SDK 統合なしで、ADB を介してあらゆる Android アプリで動作
前提条件
- Node.js 18+
- platform-tools(ADB)とエミュレーターを含む Android SDK
- 起動中の Android エミュレーター、または接続済みのデバイス
ANDROID_HOME の確認方法
サーバーは ~/Library/Android/sdk(macOS)または ANDROID_HOME から SDK を自動検出します。SDK が別の場所にある場合は、MCP 設定で ANDROID_HOME を設定してください(下記参照)。
確認するには:
# macOS
ls ~/Library/Android/sdk/platform-tools/adb
# Or find it via Android Studio: Settings > Languages & Frameworks > Android SDK
セットアップ
Claude Code
claude mcp add --scope user android -- npx -y android-mcp-server
これによりサーバーがグローバルに登録され、すべてのプロジェクトで利用できるようになります。現在のプロジェクトに限定するには、代わりに --scope project を使用してください。
SDK がデフォルトの場所にない場合:
claude mcp add --scope user --env ANDROID_HOME=/path/to/sdk android -- npx -y android-mcp-server
Claude Desktop
Claude Desktop の設定ファイルに追加します:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["-y", "android-mcp-server"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
}
VS Code
VS Code の設定(.vscode/settings.json)に追加します:
{
"mcp": {
"servers": {
"android": {
"command": "npx",
"args": ["-y", "android-mcp-server"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
}
}
Cursor
Cursor の MCP 設定(~/.cursor/mcp.json)に追加します:
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["-y", "android-mcp-server"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
}
Windsurf
Windsurf の MCP 設定(~/.codeium/windsurf/mcp_config.json)に追加します:
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["-y", "android-mcp-server"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
}
プロジェクト設定(.mcp.json)
プロジェクトの .mcp.json に追加します(バージョン管理にチェックインすると、チームにも共有されます):
{
"mcpServers": {
"android": {
"command": "npx",
"args": ["-y", "android-mcp-server"],
"env": {
"ANDROID_HOME": "/path/to/android/sdk"
}
}
}
}
ソースからビルド
git clone https://github.com/martingeidobler/android-mcp-server.git
cd android-mcp-server
npm install
npm run build
claude mcp add --scope user android -- node /path/to/android-mcp-server/dist/index.js
利用可能なツール
デバイス管理
| ツール | 説明 |
|---|---|
list_devices | 接続されている Android デバイスとエミュレーターを一覧表示します |
list_avds | 利用可能な Android Virtual Devices を一覧表示します |
start_emulator | 名前を指定して AVD を起動します(最大 60 秒待機) |
スクリーンショットと UI 分析
| ツール | 説明 |
|---|---|
screenshot | 視覚的な分析用にスクリーンショットを撮影します。save_path を指定するとディスクに保存できます |
get_ui_tree | 境界、テキスト、リソース ID、状態を含む UI 要素の階層を取得します |
操作
| ツール | 説明 |
|---|---|
tap | 画面上の座標をタップします |
tap_element | resource-id、テキスト、content-desc で要素をタップします |
tap_and_wait | 要素をタップし、UI が安定するまで待って、新しい UI ツリーを返します — 1 回のラウンドトリップで完了します |
long_press | 座標を長押しします(コンテキストメニュー、ドラッグハンドル) |
double_tap | 座標をダブルタップします |
multi_tap | 固定間隔で同じ座標を N 回タップします(連打) |
tap_sequence | タップ、待機、テキスト入力、キー押下、スワイプを任意の順序で行う複数ステップの操作チェーンです |
type_text | フォーカスされている入力欄にテキストを入力します |
press_key | キーを押します(back、home、enter、tab、delete、menu など) |
swipe | 座標間でスワイプ操作を行います |
scroll_to_element | 要素が表示されるまでスクロールします |
wait_for_element | 要素が表示されるまで待機します(タイムアウト付き) |
診断
| ツール | 説明 |
|---|---|
get_logs | logcat の出力を取得します。パッケージ、ログレベル、時刻で絞り込めます |
clear_logs | logcat バッファーをクリアします(クリーンな出力を得るため、バグを再現する前に呼び出してください) |
get_device_info | モデル、Android バージョン、API レベル、画面サイズ、DPI を取得します |
アプリ管理
| ツール | 説明 |
|---|---|
launch_app | パッケージ名を指定してアプリを起動します |
install_apk | APK ファイルをインストールします |
get_current_activity | フォアグラウンドのアプリとアクティビティを取得します |
pull_file | デバイスからローカルファイルシステムにファイルを取得します |
adb_shell | 任意の ADB シェルコマンドを実行します |
ワークフローの例
バグの記録
「ログをクリアして、設定画面を開き、保存ボタンをタップしてから、ログとスクリーンショットを表示してください」
Claude は次の操作を行います:clear_logs → launch_app → tap_element → get_logs(package_name="com.example.app", level="E") → screenshot(save_path="./bugs/settings-crash.png")
UI テスト
「ログインフローを進め、各画面がデザインと一致していることを確認してください」
Claude は screenshot と get_ui_tree を使って各画面を確認・把握し、tap_element/type_text で操作します。また、ビジョン機能を使ってモックアップや説明と照合します。
スモークテスト
「APK をインストールしてアプリを起動し、メイン画面を順にタップしてクラッシュしないことを確認してください」
Claude は次の操作を行います:install_apk → launch_app → tap_element で画面を移動 → 各画面の後に get_logs(level="E") でエラーを確認します。
要素の操作
「設定を開き、「display」を検索して、最初の結果をタップし、その後戻ってください」
Claude は次の操作を行います:launch_app(package_name="com.android.settings") → tap_and_wait(by="text", value="Search settings") → type_text("display") → tap_and_wait(by="text", value="Display") → press_key(key="back")
デモとプロンプトガイド
- DEMOS.md — 今すぐ試せる、コピーして貼り付けるプロンプトのシナリオ
- PROMPTING.md — ベストプラクティス、パフォーマンスのヒント、よくある落とし穴
仕組み
サーバーは Model Context Protocol を使用して stdio 経由で通信します。すべてのデバイス操作は ADB 経由で行われ、アプリの変更は不要です。スクリーンショットはメモリ内でキャプチャされ、圧縮された後、AI が視覚的に確認して分析できる base64 画像として返されます。
コントリビューション
コントリビューションを歓迎します!ガイドラインについては CONTRIBUTING.md をご覧ください。
ライセンス
MIT - LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。