Partager via


Intégrer une application App Service en tant que serveur MCP pour GitHub Copilot Chat (Spring Boot)

Dans ce tutoriel, vous allez apprendre à exposer les fonctionnalités d’une application web Spring Boot par le biais du protocole MCP (Model Context Protocol), l’ajouter en tant qu’outil à GitHub Copilot et interagir avec votre application à l’aide du langage naturel en mode Agent Copilot Chat.

Capture d’écran montrant GitHub Copilot appelant le serveur Todos MCP hébergé dans Azure App Service.

Si votre application web dispose déjà de fonctionnalités utiles, telles que le shopping, la réservation d’hôtels ou la gestion des données, il est facile de rendre ces fonctionnalités disponibles :

En ajoutant un serveur MCP à votre application web, vous pouvez permettre à un agent de comprendre et d’utiliser les fonctionnalités de votre application lorsqu’elle répond aux invites de l’utilisateur. Cela signifie que tout ce que votre application peut faire, l’agent peut également le faire.

  • Ajoutez un serveur MCP à votre application web.
  • Testez le serveur MCP localement en mode agent GitHub Copilot Chat.
  • Déployez le serveur MCP sur Azure App Service et connectez-vous à celui-ci dans GitHub Copilot Chat.

Prerequisites

Ce tutoriel part du principe que vous utilisez l’exemple utilisé dans le tutoriel : Créer une application web Java Spring Boot avec Azure App Service sur Linux et Azure Cosmos DB.

Au minimum, ouvrez l’exemple d’application dans GitHub Codespaces et déployez l’application en exécutant azd up.

Ajouter un serveur MCP à votre application web

  1. Dans l’espace de code, ouvrez pom.xml et ajoutez le spring-ai-starter-mcp-server-webmvc package à votre projet :

    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
        <version>1.0.0</version>
    </dependency>
    
  2. Ouvrez src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/TodoApplication.java. Par souci de simplicité du scénario, vous allez ajouter tout votre code de serveur MCP ici.

  3. À la fin de TodoApplication.java, ajoutez la classe suivante.

    @Service
    class TodoListToolService {
        private final TodoItemRepository todoItemRepository;
    
        public TodoListToolService(TodoItemRepository todoItemRepository) {
            this.todoItemRepository = todoItemRepository;
        }
    
        @Tool(description = "Get a todo item by its id")
        public Optional<TodoItem> getTodoItem(String id) {
            return todoItemRepository.findById(id);
        }
    
        @Tool(description = "Get all todo items")
        public List<TodoItem> getAllTodoItems() {
            return todoItemRepository.findAll();
        }
    
        @Tool(description = "Add a new todo item")
        public String addNewTodoItem(String description, String owner) {
            TodoItem item = new TodoItem(UUID.randomUUID().toString(), description, owner);
            todoItemRepository.save(item);
            return "Todo item created";
        }
    
        @Tool(description = "Update an existing todo item")
        public String updateTodoItem(String id, String description, String owner, boolean finished) {
            if (!todoItemRepository.existsById(id)) {
                return "Todo item not found";
            }
            TodoItem item = new TodoItem(id, description, owner);
            item.setFinish(finished);
            todoItemRepository.save(item);
            return "Todo item updated";
        }
    
        @Tool(description = "Delete a todo item by its id")
        public String deleteTodoItem(String id) {
            if (!todoItemRepository.existsById(id)) {
                return "Todo item not found";
            }
            todoItemRepository.deleteById(id);
            return "Todo item deleted";
        }
    }
    

    Le code ci-dessus rend les outils disponibles pour Spring AI à l’aide des attributs spécifiques suivants :

    • @Service: marque TodoListToolService en tant que service géré par Spring.
    • @Tool: marque une méthode comme un outil pouvant être appelé dans Spring AI.
    • description: elles fournissent des descriptions lisibles par l’homme pour chaque outil. Il aide l’agent appelant à comprendre comment utiliser l’outil.

    Ce code duplique les fonctionnalités du code existant src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/controller/TodoListController.java, ce qui n’est pas nécessaire, mais vous le conserverez par souci de simplicité. Une bonne pratique consisterait à déplacer la logique d'application vers une classe de service, puis à appeler les méthodes de service à partir de TodoListController et de TodoListToolService.

  4. Dans TodoApplication.java, ajoutez la méthode suivante à la TodoApplication classe.

    @Bean
    public ToolCallbackProvider todoTools(TodoListToolService todoListToolService) {
        return MethodToolCallbackProvider.builder().toolObjects(todoListToolService).build();
    }
    

    Cette méthode fournit les outils dans TodoListToolService sous forme de rappels pour Spring AI. Par défaut, la configuration automatique du serveur MCP dans le package spring-ai-starter-mcp-server-webmvc connecte automatiquement ces rappels d’outils. En outre, par défaut, le point de terminaison du serveur MCP est <base-url>/sse.

  5. En haut de TodoApplication.java, ajoutez les importations suivantes.

    import java.util.List;
    import java.util.Optional;
    import java.util.UUID;
    
    import org.springframework.ai.tool.ToolCallbackProvider;
    import org.springframework.ai.tool.annotation.Tool;
    import org.springframework.ai.tool.method.MethodToolCallbackProvider;
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Service;
    
    import com.microsoft.azure.appservice.examples.springbootmongodb.dao.TodoItemRepository;
    import com.microsoft.azure.appservice.examples.springbootmongodb.model.TodoItem;
    

Tester le serveur MCP localement

  1. Dans le terminal codespace, exécutez l’application avec mvn spring-boot:run.

  2. Sélectionnez Ouvrir dans le navigateur, puis ajoutez une tâche.

    Laissez Spring Boot en cours d’exécution. Votre point de terminaison serveur MCP s’exécute désormais sur http://localhost:8080/sse.

  3. De retour dans l’espace de code, ouvrez Copilot Chat, puis sélectionnez le mode Agent dans la zone d’invite.

  4. Sélectionnez le bouton Outils , puis sélectionnez Ajouter d’autres outils... dans la liste déroulante.

    Capture d’écran montrant comment ajouter un serveur MCP en mode Agent GitHub Copilot Chat.

  5. Sélectionnez Ajouter un serveur MCP.

  6. Sélectionnez HTTP (HTTP ou événements envoyés par le serveur).

  7. Dans Entrée de l’URL du serveur, tapez http://localhost:8080/sse.

  8. Dans Entrer l’ID du serveur, tapez todos-mcp ou n’importe quel nom de votre choix.

  9. Sélectionnez Paramètres de l’espace de travail.

  10. Dans une nouvelle fenêtre de discussion du Copilot, tapez quelque chose comme « Montre-moi les tâches à faire ».

  11. Par défaut, GitHub Copilot affiche une confirmation de sécurité lorsque vous appelez un serveur MCP. Sélectionnez Continuer.

    Capture d’écran montrant le message de sécurité par défaut d’un appel MCP dans GitHub Copilot Chat.

    Vous devez maintenant voir une réponse qui indique que l’appel de l’outil MCP réussit.

    Capture d’écran montrant que la réponse de l’appel de l’outil MCP se trouve dans la fenêtre GitHub Copilot Chat.

Déployer votre serveur MCP sur App Service

  1. De retour dans le terminal Codespace, déployez vos modifications en commitant vos modifications (méthode GitHub Actions) ou en exécutant azd up (méthode CLI du développeur Azure).

  2. Dans la sortie AZD, recherchez l’URL de votre application. L’URL ressemble à ceci dans la sortie AZD :

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <app-url>
     
  3. Une fois azd up terminé, ouvrez .vscode/mcp.json. Définissez l’URL sur <app-url>/sse.

  4. Au-dessus de la configuration du serveur MCP modifiée, sélectionnez Démarrer.

    Capture d’écran montrant comment démarrer manuellement un serveur MCP à partir du fichier mcp.json local.

  5. Démarrez une nouvelle fenêtre gitHub Copilot Chat. Vous devez être en mesure d’afficher, de créer, de mettre à jour et de supprimer des tâches dans l’agent Copilot.

Bonnes pratiques de sécurité

Lorsque votre serveur MCP est sollicité par un agent utilisant de grands modèles de langage (LLM), soyez conscient des attaques par injection de commande. Tenez compte des meilleures pratiques de sécurité suivantes :

  • Authentification et autorisation : Sécurisez votre serveur MCP avec l’authentification Microsoft Entra pour vous assurer que seuls les utilisateurs ou agents autorisés peuvent accéder à vos outils. Consultez Protocole de Contexte de Modèle Sécurisé pour les appels vers Azure App Service depuis Visual Studio Code avec l'authentification Microsoft Entra pour un guide étape par étape.
  • Validation et assainissement d’entrée : l’exemple de code de ce tutoriel omet la validation et l’assainissement des entrées pour simplifier et clarifier. Dans les scénarios de production, implémentez toujours une validation et une assainissement appropriés pour protéger votre application. Pour Spring, consultez Spring : Validation de l’entrée de formulaire.
  • HTTPS : L’exemple s’appuie sur Azure App Service, qui applique HTTPS par défaut et fournit des certificats TLS/SSL gratuits pour chiffrer les données en transit.
  • Principe des privilèges minimum : exposez uniquement les outils et données nécessaires pour votre cas d’usage. Évitez d’exposer des opérations sensibles, sauf si nécessaire.
  • Limitation et limitation du débit : utilisez gestion des API ou intergiciel personnalisé pour éviter les attaques par déni de service et d’abus.
  • Journalisation et surveillance : journalisation de l’accès et de l’utilisation des points de terminaison MCP pour l’audit et la détection des anomalies. Surveillez les activités suspectes.
  • Configuration CORS : limitez les demandes d’origine croisée aux domaines approuvés si votre serveur MCP est accessible à partir de navigateurs. Pour plus d’informations, consultez Activer CORS.
  • Mises à jour régulières : conservez vos dépendances à jour pour atténuer les vulnérabilités connues.

Plus de ressources