Megosztás a következőn keresztül:


App Service-alkalmazás integrálása MCP-kiszolgálóként a GitHub Copilot-csevegéshez (Spring Boot)

Ebben az oktatóanyagban megtanulhatja, hogyan teheti elérhetővé egy Spring Boot-webalkalmazás funkcióit a Model Context Protocol (MCP) használatával, hogyan adhat hozzá eszközt a GitHub Copilothoz, és hogyan használhatja az alkalmazást természetes nyelven a Copilot Csevegőügynök módban.

Képernyőkép az Azure App Service-ben üzemeltetett Todos MCP-kiszolgálót hívó GitHub Copilotról.

Ha a webalkalmazás már rendelkezik olyan hasznos funkciókkal, mint a vásárlás, a szállodai foglalás vagy az adatkezelés, könnyen elérhetővé teheti ezeket a képességeket a következő célokra:

Ha mcp-kiszolgálót ad hozzá a webalkalmazáshoz, lehetővé teszi az ügynök számára az alkalmazás képességeinek megértését és használatát, amikor az válaszol a felhasználói kérésekre. Ez azt jelenti, hogy amit az alkalmazás meg tud tenni, azt az ügynök is meg tudja tenni.

  • Adjon hozzá egy MCP-kiszolgálót a webalkalmazáshoz.
  • Tesztelje az MCP-kiszolgálót helyileg a GitHub Copilot Csevegőügynök módban.
  • Telepítse az MCP-kiszolgálót az Azure App Service-ben, és csatlakozzon hozzá a GitHub Copilot Chatben.

Prerequisites

Ez az oktatóanyag feltételezi, hogy az oktatóanyagban használt mintával dolgozik : Java Spring Boot-webalkalmazás létrehozása Linuxon és Azure Cosmos DB-n futó Azure App Service-lel.

Legalább nyissa meg a mintaalkalmazást a GitHub Codespacesben, és futtassa azd upaz alkalmazást.

MCP-kiszolgáló hozzáadása a webalkalmazáshoz

  1. A kódtérben nyissa meg a pom.xml , és adja hozzá a spring-ai-starter-mcp-server-webmvc csomagot a projekthez:

    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
        <version>1.0.0</version>
    </dependency>
    
  2. Nyissa meg az src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/TodoApplication.java. A forgatókönyv egyszerűsége érdekében itt adja hozzá az összes MCP-kiszolgálókódot.

  3. A TodoApplication.java végén adja hozzá a következő osztályt.

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

    A fenti kód az alábbi attribútumokkal teszi elérhetővé az eszközöket a Spring AI-hez :

    • @Service: Spring által felügyelt szolgáltatásként jelöli meg TodoListToolService .
    • @Tool: Egy metódust hívható eszközként jelöl meg a Spring AI-ben.
    • description: Ezek az egyes eszközökhöz emberi olvasásra alkalmas leírásokat nyújtanak. Segít a hívóügynöknek megérteni az eszköz használatát.

    Ez a kód duplikálja a meglévő src/main/java/com/microsoft/azure/appservice/examples/springbootmongodb/controller/TodoListController.java funkcióit, ami szükségtelen, de az egyszerűség kedvéért megtartja. Az ajánlott eljárás az alkalmazáslogika áthelyezése egy szolgáltatásosztályba, majd a szolgáltatás metódusainak meghívása a TodoListController és a TodoListToolService osztályokból.

  4. A TodoApplication.java adja hozzá a következő metódust az TodoApplication osztályhoz.

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

    Ez a módszer eszközöket biztosít TodoListToolService formájában, melyek visszahívásokként szolgálnak a Spring AI számára. Alapértelmezés szerint a spring-ai-starter-mcp-server-webmvc csomagban található MCP-kiszolgáló automatikus konfigurációja automatikusan összekapcsolja ezeket az eszköz-visszahívásokat. Emellett alapértelmezés szerint az MCP-kiszolgáló végpontja is <base-url>/sse.

  5. A TodoApplication.java tetején adja hozzá a következő importálásokat.

    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;
    

Az MCP-kiszolgáló helyi tesztelése

  1. A kódtér termináljában futtassa az alkalmazást a következővel mvn spring-boot:run: .

  2. Válassza a Megnyitás böngészőben lehetőséget, majd adjon hozzá egy feladatot.

    Hagyja tovább futni a Spring Bootot. Az MCP-kiszolgáló végpontja éppen http://localhost:8080/sse fut.

  3. A kódtérben nyissa meg a Copilot-csevegést, majd válassza az Ügynök mód lehetőséget a parancssorban.

  4. Válassza az Eszközök gombot, majd válassza a További eszközök hozzáadása... lehetőséget a legördülő menüben.

    Képernyőkép mcp-kiszolgáló hozzáadásáról a GitHub Copilot Csevegőügynök módban.

  5. Válassza az MCP-kiszolgáló hozzáadása lehetőséget.

  6. Válassza a HTTP (HTTP vagy Server-Sent események) lehetőséget.

  7. A Server URL bevitele mezőbe írja be a http://localhost:8080/sse értéket.

  8. Az Enter Server ID mezőbe írja bea todos-mcp nevet vagy a kívánt nevet.

  9. Válassza a Munkaterület beállításai lehetőséget.

  10. Egy új Copilot-csevegési ablakban írja be a következőt: "Mutasd meg a todos".

  11. Alapértelmezés szerint a GitHub Copilot biztonsági megerősítést jelenít meg egy MCP-kiszolgáló meghívásakor. Válassza a Folytatáslehetőséget.

    Képernyőkép egy MCP-hívás alapértelmezett biztonsági üzenetéről a GitHub Copilot Chatben.

    Ekkor megjelenik egy válasz, amely azt jelzi, hogy az MCP-eszköz hívása sikeres.

    Képernyőkép, amely megmutatja az MCP-eszköz hívásának válaszát a GitHub Copilot csevegőablakában.

Az MCP-kiszolgáló üzembe helyezése az App Service-ben

  1. A kódtér termináljába visszatérve telepítse a módosításokat a módosítások véglegesítésével (GitHub Actions metódus) vagy futtassa azd up (Azure Developer CLI-metódus).

  2. Az AZD-kimenetben keresse meg az alkalmazás URL-címét. Az URL-cím így néz ki az AZD-kimenetben:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <app-url>
     
  3. Miután azd up befejeződött, nyissa meg a .vscode/mcp.json. Módosítsa az URL-címet a következőre: <app-url>/sse.

  4. A módosított MCP-kiszolgáló konfigurációja felett válassza a Start lehetőséget.

    Képernyőkép az MCP-kiszolgáló helyi mcp.json fájlból történő manuális indításáról.

  5. Hozzon létre egy új GitHub Copilot-csevegőablakot. A Copilot-ügynökben meg kell tudnia tekinteni, létrehozni, frissíteni és törölni a feladatokat.

Ajánlott biztonsági eljárások

Ha az MCP-kiszolgálót nagy nyelvi modellekkel (LLM) rendelkező ügynök hívja meg, vegye figyelembe a gyors injektálási támadásokat. Vegye figyelembe az alábbi ajánlott biztonsági eljárásokat:

  • Hitelesítés és engedélyezés: Az MCP-kiszolgáló védelme Microsoft Entra-hitelesítéssel annak biztosítása érdekében, hogy csak a jogosult felhasználók vagy ügynökök férhessenek hozzá az eszközeihez. Részletes útmutatót a Visual Studio Code-ból az Azure App Service-be irányuló Biztonságos modell környezeti protokoll hívásai a Microsoft Entra-hitelesítéssel című témakörben talál.
  • Bemenet-ellenőrzés és -tisztítás: Az oktatóanyagban szereplő példakód kihagyja a bemeneti ellenőrzést és a tisztítást az egyszerűség és az egyértelműség érdekében. Éles helyzetekben mindig valósítsa meg a megfelelő ellenőrzést és tisztítást az alkalmazás védelme érdekében. A Spring esetében lásd a Spring: Validating Form Input (Űrlapbemenet érvényesítése) című témakört.
  • HTTPS: A minta az Azure App Service-ra támaszkodik, amely alapértelmezés szerint kényszeríti a HTTPS-t, és ingyenes TLS-/SSL-tanúsítványokat biztosít az átvitel közbeni adatok titkosításához.
  • Minimális jogosultság elve: Csak a használati esethez szükséges eszközöket és adatokat tegye elérhetővé. Ha szükséges, kerülje a bizalmas műveletek felfedését.
  • Sebességkorlátozás és szabályozás: Az API Management vagy az egyéni köztes szoftver használata a visszaélések és a szolgáltatásmegtagadásos támadások megelőzésére.
  • Naplózás és figyelés: Az MCP-végpontok naplóhozzáférése és használata naplózáshoz és anomáliadetektáláshoz. Gyanús tevékenységek figyelése.
  • CORS-konfiguráció: Ha az MCP-kiszolgáló böngészőkből érhető el, korlátozza a forrásközi kérelmeket megbízható tartományokra. További információ: CORS engedélyezése.
  • Rendszeres frissítések: A függőségek naprakészen tartása az ismert biztonsági rések csökkentése érdekében.

További erőforrások