Skip to main content
Glama
zalazp
by zalazp

adb-sms MCP

Чтение SMS-кодов подтверждения Android через ADB для выполнения веб-входа по SMS в Cursor Agent совместно с chrome-devtools.

Принцип проектирования: номера телефонов настраиваются пользователем в devices.json; adb отвечает только за определение serial устройства и чтение OTP из SMS.

Принцип работы

USB 连接手机(adb devices → serial)
        │
        ├─ devices.json[serial].phone_numbers  →  Web 填手机号
        │
        └─ adb 读短信 inbox                    →  adb_wait_for_otp 拿验证码

Related MCP server: Android Forensics ADB MCP Server

Структура проекта

mcp-adb-sms/
├── server.py              # MCP 服务入口
├── adb_client.py          # ADB 设备 / 短信读取
├── sms_parser.py          # 短信与 OTP 解析
├── test_local.py          # 本地自检(不启动 MCP)
├── requirements.txt
├── devices.json.example   # 手机号配置模板(提交到 git)
├── devices.json           # 本地配置(git 忽略,需自行创建)
└── README.md

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

  1. На Android-телефоне включена отладка по USB и выдан доступ компьютеру

  2. adb devices показывает device (не unauthorized)

  3. Python 3.10+ (рекомендуется 3.12)

  4. Android platform-tools (включая adb)

Установка

git clone https://github.com/zalazp/mcp-adb-sms.git
cd mcp-adb-sms
py -3.12 -m pip install -r requirements.txt

Настройка номеров телефонов (обязательно)

Номера телефонов не считываются adb — запишите их самостоятельно в devices.json:

copy devices.json.example devices.json
  1. Выполните adb devices и запишите serial (например, 10AD410LNF000PX)

  2. Используя serial в качестве ключа, укажите все номера телефонов этого устройства

{
  "10AD410LNF000PX": {
    "phone_numbers": [
      "18317840243",
      "19139582095"
    ]
  }
}

Настройка Cursor

Отредактируйте %USERPROFILE%\.cursor\mcp.json:

{
  "mcpServers": {
    "adb-sms": {
      "command": "py",
      "args": [
        "-3.12",
        "E:\\path\\to\\mcp-adb-sms\\server.py"
      ],
      "env": {
        "ADB_PATH": "D:\\RJAZ\\Sdk\\platform-tools\\adb.exe"
      }
    }
  }
}

Поле

Описание

путь в args

укажите абсолютный путь к server.py в клонированном каталоге

ADB_PATH

абсолютный путь к adb.exe на этой машине; если он уже в PATH, можно указать "adb"

После сохранения перезапустите Cursor — в панели MCP adb-sms должен стать зелёным.

Локальная самопроверка

cd mcp-adb-sms
$env:ADB_PATH="D:\RJAZ\Sdk\platform-tools\adb.exe"
py -3.12 test_local.py

Пример корректного вывода:

{
  "adb_exists": true,
  "devices": [{ "serial": "10AD410LNF000PX", "state": "device" }],
  "sms_readable": true,
  "sim_numbers": [
    { "number": "13800138000", "available": true },
    { "number": "13900139000", "available": true }
  ],
  "device_profile": { "source": "devices.json" }
}

Если в recommendations указано, что отсутствует конфигурация, создайте devices.json, как описано выше.

Инструменты MCP

Инструмент

Описание

adb_health_check

диагностика adb, читаемости SMS и наличия конфигурации devices.json

adb_list_devices

список подключённых ADB-устройств

adb_get_sim_numbers

чтение номеров телефонов текущего serial из devices.json

adb_read_recent_sms

чтение последних N SMS

adb_wait_for_otp

опрос и ожидание нового OTP после отправки кода на веб-странице

adb_grant_sms_permission

попытка выдать shell разрешение на чтение SMS на Android 11+

adb_shell

ограниченный adb shell (команды из белого списка)

Типовой процесс Agent (вход по SMS)

1. adb_health_check()
2. adb_get_sim_numbers()              ← 从 devices.json 取手机号
3. chrome-devtools: 打开登录页、填号、勾选协议
4. chrome-devtools: 滑块验证码(失败则人工完成)
5. chrome-devtools: 点击「发送验证码」
6. adb_wait_for_otp(timeout=90, sender_filter="Midea|美的")
7. chrome-devtools: 填入验证码并登录

Если SMS не читаются

adb shell appops set com.android.shell READ_SMS allow

Или вызовите в Agent adb_grant_sms_permission, а затем выполните adb_health_check.

Если это по-прежнему не помогает, MCP попытается прочитать SMS из уведомлений через dumpsys notification (с меньшей точностью).

Примечания по безопасности

  • Читает SMS только с локального устройства, подключённого по USB

  • Не сохраняет содержимое SMS на диск

  • devices.json содержит номера телефонов и уже в .gitignore — не публикуйте его в открытых репозиториях

  • adb_shell разрешает только команды из белого списка: content / dumpsys / getprop и т.п.

  • Только для собственных устройств или сценариев тестирования с разрешения владельца

Лицензия

MIT

Related MCP Connectors

Related MCP Servers