Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
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:
- Alla program som stöder MCP-integrering, till exempel GitHub Copilot Chattagentläge i Visual Studio Code eller i GitHub Codespaces.
- En anpassad agent som använder fjärrverktyg med hjälp av en MCP-klient.
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
Ö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>Ö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.
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: MarkerarTodoListToolServicesom 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
TodoListControlleroch frånTodoListToolService.-
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
TodoListToolServicesom callback-funktioner för Spring AI. Som standard kopplar den automatiska konfigurationenspring-ai-starter-mcp-server-webmvcav MCP Server i paketet automatiskt upp dessa verktygsåteranrop. Som standard är också MCP Server-slutpunkten<base-url>/sse.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
I kodområdesterminalen kör du programmet med
mvn spring-boot:run.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.Gå tillbaka till kodområdet, öppna Copilot Chat och välj sedan Agentläge i promptrutan.
Välj knappen Verktyg och välj sedan Lägg till fler verktyg... i listrutan.
Välj Lägg till MCP-server.
Välj HTTP (HTTP eller Server-Sent-händelser).
I Ange server-URL skriver du http://localhost:8080/sse.
I Ange server-ID skriver du todos-mcp eller vilket namn du vill.
Välj Inställningar för arbetsyta.
I ett nytt Copilot Chat-fönster skriver du något i stil med "Visa mig todos".
Som standard visar GitHub Copilot en säkerhetsbekräftelse när du anropar en MCP-server. Välj Fortsätt.
Nu bör du se ett svar som anger att MCP-verktygsanropet lyckas.
Distribuera MCP-servern till App Service
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).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>
När du är klar med
azd upöppnar du .vscode/mcp.json. Ändra URL:en till<app-url>/sse.Välj Starta ovanför den ändrade MCP-serverkonfigurationen.
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.