AzkiDeck-mcp-server
AzkiDeck-mcp-server
Многопользовательский MCP-ретрансляционный сервер для AzkiDeck: позволяет MCP-клиентам (Claude Desktop / Claude Code и т.д.) подключаться в любое время и в любом месте к приложению AzkiDeck на телефоне пользователя (Android / iOS), отправлять уведомления на часы, устанавливать циферблаты/быстрые приложения, управлять значками уведомлений — больше не требуется, чтобы телефон и компьютер находились в одной локальной сети.
MCP 客户端(Claude Desktop 等)
│ POST /mcp (Streamable HTTP, 无状态, Bearer 令牌)
▼
┌─────────────────────────────────────────────┐
│ azkideck-mcp-server │
│ node:http ─┬─ /mcp → MCP 分发 │
│ ├─ /device → 设备接入(WS) │
│ ├─ /admin/* → 管理面 │
│ └─ /healthz │
│ 多租户:凭证即租户,SHA-256 哈希隔离 │
│ 持久化:SQLite(node:sqlite,零原生依赖) │
└─────────────────────────────────────────────┘
▲ wss://server/device (手机出站连接,绕开 NAT)
│ register → mcp-request/response ↔ replay
Android / iOS App(复用 App 内已有的 MCP 核心)Возможности
Мультитенантная изоляция: учётные данные — это тенант. Учётные данные генерируются и хранятся в мобильном приложении (используется токен локального моста приложения), сервер хранит только SHA-256 хэш; устройства, инструменты и буферы разных тенантов полностью изолированы.
Агрегация нескольких устройств: один и тот же токен может использоваться на нескольких телефонах (iPhone + Android), списки инструментов автоматически дедуплицируются и объединяются, вызовы маршрутизируются на самое недавно активное устройство.
Офлайн-повторная отправка: если устройство переподключается в течение 10 минут после разрыва, повторно отправляются вызовы уведомлений за последние 5 минут (прогресс автоматически сжимается до последнего, уведомления, очищенные через clear, не повторяются); если окно превышено, устройство считается офлайн и повторная отправка не выполняется.
Публичный/приватный двойной режим: в публичном режиме достаточно указать адрес для сопряжения; в приватном режиме также требуется ключ развёртывания; переключение возможно во время работы, при переключении можно потребовать повторную аутентификацию всех сопряжённых устройств.
Минимальные зависимости: во время выполнения только одна зависимость
ws; Node ≥ 22.13 (используется встроенныйnode:sqlite).
Related MCP server: Remote Control MCP (Electrobun)
Быстрый старт
# 需要 Node.js ≥ 22.13。尚未发布到 npm registry,从源码安装:
git clone https://github.com/AzumaChiaki/AzkiDeck-mcp-server.git
cd AzkiDeck-mcp-server
npm ci && npm run build
node dist/cli.js serve # 默认监听 0.0.0.0:8787
# 可选:npm link 注册全局 azkideck-mcp-server 命令Для публичного развёртывания необходимо включить TLS (встроенные TLS_CERT/TLS_KEY или обратный прокси Caddy/nginx), подробнее см. docs/deployment.md.
Настройка на телефоне
Приложение → Инструменты → AI-мост уведомлений: убедитесь, что он включён (токен находится здесь)
Режим ретрансляции (страница настроек): укажите адрес сервера, учётные данные автоматически используют токен моста; если сервер в приватном режиме, также укажите ключ развёртывания
Когда приложение показывает «Ретрансляция подключена», сопряжение завершено
Подключение MCP-клиента
claude mcp add --scope user --transport http azki-watch \
https://你的服务器/mcp --header "Authorization: Bearer <手机 App 里的令牌>"Несколько клиентов (компьютер, ноутбук, CI) могут использовать один и тот же токен.
Отладка с фейковым устройством (без телефона)
azkideck-mcp-server serve &
node scripts/fake-device.mjs --server ws://127.0.0.1:8787 --credential <任意32位hex>
# 之后 Claude 里调用 send_notification,假设备终端会打印 payloadУправление
azkideck-mcp-server tenants list # 租户列表
azkideck-mcp-server tenants create # 预置租户(AUTO_REGISTER=false 时)
azkideck-mcp-server tenants revoke <id前缀> # 撤销
azkideck-mcp-server tenants allow <id前缀> # 恢复
azkideck-mcp-server mode get # 查看公开/私有模式
azkideck-mcp-server mode set private --key <hex> [--reauth]API управления во время выполнения (включается переменной окружения ADMIN_TOKEN):
Эндпоинт | Описание |
| Публичная проверка здоровья, только счётчики |
| Список тенантов (id отображается только 8-значный префикс) |
| Онлайн-устройства |
| Отозвать/восстановить |
| Просмотр/переключение режима; |
Конфигурация (переменные окружения)
Переменная | По умолчанию | Описание |
| 8787 / 0.0.0.0 | Адрес прослушивания |
|
| Каталог данных SQLite |
|
| В публичном режиме при первом подключении устройства автоматически создаётся тенант |
| (нет) | Включает |
| (нет) | Если оба заданы, включается встроенный HTTPS/WSS |
| 30000 / 60000 | Таймаут вызова инструмента |
| 300000 | Офлайн-буфер хранится 5 минут |
| 600000 | Окно повторной отправки после разрыва 10 минут |
| 120 / 600 / 20 | Ограничение скорости |
Модель безопасности
Сервер никогда не хранит учётные данные в открытом виде (SHA-256 хэш), сравнение выполняется с помощью алгоритма постоянного времени
Для публичного развёртывания обязательно используйте TLS; токен имеет 128-битную энтропию, 401 ограничивается по IP-адресу источника
Отзыв учётных данных вступает в силу немедленно: онлайн-устройства отключаются, MCP-сторона получает 401, и автоматическое восстановление невозможно
Приватный режим ограничивает «кто может сопрягаться» только теми, у кого есть ключ развёртывания; переключение
require_reauthможет принудительно потребовать повторную аутентификацию всех сопряжённых устройств
Отношение к режиму локальной сети
Прямое подключение по локальной сети (встроено в приложение) | Ретрансляционный сервер | |
Требования | Компьютер и телефон в одной подсети | Телефону достаточно иметь доступ в интернет |
Адрес | Меняется при смене Wi-Fi | Фиксированный |
Путь данных | Не проходит через третьи стороны | Проходит через ретрансляцию (сервер видит только хэш и пересылаемые зашифрованные данные/содержимое вызовов) |
Офлайн | Немедленный сбой | Уведомления ставятся в очередь для повторной отправки |
Оба режима могут быть включены одновременно, они не влияют друг на друга.
Разработка
npm install
npm run dev # tsx watch
npm test # vitest(含 e2e:真实端口 + 假设备)
npm run lint && npm run typecheckДетали протокола см. в docs/protocol.md (спецификация реализации на телефоне).
Лицензия
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables MCP-compatible agents to control an Android device over the network via ADB, providing tools for shell commands, screen capture, UI inspection, file operations, and input simulation.17MIT
- FlicenseNot gradedqualityBmaintenanceEnables remote desktop control with screen capture and mouse/keyboard simulation through an MCP server exposed via a WebSocket tunnel.
- FlicenseNot gradedqualityBmaintenanceEnables control of mobile games via MaaFramework, supporting screenshot, click, swipe, and task execution through MCP protocol.
- AlicenseNot gradedqualityAmaintenanceEnables cloud agents to securely operate local machine resources (files, commands, screenshots) via standard MCP protocol.MIT
Related MCP Connectors
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
Access Kernel's cloud-based browsers and app actions via MCP (remote HTTP + OAuth).
A paid remote MCP for AI SDK MCP gateway registry, built to return verdicts, receipts, usage logs, a
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AzumaChiaki/AzkiDeck-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server