Integrera en App Service-app som en MCP-server för GitHub Copilot Chat (Spring Boot)

I den här självstudien får du lära dig hur du exponerar en Spring Boot-webbapps funktioner via Model Context Protocol (MCP), lägger till den som ett verktyg i GitHub Copilot och interagerar med din app med naturligt språk i Copilot Chat-agentläge.

Skärmbild som visar GitHub Copilot som anropar Todos MCP-server i Azure App Service.

Om ditt webbprogram redan har användbara funktioner, till exempel shopping, hotellbokning eller datahantering, är det enkelt att göra dessa funktioner tillgängliga för:

Genom att lägga till en MCP-server i webbappen gör du det möjligt för en agent att förstå och använda appens funktioner när den svarar på användarfrågor. Det innebär att allt din app kan göra kan agenten också göra.

  • Lägg till en MCP-server i webbappen.
  • Testa MCP-servern lokalt i GitHub Copilot Chat-agentläge.
  • Distribuera MCP-servern till Azure App Service och anslut till den i GitHub Copilot Chat.

Prerequisites

Den här självstudien förutsätter att du arbetar med exemplet som används i Självstudie: Skapa en Java Spring Boot-webbapp med Azure App Service i Linux och Azure Cosmos DB.

Öppna minst exempelprogrammet i GitHub Codespaces och distribuera appen genom att köra azd up.

Lägga till MCP-server i webbappen

  1. Öppna pom.xml i kodutrymmet och lägg till paketet i ditt projekt:

    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
        <version>1.0.0</version>
    </dependency>
    
  2. Öppna src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/TodoApplication.java. För enkelhetens skull lägger du till all MCP-serverkod här.

  3. Lägg till följande klass i slutet av TodoApplication.java.

    @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";
        }
    }
    

    Koden ovan gör verktyg tillgängliga för Spring AI med hjälp av följande specifika attribut:

    • @Service: Markerar TodoListToolService som en Spring-hanterad tjänst.
    • @Tool: Markerar en metod som ett anropsbart verktyg i Spring AI.
    • description: Dessa ger läsbara beskrivningar för varje verktyg. Det hjälper anropande agenten att förstå hur verktyget ska användas.

    Den här koden duplicerar funktionerna i den befintliga src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/controller/TodoListController.java, vilket är onödigt, men du behåller den för enkelhetens skull. Bästa praxis är att flytta applogik till en tjänstklass och sedan anropa tjänstmetoderna både från TodoListController och från TodoListToolService.

  4. Lägg till följande metod i klassen TodoApplication.

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

    Den här metoden tillhandahåller verktygen i TodoListToolService som callback-funktioner för Spring AI. Som standard kopplar den automatiska konfigurationen spring-ai-starter-mcp-server-webmvc av MCP Server i paketet automatiskt upp dessa verktygsåteranrop. Som standard är också MCP Server-slutpunkten <base-url>/sse.

  5. Lägg till följande importer överst i TodoApplication.java.

    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;
    

Testa MCP-servern lokalt

  1. I kodområdesterminalen kör du programmet med mvn spring-boot:run.

  2. Välj Öppna i webbläsare och lägg sedan till en aktivitet.

    Låt Spring Boot vara igång. Din MCP-serverslutpunkt körs nu http://localhost:8080/sse.

  3. Gå tillbaka till kodområdet, öppna Copilot Chat och välj sedan Agentläge i promptrutan.

  4. Välj knappen Verktyg och välj sedan Lägg till fler verktyg... i listrutan.

    Skärmbild som visar hur du lägger till en MCP-server i GitHub Copilot Chat-agentläge.

  5. Välj Lägg till MCP-server.

  6. Välj HTTP (HTTP eller Server-Sent-händelser).

  7. I Ange server-URL skriver du http://localhost:8080/sse.

  8. I Ange server-ID skriver du todos-mcp eller vilket namn du vill.

  9. Välj Inställningar för arbetsyta.

  10. I ett nytt Copilot Chat-fönster skriver du något i stil med "Visa mig todos".

  11. Som standard visar GitHub Copilot en säkerhetsbekräftelse när du anropar en MCP-server. Välj Fortsätt.

    Skärmbild som visar standardsäkerhetsmeddelandet från ett MCP-anrop i GitHub Copilot Chat.

    Nu bör du se ett svar som anger att MCP-verktygsanropet lyckas.

    Skärmbild som visar svaret från ett anrop med MCP-verktyget i GitHub Copilot Chat-fönstret.

Distribuera MCP-servern till App Service

  1. Tillbaka i kodområdesterminalen distribuerar du dina ändringar genom att genomföra dina ändringar (GitHub Actions-metod) eller köra azd up (Azure Developer CLI-metod).

  2. Leta reda på appens URL i AZD-utdata. URL:en ser ut så här i AZD-utdata:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <app-url>
     
  3. När du är klar med azd up öppnar du .vscode/mcp.json. Ändra URL:en till <app-url>/sse.

  4. Välj Starta ovanför den ändrade MCP-serverkonfigurationen.

    Skärmbild som visar hur du startar en MCP-server manuellt från den lokala mcp.json filen.

  5. Starta ett nytt GitHub Copilot Chat-fönster. Du bör kunna visa, skapa, uppdatera och ta bort uppgifter i Copilot-agenten.

Metodtips för säkerhet

När MCP-servern anropas av en agent som drivs av stora språkmodeller (LLM) bör du vara medveten om snabba inmatningsattacker . Överväg följande metodtips för säkerhet:

  • Autentisering och auktorisering: Skydda MCP-servern med Microsoft Entra-autentisering för att säkerställa att endast behöriga användare eller agenter kan komma åt dina verktyg. En stegvis guide finns i Secure Model Context Protocol-anrop till Azure App Service från Visual Studio Code med Microsoft Entra-autentisering .
  • Validering och sanering av indata: Exempelkoden i den här självstudien utelämnar validering och sanering av indata för enkelhetens skull och tydlighet. I produktionsscenarier implementerar du alltid korrekt validering och sanering för att skydda ditt program. För Spring, se Spring: Validering av formulärindata.
  • HTTPS: Exemplet förlitar sig på Azure App Service, som framtvingar HTTPS som standard och tillhandahåller kostnadsfria TLS/SSL-certifikat för att kryptera data under överföring.
  • Lägsta behörighetsprincip: Exponera endast nödvändiga verktyg och data som krävs för ditt användningsfall. Undvik att exponera känsliga operationer om det inte är nödvändigt.
  • Hastighetsbegränsning och begränsning: Använd API Management eller anpassade mellanprogram för att förhindra missbruk och överbelastningsattacker.
  • Loggning och övervakning: Loggåtkomst och användning av MCP-slutpunkter för granskning och avvikelseidentifiering. Övervaka misstänkt aktivitet.
  • CORS-konfiguration: Begränsa mellanursprungsbegäranden till pålitliga domäner om din MCP-server nås från webbläsare. Mer information finns i Aktivera CORS.
  • Regelbundna uppdateringar: Håll dina beroenden uppdaterade för att minimera kända sårbarheter.

Fler resurser