MCP-A2A-Gateway
Un serveur passerelle qui fait le lien entre le protocole Model Context Protocol (MCP) et le protocole Agent-to-Agent (A2A), permettant aux assistants IA compatibles MCP (comme Claude) d'interagir de manière transparente avec les agents A2A.
Vue d'ensemble
Ce projet sert de couche d'intégration entre deux protocoles d'agents d'intelligence artificielle de pointe :
Model Context Protocol (MCP): Développé par Anthropic, MCP permet aux assistants d'IA de se connecter à des outils et des sources de données externes. Il normalise la façon dont les applications d'IA et les grands modèles de langage se connectent aux ressources externes de manière sécurisée et composable.
Protocole d'agent à agent (A2A) : Développé par Google, A2A permet la communication et l'interopérabilité entre différents agents d'intelligence artificielle par le biais d'une interface JSON-RPC normalisée.
En reliant ces protocoles, ce serveur permet aux clients MCP (comme Claude) de découvrir, d'enregistrer, de communiquer et de gérer des tâches sur les agents A2A par le biais d'une interface unifiée.
Démarrage rapide
🎉 Le paquetage est maintenant disponible sur PyPI !
Aucune installation requise
# Exécuter avec les paramètres par défaut (transport stdio) uvx mcp-a2a-gateway # Exécuter avec le transport HTTP pour les clients web MCP_TRANSPORT=streamable-http MCP_PORT=10000 uvx mcp-a2a-gateway # Exécuter avec un répertoire de données personnalisé MCP_DATA_DIR="/Users/votre-nom-d'utilisateur/Desktop/a2a_data" uvx mcp-a2a-gateway # Exécuter avec une version spécifique uvx mcp-a2a-gateway==0.1.6 # Exécuter avec plusieurs variables d'environnement MCP_TRANSPORT=stdio MCP_DATA_DIR="/custom/path" LOG_LEVEL=DEBUG uvx mcp-a2a-gateway
Pour le développement (local)
# Cloner et exécuter localement git clone https://github.com/yw0nam/MCP-A2A-Gateway.git cd MCP-A2A-Gateway # Exécuter avec uv uv run mcp-a2a-gateway # Exécuter avec uvx à partir du répertoire local uvx --from . mcp-a2a-gateway # Exécuter avec un environnement personnalisé pour le développement MCP_TRANSPORT=streamable-http MCP_PORT=8080 uvx --from . mcp-a2a-gateway
Démo
1, Exécuter l'agent hello world dans l'échantillon A2A
supporte aussi l'agent déployé dans le nuage
2, Utilisez Claude ou github copilot pour enregistrer l'agent.
3, Utiliser Claude pour envoyer une tâche à l'agent hello et obtenir le résultat.
4, Utiliser Claude pour récupérer le résultat de la tâche.
Fonctionnalités
Gestion des agents
- Enregistrer les agents A2A avec le serveur bridge
- Liste de tous les agents enregistrés
- Désinscrire les agents lorsqu'ils ne sont plus nécessaires
Communication
- Envoyer des messages aux agents A2A et recevoir des réponses
- Envoi de messages asynchrones pour une réponse immédiate du serveur.
- Flux de réponses des agents A2A en temps réel
Gestion des tâches
- Déterminer quel agent A2A s'occupe de quelle tâche
- Récupérer les résultats des tâches à l'aide des identifiants de tâches
- Obtenir une liste de toutes les tâches et de leurs statuts.
- Annuler les tâches en cours
Support de transport
- Plusieurs types de transport : stdio, streamable-http, SSE
- Configurer le type de transport à l'aide de la variable d'environnement MCP_TRANSPORT
Conditions préalables
Avant de commencer, assurez-vous que les éléments suivants sont installés :
- Python 3.11+
- uv (pour le développement local)
Installation
Exécuter directement sans installation en utilisant uvx
:
uvx mcp-a2a-gateway
- Clonez le dépôt :
git clone https://github.com/yw0nam/MCP-A2A-Gateway.git cd MCP-A2A-Gateway
- Exécuter en utilisant uv :
uv run mcp-a2a-gateway
- Ou utilisez uvx avec le chemin local :
uvx --from . mcp-a2a-gateway
Démarrer le serveur avec le transport HTTP :
# En utilisant uvx MCP_TRANSPORT=streamable-http MCP_HOST=0.0.0.0 MCP_PORT=10000 uvx mcp-a2a-gateway
Démarrer le serveur avec le transport SSE :
# En utilisant uvx MCP_TRANSPORT=sse MCP_HOST=0.0.0.0 MCP_PORT=10000 uvx mcp-a2a-gateway
Configuration de l'environnement
Variables d'environnement
Le serveur peut être configuré à l'aide des variables d'environnement suivantes :
Variable | Valeur par défaut | Description de la variable |
---|---|---|
MCP_TRANSPORT | stdio | Type de transport : stdio , streamable-http , ou sse |
MCP_HOST | 0.0.0.0 | Hôte pour les transports HTTP/SSE |
MCP_PORT | 8000 | Port pour les transports HTTP/SSE |
MCP_PATH | /mcp | Chemin d'accès au point de terminaison HTTP |
MCP_DATA_DIR | données | Répertoire pour le stockage des données persistantes |
MCP_REQUEST_TIMEOUT | 30 | Délai d'attente de la demande en secondes |
MCP_REQUEST_IMMEDIATE_TIMEOUT | 2 | Délai de réponse immédiate en secondes |
NIVEAU DE LOGUE | INFO | Niveau de journalisation : DEBUG , INFO , WARNING , ERROR |
Exemple de fichier .env :
# Configuration du transport MCP_TRANSPORT=stdio MCP_HOST=0.0.0.0 MCP_PORT=10000 MCP_PATH=/mcp # Stockage des données MCP_DATA_DIR=/Users/votre-nom-d'utilisateur/Desktop/data/a2a_gateway # Délais d'attente MCP_REQUEST_TIMEOUT=30 MCP_REQUEST_IMMEDIATE_TIMEOUT=2 # Journalisation LOG_LEVEL=INFO
Types de transport
Le serveur A2A MCP supporte plusieurs types de transport :
stdio (par défaut) : Utilise l'entrée/sortie standard pour la communication
- Idéal pour l'utilisation de la ligne de commande et les tests
- Aucun serveur HTTP n'est démarré
- Nécessaire pour Claude Desktop
streamable-http (recommandé pour les clients web) : Transport HTTP avec prise en charge du streaming
- Recommandé pour les déploiements en production
- Démarre un serveur HTTP pour traiter les requêtes MCP
- Permet la diffusion en continu de réponses volumineuses
sse: Transport d'événements envoyés par le serveur
- Fournit un flux d'événements en temps réel
- Utile pour les mises à jour en temps réel
Pour connecter github copilot
Ajoutez ce qui suit au fichier settings.json de VS Code pour sse ou http :
"mcpServers" : { "mcp_a2a_gateway" : { "url" : "http://0.0.0.0:10000/mcp" } }
"mcpServers" : { "mcp_a2a_gateway" : { "type" : "stdio", "command" : "uvx", "args" : ["mcp-a2a-gateway"], "env" : { "MCP_TRANSPORT" : "stdio", "MCP_DATA_DIR" : "/Users/votre nom d'utilisateur/Desktop/data/Copilot/a2a_gateway/" } } }
"mcpServers" : { "mcp_a2a_gateway" : { "type" : "stdio", "command" : "uvx", "args" : ["--from", "/path/to/MCP-A2A-Gateway", "mcp-a2a-gateway"], "env" : { "MCP_TRANSPORT" : "stdio", "MCP_DATA_DIR" : "/Users/votre nom d'utilisateur/Desktop/data/Copilot/a2a_gateway/" } } }
"mcpServers" : { "mcp_a2a_gateway" : { "type" : "stdio", "command" : "uv", "args" : [ "--directory", "/path/to/MCP-A2A-Gateway", "run", "mcp-a2a-gateway" ], "env" : { "MCP_TRANSPORT" : "stdio", "MCP_DATA_DIR" : "/Users/votre nom d'utilisateur/Desktop/data/Copilot/a2a_gateway/" } } }
Pour connecter le bureau claude
Ajoutez ceci à claude_config.json
"mcpServers" : { "mcp_a2a_gateway" : { "command" : "uvx", "args" : ["mcp-a2a-gateway"], "env" : { "MCP_TRANSPORT" : "stdio", "MCP_DATA_DIR" : "/Users/votre nom d'utilisateur/Desktop/data/Claude/a2a_gateway/" } } }
Ajoutez ceci à claude_config.json
"mcpServers" : { "mcp_a2a_gateway" : {"command" : "uvx", "args" : ["--from", "/path/to/MCP-A2A-Gateway", "mcp-a2a-gateway"], "env" : { "MCP_TRANSPORT" : "stdio", "MCP_DATA_DIR" : "/Users/votre nom d'utilisateur/Desktop/data/Claude/a2a_gateway/" } } }
Ajoutez ceci à claude_config.json
"mcpServers" : { "mcp_a2a_gateway" : {"command" : "uv", "args" : ["--directory", "/path/to/MCP-A2A-Gateway", "run", "mcp-a2a-gateway"], "env" : { "MCP_TRANSPORT" : "stdio", "MCP_DATA_DIR" : "/Users/votre nom d'utilisateur/Desktop/data/Claude/a2a_gateway/" } } }
Outils MCP disponibles
Le serveur expose les outils MCP suivants pour l'intégration avec des LLM comme Claude :
Gestion des agents
register_agent: Enregistrer un agent A2A auprès du serveur de passerelle
{"name" : "register_agent", "arguments" : { "url" : "http://localhost:41242" } }
list_agents: Obtenir une liste de tous les agents enregistrés
{ "name" : "list_agents", "arguments" : {"dummy" : "" } }
unregister_agent: Supprime un agent A2A du serveur Bridge
{"name" : "unregister_agent", "arguments" : { "url" : "http://localhost:41242" } }
Traitement des messages
send_message: Envoyer un message à un agent et obtenir un identifiant de tâche pour la réponse
{ "name" : "send_message", "arguments" : { "agent_url" : "http://localhost:41242", "message" : "Quel est le taux de change de l'USD à l'EUR ?", "session_id" : "optional-session-id" } }
Gestion des tâches
get_task_result: Récupérer le résultat d'une tâche à l'aide de son ID
{ "name" : "get_task_result", "arguments" : { "task_id" : "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1", } }
get_task_list: Permet d'obtenir une liste de toutes les tâches et de leur état.
{"name" : "get_task_list", "arguments" : {} }
Feuille de route et comment contribuer
Nous développons et améliorons activement la passerelle ! Les contributions de toutes sortes sont les bienvenues. Voici notre feuille de route actuelle, qui se concentre d'abord sur la création d'une fondation solide comme le roc.
Stabilité du noyau et expérience des développeurs (Aide recherchée ! 👍)
C'est notre objectif actuel. Notre objectif est de rendre la passerelle aussi stable et facile à utiliser que possible.
- Mise en œuvre des réponses en continu: Prise en charge complète des réponses en continu des agents A2A.
- Améliorer la gestion des erreurs: Fournir des messages d'erreur plus clairs et des codes d'état HTTP appropriés pour tous les scénarios.
- Validation des entrées: Assainissement et validation des URL des agents lors de l'enregistrement pour une meilleure sécurité.
- Ajout d'un point de contrôle de santé: Un simple point de terminaison
/health
pour surveiller l'état du serveur. - Validation de la configuration: Vérification des variables d'environnement nécessaires au démarrage.
- Tests d'intégration complets: Augmenter la couverture des tests pour garantir la fiabilité.
- Annulation de tâche: Mettre en œuvre l'annulation des tâches
- Mettre en œuvre la mise à jour en continu: mettre en œuvre la mise à jour en continu des tâches. L'utilisateur peut ainsi vérifier la progression.
Communauté et distribution
- Installation facile: Ajout du support pour
uvx
- Support Docker: Fournir une configuration Docker Compose pour un déploiement facile.
- Meilleure documentation: Créer un site de documentation dédié ou développer le Wiki.
Vous voulez contribuer ? Consultez l'onglet des problèmes ou n'hésitez pas à en ouvrir un nouveau pour discuter de vos idées !
Licence
Ce projet est soumis à la licence Apache, version 2.0 - voir le fichier LICENSE pour plus de détails.
Remerciements
- Anthropic pour le protocole de contexte de modèle
- Google pour le protocole Agent-to-Agent
- Contributeurs de la bibliothèque FastMCP
- Contributeurs de A2A-MCP-Server (Ce projet est fortement inspiré de ce repo.)
Publication automatisée et publications
Ce projet utilise la publication automatisée à travers les actions GitHub pour des mises à jour transparentes.
Processus de publication automatisée
Option 1 : Utiliser le script de publication (recommandé)
# Version corrective (0.1.6 → 0.1.7) ./release.sh patch # Version mineure (0.1.6 → 0.2.0) ./release.sh minor # Version majeure (0.1.6 → 1.0.0) ./release.sh major
Le script va :
- ✅ Vérifier que vous êtes sur la branche principale avec un répertoire de travail propre
- 📈 Augmenter automatiquement la version dans
pyproject.toml
- 🔨 Construire et tester le paquet localement
- 📤 Commencer le changement de version et créer un tag git
- 🚀 Pousser vers GitHub, déclenchant la publication PyPI automatisée
Option 2 : Création manuelle d'une balise
# Mettre à jour manuellement la version dans pyproject.toml # Puis créer et pousser un tag git add pyproject.toml git commit -m "chore : bump version to 0.1.7" git tag v0.1.7 git push origin main git push origin v0.1.7
Option 3 : Publications sur GitHub
- Aller sur https://github.com/yw0nam/MCP-A2A-Gateway/releases
- Cliquez sur "Create a new release" (Créer une nouvelle version)
- Choisissez ou créez un tag (par exemple,
v0.1.7
) - Remplir les notes de version
- Publier la version
Configuration de la publication automatisée
Pour activer la publication automatisée, ajoutez votre jeton API PyPI à GitHub Secrets :
Obtenir le jeton API PyPI:
- Allez sur https://pypi.org/manage/account/token/
- Créez un nouveau jeton avec la portée "Entire account"
- Copier le jeton (commence par
pypi-
)
Ajouter à GitHub Secrets:
- Allez dans votre dépôt → Paramètres → Secrets et variables → Actions
- Ajouter un nouveau secret de dépôt
- Nom: PYPI_API_TOK
PYPI_API_TOKEN
- Valeur: Votre jeton PyPI
- Nom: PYPI_API_TOK
Tester le flux de travail:
- Pousser une balise ou créer une version
- Vérifiez l'état de la publication dans l'onglet Actions
Publication manuelle
Pour les versions d'urgence ou les tests locaux :
# Construire et obtenir les instructions de publication manuelle ./publish.sh # Ou publier directement (avec les identifiants configurés) uv build uv publish