MCP Claude Desktop
Un serveur Model Context Protocol (MCP) qui permet à Claude Code de communiquer avec Claude Desktop. Ce serveur permet à Claude Code d'envoyer des messages à Claude Desktop et de demander des réponses.
Inspiré par claude-chatgpt-mcp, ce projet adapte le concept à l'écosystème d'Apple en utilisant l'automatisation native de macOS.
Fonctionnalités
- Envoi d'invites de Claude Code à Claude Desktop
- Interrogation automatique pour les réponses avec un délai configurable
- Liste des conversations disponibles dans Claude Desktop
- Gestion des erreurs et logique de relance
- Journalisation complète
Installation du serveur MCP
Vous pouvez installer et utiliser ce serveur MCP de deux façons :
Option 1 : Utilisation de npx (Recommandé)
La façon la plus simple d'utiliser ce serveur est de le faire directement avec npx, sans aucune installation :
{ "mcpServers" : { "claude-desktop" : { "command" : "npx", "args" : ["mcp-claude-desktop"] } } }
Option 2 : Installation locale
- Clonez ce dépôt :
git clone https://github.com/dpaluy/mcp-claude-desktop cd mcp-claude-desktop
- Installez les dépendances :
npm install
- Construire le projet :
npm run build
- Configurer MCP :
{ "mcpServers" : { "claude-desktop" : { "command" : "node", "args" : ["/path/to/mcp-claude-desktop/dist/index.js"] } } }
Configuration requise
- macOS 11.0+ (Big Sur ou version ultérieure)
- Node.js 18+
- Application Claude Desktop installée
- Permissions d'accessibilité accordées pour AppleScript
Accorder les permissions d'accessibilité
- Ouvrez les Préférences Système > Sécurité et confidentialité > Confidentialité
- Sélectionnez "Accessibilité" dans la barre latérale gauche
- Cliquez sur le cadenas pour effectuer des modifications
- Ajoutez Terminal (ou votre application de terminal) aux applications autorisées
- Redémarrez votre terminal
Outils MCP
Ce serveur MCP fournit deux outils :
demander
- Objectif: Envoyer une requête à Claude Desktop et obtenir une réponse
- Paramètres
invite
: Le texte à envoyer à Claude Desktop (obligatoire)conversationId
: ID optionnel pour continuer une conversation spécifiquetimeout
: Délai de réponse en secondes (optionnel, défaut : 30, max : 300)pollingInterval
: Fréquence de vérification de la réponse en secondes (facultatif, valeur par défaut : 1,5, valeur minimale : 0,5)
get_conversations
- Objectif: Obtenir une liste des conversations disponibles dans Claude Desktop
- Paramètres: Aucun
Utilisation
Une fois configuré, Claude Code peut utiliser le MCP de différentes manières :
Utilisation générale
Lorsque Claude utilise ces outils, il les appelle avec des paramètres comme :
Utilisation de base :
- Outil :
ask
- Paramètres :
{ "prompt" : "Qu'est-ce que l'injection de dépendances ?" }
Avec un délai personnalisé :
- Outil :
ask
- Paramètres :
{ "prompt" : "Expliquer l'informatique quantique", "timeout" : 120 }
Avec le délai d'attente et l'intervalle d'interrogation :
- Outil :
ask
- Paramètres :
{ "prompt" : "Quick question", "timeout" : 10, "pollingInterval" : 0.5 }
Obtenir des conversations :
- Outil :
get_conversations
- Paramètres :
{}
Utilisation dans Claude
Une fois que le serveur MCP est configuré et fonctionne, vous pouvez utiliser ces outils directement dans Claude :
Utilisation de base :
- "Utilisez l'outil ask pour demander à Claude Desktop : Quelles sont les meilleures pratiques pour la gestion des erreurs en Python ?"
- "Utilisez get_conversations pour lister toutes mes conversations avec Claude Desktop
Avec un délai d'attente personnalisé :
- "Utiliser l'outil ask avec un timeout de 60 pour demander à Claude Desktop : "Explique-moi la mise en œuvre de l'arbre B+" : Expliquer l'implémentation de l'arbre B+"
- "Utiliser ask avec timeout 10 et pollingInterval 0.5 pour demander à Claude Desktop : Qu'est-ce que 2+2 ?"
Important : la configuration du serveur MCP (illustrée ci-dessus) indique seulement à Claude comment démarrer le serveur. Les paramètres timeout et pollingInterval sont spécifiés lorsque vous utilisez l'outil dans Claude, et non dans le fichier de configuration du serveur.
Limitations connues
Lecture des réponses
En raison de l'architecture de Claude Desktop basée sur Electron, cette intégration MCP ne peut pas lire les réponses de Claude de manière programmatique. L'outil peut réussir à :
- ✅ Envoyer des invites à Claude Desktop
- ✅ Créer de nouvelles conversations
- ✅ Activer et mettre au point la fenêtre de Claude
- ❌ Lire les réponses de Claude en retour
Il s'agit d'une limitation de la façon dont les applications Electron exposent les éléments de l'interface utilisateur par le biais des API d'accessibilité. Lorsque vous utilisez l'outil de demande
, vous recevrez une confirmation que le message a été envoyé, mais vous devrez consulter directement la fenêtre de Claude pour voir la réponse.
Solutions de contournement
- Utilisez l'API de Claude: Pour un accès programmatique aux réponses, envisagez d'utiliser directement l'API de Claude au lieu de l'automatisation du bureau
- Vérification manuelle: Après avoir envoyé une invite, vérifiez manuellement la réponse dans la fenêtre de Claude Desktop
- Automatisation à sens unique: Utilisez cet outil pour les scénarios où vous avez seulement besoin d'envoyer des invites sans lire les réponses
Intégration des commandes Claude
Les commandes Claude vous permettent de créer des flux de travail réutilisables qui combinent les outils MCP. Ce projet fonctionne de manière transparente avec Claude Commands pour permettre une automatisation puissante.
Exemple : Commande Code Peer Review
Nous avons inclus un exemple de commande Claude qui démontre comment utiliser MCP Claude Desktop pour des revues de code automatisées. La commande utilise git pour analyser les changements récents et les envoyer à Claude Desktop pour un retour d'information sur la revue par les pairs.
Configuration
Copiez la commande d'exemple dans votre répertoire Claude Commands :
cp examples/claude-peer-review.md ~/.claude/commands/
La commande sera disponible dans Claude Code en tant que
/claude-peer-review
Utilisation
La commande peer review accepte jusqu'à 3 arguments :
- description: Les modifications à examiner (par exemple, "correction d'authentification")
- polling_interval: Fréquence de vérification des réponses (par défaut : 1.5s)
- timeout: Temps d'attente maximum pour la réponse (par défaut : 30s)
Exemples :
# Revue du commit le plus récent avec les valeurs par défaut /claude-peer-review # Revue avec description /claude-peer-review "bug fix for user login" # Intervalle d'interrogation personnalisé (2 secondes) /claude-peer-review "API update" 2 # Délai d'attente personnalisé pour les revues complexes (2 minutes) /claude-peer-review "major refactor" 1.5 120
Fonctionnement
Intégration Git: La commande récupère automatiquement
- L'état actuel de git
- Statistiques sur les livraisons récentes
- Différentiel complet des modifications
- Nom de la branche actuelle
Révision par Claude Desktop: Envoie les modifications à Claude Desktop avec des questions spécifiques de révision :
- Pertinence du code et qualité de l'implémentation
- Problèmes de sécurité ou bogues potentiels
- Qualité du code et meilleures pratiques
- Suggestions d'améliorations
Gestion des réponses: Utilise le mécanisme d'interrogation du serveur MCP pour attendre la réponse de Claude
Génération d'un résumé: Fournit un résumé structuré des éléments suivants
- Changements examinés
- Le retour d'information de Claude
- Actions prises en fonction des commentaires
- Statut de la révision finale
Création de vos propres commandes
Vous pouvez créer des commandes Claude personnalisées qui utilisent MCP Claude Desktop. Les commandes doivent :
Inclure les outils dans l'objet principal :
--- allowed-tools : mcp__claude-desktop__ask, mcp__claude-desktop__get_conversations ---
Utiliser les outils MCP avec les paramètres appropriés :
mcp__claude-desktop__ask prompt : "Your prompt here" timeout : 60 pollingInterval : 2
Gérer les délais d'attente avec élégance et proposer des délais d'attente plus longs pour les requêtes complexes
Voir l'exemple de commande pour une implémentation complète.
Développement
Exécution en mode développement
npm run dev
Exécution des tests
npm test
Linting
npm run lint
Vérification de type
npm run typecheck
API
Outils
demander
Envoyer une requête à Claude Desktop et obtenir une réponse.
Paramètres :
prompt
(chaîne, obligatoire) : L'invite à envoyerconversationId
(chaîne, optionnel) : Poursuivre une conversation spécifiquetimeout
(nombre, optionnel) : Délai de réponse en secondes- Valeur par défaut : 30 secondes
- Minimum : 1 seconde
- Maximum : 1 seconde 300 secondes (5 minutes)
pollingInterval
(nombre, facultatif) : Fréquence de vérification des réponses en secondes- Valeur par défaut : 1,5 seconde
- Minimum : 0.5 secondes
- Maximum : 5 secondes 10 secondes
Réponse :
Chaîne contenant la réponse de Claude
get_conversations
Obtenir la liste des conversations disponibles dans Claude Desktop.
Paramètres : Aucun
Réponse :
{ conversations : string[] ; timestamp : string ; }
Architecture
Le serveur MCP utilise AppleScript pour communiquer avec Claude Code :
- Claude Code envoie une invite via MCP
- AppleScript active Claude Desktop et crée une nouvelle conversation
- L'invite est saisie dans Claude Desktop
- Le serveur interroge Claude Desktop pour obtenir une réponse
- Une fois la réponse détectée, elle est analysée et renvoyée à Claude Code
Résolution des problèmes
Problèmes courants
"Échec de l'exécution de l'AppleScript
- S'assurer que Claude Desktop est installé et fonctionne
- Vérifier les permissions d'accessibilité
- Essayez d'exécuter le serveur avec un niveau de journal plus élevé :
LOG_LEVEL=3
"Response timed out" (réponse interrompue)
- Augmenter le paramètre timeout :
timeout : 60
(60 secondes) - Pour les requêtes complexes, utilisez des délais plus longs :
timeout : 120
(2 minutes) - Réduire l'intervalle d'interrogation pour une détection plus rapide :
pollingInterval : 0.5
- Vérifier que Claude Desktop répond normalement
- S'assurer que le système n'est pas soumis à une charge importante
- Augmenter le paramètre timeout :
"Permission refusée
- Accorder les permissions d'accessibilité à votre terminal
- Exécuter la commande build avec les permissions adéquates
Leserveur MCP s'arrête après avoir envoyé des requêtesSi le serveur MCP s'arrête après avoir traité des requêtes, vous pouvez :
Désactiver l'interrogation des réponses (recommandé pour la stabilité) :
export SKIP_CLAUDE_POLLING=true
Ceci enverra le message à Claude Desktop mais n'essaiera pas de lire la réponse.
Activer la journalisation de débogage pour voir ce qui se passe :
export LOG_LEVEL=3
Vérifier la sortie stderr - Tous les journaux sont maintenant écrits sur stderr pour éviter d'interférer avec le protocole MCP sur stdout.
Limites connues de l'interrogation par réponse
L'interrogation des réponses peut occasionnellement causer de l'instabilité en raison des éléments suivants
- Durée d'interrogation prolongée (30 secondes par défaut)
- Lecture complexe des éléments de l'interface utilisateur à partir des applications Electron
- Problèmes de synchronisation avec la génération de la réponse de Claude
Envisagez d'utiliser SKIP_CLAUDE_POLLING=true
pour un fonctionnement plus fiable si vous n'avez pas besoin de lire les réponses.
Contribuer
Les contributions à MCP Claude Desktop sont les bienvenues ! Qu'il s'agisse de corriger des bogues, d'ajouter des fonctionnalités ou d'améliorer la documentation, votre aide est appréciée.
Pour commencer
- Créer un dépôt (fork)
- Clonez votre dépôt :
git clone https://github.com/YOUR_USERNAME/mcp-claude-desktop cd mcp-claude-desktop
- Installer les dépendances :
npm install
- Créer une nouvelle branche :
git checkout -b feature/votre-nom-de-fonctionnalité
Processus de développement
- Effectuez vos modifications
- Exécuter des tests pour s'assurer que tout fonctionne :
npm test
- Exécuter linting pour maintenir la qualité du code :
npm run lint
- Exécuter la vérification de type :
npm run typecheck
- Construire le projet :
npm run build
Directives de style de code
- Utiliser TypeScript pour tout le code source
- Suivre le style de code existant (imposé par ESLint)
- Écrire des messages de validation significatifs
- Ajouter des tests pour les nouvelles fonctionnalités
- Mettre à jour la documentation si nécessaire
Soumettre des modifications
- Livrez vos modifications avec un message descriptif :
git commit -m "feat : add support for conversation history"
- Poussez vers votre fork :
git push origin feature/votre-nom-de-fonctionnalité
- Créer une demande d'extraction sur GitHub
Directives pour les demandes de retrait
- Fournir une description claire des changements
- Faire référence à tous les problèmes liés
- S'assurer que tous les tests sont réussis
- Mettre à jour le README si de nouvelles fonctionnalités sont ajoutées
- Être réactif aux commentaires de la revue de code
Signaler des problèmes
- Utilisez GitHub Issues pour signaler les bogues
- Inclure la version macOS et la version Node.js
- Fournir les étapes pour reproduire le problème
- Inclure les messages d'erreur ou les journaux pertinents
Demandes de fonctionnalités
- Ouvrir un problème pour discuter de nouvelles fonctionnalités
- Expliquer le cas d'utilisation et les avantages
- Être ouvert aux retours d'expérience et aux approches alternatives
Licence
MIT