Claude Media
ClaudeにAndroid-MCPをつないでAndroid端末を操作する手順

ClaudeにAndroid-MCPをつないでAndroid端末を操作する手順

Android-MCPでClaudeからAndroid端末やエミュレーターを操作する手順。uvxでの登録、adbの確認、Wi-Fi接続、使えるツール、実機で試すときの注意をまとめます。

Android-MCPは、ClaudeからAndroid端末の画面を読み、タップや入力をさせるためのMCPサーバーです。「設定アプリを開いてWi-Fiの一覧を見せて」と頼むと、Claudeが画面の要素を読み取り、座標やテキストを指定して操作を進めます。アプリの動作確認や、手で何度もなぞる操作の肩代わりに向きます。

CursorTouchが公開しているオープンソースで、Claudeのコネクタ一覧にも「Anthropic verified」の表示つきで載っています。この記事では、前提の確認から登録、実機とエミュレーターの選び方、使えるツールの範囲、安全面までを順に説明します。MCPの登録そのものの基本はClaude CodeのMCPサーバー設定ガイドにあります。

Android-MCPで何ができるのか

Android-MCPはadb(Android Debug Bridge)を通して端末を動かします。画面の要素はAndroidのアクセシビリティAPIから読むため、画像認識専用のモデルやOCRの仕組みは要りません。READMEは「どの言語モデルでも使える」としています。

操作できる範囲は次のとおりです。

  • アプリの起動、タップ、スワイプ、文字入力
  • 画面のUI要素の一覧(ビュー階層)の読み取り
  • スクリーンショットの取得
  • 端末のボタン(戻る、音量など)の操作

READMEが挙げる用途は、アプリの画面遷移、UI操作、自動QAテストです。反応速度は、2回のタップの間でおおよそ2〜4秒と書かれています。端末の性能や負荷で変わります。人が操作するより遅いと見ておくと、待ち時間に驚きません。

対応OSはAndroid 10以降です。実機でもエミュレーターでも動きます。

導入前に確認する3つの前提

READMEが挙げる前提は、Python 3.13とadbです。コネクタのページは、これに加えてパッケージマネージャーのuvが必要だと明記し、導入コマンドとして次の1行を載せています。

curl -LsSf https://astral.sh/uv/install.sh | sh

adbはAndroid SDKのplatform-toolsに含まれます。Android-MCPはadbを次の順で探します。

  1. PATH 上のadb
  2. ANDROID_HOME や ANDROID_SDK_ROOT、Android Studioの既定SDK配下にあるplatform-tools
  3. /opt/homebrew/bin と /usr/local/bin

特定のバイナリを使いたいときは、環境変数 ANDROID_MCP_ADB_PATH で指定します。指定先が実行ファイルでなければ、別の場所を探しにいかずエラーになります。一度見つけたadbのパスはサーバーのプロセスが生きている間は保持されるので、adbを移動したらサーバーを再起動します。

デスクトップのMCPクライアントは、ターミナルと違う PATH でサーバーを起動することがあります。ターミナルで adb が通るのに接続できないときは、まずここを疑います。READMEによると、Claude Desktopの拡張機能には「adb Binary Path」という設定項目があります。

端末がadbから見えているか確かめる

サーバーを登録する前に、adbが端末を認識しているかを確認します。USB接続なら端末側でUSBデバッグを有効にし、エミュレーターなら起動しておきます。

adb devices

READMEの例では、次のように端末が device として並びます。

List of devices attached
R38M30XXXXX   device

シリアル番号は端末ごとに違い、エミュレーターは emulator-5554 のような名前で出ます。一覧が空か unauthorized のときは、端末側のUSBデバッグの許可を見直します。ここが通らないうちにMCPの設定を触っても、原因の切り分けが難しくなります。

Wi-Fi経由で使う場合は、先にadbで接続しておきます。

adb connect 192.168.1.3:5555
adb devices

ClaudeにAndroid-MCPを登録する

登録先はClaude DesktopとClaude Codeで書き方が違います。READMEが推奨するのはuvxでの起動で、依存関係を自分で入れる必要がありません。

Claude Desktopの場合

設定ファイルを開き、mcpServers に次を足します。ファイルの場所はmacOSが ~/Library/Application Support/Claude/claude_desktop_config.json、Windowsが %APPDATA%\Claude\claude_desktop_config.json です。

{
  "mcpServers": {
    "android-mcp": {
      "command": "uvx",
      "args": ["--python", "3.13", "android-mcp"]
    }
  }
}

保存したらClaude Desktopを再起動します。「android-mcp」が連携として表示されれば登録できています。Windowsでは、Python 3.14だと推移的依存のpywin32が解決できないため、3.13を指定するよう注意書きがあります。

設定ファイル全般の扱いはClaude Desktopのmcp設定の書き方に詳しくあります。

Claude Codeの場合

Claude Codeでローカルのstdioサーバーを足す書式は claude mcp add [options] <name> -- <command> [args...] です。-- より後ろは、サーバー側へそのまま渡されます。READMEのuvx起動をこの書式に当てはめると、次の形になります。これは公式の書式にREADMEの引数を組み合わせた例です。

claude mcp add --transport stdio android-mcp \
  -- uvx --python 3.13 android-mcp
claude mcp list

claude mcp list の出力に ✔ Connected が出れば、Claude Codeから接続できています。Android-MCPは端末への接続を後回しにする作りなので、端末が無くてもここは通ります。端末が見えるかどうかは、最初のツール呼び出しで分かります。

複数台やWi-Fi端末を指定する

Android-MCPは、ツールが呼ばれた時点で端末を決めます。何も指定しなければ、adb devices に出た端末のうち実機を優先して選びます。端末が無いときも、MCPのハンドシェイクは落ちず、ツール呼び出しが設定エラーを返します。

複数台をつないでいるときは、起動引数か環境変数で固定します。

指定方法意味
--device <serial>意味USBのシリアル、または host:5555 の形で端末を直接指定
--wifi 192.168.1.3意味Wi-Fi接続を使い、ポート5555を自動で補う
--usb意味最初に見つかったUSB端末を使う(シリアルも続けて指定可)
--connection wifi / usb意味優先する接続の種類を選ぶ

環境変数では、ANDROID_MCP_DEVICE(シリアルまたは host:port)、ANDROID_MCP_CONNECTION(auto、usb、wifi)、ANDROID_MCP_HOST(Wi-Fiのホスト。ポート5555は省略可)が使えます。Claude Desktopなら、Wi-Fi端末の指定は設定ファイルの env に書けます。

{
  "mcpServers": {
    "android-mcp": {
      "command": "uvx",
      "args": ["--python", "3.13", "android-mcp"],
      "env": {
        "ANDROID_MCP_CONNECTION": "wifi",
        "ANDROID_MCP_HOST": "192.168.1.3"
      }
    }
  }
}

使えるツールの範囲を知る

READMEのツール一覧は次のとおりです。コネクタのページは9個の短い一覧(Click、Snapshot、LongClick、Swipe、Type、Drag、Press、Notification、Wait)を載せており、READMEのほうが端末の管理系を含めて広く書かれています。

分類ツール役割
端末の管理ツールListDevices / ConnectDevice / Device役割端末の一覧、接続、切断
画面の読み取りツールSnapshot役割操作できるUI要素を読む。use_vision=True でスクリーンショットも付ける
タップ系ツールClick / ClickBySelector / LongClick役割座標、またはテキスト・リソースID・クラス名・説明で要素を指定
入力ツールType役割フォーカス中のフィールドへ文字を送る
移動系ツールSwipe / Drag役割2点間のスワイプ、ドラッグ
端末の操作ツールPress / Notification役割ボタン操作、通知バーを開く
待機ツールWait / WaitForElement役割一定時間待つ、要素が出るまで待つ

Typeの癖:先にClickが要る

Typeには x と y の引数がありますが、READMEによると現状はこの座標でフィールドにフォーカスを移しません。入力欄を選ぶには、先にClickを呼ぶ必要があります。「入力欄に○○と入れて」と頼んで空振りしたときは、この順序が崩れていないかを見ます。

スクリーンショットとトークン

Snapshotはスクリーンショットを付けると、画像の分だけ入力トークンが増えます。環境変数 SCREENSHOT_QUANTIZED を true にすると、スクリーンショットを量子化して入力トークンを減らせます。クリーンな画像が欲しいときは use_annotation=False を指定します。

Claude Codeで安全に使うための設定

Android-MCPは端末上で任意のUI操作を実行できます。READMEも、信頼できないプロンプトやエージェントを動かすときは、エミュレーターやテスト端末のような管理された環境で使うよう注意しています。コネクタのページにも、信頼できる開発者のコネクタだけを使うようにという案内があります。

実機の個人用端末にはつながない、が基本の線引きです。決済アプリやメッセージアプリが入った端末で「画面を適当に操作して」と任せると、意図しない送信や購入につながり得ます。

Claude Codeでは、ツール単位で許可を絞れます。MCPツールの許可ルールは mcp__<サーバー名>__<ツール名> で書き、サーバー全体は mcp__<サーバー名>__* で指定します。入力と端末ボタンの操作だけは、毎回確認を挟む構成の例です。

{
  "permissions": {
    "ask": [
      "mcp__android-mcp__Type",
      "mcp__android-mcp__Press"
    ]
  }
}

ツール名は、READMEの表記に合わせた例です。実際の名前は /mcp の画面で確かめてから書きます。

CLAUDE.mdには、操作の範囲を決める規約を置く方法があります。例えば次のような断片です。

## Android-MCPの使い方
- 操作対象はエミュレーター(emulator-5554)だけにする
- 画面を操作する前に、必ずSnapshotで現在の画面を読む
- 入力欄に書く前に、Clickでフォーカスを移す
- 購入・送信・削除のボタンは押さずに、押す前に確認する

この規約はあくまでClaudeへの指示で、強制力は許可ルールのほうにあります。両方を組み合わせると、事故が起きにくくなります。

動作確認を依頼する流れ

接続できたら、最初は読み取りだけの依頼から始めると失敗が見えやすくなります。

手順

最初の動作確認の進め方

  1. 1

    端末を見つける

    「ListDevicesで接続中の端末を見せて」と頼みます。想定した端末が出なければ、adb devices に戻ります。

  2. 2

    画面を読む

    「Snapshotで今の画面にある要素を一覧にして」と頼みます。要素が読めればアクセシビリティ経由の取得は動いています。

  3. 3

    1つだけ操作する

    「設定アプリを開いて」のように、結果が目で確認できる単純な操作を1つ頼みます。

  4. 4

    複数手順に進める

    操作が通ったら、画面遷移を含む手順を頼みます。反応が2〜4秒ずつかかる前提で待ちます。

つまずきやすい点の切り分け

切り分け

つながらないときの確認順

  1. Qadb devices に端末が device として出ていますか?
    答えがいいえのとき

    USBデバッグの許可、ケーブル、エミュレーターの起動を見直します。

    答えがはい
  2. Qサーバーが adb を見つけていますか?
    答えがいいえのとき

    ANDROID_MCP_ADB_PATH で実行ファイルを指定し、サーバーを再起動します。

    答えがはい
  3. QPython 3.13 で起動していますか?
    答えがいいえのとき

    uvxの引数に --python 3.13 を付けます。Windowsは3.14だと依存が解決できません。

    答えがはい

それでも動かないとき

端末が複数あるなら --device でシリアルを固定します。Typeが効かないなら、先にClickでフォーカスを移します。

同じ領域のサーバーとの使い分け

Android-MCPは、起動済みの端末やエミュレーターの画面を操作する側に寄っています。Gradleビルドやlogcat解析まで含むAndroid開発向けのサーバー(コネクタ一覧のReplicant MCPなど)とは目的が違い、ビルドと実行は別の手段で用意しておき、そのあとの画面操作を任せる使い方が合います。

PCのアプリを操作させる方向のMCPには、Desktop Commanderがあります。操作する対象が端末の画面なのか、PCの中なのかで選びます。

まとめ

Android-MCPは、uvとadbが通っていれば、設定を数行足すだけでClaudeに端末操作を任せられます。ただし権限は端末全体に及ぶので、エミュレーターか検証用の端末に限り、入力や端末ボタンの操作には許可ルールで確認を挟むのが堅実です。導入に詰まったときは、adb devices の結果を最初の判断基準にします。

この記事を共有:XはてブLinkedIn
MCP をもっと見る →