mcp-claude-duo/README.md
StillHammer 0bb8af199e v2.0 - Architecture unifiée avec SQLite
- MCP unifié : mcp-partner remplace mcp-master et mcp-slave
- Messages bufferisés : SQLite stocke tout, pas besoin d'être connecté en permanence
- Tools simplifiés : register, talk, check_messages, listen, reply, list_partners, history
- Suppression du hook Stop (plus nécessaire avec reply explicite)
- Heartbeat 30s pour éviter les déconnexions idle
- ID basé sur le nom du dossier (unique par projet)

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

119 lines
3.1 KiB
Markdown

# MCP Claude Duo
MCP pour faire discuter plusieurs instances Claude Code ensemble.
## Architecture v2
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Claude A │ │ Broker │ │ Claude B │
│ (projet-a) │◄───►│ HTTP + SQLite │◄───►│ (projet-b) │
│ + mcp-partner │ │ │ │ + mcp-partner │
└─────────────────┘ └─────────────────┘ └─────────────────┘
```
- **Un seul MCP unifié** : `mcp-partner` pour tout le monde
- **Messages bufferisés** : SQLite stocke les messages, pas besoin d'être connecté en permanence
- **Bidirectionnel** : tout le monde peut parler à tout le monde
## Installation
```bash
cd mcp-claude-duo
npm install
```
## Démarrage
### 1. Lancer le broker
```bash
npm run broker
```
Le broker tourne sur `http://localhost:3210` avec une base SQLite dans `data/duo.db`.
### 2. Configurer le MCP (global)
```bash
claude mcp add duo-partner -s user -e BROKER_URL=http://localhost:3210 -- node "CHEMIN/mcp-claude-duo/mcp-partner/index.js"
```
Ou par projet :
```bash
cd mon-projet
claude mcp add duo-partner -s project -e BROKER_URL=http://localhost:3210 -e PARTNER_NAME="Mon Nom" -- node "CHEMIN/mcp-claude-duo/mcp-partner/index.js"
```
## Tools disponibles
| Tool | Description |
|------|-------------|
| `register(name?)` | S'enregistrer sur le réseau |
| `talk(message, to?)` | Envoyer un message et attendre la réponse |
| `check_messages(wait?)` | Vérifier les messages en attente |
| `listen()` | Écouter en temps réel (long-polling) |
| `reply(message)` | Répondre au dernier message reçu |
| `list_partners()` | Lister les partenaires connectés |
| `history(partnerId, limit?)` | Historique de conversation |
## Exemples
### Conversation simple
**Claude A :**
```
register("Alice")
talk("Salut, ça va ?")
→ attend la réponse...
→ "Bob: Oui et toi ?"
```
**Claude B :**
```
register("Bob")
listen()
→ "Alice: Salut, ça va ?"
reply("Oui et toi ?")
```
### Messages bufferisés
**Claude A envoie même si B n'est pas connecté :**
```
talk("Hey, t'es là ?")
→ message stocké en DB, attend la réponse...
```
**Claude B se connecte plus tard :**
```
check_messages()
→ "Alice: Hey, t'es là ?"
reply("Oui, j'arrive !")
→ Claude A reçoit la réponse
```
## API Broker
| Endpoint | Description |
|----------|-------------|
| `POST /register` | S'enregistrer |
| `POST /talk` | Envoyer et attendre réponse |
| `GET /messages/:id` | Récupérer messages non lus |
| `GET /wait/:id` | Long-polling |
| `POST /respond` | Répondre à un message |
| `GET /partners` | Lister les partenaires |
| `GET /history/:a/:b` | Historique entre deux partenaires |
| `GET /health` | Status du broker |
## Base de données
SQLite dans `data/duo.db` :
- `partners` : ID, nom, status, dernière connexion
- `messages` : contenu, expéditeur, destinataire, timestamps
## License
MIT