Serveur A2A MCP - MCP Server sécurisé par ALMC Security 2025

Serveur A2A MCP

Voir sur GitHub

MCP-A2A-Gateway

Licensesmithery badge

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

agent

supporte aussi l'agent déployé dans le nuage

cloudAgent

2, Utilisez Claude ou github copilot pour enregistrer l'agent.

register_clauderegister_copilot

3, Utiliser Claude pour envoyer une tâche à l'agent hello et obtenir le résultat.

send_message

4, Utiliser Claude pour récupérer le résultat de la tâche.

retrieve_result

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
  1. Clonez le dépôt :
git clone https://github.com/yw0nam/MCP-A2A-Gateway.git cd MCP-A2A-Gateway
  1. Exécuter en utilisant uv :
uv run mcp-a2a-gateway
  1. 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 :

VariableValeur par défautDescription de la variable
MCP_TRANSPORTstdioType de transport : stdio, streamable-http, ou sse
MCP_HOST0.0.0.0Hôte pour les transports HTTP/SSE
MCP_PORT8000Port pour les transports HTTP/SSE
MCP_PATH/mcpChemin d'accès au point de terminaison HTTP
MCP_DATA_DIRdonnéesRépertoire pour le stockage des données persistantes
MCP_REQUEST_TIMEOUT30Délai d'attente de la demande en secondes
MCP_REQUEST_IMMEDIATE_TIMEOUT2Délai de réponse immédiate en secondes
NIVEAU DE LOGUEINFONiveau 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 :

  1. 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
  2. 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
  3. 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

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 :

  1. ✅ Vérifier que vous êtes sur la branche principale avec un répertoire de travail propre
  2. 📈 Augmenter automatiquement la version dans pyproject.toml
  3. 🔨 Construire et tester le paquet localement
  4. 📤 Commencer le changement de version et créer un tag git
  5. 🚀 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

  1. Aller sur https://github.com/yw0nam/MCP-A2A-Gateway/releases
  2. Cliquez sur "Create a new release" (Créer une nouvelle version)
  3. Choisissez ou créez un tag (par exemple, v0.1.7)
  4. Remplir les notes de version
  5. Publier la version

Configuration de la publication automatisée

Pour activer la publication automatisée, ajoutez votre jeton API PyPI à GitHub Secrets :

  1. Obtenir le jeton API PyPI:

  2. 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
  3. 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

Liés dans Communication - MCP Servers sécurisés

ServeurRésuméActions
AivisSpeechVoir
any-chat-completions-mcpIntégrez Claude avec n'importe quelle API de complétion de chat compatible avec le SDK OpenAI - Open...Voir
Claude MCP SlackUne action GitHub autonome qui fournit la fonctionnalité de serveur Slack MCP (Model Context Protoco...Voir
chakoshi Serveur MCPMCPクライアントアプリケーションと、chakoshi API を連携するMCP (Model Context Protocol) サーバーです...Voir
Traitement des courrielsVoir
Bipun serveur mcp pour interagir avec une chaîneVoir