by minhalvp (community) Claude Desktop, Android + ADB
MCP-сервер для управления Android-устройством через ADB. Позволяет LLM делать скриншоты, анализировать UI, нажимать на элементы и автоматизировать действия на телефоне. Возможности: - Скриншот текущего экрана и его анализ моделью - Получение XML-дерева UI (UIAutomator dump) - Тап / свайп / ввод текста - Запуск приложений по package name - Выполнение shell-команд через ADB - Работает с любым подключённым Android (USB или Wi-Fi ADB)
# Требуется adb в PATH. pip install android-mcp-server
# Claude Desktop — claude_desktop_config.json:
{
"mcpServers": {
"android": {
"command": "python",
"args": ["-m", "android_mcp"]
}
}
}
# Claude Code (CLI):
claude mcp add android -- python -m android_mcp
# OpenCode — ~/.config/opencode/opencode.json:
{
"mcp": {
"android": {
"type": "local",
"command": ["python", "-m", "android_mcp"]
}
}
}
Сервер MCP (Протокол контекста модели), обеспечивающий программное управление устройствами Android через ADB (Android Debug Bridge). Этот сервер предоставляет различные возможности управления устройствами Android, к которым могут обращаться клиенты MCP, такие как Claude desktop и редакторы кода (например, Cursor)
git clone https://github.com/minhalvp/android-mcp-server.git
cd android-mcp-server
uv python install 3.11
uv sync
Сервер поддерживает гибкую конфигурацию устройств с различными сценариями использования.
1. Автоматический выбор (Рекомендуется для одного устройства)
2. Ручной выбор устройства
Файл конфигурации (config.yaml) не является обязательным. Если он отсутствует, сервер автоматически выберет устройство, если подключено только одно.
Просто убедитесь, что подключено только одно устройство, и запустите сервер — никакая конфигурация не нужна!
cp config.yaml.example config.yaml
config.yaml и укажите ваше устройство:device:
name: "serial-вашего-устройства-сюда" # Идентификатор устройства из вывода 'adb devices'
Для авто-выбора можно использовать любой из этих способов:
device:
name: null # Явный null (рекомендуется)
# name: "" # Пустая строка
# name: # Или оставить пустым/закомментировать
Чтобы найти идентификатор вашего устройства, выполните:
adb devices
Пример вывода:
List of devices attached
13b22d7f device
emulator-5554 device
Используйте значение из первого столбца (например, 13b22d7f или emulator-5554) как имя устройства.
| Сценарий | Требуемая конфигурация | Поведение |
|---|---|---|
| Подключено одно устройство | Нет | ✅ Автоматически подключается к устройству |
| Несколько устройств, нужно конкретное | config.yaml с device.name |
✅ Подключается к указанному устройству |
| Несколько устройств, нет конфигурации | Нет | ❌ Показывает ошибку с доступными устройствами |
| Устройства не подключены | Н/Д | ❌ Показывает ошибку "нет устройств" |
Примечание: Если у вас подключено несколько устройств и вы не указали, какое использовать, сервер покажет сообщение об ошибке со списком всех доступных устройств.
Для работы с этим сервером необходим клиент MCP. Приложение Claude Desktop является примером клиента MCP. Чтобы использовать этот сервер с Claude Desktop:
Найдите файл конфигурации Claude Desktop:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Добавьте конфигурацию Android MCP сервера в раздел mcpServers:
{
"mcpServers": {
"android": {
"command": "путь/к/uv",
"args": ["--directory", "путь/к/android-mcp-server", "run", "server.py"]
}
}
}
Замените:
путь/к/uv на фактический путь к исполняемому файлу uvпуть/к/android-mcp-server на абсолютный путь к каталогу, куда вы клонировали этот репозиторийhttps://github.com/user-attachments/assets/c45bbc17-f698-43e7-85b4-f1b39b8326a8
Сервер предоставляет следующие инструменты:
def get_packages() -> str:
"""
Получить все установленные пакеты на устройстве.
Возвращает:
str: Список всех установленных пакетов на устройстве в виде строки
"""
def execute_adb_command(command: str) -> str:
"""
Выполняет команду ADB и возвращает вывод.
Аргументы:
command (str): Команда ADB для выполнения
Возвращает:
str: Вывод команды ADB
"""
def get_uilayout() -> str:
"""
Получает информацию о кликабельных элементах в текущем интерфейсе.
Возвращает форматированную строку с деталями о каждом кликабельном элементе,
включая их текст, описание содержания, границы и координаты центра.
Возвращает:
str: Форматированный список кликабельных элементов со свойствами
"""
def get_screenshot() -> Image:
"""
Делает скриншот устройства и возвращает его.
Возвращает:
Image: скриншот
"""
def get_package_action_intents(package_name: str) -> list[str]:
"""
Получить все действия без данных из таблицы разрешения Activity для пакета
Аргументы:
package_name (str): Имя пакета для получения действий
Возвращает:
list[str]: Список всех действий без данных из таблицы разрешения Activity
для пакета
"""
Приветствуется вклад!