AzkiDeck-mcp-server
AzkiDeck-mcp-server
El servidor de retransmisión MCP multi-tenant de AzkiDeck: permite que los clientes MCP (Claude Desktop / Claude Code, etc.) se conecten desde cualquier lugar al dispositivo móvil con la AzkiDeck App (Android / iOS) para enviar notificaciones al reloj, instalar esferas / aplicaciones rápidas y gestionar iconos de notificaciones — sin necesidad de que el teléfono y el ordenador estén en la misma red local.
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 核心)Características
Aislamiento multi-tenant: la credencial es la tenant. La credencial la genera y la conserva la App del teléfono (reutiliza el token de puente de red local de la App); el servidor solo almacena el hash SHA-256; los dispositivos, herramientas y colas de cada tenant están completamente aislados.
Agregación de múltiples dispositivos: una misma credencial admite varios teléfonos (iPhone + Androide), las herramientas se deduplican automáticamente y las llamadas se rutan al dispositivo activo más recíste.
Reenvío ofline: si el dispositivo se reconcata dentro de los 10 minutos, se reenvía las llamadas de notifciación de los últimos 5 minutos (las de progreso se comprimen en la últma; las notifcaciones eliminadas con clear no se renvíes); si se supera la ventana, se trata como ofiine y no se renvían.
Modo público/privado dual: en modo público solo require la dirección para vinclarse; en el modo privado se require ademas una clave de despliegue; se puede cambir en caliente, y al cambiar se puede optionar si se reautentican los disposivos ya vinculados.
Dependencias m'nimas: en tiempo de ejecución solo se necesita
ws; Node ≥ 22.13 (sandonode:sqliteintegra).
Related MCP server: Remote Control MCP (Electrobun)
Inicio rápido
# 需要 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 命令Para un despliegue por internet (>en) debemos forzar TLS (con TLS_CERT/TLS_KEY integrados, o con un proxy reverso Caddy/nginx); ver docs/deployment.md.
Configuración en el teléfono
App → 连接中心 → puente de notificaciones (AI): confirmar que está activado (el token está aquí)
En el modo de retransmisión (página de ajustes): rellenar la dirección del servidor; la credencial se reutiliza automáticamente el token de puente; si el servidor está en modo privado, indicar también la clave de despliegue.
El teléfono muestra "relay conectado" y el emparejamiento ha terminado.
Conexión de un cliente MCP
claude mcp add --scope user --transport http azki-watch \
https://你的服务器/mcp --header "Authorization: Bearer <手机 App 里的令牌>"Varios clientes (ordenador, portátil, CI) pueden compartir el mismo token.
Pruebas de integración con mock dispositivo ( sin móvil)
azkideck-mcp-server serve &
node scripts/fake-device.mjs --server ws://127.0.0.1:8787 --credential <任意32位hex>
# 之后 Claude 里调用 send_notification,假设备终端会打印 payloadGestión
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 de administración en tiempo de ejecución (se habilita definiendo la variable de entorno ADMIN_TOKEN):
Endpoint | Descripción |
| Comprobación dehealth, solo contiene estadísticos |
| Lista de tenants (el id solo muestra el prefijo de 8 caracteres) |
| Dispositivos en línea |
| Revocar / restablever |
| Ver / cambiar de modo; |
Configuración (variables de entorno)
Variable | Default | Descripción |
| 8787 / 0.0.0.0 | Dirección de escucha |
|
| Directorio de datos de SQLite |
|
| Registro directo de tenants en modo público para dispositivos que se conectan |
| (ninguno) | Se habilita la API de administración si se establece |
| (ninguno) | Si se establecen ambos, se habilita HTTPS/WSS integrado |
| 30000 / 60000 | Timeout de llamadas de herramienta |
| 300000 | Tiempo de retención offline 5 minutos |
| 600000 | Ventana de reenvío de reconexión 10 minutos |
| 120 / 600 / 20 | Límites de velocidad |
Modelo de seguridad
El servidor nunca almacena las credenciales en texto plano (SHA-256 hash), compara con un algoritmo de tiempo constante.
En despliegues públicos se recomienda forzar TLS; el token tiene 128 bits de entropía; los errores 401 se limitan por IP de origen.
La revocación de credencial tiene efecto inmediato: los dispositivos en línea son expulsados, en el lado MCP recibe 401 y no se recuperan solos.
El modo privado reduce a "quién puede vincularse" a los que tienen la clave de despliegue; al cambiar
require_reauthse puede obligar a redeterminar todos los dispositivos ya vinculados.
Relación con el modo de red local
Modo/IP | Conexión directa (modo red local (integrada) | Servidor de retransmisión |
Requisito | El teléfono y el dispositivo en el mismo segmento de red | Solo necesita que el teléfono tenga internet. |
IP | Cambiar de Wi-Fi | Fija |
Ruta de datos | No pasa por terceros | Pasa por el servidor (el servidor solo ve hashes y contenido retransmitido) |
Modo offline | Error directo | Cola de notificaciones, reenvío en colas |
Ambas se pueden activarle a la vez sin interferir.
Desarrollo
npm install
npm run dev # tsx watch
npm test # vitest(含 e2e:真实端口 + 假设备)
npm run lint && npm run typecheckLos detalles del protocolo están en docs/protocol.md (especificación de implementación del lado del móvil).
License
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