mcp-claude-duo/README.md
StillHammer b7766853cf Initial commit - MCP Claude Duo
Permet à deux instances Claude Code de discuter ensemble via MCP.

Architecture:
- broker/ : Serveur HTTP central avec heartbeat
- mcp-master/ : MCP pour envoyer des messages (talk, list_partners)
- mcp-slave/ : MCP pour recevoir et répondre (connect, respond)
- hooks/ : Hook Stop pour capturer les réponses (optionnel)

Features:
- Long-polling sans timeout
- Heartbeat toutes les 30s (fix bug Claude Code SSE)
- Sauvegarde des conversations par date
- ID basé sur le dossier de travail (unique par projet)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 03:42:25 +07:00

4.1 KiB

MCP Claude Duo

Fait discuter deux instances Claude Code ensemble via MCP.

Architecture

Terminal 1 (Master)                              Terminal 2 (Slave)
┌─────────────────┐                            ┌─────────────────┐
│  Claude Code    │                            │  Claude Code    │
│  + MCP Master   │         ┌───────┐          │  + MCP Slave    │
│                 │         │Broker │          │  + Hook Stop    │
│  talk("yo") ────┼────────►│ HTTP  │─────────►│                 │
│                 │         │       │          │  reçoit "yo"    │
│                 │         │       │          │  répond "salut" │
│  reçoit "salut"◄┼─────────│       │◄─────────┼── (hook envoie) │
└─────────────────┘         └───────┘          └─────────────────┘

Installation

cd mcp-claude-duo
npm install

Démarrage

1. Lancer le broker (dans un terminal séparé)

npm run broker

Le broker tourne sur http://localhost:3210 par défaut.

2. Configurer le Master (Terminal 1)

Ajoute dans ta config MCP Claude Code (~/.claude.json ou settings):

{
  "mcpServers": {
    "duo-master": {
      "command": "node",
      "args": ["C:/Users/alexi/Documents/projects/mcp-claude-duo/mcp-master/index.js"],
      "env": {
        "BROKER_URL": "http://localhost:3210"
      }
    }
  }
}

3. Configurer le Slave (Terminal 2)

Config MCP:

{
  "mcpServers": {
    "duo-slave": {
      "command": "node",
      "args": ["C:/Users/alexi/Documents/projects/mcp-claude-duo/mcp-slave/index.js"],
      "env": {
        "BROKER_URL": "http://localhost:3210",
        "SLAVE_NAME": "Bob"
      }
    }
  }
}

Config Hook (dans .claude/settings.json du projet ou ~/.claude/settings.json):

{
  "hooks": {
    "Stop": [
      {
        "matcher": {},
        "hooks": [
          {
            "type": "command",
            "command": "node C:/Users/alexi/Documents/projects/mcp-claude-duo/hooks/on-stop.js"
          }
        ]
      }
    ]
  }
}

Utilisation

Terminal 2 (Slave) - Se connecter

Toi: "Connecte-toi en tant que partenaire"
Claude: *utilise connect()* → "Connecté, en attente de messages..."

Terminal 1 (Master) - Parler

Toi: "Parle à mon partenaire, dis lui salut"
Claude: *utilise talk("Salut !")*
→ attend la réponse...
→ "Partenaire: Hey ! Ça va ?"

Terminal 2 (Slave) - Reçoit et répond

Claude: "Message reçu: Salut !"
Claude: "Je lui réponds..." → écrit sa réponse
→ Le hook capture et envoie au broker
Claude: *utilise connect()* → attend le prochain message

Tools disponibles

MCP Master

Tool Description
talk(message) Envoie un message et attend la réponse
list_partners() Liste les partenaires connectés

MCP Slave

Tool Description
connect(name?) Se connecte et attend les messages
disconnect() Se déconnecte

Variables d'environnement

Variable Description Défaut
BROKER_URL URL du broker http://localhost:3210
BROKER_PORT Port du broker 3210
SLAVE_NAME Nom du slave Partner

Flow détaillé

  1. Slave appelle connect() → s'enregistre au broker, attend (long-polling)
  2. Master appelle talk("message") → envoie au broker
  3. Broker transmet au slave → connect() retourne le message
  4. Slave Claude voit le message et répond naturellement
  5. Hook Stop se déclenche → lit le transcript, extrait la réponse, envoie au broker
  6. Broker retourne la réponse au master
  7. Master talk() retourne avec la réponse
  8. Slave rappelle connect() pour le prochain message

License

MIT