Как отдать управление Android нейросети через MCP без костылей с ADB

18 авг 2026
496
65
4
3 недели

Большинство попыток подружить LLM со смартфоном обычно упираются в одну и ту же схему. Телефон лежит на столе, воткнут по USB в ноутбук, на ноутбуке крутится Python-скрипт с ADB, который каждую секунду делает дамп uiautomator размером в сотни килобайт и скармливает его модели. Задержки дикие, токены улетают за пару итераций, а уйти от компьютера с телефоном нельзя.

Разработчик Даниэле Альбано выложил проект android-remote-control-mcp, который решает эту задачу иначе. Приложение запускает полноценный MCP-сервер (Model Context Protocol) прямо на самом Android-устройстве. Никаких проводов и управляющих ПК рядом не требуется.

Демонстрация работы

Что внутри и как это работает

Внутри APK крутится легковесный сервер на Ktor и Netty. Приложение использует стандартный Android Accessibility Service (Службу специальных возможностей), чтобы читать дерево интерфейса, нажимать кнопки, свайпать, вводить текст и делать скриншоты.

Всего в проекте реализовано 57 инструментов MCP. Они разбиты по категориям:

Реклама
  • чтение состояния экрана и поиск элементов
  • жесты, тапы по координатам и ввод текста
  • работа с файловой системой и загрузка файлов
  • доступ к камере, микрофону и геолокации

В отличие от классического вызова команд через ADB с задержками в 1-4 секунды, прямой вызов через службу доступности отрабатывает за 10-100 миллисекунд.

Экономия токенов и локальная приватность

В агентных циклах главная статья расходов — контекст. Если отдавать нейросети сырой XML интерфейса, окно контекста забьется за пять шагов. В этом проекте дерево UI сжимается в компактный формат, а скриншоты размечаются номерами интерактивных элементов. Качество и разрешение картинок можно урезать в настройках, чтобы уложиться в бюджет.

Отдельного внимания заслуживает Privacy Mode. Перед тем как отправить снимок экрана или текст в Claude или ChatGPT, приложение прогоняет данные через локальную модель распознавания сущностей (NER) на базе Ai4Privacy весом около 150 МБ. Модель скачивается на телефон один раз.

Она находит и заменяет псевдонимами:

  • пароли и токены (точность около 91%)
  • номера банковских карт и IBAN (около 75%)
  • адреса электронной почты (100%)
  • телефоны и паспортные данные

В итоге модель видит плейсхолдер вроде EMAIL#a1b2c и может связывать его между экранами, но сам адрес на сервера Anthropic или OpenAI не уходит. С именами собственными локальная модель справляется пока слабее (меньше 1%), о чем автор честно предупреждает в описании.

Установка приложений через агента

Подключение к Claude и ChatGPT

Сервер поддерживает два варианта авторизации: обычный Bearer-токен и полноценный OAuth 2.1. Второй вариант как раз нужен для подключения к Claude.ai или ChatGPT через Custom Connectors.

Схема настройки выглядит так:

  1. Включаете в приложении встроенный туннель Cloudflare Quick Tunnels (он поднимается в один клик без регистрации) или ngrok.
  2. Копируете выданный публичный HTTPS-адрес с окончанием /mcp.
  3. Вставляете URL в настройках коннектора Claude.ai или веб-версии ChatGPT. Поля Client ID и Secret оставляете пустыми, так как сервер поддерживает Dynamic Client Registration.
  4. На телефон приходит пуш с двухзначным кодом подтверждения. Нажимаете «Одобрить», и агент получает доступ к устройству.

Для локальной работы с Claude Desktop через USB достаточно пробросить порт:

adb forward tcp:8080 tcp:8080

Затем прописать сервер в конфигурационный файл .mcp.json:

{
  "mcpServers": {
    "android-phone": {
      "type": "http",
      "url": "http://127.0.0.1:8080/mcp",
      "headers": {
        "Authorization": "Bearer ВАШ_ТОКЕН"
      }
    }
  }
}

Все вызовы можно протестировать через обычный curl, отправив инициализирующий JSON-RPC запрос:

curl -s -D- -X POST http://localhost:8080/mcp \
  -H "Authorization: Bearer ВАШ_ТОКЕН" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl-client","version":"1.0.0"}}}'

Поиск билетов в Skyscanner

Подводные камни

Главное неудобство связано с защитой Android 13 и новее. Если ставить APK вручную, система блокирует доступ к Accessibility Service под предлогом Restricted Settings. Приходится заходить в свойства приложения, нажимать три точки в углу и вручную разрешать опасные настройки.

Также на кастомных оболочках вроде MIUI или One UI фоновые службы любят засыпать. Чтобы сервер не отваливался посреди длинного сценария, придется отключить оптимизацию батареи для приложения.

Кому пригодится

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

Сборки выходят в двух версиях: GMS (для стандартных прошивок с сервисами Google) и FOSS (для полностью чистых AOSP-систем). Исходники открыты под лицензией MIT.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.