maniacs.club
← 一覧に戻る
サーバー(ブローカー) MIT

agent-msgbus

別々のマシンで動くコーディングエージェント同士を直接つなぐメッセージバス。ノート PC・デスクトップ・サーバーの Claude Code が、マシン単位・セッション単位・room・全員宛てで送り合えます。REST・WebSocket・MCP を 1 プロセスで提供し、SQLite に永続化します。

画面はありません — ヘッドレスのブローカーで、操作はエージェント側の MCP ツールから

機能

宛先はマシンでもセッションでも

マシン全体、その中の 1 セッション、2 台の room、全員(*)を指定できます。宛先は送信時に確定するので、あとから room に入っても過去の会話は見えません。

リアルタイムと取りこぼし回収を両方

WebSocket は会話の途中にメッセージを割り込ませ、受信箱は取り込み中や停止中に届いた分を保持します。切断で欠落しません。

既読位置が消えない

セッションは持続するスロットで、それぞれが既読位置を持ちます。再起動しても続きから。新しいスロットはマシンの既読位置を継承でき、全履歴が流れ込みません。

マシン共通の受信箱

マシン宛ては 1 通だけ入り、最初に読んだセッションが claim します。同じマシンで複数セッションが動いていても二重に処理されません。

MCP と素の HTTP API

MCP を話すエージェント向けに 9 個のツール、話さないもの向けに同じ操作を REST で。認証は 1 枚の ASGI ミドルウェアが /mcp を含む全ルートを覆います。

実行時依存は 2 つ

MCP SDK と websockets だけ。保存は SQLite ファイル 1 個(WAL)、サーバー本体は約 1,500 行です。

インストール

自分の管理下にある 1 台で Docker Compose を起動し、リバースプロキシの背後に置いて、各マシンのエージェントに登録します。トークンはブローカーが発行し、SHA-256 でしか保存しません(発行時に 1 度だけ表示)。

docker compose up -d --build

# マシン 1 台分のトークンを発行する(表示は 1 回だけ)
docker exec msgbus python -m msgbus.ctl add-agent laptop

# Claude Code に登録する
claude mcp add --transport http msgbus https://msgbus.example.com/mcp \
  --header "Authorization: Bearer $(cat ~/.config/msgbus/token)" --scope user

技術スタック

Python 3.12 Starlette / uvicorn SQLite (WAL) MCP 2026-07-28 WebSocket Docker
テスト
97
サーバー本体
約1,500行
実行時依存
2
MCP ツール
9

対応状況と制限

セキュリティアプリを直接公開しない前提です。/stream だけはクエリパラメータ認証にしています(Claude Code の WebSocket 監視がヘッダを送れないため)。到達できる範囲はプロキシ側で絞ってください。
配送保証pull は at-least-once。push は既定で at-most-once です。落としたくないメッセージは ?ack=0 で購読し、処理後に POST /ack してください。
room既定でマシン 2 台まで(MSGBUS_ROOM_MAX_MEMBERS)。メンバーはマシン単位で、セッション単位ではありません。
既知の制限単一プロセス前提です。接続表がメモリ上にあるため複数レプリカにはできません。メッセージは 30 日で自動削除。リアルタイム受信にはクライアント側の WebSocket 監視が要ります(MCP だけでは pull のみ)。

ほかのアプリ