AzkiDeck-mcp-server
AzkiDeck-mcp-server
AzkiDeck 的多租户 MCP 中继服务器:让 MCP 客户端(Claude Desktop / Claude Code 等)随时随地连到用户手机上的 AzkiDeck App(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 核心)Eigenschaften
Multi-Tenant-Isolation:Die Anmeldedaten sind der Mandant. Die Anmeldedaten werden von der mobilen App generiert und gehalten (Wiederverwendung des LAN-Bridge-Tokens der App); der Server speichert nur den SHA-256-Hash; Geräte, Tools und Puffer verschiedener Mandanten sind vollständig isoliert.
Multi-Geräte-Aggregation:Derselbe Anmeldedatensatz kann mehrere Telefone (iPhone + Android) anhängen; die Tool-Liste wird automatisch dedupliziert und zusammengeführt, Aufrufe werden an das zuletzt aktive Gerät weitergeleitet.
Offline-Nachlieferung:Wenn ein Gerät innerhalb von 10 Minuten wieder verbunden wird, werden Benachrichtigungsaufrufe der letzten 5 Minuten nachgeliefert (Fortschrittsaufrufe werden automatisch auf den neuesten Eintrag komprimiert; durch
cleargelöschte Benachrichtigungen werden nicht nachgeliefert); außerhalb des Fensters wird als offline gewertet und nicht nachgeliefert.Öffentlicher/privater Doppelmodus:Im öffentlichen Modus genügt die Angabe der Adresse zur Kopplung; im privaten Modus ist zusätzlich ein Bereitstellungsschlüssel erforderlich; während des Betriebs kann umgeschaltet werden, wobei optional eine erneute Authentifizierung bereits gekoppelter Geräte verlangt werden kann.
Minimale Abhängigkeiten:Zur Laufzeit nur eine Abhängigkeit
ws; Node ≥ 22.13 (verwendet eingebautesnode:sqlite).
Related MCP server: Remote Control MCP (Electrobun)
Schnellstart
# 需要 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 命令Bei öffentlicher Bereitstellung muss TLS aktiviert sein (eingebautes TLS_CERT/TLS_KEY oder Reverse-Proxy mit Caddy/nginx), siehe docs/deployment.md.
Konfiguration auf dem Telefon
App → Werkzeugkasten → AI-Benachrichtigungsbrücke: bestätigen, dass sie aktiviert ist (das Token befindet sich hier)
Relay-Modus (Einstellungsseite): Serveradresse eintragen, die Anmeldedaten übernehmen automatisch das Brücken-Token; wenn der Server im privaten Modus ist, muss zusätzlich der Bereitstellungsschlüssel eingetragen werden
Die App zeigt „Relay verbunden" an, die Kopplung ist abgeschlossen
MCP-Client-Anbindung
claude mcp add --scope user --transport http azki-watch \
https://你的服务器/mcp --header "Authorization: Bearer <手机 App 里的令牌>"Mehrere Clients (Computer, Laptop, CI) können dasselbe Token gemeinsam nutzen.
Testgerät-Integration (ohne Telefon)
azkideck-mcp-server serve &
node scripts/fake-device.mjs --server ws://127.0.0.1:8787 --credential <任意32位hex>
# 之后 Claude 里调用 send_notification,假设备终端会打印 payloadVerwaltung
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]Laufzeit-Verwaltungs-API (aktiviert durch die Umgebungsvariable ADMIN_TOKEN):
Endpunkt | Beschreibung |
| Öffentlicher Health-Check, enthält nur Zähler |
| Mandantenliste (ID zeigt nur 8-stelliges Präfix) |
| Online-Geräte |
| Widerrufen/Wiederherstellen |
| Modus anzeigen/umschalten; |
Konfiguration (Umgebungsvariablen)
Variable | Standard | Beschreibung |
| 8787 / 0.0.0.0 | Listenadresse |
|
| SQLite-Datenverzeichnis |
|
| Im öffentlichen Modus wird bei der ersten Verbindung eines Geräts automatisch ein Mandant erstellt |
| (keine) | Wenn gesetzt, aktiviert |
| (keine) | Wenn beide gesetzt, aktiviert eingebautes HTTPS/WSS |
| 30000 / 60000 | Timeout für Tool-Aufrufe |
| 300000 | Offline-Puffer 5 Minuten aufbewahren |
| 600000 | Fenster für Nachlieferung nach Trennung 10 Minuten |
| 120 / 600 / 20 | Ratenbegrenzung |
Sicherheitsmodell
Der Server speichert niemals Anmeldedaten im Klartext (SHA-256-Hash), der Vergleich verwendet einen Algorithmus mit konstanter Zeit.
Bei öffentlicher Bereitstellung bitte TLS erzwingen; das Token hat 128 Bit Entropie, 401 wird pro Quell-IP begrenzt.
Widerruf der Anmeldedaten wirkt sofort: Online-Geräte werden gekickt, MCP-Seite erhält 401, und es erfolgt keine automatische Wiederherstellung.
Der private Modus beschränkt „wer koppeln kann" auf Personen mit dem Bereitstellungsschlüssel; mit
require_reauthkann beim Umschalten eine erneute Authentifizierung aller gekoppelten Geräte erzwungen werden.
Beziehung zum LAN-Modus
LAN-Direktverbindung (App-integriert) | Relay-Server | |
Anforderung | Computer und Telefon im selben Netzwerk | Telefon muss nur online sein |
Adresse | Ändert sich bei WLAN-Wechsel | Fest |
Datenpfad | Kein Dritter beteiligt | Über Relay (Server sieht nur Hash und weitergeleitete verschlüsselte Daten/Aufrufinhalte) |
Offline | Direkter Fehlschlag | Benachrichtigungsaufrufe werden in der Warteschlange nachgeliefert |
Beide können gleichzeitig aktiviert werden, ohne sich gegenseitig zu beeinflussen.
Entwicklung
npm install
npm run dev # tsx watch
npm test # vitest(含 e2e:真实端口 + 假设备)
npm run lint && npm run typecheckProtokolldetails siehe docs/protocol.md (Implementierungsspezifikation für die Telefonseite).
Lizenz
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