AzkiDeck-mcp-server
AzkiDeck-mcp-server
AzkiDeck のマルチテナント MCP リレーサーバー:MCP クライアント(Claude Desktop / Claude Code など)がユーザーのスマホ上の AzkiDeck App(Android / iOS)にいつでも接続し、通知を腕時計にプッシュ、文字盤/クイックアプリのインストール、通知アイコンの管理——スマホとPCが同じLAN内にある必要はもうありません。
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 核心)特徴
マルチテナント分離:資格情報がテナント。資格情報はスマホAppが生成・保持(AppのLANブリッジトークンを再利用)、サーバーはSHA-256ハッシュのみ保存。異なるテナントのデバイス、ツール、バッファは完全に分離
マルチデバイス集約:同じ資格情報で複数のスマホ(iPhone + Android)を接続可能。ツールリストは自動的に重複排除・統合され、呼び出しは最も最近アクティブなデバイスにルーティング
オフライン再送:デバイスが10分以内に再接続した場合、直近5分以内の通知系呼び出しを再送(進捗系は最新の1件に自動圧縮、clearされた通知は再送しない)。ウィンドウを超えるとオフラインと判定し再送しない
公開/プライベートのデュアルモード:公開モードはアドレスを入力するだけでペアリング可能。プライベートモードはデプロイキーも必要。実行中に切り替え可能。切り替え時に、ペアリング済みデバイスに再認証を要求するか選択可能
最小限の依存関係:実行時は
wsのみ。Node ≥ 22.13(組み込みのnode:sqliteを使用)
Related MCP server: AItomation MCP relay
クイックスタート
# 需要 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 を参照。
スマホ側の設定
App → ツールボックス → AI通知ブリッジ:有効になっていることを確認(トークンはここにあります)
リレーモード(設定ページ):サーバーアドレスを入力。資格情報はブリッジトークンを自動的に再利用。サーバーがプライベートモードの場合はデプロイキーも入力
Appに「リレー接続済み」と表示されればペアリング完了
MCPクライアントの接続
claude mcp add --scope user --transport http azki-watch \
https://你的服务器/mcp --header "Authorization: Bearer <手机 App 里的令牌>"複数のクライアント(PC、ノートPC、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切り替えで、ペアリング済み全デバイスに再認証を強制可能
LANモードとの関係
LAN直接接続(App内蔵) | リレーサーバー | |
要件 | PCとスマホが同じネットワーク | スマホがインターネットに接続できればよい |
アドレス | Wi-Fi変更で変わる | 固定 |
データパス | 第三者を経由しない | リレーを経由(サーバーはハッシュと転送された暗号文/呼び出し内容のみ見える) |
オフライン | 直接失敗 | 通知系はキューで再送 |
両方同時に有効にでき、互いに影響しません。
開発
npm install
npm run dev # tsx watch
npm test # vitest(含 e2e:真实端口 + 假设备)
npm run lint && npm run typecheckプロトコル詳細は docs/protocol.md(スマホ側実装仕様)を参照。
License
This server cannot be deployed
Maintenance
Related MCP Connectors
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
Remote MCP server for Web3TV creators — manage your account over MCP.
Remote MCP server for AI.TV creators — delegate account operations to your AI agent over MCP.
Access Kernel's cloud-based browsers and app actions via MCP (remote HTTP + OAuth).
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables secure remote access to your computer's filesystem and terminal through MCP, allowing AI assistants to manage files, run commands, and automate tasks from anywhere via a hosted relay.145-
- AlicenseNot gradedqualityCmaintenanceEnables external AI applications to access MCP tools by providing a user-hosted HTTPS endpoint that forwards requests to a paired desktop client.MIT
- AlicenseNot gradedqualityBmaintenanceEnables desktop agents such as Claude Code and Codex to control an Android phone as a long-lived action endpoint, pairing over outbound WebSocket and exposing phone capabilities as MCP tools with local pause and revocation.MIT
- AlicenseNot gradedqualityBmaintenanceEnables remote MCP clients to access local MCP servers and command-line tools over the web, with user approval required for every connection.1MIT