android-mcp-server

by minhalvp (community) · Claude Desktop, Android + ADB

MCP MCP Servers Open Source v0.1.0

MCP-сервер для управления Android-устройством через ADB. Позволяет LLM делать скриншоты, анализировать UI, нажимать на элементы и автоматизировать действия на телефоне. Возможности: - Скриншот текущего экрана и его анализ моделью - Получение XML-дерева UI (UIAutomator dump) - Тап / свайп / ввод текста - Запуск приложений по package name - Выполнение shell-команд через ADB - Работает с любым подключённым Android (USB или Wi-Fi ADB)

v0.1.0
current
Добавлен 18.06.2026 · Обновлён 18.06.2026 · MCP Servers
Установка
# Требуется 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"]
    }
  }
}
переведено ИИ

Android MCP Server

Сервер MCP (Протокол контекста модели), обеспечивающий программное управление устройствами Android через ADB (Android Debug Bridge). Этот сервер предоставляет различные возможности управления устройствами Android, к которым могут обращаться клиенты MCP, такие как Claude desktop и редакторы кода (например, Cursor)

Возможности

  • 🔧 Выполнение команд ADB
  • 📸 Получение скриншотов устройства
  • 🎯 Анализ компонентов пользовательского интерфейса
  • 📱 Управление пакетами устройства

Предварительные требования

  • Python 3.x
  • ADB (Android Debug Bridge), установленный и настроенный
  • Устройство Android или эмулятор (не тестировалось)

Установка

  1. Клонируйте репозиторий:
git clone https://github.com/minhalvp/android-mcp-server.git
cd android-mcp-server
  1. Установите зависимости: Данный проект использует uv для управления проектом через различные методы установки.
uv python install 3.11
uv sync

Конфигурация

Сервер поддерживает гибкую конфигурацию устройств с различными сценариями использования.

Режимы выбора устройства

1. Автоматический выбор (Рекомендуется для одного устройства)

  • Файл конфигурации не требуется
  • Автоматически подключается к единственному подключённому устройству
  • Идеально подходит для разработки с одним тестовым устройством

2. Ручной выбор устройства

  • Используйте, когда подключено несколько устройств
  • Укажите конкретное устройство в файле конфигурации

Файл конфигурации (Опционально)

Файл конфигурации (config.yaml) не является обязательным. Если он отсутствует, сервер автоматически выберет устройство, если подключено только одно.

Для автоматического выбора

Просто убедитесь, что подключено только одно устройство, и запустите сервер — никакая конфигурация не нужна!

Для ручного выбора

  1. Создайте файл конфигурации:
cp config.yaml.example config.yaml
  1. Отредактируйте 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:

  1. Найдите файл конфигурации Claude Desktop:

  2. Windows: %APPDATA%\Claude\claude_desktop_config.json

  3. macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  4. Добавьте конфигурацию 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
        для пакета
    """

Участие в разработке

Приветствуется вклад!

Благодарности

Комментарии
Войдите, чтобы оставить комментарий