🚀 AI-Connect
異なるマシン間のAIコーディングアシスタント間で、MCPベースの通信ブリッジを提供します。
ドイツ語版
🚀 クイックスタート
ブリッジサーバーのクイックセットアップ
ブリッジサーバーは専用のマシン(例:ミニPC、ラズベリーパイ、ホームサーバー)で動作し、すべてのクライアントからの接続を受け付けます。
cd ~/projects
git clone git@github.com:Peuqui/AI-Connect.git
cd AI-Connect
python3 -m venv venv
source venv/bin/activate
pip install fastmcp websockets aiosqlite pyyaml
sudo tee /etc/systemd/system/ai-connect.service << 'EOF'
[Unit]
Description=AI-Connect Bridge Server
After=network.target
[Service]
Type=simple
User=YOUR_USERNAME
WorkingDirectory=/path/to/AI-Connect
ExecStart=/path/to/AI-Connect/venv/bin/python -m server.main
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable ai-connect
sudo systemctl start ai-connect
sudo systemctl status ai-connect
MCPクライアントのクイックセットアップ(各マシン)
ブリッジを介して通信するすべてのマシンには、MCPクライアントが必要です。
1. プロジェクトをクローンし、依存関係をインストールする
cd ~/projects
git clone git@github.com:Peuqui/AI-Connect.git
cd AI-Connect
python3 -m venv venv
source venv/bin/activate
pip install fastmcp websockets aiosqlite pyyaml
2. 設定ファイルを作成する
重要: hostはブリッジサーバーのIPアドレスでなければなりません。0.0.0.0ではありません!
mkdir -p ~/.config/ai-connect
cat > ~/.config/ai-connect/config.yaml << 'EOF'
bridge:
host: "192.168.0.252"
port: 9999
peer:
name: "YOUR_PEER_NAME"
auto_connect: true
EOF
3. MCP HTTPサーバーをサービスとして設定する
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/ai-connect-mcp.service << 'EOF'
[Unit]
Description=AI-Connect MCP HTTP Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/path/to/AI-Connect
ExecStart=/path/to/AI-Connect/venv/bin/python -m client.http_server
Restart=always
RestartSec=5
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable ai-connect-mcp.service
systemctl --user start ai-connect-mcp.service
4. VSCode/Claude CodeでMCPサーバーを登録する
~/.vscode-server/data/User/mcp.json(または~/.config/Code/User/mcp.json)を作成または編集します。
{
"servers": {
"ai-connect": {
"type": "sse",
"url": "http://127.0.0.1:9998/sse"
}
}
}
5. Claude Codeの権限設定(オプション)
ツールの確認ダイアログをスキップするには、~/.claude/settings.jsonに以下を追加します。
{
"permissions": {
"allow": [
"mcp__ai-connect__peer_list",
"mcp__ai-connect__peer_send",
"mcp__ai-connect__peer_read",
"mcp__ai-connect__peer_history",
"mcp__ai-connect__peer_context",
"mcp__ai-connect__peer_status",
"mcp__ai-connect__peer_wait"
]
}
}
6. Claude Codeを再起動する
設定後、VS Code / Claude Codeを再起動してMCPクライアントを読み込みます。
✨ 主な機能
- マルチエージェント通信:AIアシスタントは異なるマシン間でメッセージを交換できます。
- サロモの原則:マルチエージェントのコンセンサスにより、より良い決定を下せます(AIfred/Sokrates/Salomo)。
- SSEトランスポート:STDIOの代わりに、安定したHTTP/SSE接続を使用します。
- オフラインメッセージ:受信者がオンラインになるまでメッセージを保存します。
- プロジェクトベースのピア名:例えば、"Aragon (myproject)" または "mini (AI-Connect)" のように設定できます。
⚠️ 重要な注意
これは初期段階の実装です。動作しますが、制限があります。詳細は現在の制限事項を参照してください。
📚 ドキュメント
概要
┌─────────────────────────────────────────────────────────────────┐
│ Mini-PC (192.168.0.252) │
│ Bridge Server (24/7) │
│ │
│ ┌───────────────────┐ ┌───────────────────┐ │
│ │ MCP HTTP Server │◄────────►│ Bridge Server │ │
│ │ Peer: "mini" │ WebSocket│ Port 9999 │ │
│ │ (localhost:9998) │ │ │ │
│ └───────────────────┘ └───────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
▲
│ WebSocket (remote)
│
┌───────┴───────┐
│ Main Machine │
│ (WSL) │
│ │
│ MCP HTTP │
│ Server │
│ Peer: "Aragon"│
└───────────────┘
なぜこのプロジェクトが必要なのか
広範な調査の結果、AIモデルが直接互いにメッセージを送信し、自律的に調整できる既存のソリューションは見つかりませんでした。つまり、AI自身が通信するタイミングを決定する、シンプルでネットワーク対応の方法が必要でした。
マルチエージェントフレームワーク(コードでエージェントをプログラム的に定義するもの)やオーケストレーションツール(人間または中央コントローラーがタスクを割り当てるもの)はありますが、異なるマシン間で複数の対話型Claude Codeセッションがピアツーピアで通信し、AI自身が助けを求めたりアドバイスを提供したりするタイミングを決定するものはありません。
AI-Connectはこのギャップを埋めます。シンプルでネットワーク対応しており、動作します。ただし、Claude Codeのアーキテクチャにより制限があります。
使用例
- コードレビュー:あるClaudeが実装に取り組み、別のClaudeが批判的にレビューします。
- 立ち往生を解消する:あるClaudeが壁にぶつかったときに、別のClaudeに新しい視点を求めます。
- クライアント - サーバー設定:サーバーが1台のマシンで動作し、クライアントが別のマシンで動作する分散システムを構成する場合、Claudeインスタンスは設定を調整し、どこにどのソフトウェアをインストールする必要があるかを確認し、手動でセッション間でコピーアンドペーストすることなくすべてを同期させることができます。
- マルチマシンデプロイメント:異なるコンピューターで関連するタスクに取り組むあらゆるシナリオ。
コンセプト
- ブリッジサーバー:専用のマシンで24時間365日動作し、ピア間のメッセージをルーティングします(WebSocket、ポート9999)。
- MCP HTTPサーバー:Claude Codeが通信するすべてのマシンで動作します(SSE、ポート9998)。
- 永続的な接続:各MCP HTTPサーバーは、ブリッジサーバーとの永続的なWebSocket接続を維持します。
重要: ブリッジサーバーのマシンでClaude Codeを実行する場合は、MCP HTTPサーバーも必要です!
┌─────────────────────────────────────────┐
│ Bridge Machine (e.g., Mini-PC) │
│ │
│ ┌─────────────────┐ ┌──────────────┐ │
│ │ Bridge Server │ │ MCP HTTP │ │
│ │ Port 9999 │◄─┤ Server │ │
│ │ (routes msgs) │ │ Port 9998 │ │
│ └────────▲────────┘ └──────▲───────┘ │
│ │ │ │
│ │ └── Claude Code (local)
│ │ │
└───────────┼─────────────────────────────┘
│ WebSocket
│
┌───────────┼─────────────────────────────┐
│ Other Machine (e.g., Workstation) │
│ │ │
│ ┌────────┴────────┐ │
│ │ MCP HTTP Server │◄── Claude Code │
│ │ Port 9998 │ │
│ └─────────────────┘ │
└─────────────────────────────────────────┘
利用方法
利用可能なMCPツール
| ツール |
説明 |
peer_list |
すべてのオンラインピアを表示します。 |
peer_send |
ピアにメッセージを送信します(* でブロードキャスト)。 |
peer_read |
受信したメッセージを読み取ります。 |
peer_wait |
新しいメッセージを待ちます(タイムアウト付き)。 |
peer_history |
ピアとのチャット履歴を表示します。 |
peer_context |
他のピアとファイルコンテキストを共有します。 |
peer_status |
ブリッジサーバーへの接続ステータスを表示します。 |
例
ステータスを確認する:
"Show me the AI-Connect status"
ピアを表示する:
"Who is currently online?"
メッセージを送信する:
"Ask mini what they think about this approach"
コンテキスト付きで送信する:
"Send mini the code from api.py lines 42-58"
メッセージを読む:
"Did anyone write to me?"
ブロードキャストする:
"Ask everyone if someone has time for a review"
アーキテクチャ
AI-Connect/
├── server/ # ブリッジサーバー(専用マシンで動作)
│ ├── main.py # エントリーポイント
│ ├── websocket_server.py # WebSocketハンドラー
│ ├── peer_registry.py # ピア管理(オンライン/オフライン)
│ └── message_store.py # SQLite履歴 + オフライン配信
│
├── client/ # MCPクライアント(各マシンで動作)
│ ├── http_server.py # FastMCP HTTP/SSEサーバー
│ ├── server.py # FastMCP STDIOサーバー(代替)
│ ├── bridge_client.py # 永続的なWebSocket接続
│ └── tools.py # MCPツールの実装
│
├── skills/ # Claude Codeスキル
│ └── advisor/ # アドバイザーモードスキル
│ └── SKILL.md
│
└── config.yaml # 設定例
重要な詳細
- SSEトランスポート:MCP HTTPサーバーは、VSCode/Claude Codeとの安定した接続のためにServer-Sent Events (SSE) を使用します。
- プロジェクトベースのピア名:ピアは
Name (Project) として登録されます。例えば、"Aragon (myproject)" または "mini (AI-Connect)" です。
- 一意のクライアントID:複数のインスタンスがある場合、PIDが追加されます。例えば、"Aragon#12345 (myproject)" です。
- オフラインメッセージ:ピアがオフラインの場合、ブリッジサーバーはメッセージをSQLiteに保存し、ピアがオンラインに戻ったときに配信します。
- ハートビート:クライアントは25秒ごとにピングを送信し、サーバーは60秒後に非アクティブなピアを削除します。
サロモの原則(マルチエージェントコンセンサス)
AI-Connectは、マルチエージェントのコンセンサスによるサロモの原則を実現し、より良い決定を下せるようにします。
役割
| 役割 |
説明 |
| AIfred |
ユーザーのタスクを担当する(メインワーカー、論題) |
| Sokrates |
相談を受けるアイドル状態のClaude(批判者、反論) |
| Salomo |
意見が一致しない場合の第三者のClaude(裁判官、統合) |
ワークフロー
- AIfredがタスクに取り組み、重要な決定に直面する。
peer_context でコンテキストを共有し、peer_send で質問を送信する。
- Sokratesが批判的に分析し、代替案を提示する。
- 合意が得られた場合は続行。意見が一致しない場合はSalomoが決定する。
投票
- 通常の決定:多数決(2/3)
- 重要なアーキテクチャ変更:全会一致(3/3)
- タグ:
[LGTM] = 承認、[CONTINUE] = まだ完了していない
/advisor スキル
skills/advisor/SKILL.md スキルはアドバイザーモードを有効にします。
mkdir -p ~/.claude/skills/advisor
cp skills/advisor/SKILL.md ~/.claude/skills/advisor/
その後、/advisor でアドバイザーモードを有効にします。Claudeインスタンスはポーリングループに入り、2秒ごとに受信メッセージをチェックします。重要: すべての送信および受信メッセージはユーザーに表示されます。AIインスタンス間の完全な会話を読むことができます。
トラブルシューティング
ブリッジサーバーを確認する
sudo systemctl status ai-connect
journalctl -u ai-connect -f
ss -tlnp | grep 9999
接続をテストする
nc -zv 192.168.0.252 9999
MCPクライアントを確認する
claude mcp list
tail -f ~/.config/ai-connect/mcp.log
一般的な問題
| 問題 |
原因 |
解決策 |
| "Not connected" |
ホスト設定が間違っている |
host はブリッジサーバーのIPアドレスでなければなりません。0.0.0.0 ではありません。 |
| ピアが互いに見えない |
MCPクライアントが永続的でない |
コードを更新し (git pull)、VS Codeを再起動します。 |
| 接続が拒否される |
ブリッジサーバーが実行されていない |
sudo systemctl start ai-connect |
| タイムアウト |
ファイアウォールによるブロック |
ファイアウォールでポート9999を開きます。 |
設定リファレンス
~/.config/ai-connect/config.yaml
bridge:
host: "192.168.0.252"
port: 9999
peer:
name: "dev"
auto_connect: true
環境変数
| 変数 |
説明 |
AI_CONNECT_PEER_NAME |
設定ファイルの peer.name を上書きします。 |
現在の制限事項
これは初期段階の実装です。動作しますが、まだ洗練されていません。
- ポーリングが必要:Claude Codeには外部トリガーメカニズムがありません。メッセージを受信するには、インスタンスが
peer_read を介してアクティブにポーリングする必要があります。/advisor スキルは2秒ごとのループでこれを行います。これは、アイドリング中の車が燃料を消費するようなものです。動作はしますが、何の役にも立たないトークンを浪費します。
- 外部トリガーが不可能:Claude Codeのフックシステムを十分に調査しました。
UserPromptSubmit フックはコンテキストを注入できますが、ユーザーがメッセージを送信したときにのみ機能します。つまり、メッセージを受信するには何かを入力する必要があります。実行中のClaude Codeセッションを外部から中断またはシグナルする方法はありません。これは、現在のClaude Codeアーキテクチャの根本的な制限です。
- プッシュ通知がない:メッセージが届いたときに、動作中のClaudeインスタンスに通知する方法がありません。受信インスタンスはアイドル状態でポーリングしている必要があります。
- 手動でのコンテキスト共有:コードを共有するには、明示的に
peer_context を使用する必要があります。他のインスタンスが何に取り組んでいるかを自動的に認識する機能はありません。
核心的な問題
Claude Code(またはAnthropic)が外部トリガー/中断機能を実装するまで、真のリアルタイムマルチエージェントコラボレーションはせいぜい回避策に過ぎません。ポーリングアプローチは動作しますが、洗練されていません。そして、何の役にも立たないトークンを消費します。
もし良いアプローチを見つけたら、プルリクエストを歓迎します!
⭐️ スター履歴

📄 ライセンス
MIT