agent-bus MCPサーバー 設計書

実装日: 2026-03-07 | 担当: Claude Code 関連: マルチエージェント設計図v1, Antigravityアーキテクチャ概要


1. 概要

Antigravity(司令塔)と Claude Code(実装担当)をはじめとする全エージェント間の双方向通信を行う共通MCPサーバー

MCP (Model Context Protocol) を採用した理由:

  • Antigravity / Claude Code の両方がMCPにネイティブ対応
  • 型安全なツール定義でスキーマ強制
  • 新エージェント追加時にサーバー側コード変更不要
  • マスタープロンプトの「将来の拡張性・継続性を最優先」に合致

2. システム構成図

graph LR
    AG["🧠 Antigravity<br/>(司令塔)"]
    CC["✍️ Claude Code<br/>(実装担当)"]
    OC["🦅 OpenClaw<br/>(24h監視)"]
    NN["📡 ナナ<br/>(ディスパッチャー)"]

    subgraph BUS["agent-bus MCP Server"]
        T["タスク系<br/>dispatch / receive / list"]
        R["報告系<br/>submit / get / acknowledge"]
        S["ステータス系<br/>update / get_all"]
        C["コンテキスト共有<br/>share / get"]
        U["ユーティリティ<br/>health / emergency_stop"]
    end

    subgraph STORE["永続化層"]
        AS["09_AgentSync/<br/>(Obsidian Vault内)"]
    end

    AG -->|stdio MCP| BUS
    CC -->|stdio MCP| BUS
    OC -.->|SSE MCP<br/>(将来)| BUS
    NN -.->|SSE MCP<br/>(将来)| BUS
    BUS --> STORE

3. ファイル構成

C:\ai_work\agent-bus-mcp\
├── server.py              # MCPサーバー本体(12ツール + 通知レイヤー)
├── ws_server.py           # WebSocket通知受信サーバー(ポート8123)
├── auto_orchestrator.py   # 報告監視 + 自動応答デーモン(完全自動ループ)
├── requirements.txt       # mcp, pydantic, websockets
└── README.md              # 運用ドキュメント

3.5. 通知・自動起動レイヤー(v1.1追加)

実装日: 2026-03-07 | 担当: Claude Code + Antigravity

通知チャンネル

チャンネル実装トリガー
WebSocket_notify_ws()ws://127.0.0.1:8123dispatch_task / submit_report / emergency_stop
Discord Webhook_notify_discord() → 環境変数 DISCORD_WEBHOOK_URL同上
統合通知notify_all() → WS + Discord 一斉送信同上

Claude Code 自動起動 & セッション管理(v1.2改修)

設定環境変数デフォルト
自動起動ON/OFFAUTO_LAUNCH_CLAUDEtrue
CLIパスCLAUDE_CMDC:\Users\umecc\AppData\Roaming\npm\claude.cmd
作業ディレクトリCLAUDE_WORK_DIRC:\ai_work

セッションモード:

モードトリガー動作
continue(デフォルト)contextnew_project なしclaude --continue -p で直前のセッションを継続
newcontext: '{"new_project": true}'claude -p で新規セッション起動
# 既存プロジェクトの続きタスク(デフォルト → 既存セッション継続)
dispatch_task("claude-code", "テスト書いて", "high")
 
# 新規プロジェクト(→ 新セッション起動)
dispatch_task("claude-code", "新PJの基盤を作って", "high",
              context='{"new_project": true}')

WS通知サーバー起動

# 常駐起動
py C:\ai_work\agent-bus-mcp\ws_server.py
 
# ポート変更
py C:\ai_work\agent-bus-mcp\ws_server.py --port 8200

3.6. Auto Orchestrator(v1.3追加)

実装日: 2026-03-07 | 担当: Antigravity

報告監視デーモン。Claude Codeからの報告を自動検知し、完全自動ループを実現。

報告ステータス自動処理
completed (review不要)自動acknowledge → タスクチェーン実行
completed (review必要)WS通知のみ(手動レビュー待ち)
failedエスカレーション通知
blocked通知のみ

タスクチェーン

shared_context に次タスクを定義すると、完了時に自動ディスパッチ:

# Antigravity側で事前定義
share_context("task-chain-t-xxx", json.dumps({
    "next_tasks": [
        {"target": "claude-code", "instruction": "テスト書いて", "priority": "high"}
    ]
}))

起動方法

# 常駐起動(10秒間隔)
py C:\ai_work\agent-bus-mcp\auto_orchestrator.py
 
# 間隔変更
py C:\ai_work\agent-bus-mcp\auto_orchestrator.py --interval 5
 
# 1回スキャンのみ
py C:\ai_work\agent-bus-mcp\auto_orchestrator.py --once

4. ツール一覧

4-1. タスク系

ツール引数説明
dispatch_tasktarget, instruction, priority, context?, from_agent指定エージェントにタスクを投入
receive_taskagent_name自分宛の最古タスクを1件取得(in_progressに更新)
list_tasksagent_name未処理タスク一覧を表示

4-2. 報告系

ツール引数説明
submit_reporttask_id, worker, status, summary, artifacts?, needs_review完了報告を提出(元タスクファイル自動削除)
get_reportsstatus_filter?, agent_filter?, include_processed報告一覧を取得
acknowledge_reporttask_id報告を確認済み(processed)に移動

4-3. ステータス系

ツール引数説明
update_statusagent, state, current_task_id?自分の状態を更新
get_all_status-全エージェントの状態一覧

4-4. コンテキスト共有

ツール引数説明
share_contextkey, data, authorエージェント間で共有情報を書き込み
get_shared_contextkey?共有情報を読み取り(key省略で全件)

4-5. ユーティリティ

ツール引数説明
system_health-ヘルスチェック(未処理数・ステータス一覧)
emergency_stop-全エージェントを stopped に設定

5. 永続化層(09_AgentSync)

09_AgentSync/
├── inbox/
│   ├── antigravity/     # Antigravity宛タスク
│   ├── claude-code/     # Claude Code宛タスク
│   ├── agent-manager/   # Agent Manager宛タスク
│   └── workers/         # Worker群宛タスク
├── reports/
│   ├── pending/         # 未処理報告
│   └── processed/       # 確認済み報告
├── status/              # 各エージェントのステータスJSON
└── shared_context/      # エージェント間共有データ

JSONフォーマット

タスク (inbox):

{
  "task_id": "t-YYYYMMDD-HHMMSS-NNN",
  "from": "antigravity",
  "to": "claude-code",
  "instruction": "タスクの指示内容",
  "priority": "high | normal | low",
  "context": null,
  "status": "pending | in_progress",
  "created_at": "ISO 8601"
}

報告 (reports):

{
  "task_id": "t-YYYYMMDD-HHMMSS-NNN",
  "worker": "claude-code",
  "status": "completed | failed | blocked",
  "summary": "作業結果の要約",
  "artifacts": ["ファイルパスリスト"],
  "completed_at": "ISO 8601",
  "needs_review": false
}

ステータス (status):

{
  "agent": "claude-code",
  "state": "idle | working | waiting_for_review | error | stopped",
  "current_task_id": null,
  "last_updated": "ISO 8601",
  "last_completed_task": "t-xxx"
}

6. 安全装置

装置実装
承認ゲートdispatch_task で金銭・削除関連キーワードを検出 → pending_approval を返却
ログ強制全操作を C:\ai_work\logs\agent_bus.log に記録
緊急停止emergency_stop ツールで全エージェントを stopped に
非破壊原則タスクファイルは報告提出時のみ削除
原子的書き込み.tmpos.replace() で読み取り途中のデータ破損を防止

7. 接続設定

Claude Code(設定済み)

// ~/.claude/settings.json
{
  "mcpServers": {
    "agent-bus": {
      "command": "py",
      "args": ["C:/ai_work/agent-bus-mcp/server.py"]
    }
  }
}

Antigravity(設定済み)

// mcp_config.json
{
  "mcpServers": {
    "agent-bus": {
      "command": "py",
      "args": ["C:/ai_work/agent-bus-mcp/server.py"]
    }
  }
}

リモートエージェント(将来)

SSEモードで起動: py server.py --transport sse --port 8200


8. 典型的なワークフロー

sequenceDiagram
    participant AG as Antigravity
    participant BUS as agent-bus
    participant WS as ws_server.py
    participant CC as Claude Code

    AG->>BUS: dispatch_task("claude-code", "Xを実装して", "high")
    BUS-->>AG: { task_id: "t-xxx", auto_launched: true }
    BUS->>WS: 📋 タスク投入通知
    BUS->>CC: claude -p(自動起動)

    CC->>BUS: receive_task("claude-code")
    BUS-->>CC: { task: { instruction: "Xを実装して", ... } }

    CC->>BUS: update_status("claude-code", "working", "t-xxx")

    Note over CC: 作業実行

    CC->>BUS: submit_report("t-xxx", "claude-code", "completed", "要約...")
    BUS->>WS: ✅ 報告通知(即時プッシュ)
    CC->>BUS: update_status("claude-code", "idle")

    AG->>BUS: acknowledge_report("t-xxx")

関連リンク